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