Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Unified Diff: chrome/browser/ui/webui/signin/sync_confirmation_handler.cc

Issue 1487283005: Implement the new Sync Confirmation dialog on Linux and Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add some tests. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..a0af1e98f8d5165daa3b704d621355ace5ab88a6
--- /dev/null
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
@@ -0,0 +1,117 @@
+// 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;
Dan Beam 2016/01/06 22:57:57 can you make this (and the size param to GetImageU
anthonyvd 2016/01/08 22:39:42 Done.
+
+Browser* GetDesktopBrowser(content::WebUI* web_ui) {
+ Browser* browser = chrome::FindBrowserWithWebContents(
+ web_ui->GetWebContents());
+ if (!browser) {
+ browser = chrome::FindLastActiveWithProfile(
+ Profile::FromWebUI(web_ui), chrome::GetActiveDesktop());
+ }
+ return browser;
+}
+
+} // 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::HandleConfirmMessage,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("undo",
+ base::Bind(&SyncConfirmationHandler::HandleUndoMessage,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("initialized",
+ base::Bind(&SyncConfirmationHandler::HandleInitializedMessage,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("goToSettings",
+ base::Bind(&SyncConfirmationHandler::HandleGoToSettingsMessage,
+ base::Unretained(this)));
+}
+
+void SyncConfirmationHandler::HandleConfirmMessage(
+ const base::ListValue* args) {
+ Browser* browser = GetDesktopBrowser(web_ui());
+ DCHECK(browser);
Dan Beam 2016/01/06 22:57:58 just move this DCHECK() to GetDesktopBrowser()
anthonyvd 2016/01/08 22:39:41 Done.
+ LoginUIServiceFactory::GetForProfile(browser->profile())->
+ SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS);
Dan Beam 2016/01/06 22:57:57 indent off
anthonyvd 2016/01/08 22:39:42 Done.
+ browser->window()->CloseModalSigninWindow();
Dan Beam 2016/01/06 22:57:57 can you do something long the lines of: CloseMo
anthonyvd 2016/01/08 22:39:42 Done.
+}
+
+void SyncConfirmationHandler::HandleGoToSettingsMessage(
+ const base::ListValue* args) {
+ Browser* browser = GetDesktopBrowser(web_ui());
+ DCHECK(browser);
+ LoginUIServiceFactory::GetForProfile(browser->profile())->
+ SyncConfirmationUIClosed(LoginUIService::CONFIGURE_SYNC_FIRST);
Dan Beam 2016/01/06 22:57:57 indent off
anthonyvd 2016/01/08 22:39:42 Done.
+ browser->window()->CloseModalSigninWindow();
+}
+
+void SyncConfirmationHandler::HandleUndoMessage(const base::ListValue* args) {
+ Browser* browser = GetDesktopBrowser(web_ui());
+ DCHECK(browser);
+ LoginUIServiceFactory::GetForProfile(browser->profile())->
+ SyncConfirmationUIClosed(LoginUIService::ABORT_SIGNIN);
Dan Beam 2016/01/06 22:57:58 indent off
anthonyvd 2016/01/08 22:39:41 Done.
+ SigninManagerFactory::GetForProfile(Profile::FromWebUI(web_ui()))->SignOut(
+ signin_metrics::ABORT_SIGNIN);
+ browser->window()->CloseModalSigninWindow();
+}
+
+void SyncConfirmationHandler::HandleInitializedMessage(
+ const base::ListValue* args) {
+ Browser* browser = GetDesktopBrowser(web_ui());
+ DCHECK(browser);
+ Profile* profile = browser->profile();
+ AccountInfo info = AccountTrackerServiceFactory::GetForProfile(profile)->
+ GetAccounts()[0];
+
+ if (!info.IsValid()) {
+ AccountTrackerServiceFactory::GetForProfile(profile)->AddObserver(this);
+ } else {
+ SetUserImageURL(info.picture_url);
+ }
Dan Beam 2016/01/06 22:57:57 no curlies
anthonyvd 2016/01/08 22:39:42 Done.
+}
+
+void SyncConfirmationHandler::SetUserImageURL(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);
+}

Powered by Google App Engine
This is Rietveld 408576698