Commit 9a52db56 authored by Alex Ilin's avatar Alex Ilin Committed by Chromium LUCI CQ

[profiles] Move UserManagerProfileDialogDelegate in its own file

This refactor will enable ProfilePicker to use
UserManagerProfileDialogDelegate for displaying force signin dialogs.

Bug: 1156096
Change-Id: I2ae84c3bc882b45aa0a016d28e182d11cc87a0de
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2577220
Commit-Queue: Alex Ilin <alexilin@chromium.org>
Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#834651}
parent eedc3090
...@@ -2863,6 +2863,8 @@ static_library("ui") { ...@@ -2863,6 +2863,8 @@ static_library("ui") {
"views/profiles/profile_picker_view.h", "views/profiles/profile_picker_view.h",
"views/profiles/profile_picker_view_sync_delegate.cc", "views/profiles/profile_picker_view_sync_delegate.cc",
"views/profiles/profile_picker_view_sync_delegate.h", "views/profiles/profile_picker_view_sync_delegate.h",
"views/profiles/user_manager_profile_dialog_delegate.cc",
"views/profiles/user_manager_profile_dialog_delegate.h",
"views/profiles/user_manager_view.cc", "views/profiles/user_manager_view.cc",
"views/profiles/user_manager_view.h", "views/profiles/user_manager_view.h",
"webui/app_launcher_page_ui.cc", "webui/app_launcher_page_ui.cc",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/profiles/user_manager_profile_dialog_delegate.h"
#include "chrome/browser/password_manager/chrome_password_manager_client.h"
#include "chrome/browser/ui/autofill/chrome_autofill_client.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "components/web_modal/modal_dialog_host.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/controls/webview/webview.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/view.h"
UserManagerProfileDialogDelegate::UserManagerProfileDialogDelegate(
UserManagerView* parent,
std::unique_ptr<views::WebView> web_view,
const GURL& url)
: parent_(parent) {
SetHasWindowSizeControls(true);
SetTitle(IDS_PROFILES_GAIA_SIGNIN_TITLE);
SetButtons(ui::DIALOG_BUTTON_NONE);
set_use_custom_frame(false);
web_view_ = AddChildView(std::move(web_view));
SetLayoutManager(std::make_unique<views::FillLayout>());
web_view_->GetWebContents()->SetDelegate(this);
ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient(
web_view_->GetWebContents(),
autofill::ChromeAutofillClient::FromWebContents(
web_view_->GetWebContents()));
web_modal::WebContentsModalDialogManager::CreateForWebContents(
web_view_->GetWebContents());
web_modal::WebContentsModalDialogManager::FromWebContents(
web_view_->GetWebContents())
->SetDelegate(this);
web_view_->LoadInitialURL(url);
chrome::RecordDialogCreation(chrome::DialogIdentifier::USER_MANAGER_PROFILE);
}
UserManagerProfileDialogDelegate::~UserManagerProfileDialogDelegate() = default;
gfx::Size UserManagerProfileDialogDelegate::CalculatePreferredSize() const {
return gfx::Size(UserManagerProfileDialog::kDialogWidth,
UserManagerProfileDialog::kDialogHeight);
}
void UserManagerProfileDialogDelegate::DisplayErrorMessage() {
web_view_->LoadInitialURL(GURL(chrome::kChromeUISigninErrorURL));
}
web_modal::WebContentsModalDialogHost*
UserManagerProfileDialogDelegate::GetWebContentsModalDialogHost() {
return this;
}
gfx::NativeView UserManagerProfileDialogDelegate::GetHostView() const {
return GetWidget()->GetNativeView();
}
gfx::Point UserManagerProfileDialogDelegate::GetDialogPosition(
const gfx::Size& size) {
gfx::Size widget_size = GetWidget()->GetWindowBoundsInScreen().size();
return gfx::Point(std::max(0, (widget_size.width() - size.width()) / 2),
std::max(0, (widget_size.height() - size.height()) / 2));
}
gfx::Size UserManagerProfileDialogDelegate::GetMaximumDialogSize() {
return GetWidget()->GetWindowBoundsInScreen().size();
}
void UserManagerProfileDialogDelegate::AddObserver(
web_modal::ModalDialogHostObserver* observer) {}
void UserManagerProfileDialogDelegate::RemoveObserver(
web_modal::ModalDialogHostObserver* observer) {}
ui::ModalType UserManagerProfileDialogDelegate::GetModalType() const {
return ui::MODAL_TYPE_WINDOW;
}
void UserManagerProfileDialogDelegate::DeleteDelegate() {
OnDialogDestroyed();
delete this;
}
views::View* UserManagerProfileDialogDelegate::GetInitiallyFocusedView() {
return static_cast<views::View*>(web_view_);
}
void UserManagerProfileDialogDelegate::CloseDialog() {
OnDialogDestroyed();
GetWidget()->Close();
}
void UserManagerProfileDialogDelegate::OnDialogDestroyed() {
if (parent_) {
parent_->OnDialogDestroyed();
parent_ = nullptr;
}
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_PROFILES_USER_MANAGER_PROFILE_DIALOG_DELEGATE_H_
#define CHROME_BROWSER_UI_VIEWS_PROFILES_USER_MANAGER_PROFILE_DIALOG_DELEGATE_H_
#include "chrome/browser/ui/chrome_web_modal_dialog_manager_delegate.h"
#include "chrome/browser/ui/views/profiles/user_manager_view.h"
#include "components/web_modal/web_contents_modal_dialog_host.h"
#include "ui/base/ui_base_types.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/views/window/dialog_delegate.h"
class GURL;
namespace views {
class WebView;
class View;
} // namespace views
namespace gfx {
class Point;
class Size;
} // namespace gfx
namespace web_modal {
class ModalDialogHostObserver;
}
class UserManagerProfileDialogDelegate
: public views::DialogDelegateView,
public UserManagerProfileDialog::BaseDialogDelegate,
public ChromeWebModalDialogManagerDelegate,
public web_modal::WebContentsModalDialogHost {
public:
UserManagerProfileDialogDelegate(UserManagerView* parent,
std::unique_ptr<views::WebView> web_view,
const GURL& url);
~UserManagerProfileDialogDelegate() override;
UserManagerProfileDialogDelegate(const UserManagerProfileDialogDelegate&) =
delete;
UserManagerProfileDialogDelegate& operator=(
const UserManagerProfileDialogDelegate&) = delete;
// UserManagerProfileDialog::BaseDialogDelegate
void CloseDialog() override;
// Display the local error message inside login window.
void DisplayErrorMessage();
// ChromeWebModalDialogManagerDelegate
web_modal::WebContentsModalDialogHost* GetWebContentsModalDialogHost()
override;
// web_modal::WebContentsModalDialogHost
gfx::NativeView GetHostView() const override;
gfx::Point GetDialogPosition(const gfx::Size& size) override;
gfx::Size GetMaximumDialogSize() override;
void AddObserver(web_modal::ModalDialogHostObserver* observer) override;
void RemoveObserver(web_modal::ModalDialogHostObserver* observer) override;
private:
// Before its destruction, tells its parent container to reset its reference
// to the UserManagerProfileDialogDelegate.
void OnDialogDestroyed();
// views::DialogDelegate:
gfx::Size CalculatePreferredSize() const override;
ui::ModalType GetModalType() const override;
void DeleteDelegate() override;
views::View* GetInitiallyFocusedView() override;
UserManagerView* parent_; // Not owned.
views::WebView* web_view_; // Owned by the view hierarchy.
};
#endif // CHROME_BROWSER_UI_VIEWS_PROFILES_USER_MANAGER_PROFILE_DIALOG_DELEGATE_H_
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "base/time/time.h" #include "base/time/time.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/password_manager/chrome_password_manager_client.h"
#include "chrome/browser/platform_util.h" #include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile_avatar_icon_util.h" #include "chrome/browser/profiles/profile_avatar_icon_util.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
...@@ -20,7 +19,6 @@ ...@@ -20,7 +19,6 @@
#include "chrome/browser/signin/signin_promo.h" #include "chrome/browser/signin/signin_promo.h"
#include "chrome/browser/signin/signin_util.h" #include "chrome/browser/signin/signin_util.h"
#include "chrome/browser/task_manager/web_contents_tags.h" #include "chrome/browser/task_manager/web_contents_tags.h"
#include "chrome/browser/ui/autofill/chrome_autofill_client.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_finder.h"
...@@ -28,13 +26,13 @@ ...@@ -28,13 +26,13 @@
#include "chrome/browser/ui/profile_picker.h" #include "chrome/browser/ui/profile_picker.h"
#include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/user_manager.h" #include "chrome/browser/ui/user_manager.h"
#include "chrome/browser/ui/views/profiles/user_manager_profile_dialog_delegate.h"
#include "chrome/common/url_constants.h" #include "chrome/common/url_constants.h"
#include "chrome/grit/chromium_strings.h" #include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "components/guest_view/browser/guest_view_manager.h" #include "components/guest_view/browser/guest_view_manager.h"
#include "components/keep_alive_registry/keep_alive_types.h" #include "components/keep_alive_registry/keep_alive_types.h"
#include "components/keep_alive_registry/scoped_keep_alive.h" #include "components/keep_alive_registry/scoped_keep_alive.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h"
#include "content/public/browser/navigation_details.h" #include "content/public/browser/navigation_details.h"
#include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
...@@ -66,102 +64,6 @@ base::OnceClosure* g_user_manager_shown_callback_for_testing = nullptr; ...@@ -66,102 +64,6 @@ base::OnceClosure* g_user_manager_shown_callback_for_testing = nullptr;
bool g_is_user_manager_view_under_construction = false; bool g_is_user_manager_view_under_construction = false;
} // namespace } // namespace
// Delegate---------------------------------------------------------------
UserManagerProfileDialogDelegate::UserManagerProfileDialogDelegate(
UserManagerView* parent,
views::WebView* web_view,
const std::string& email_address,
const GURL& url)
: parent_(parent), web_view_(web_view), email_address_(email_address) {
SetHasWindowSizeControls(true);
SetTitle(IDS_PROFILES_GAIA_SIGNIN_TITLE);
SetButtons(ui::DIALOG_BUTTON_NONE);
set_use_custom_frame(false);
AddChildView(web_view_);
SetLayoutManager(std::make_unique<views::FillLayout>());
web_view_->GetWebContents()->SetDelegate(this);
ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient(
web_view_->GetWebContents(),
autofill::ChromeAutofillClient::FromWebContents(
web_view_->GetWebContents()));
web_modal::WebContentsModalDialogManager::CreateForWebContents(
web_view_->GetWebContents());
web_modal::WebContentsModalDialogManager::FromWebContents(
web_view_->GetWebContents())
->SetDelegate(this);
web_view_->LoadInitialURL(url);
chrome::RecordDialogCreation(chrome::DialogIdentifier::USER_MANAGER_PROFILE);
}
UserManagerProfileDialogDelegate::~UserManagerProfileDialogDelegate() {}
gfx::Size UserManagerProfileDialogDelegate::CalculatePreferredSize() const {
return gfx::Size(UserManagerProfileDialog::kDialogWidth,
UserManagerProfileDialog::kDialogHeight);
}
void UserManagerProfileDialogDelegate::DisplayErrorMessage() {
web_view_->LoadInitialURL(GURL(chrome::kChromeUISigninErrorURL));
}
web_modal::WebContentsModalDialogHost*
UserManagerProfileDialogDelegate::GetWebContentsModalDialogHost() {
return this;
}
gfx::NativeView UserManagerProfileDialogDelegate::GetHostView() const {
return GetWidget()->GetNativeView();
}
gfx::Point UserManagerProfileDialogDelegate::GetDialogPosition(
const gfx::Size& size) {
gfx::Size widget_size = GetWidget()->GetWindowBoundsInScreen().size();
return gfx::Point(std::max(0, (widget_size.width() - size.width()) / 2),
std::max(0, (widget_size.height() - size.height()) / 2));
}
gfx::Size UserManagerProfileDialogDelegate::GetMaximumDialogSize() {
return GetWidget()->GetWindowBoundsInScreen().size();
}
void UserManagerProfileDialogDelegate::AddObserver(
web_modal::ModalDialogHostObserver* observer) {}
void UserManagerProfileDialogDelegate::RemoveObserver(
web_modal::ModalDialogHostObserver* observer) {}
ui::ModalType UserManagerProfileDialogDelegate::GetModalType() const {
return ui::MODAL_TYPE_WINDOW;
}
void UserManagerProfileDialogDelegate::DeleteDelegate() {
OnDialogDestroyed();
delete this;
}
views::View* UserManagerProfileDialogDelegate::GetInitiallyFocusedView() {
return static_cast<views::View*>(web_view_);
}
void UserManagerProfileDialogDelegate::CloseDialog() {
OnDialogDestroyed();
GetWidget()->Close();
}
void UserManagerProfileDialogDelegate::OnDialogDestroyed() {
if (parent_) {
parent_->OnDialogDestroyed();
parent_ = nullptr;
}
}
// UserManager ----------------------------------------------------------------- // UserManager -----------------------------------------------------------------
// static // static
...@@ -385,7 +287,7 @@ void UserManagerView::ShowDialog(content::BrowserContext* browser_context, ...@@ -385,7 +287,7 @@ void UserManagerView::ShowDialog(content::BrowserContext* browser_context,
// The dialog delegate will be deleted when the widget closes. The created // The dialog delegate will be deleted when the widget closes. The created
// WebView's lifetime is managed by the delegate. // WebView's lifetime is managed by the delegate.
delegate_ = new UserManagerProfileDialogDelegate( delegate_ = new UserManagerProfileDialogDelegate(
this, new views::WebView(browser_context), email, url); this, std::make_unique<views::WebView>(browser_context), url);
gfx::NativeView parent = g_user_manager_view->GetWidget()->GetNativeView(); gfx::NativeView parent = g_user_manager_view->GetWidget()->GetNativeView();
views::DialogDelegate::CreateDialogWidget(delegate_, nullptr, parent); views::DialogDelegate::CreateDialogWidget(delegate_, nullptr, parent);
delegate_->GetWidget()->Show(); delegate_->GetWidget()->Show();
......
...@@ -12,64 +12,14 @@ ...@@ -12,64 +12,14 @@
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_window.h" #include "chrome/browser/profiles/profile_window.h"
#include "chrome/browser/ui/chrome_web_modal_dialog_manager_delegate.h"
#include "chrome/browser/ui/user_manager.h" #include "chrome/browser/ui/user_manager.h"
#include "components/signin/public/base/signin_metrics.h" #include "components/signin/public/base/signin_metrics.h"
#include "components/web_modal/web_contents_modal_dialog_host.h"
#include "ui/views/controls/webview/webview.h" #include "ui/views/controls/webview/webview.h"
#include "ui/views/window/dialog_delegate.h" #include "ui/views/window/dialog_delegate.h"
class ScopedKeepAlive; class ScopedKeepAlive;
class UserManagerView; class UserManagerView;
class UserManagerProfileDialogDelegate;
class UserManagerProfileDialogDelegate
: public views::DialogDelegateView,
public UserManagerProfileDialog::BaseDialogDelegate,
public ChromeWebModalDialogManagerDelegate,
public web_modal::WebContentsModalDialogHost {
public:
UserManagerProfileDialogDelegate(UserManagerView* parent,
views::WebView* web_view,
const std::string& email_address,
const GURL& url);
~UserManagerProfileDialogDelegate() override;
// UserManagerProfileDialog::BaseDialogDelegate
void CloseDialog() override;
// Display the local error message inside login window.
void DisplayErrorMessage();
// ChromeWebModalDialogManagerDelegate
web_modal::WebContentsModalDialogHost* GetWebContentsModalDialogHost()
override;
// web_modal::WebContentsModalDialogHost
gfx::NativeView GetHostView() const override;
gfx::Point GetDialogPosition(const gfx::Size& size) override;
gfx::Size GetMaximumDialogSize() override;
void AddObserver(web_modal::ModalDialogHostObserver* observer) override;
void RemoveObserver(web_modal::ModalDialogHostObserver* observer) override;
private:
UserManagerProfileDialogDelegate();
// Before its destruction, tells its parent container to reset its reference
// to the UserManagerProfileDialogDelegate.
void OnDialogDestroyed();
// views::DialogDelegate:
gfx::Size CalculatePreferredSize() const override;
ui::ModalType GetModalType() const override;
void DeleteDelegate() override;
views::View* GetInitiallyFocusedView() override;
UserManagerView* parent_; // Not owned.
views::WebView* web_view_;
const std::string email_address_;
DISALLOW_COPY_AND_ASSIGN(UserManagerProfileDialogDelegate);
};
namespace views { namespace views {
class WebView; class WebView;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment