| // 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/history_login_handler.h" |
| |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| #include "base/callback.h" |
| #include "base/values.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_finder.h" |
| #include "chrome/browser/ui/browser_window.h" |
| #include "chrome/browser/ui/webui/profile_info_watcher.h" |
| #include "components/signin/core/browser/signin_metrics.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/browser/web_ui.h" |
| |
| HistoryLoginHandler::HistoryLoginHandler(const base::Closure& signin_callback) |
| : signin_callback_(signin_callback) {} |
| |
| HistoryLoginHandler::~HistoryLoginHandler() {} |
| |
| void HistoryLoginHandler::RegisterMessages() { |
| profile_info_watcher_.reset(new ProfileInfoWatcher( |
| Profile::FromWebUI(web_ui()), |
| base::Bind(&HistoryLoginHandler::ProfileInfoChanged, |
| base::Unretained(this)))); |
| |
| web_ui()->RegisterMessageCallback( |
| "otherDevicesInitialized", |
| base::BindRepeating(&HistoryLoginHandler::HandleOtherDevicesInitialized, |
| base::Unretained(this))); |
| |
| web_ui()->RegisterMessageCallback( |
| "startSignInFlow", |
| base::BindRepeating(&HistoryLoginHandler::HandleStartSignInFlow, |
| base::Unretained(this))); |
| } |
| |
| void HistoryLoginHandler::HandleOtherDevicesInitialized( |
| const base::ListValue* /*args*/) { |
| AllowJavascript(); |
| ProfileInfoChanged(); |
| } |
| |
| void HistoryLoginHandler::ProfileInfoChanged() { |
| bool signed_in = !profile_info_watcher_->GetAuthenticatedUsername().empty(); |
| if (!signin_callback_.is_null()) |
| signin_callback_.Run(); |
| |
| if (IsJavascriptAllowed()) |
| CallJavascriptFunction("updateSignInState", base::Value(signed_in)); |
| } |
| |
| void HistoryLoginHandler::HandleStartSignInFlow( |
| const base::ListValue* /*args*/) { |
| Browser* browser = |
| chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); |
| browser->window()->ShowAvatarBubbleFromAvatarButton( |
| BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN, signin::ManageAccountsParams(), |
| signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS, false); |
| } |