Chromium Code Reviews| Index: chrome/browser/ui/webui/signin/sync_confirmation_handler.cc |
| diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..88728ffbf89dd7c17107156d64a0eb54c8d0e134 |
| --- /dev/null |
| +++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc |
| @@ -0,0 +1,108 @@ |
| +// Copyright 2015 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/webui/signin/sync_confirmation_handler.h" |
| + |
| +#include "base/bind.h" |
| +#include "chrome/browser/profiles/profile_avatar_icon_util.h" |
| +#include "chrome/browser/signin/account_tracker_service_factory.h" |
| +#include "chrome/browser/signin/signin_manager_factory.h" |
| +#include "chrome/browser/ui/browser_finder.h" |
| +#include "chrome/browser/ui/browser_window.h" |
| +#include "chrome/browser/ui/webui/signin/login_ui_service_factory.cc" |
| +#include "components/signin/core/browser/account_tracker_service.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/browser/web_ui.h" |
| +#include "url/gurl.h" |
| + |
| +namespace { |
| + |
| +const int kProfileImageSize = 128; |
| + |
| +Browser* GetDesktopBrowser(content::WebUI* web_ui) { |
| + Browser* browser = chrome::FindBrowserWithWebContents( |
| + web_ui->GetWebContents()); |
| + if (!browser) { |
| + browser = chrome::FindLastActiveWithProfile( |
| + Profile::FromWebUI(web_ui), chrome::GetActiveDesktop()); |
| + } |
| + DCHECK(browser); |
| + return browser; |
| +} |
| + |
| +void CloseModalSigninWindow(content::WebUI* web_ui, |
|
Dan Beam
2016/01/13 23:45:22
nit: instead of putting this in an anonymous names
anthonyvd
2016/01/18 21:40:08
Done.
|
| + LoginUIService::SyncConfirmationUIClosedResults results) { |
| + Browser* browser = GetDesktopBrowser(web_ui); |
| + LoginUIServiceFactory::GetForProfile(browser->profile())-> |
| + SyncConfirmationUIClosed(results); |
| + browser->window()->CloseModalSigninWindow(); |
| +} |
| + |
| +} // namespace |
| + |
| +SyncConfirmationHandler::SyncConfirmationHandler() {} |
| + |
| +SyncConfirmationHandler::~SyncConfirmationHandler() { |
| + Profile* profile = Profile::FromWebUI(web_ui()); |
| + AccountTrackerServiceFactory::GetForProfile(profile)->RemoveObserver(this); |
|
Dan Beam
2016/01/13 23:45:22
is it safe to RemoveObserver() if it was never add
anthonyvd
2016/01/18 21:40:08
It looks like it is. ObserverList only performs th
|
| +} |
| + |
| +void SyncConfirmationHandler::RegisterMessages() { |
| + web_ui()->RegisterMessageCallback("confirm", |
| + base::Bind(&SyncConfirmationHandler::HandleConfirm, |
| + base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback("undo", |
| + base::Bind(&SyncConfirmationHandler::HandleUndo, base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback("initialized", |
| + base::Bind(&SyncConfirmationHandler::HandleInitialized, |
| + base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback("goToSettings", |
| + base::Bind(&SyncConfirmationHandler::HandleGoToSettings, |
| + base::Unretained(this))); |
| +} |
| + |
| +void SyncConfirmationHandler::HandleConfirm(const base::ListValue* args) { |
| + CloseModalSigninWindow(web_ui(), LoginUIService::SYNC_WITH_DEFAULT_SETTINGS); |
| +} |
| + |
| +void SyncConfirmationHandler::HandleGoToSettings(const base::ListValue* args) { |
| + CloseModalSigninWindow(web_ui(), LoginUIService::CONFIGURE_SYNC_FIRST); |
| +} |
| + |
| +void SyncConfirmationHandler::HandleUndo(const base::ListValue* args) { |
| + CloseModalSigninWindow(web_ui(), LoginUIService::ABORT_SIGNIN); |
| + SigninManagerFactory::GetForProfile(Profile::FromWebUI(web_ui()))->SignOut( |
| + signin_metrics::ABORT_SIGNIN); |
| +} |
| + |
| +void SyncConfirmationHandler::HandleInitialized(const base::ListValue* args) { |
| + Browser* browser = GetDesktopBrowser(web_ui()); |
| + Profile* profile = browser->profile(); |
| + AccountInfo info = AccountTrackerServiceFactory::GetForProfile(profile)-> |
| + GetAccounts()[0]; |
| + |
| + if (!info.IsValid()) |
| + AccountTrackerServiceFactory::GetForProfile(profile)->AddObserver(this); |
| + else |
| + SetUserImageURL(info.picture_url); |
| +} |
| + |
| +void SyncConfirmationHandler::SetUserImageURL(const std::string& picture_url) { |
| + GURL url; |
| + if (profiles::GetImageURLWithThumbnailSize(GURL(picture_url), |
| + kProfileImageSize, |
| + &url)) { |
| + base::StringValue picture_url_value(url.spec()); |
| + web_ui()->CallJavascriptFunction( |
| + "sync.confirmation.setUserImageURL", picture_url_value); |
| + } |
| +} |
| + |
| +void SyncConfirmationHandler::OnAccountUpdated(const AccountInfo& info) { |
| + DCHECK(info.IsValid()); |
| + Profile* profile = Profile::FromWebUI(web_ui()); |
| + AccountTrackerServiceFactory::GetForProfile(profile)->RemoveObserver(this); |
| + |
| + SetUserImageURL(info.picture_url); |
| +} |