| 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..6336e7615452a6f5c78b44ed84a0551449a0c400
|
| --- /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 unsigned 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,
|
| + 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);
|
| +}
|
| +
|
| +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);
|
| +}
|
|
|