1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_UI_WEBUI_SIGNIN_INLINE_LOGIN_DIALOG_CHROMEOS_ONBOARDING_H_
6 #define CHROME_BROWSER_UI_WEBUI_SIGNIN_INLINE_LOGIN_DIALOG_CHROMEOS_ONBOARDING_H_
7 
8 #include "chrome/browser/ui/webui/signin/inline_login_dialog_chromeos.h"
9 
10 #include "base/callback.h"
11 #include "ui/gfx/geometry/size.h"
12 #include "ui/gfx/native_widget_types.h"
13 #include "ui/views/widget/widget_observer.h"
14 
15 namespace views {
16 class Widget;
17 }  // namespace views
18 
19 namespace gfx {
20 class Rect;
21 }  // namespace gfx
22 
23 namespace chromeos {
24 
25 // Inherits from InlineLoginDialogChromeOS to handle the special scenario where
26 // the dialog is shown during onboarding.
27 class InlineLoginDialogChromeOSOnboarding : public InlineLoginDialogChromeOS {
28  public:
29   class Delegate : public views::WidgetObserver {
30    public:
31     explicit Delegate(InlineLoginDialogChromeOSOnboarding* dialog);
32     Delegate(const Delegate&) = delete;
33     Delegate& operator=(const Delegate&) = delete;
34     ~Delegate() override;
35 
36     // Closes the dialog without making it executing the callback.
37     void CloseWithoutCallback();
38 
39     void Close();
40 
41     void UpdateDialogBounds(const gfx::Rect& new_bounds);
42 
dialog()43     InlineLoginDialogChromeOSOnboarding* dialog() { return dialog_; }
44 
45    private:
46     // views::WidgetObserver:
47     void OnWidgetClosing(views::Widget* widget) override;
48 
49     InlineLoginDialogChromeOSOnboarding* dialog_ = nullptr;
50     views::Widget* widget_ = nullptr;
51   };
52 
53   static InlineLoginDialogChromeOSOnboarding* Show(
54       const gfx::Size& size,
55       gfx::NativeWindow window,
56       base::OnceCallback<void(void)> dialog_closed_callback);
57 
58  private:
59   InlineLoginDialogChromeOSOnboarding(
60       const gfx::Size& bounds,
61       base::OnceCallback<void(void)> dialog_closed_callback);
62   ~InlineLoginDialogChromeOSOnboarding() override;
63 
64   InlineLoginDialogChromeOSOnboarding(
65       const InlineLoginDialogChromeOSOnboarding&) = delete;
66   InlineLoginDialogChromeOSOnboarding& operator=(
67       const InlineLoginDialogChromeOSOnboarding&) = delete;
68 
69   void UpdateDialogBounds(const gfx::Rect& bounds);
70 
71   void CloseDialog();
72 
73   void GetDialogSize(gfx::Size* size) const override;
74   void AdjustWidgetInitParams(views::Widget::InitParams* params) override;
75   void OnDialogClosed(const std::string& json_retval) override;
76 
77   gfx::Size size_;
78   base::OnceCallback<void(void)> dialog_closed_callback_;
79 };
80 
81 }  // namespace chromeos
82 
83 #endif  // CHROME_BROWSER_UI_WEBUI_SIGNIN_INLINE_LOGIN_DIALOG_CHROMEOS_ONBOARDING_H_
84