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..2d196ebf971e496485f017236feaefab2146abd2 |
| --- /dev/null |
| +++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc |
| @@ -0,0 +1,107 @@ |
| +// 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.h" |
| +#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" |
| + |
| +const int kProfileImageSize = 128; |
| + |
| +SyncConfirmationHandler::SyncConfirmationHandler() {} |
| + |
| +SyncConfirmationHandler::~SyncConfirmationHandler() { |
| + Profile* profile = Profile::FromWebUI(web_ui()); |
| + AccountTrackerServiceFactory::GetForProfile(profile)->RemoveObserver(this); |
| +} |
| + |
| +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(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS); |
| +} |
| + |
| +void SyncConfirmationHandler::HandleGoToSettings(const base::ListValue* args) { |
| + CloseModalSigninWindow(LoginUIService::CONFIGURE_SYNC_FIRST); |
| +} |
| + |
| +void SyncConfirmationHandler::HandleUndo(const base::ListValue* args) { |
| + Browser* browser = GetDesktopBrowser(); |
| + LoginUIServiceFactory::GetForProfile(browser->profile())-> |
| + SyncConfirmationUIClosed(LoginUIService::ABORT_SIGNIN); |
| + SigninManagerFactory::GetForProfile(Profile::FromWebUI(web_ui()))->SignOut( |
| + signin_metrics::ABORT_SIGNIN); |
| + browser->window()->CloseModalSigninWindow(); |
| +} |
|
Dan Beam
2016/01/22 01:26:58
do you have any tests for this handler? content::T
anthonyvd
2016/01/22 17:19:57
I'll add some.
|
| + |
| +void SyncConfirmationHandler::HandleInitialized(const base::ListValue* args) { |
| + Browser* browser = GetDesktopBrowser(); |
| + 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); |
| +} |
| + |
| +Browser* SyncConfirmationHandler::GetDesktopBrowser() { |
| + Browser* browser = chrome::FindBrowserWithWebContents( |
| + web_ui()->GetWebContents()); |
| + if (!browser) { |
| + browser = chrome::FindLastActiveWithProfile( |
| + Profile::FromWebUI(web_ui()), chrome::GetActiveDesktop()); |
| + } |
| + DCHECK(browser); |
| + return browser; |
| +} |
| + |
| +void SyncConfirmationHandler::CloseModalSigninWindow( |
| + LoginUIService::SyncConfirmationUIClosedResults results) { |
| + Browser* browser = GetDesktopBrowser(); |
| + LoginUIServiceFactory::GetForProfile(browser->profile())-> |
| + SyncConfirmationUIClosed(results); |
| + browser->window()->CloseModalSigninWindow(); |
| +} |