| Index: ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
|
| diff --git a/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc b/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..903b6aef847fcb66f82767e65314c0c912373b41
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
|
| @@ -0,0 +1,106 @@
|
| +// Copyright 2014 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 "ios/chrome/browser/ui/webui/signin_internals_ui_ios.h"
|
| +
|
| +#include "base/hash.h"
|
| +#include "components/grit/components_resources.h"
|
| +#include "components/signin/core/browser/about_signin_internals.h"
|
| +#include "components/signin/core/browser/gaia_cookie_manager_service.h"
|
| +#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
|
| +#include "ios/chrome/browser/chrome_url_constants.h"
|
| +#include "ios/chrome/browser/signin/about_signin_internals_factory.h"
|
| +#include "ios/chrome/browser/signin/gaia_cookie_manager_service_factory.h"
|
| +#include "ios/web/public/web_ui_ios_data_source.h"
|
| +#include "ios/web/public/webui/web_ui_ios.h"
|
| +#include "ui/base/resource/resource_bundle.h"
|
| +
|
| +namespace {
|
| +
|
| +web::WebUIIOSDataSource* CreateSignInInternalsHTMLSource() {
|
| + web::WebUIIOSDataSource* source =
|
| + web::WebUIIOSDataSource::Create(kChromeUISignInInternalsHost);
|
| +
|
| + source->SetJsonPath("strings.js");
|
| + source->AddResourcePath("signin_internals.js", IDR_SIGNIN_INTERNALS_INDEX_JS);
|
| + source->SetDefaultResource(IDR_SIGNIN_INTERNALS_INDEX_HTML);
|
| + return source;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +SignInInternalsUIIOS::SignInInternalsUIIOS(web::WebUIIOS* web_ui)
|
| + : WebUIIOSController(web_ui) {
|
| + ios::ChromeBrowserState* browser_state =
|
| + ios::ChromeBrowserState::FromWebUIIOS(web_ui);
|
| + DCHECK(browser_state);
|
| + web::WebUIIOSDataSource::Add(browser_state,
|
| + CreateSignInInternalsHTMLSource());
|
| +
|
| + AboutSigninInternals* about_signin_internals =
|
| + ios::AboutSigninInternalsFactory::GetForBrowserState(browser_state);
|
| + if (about_signin_internals)
|
| + about_signin_internals->AddSigninObserver(this);
|
| +}
|
| +
|
| +SignInInternalsUIIOS::~SignInInternalsUIIOS() {
|
| + ios::ChromeBrowserState* browser_state =
|
| + ios::ChromeBrowserState::FromWebUIIOS(web_ui());
|
| + DCHECK(browser_state);
|
| + AboutSigninInternals* about_signin_internals =
|
| + ios::AboutSigninInternalsFactory::GetForBrowserState(browser_state);
|
| + if (about_signin_internals)
|
| + about_signin_internals->RemoveSigninObserver(this);
|
| +}
|
| +
|
| +bool SignInInternalsUIIOS::OverrideHandleWebUIIOSMessage(
|
| + const GURL& source_url,
|
| + const std::string& name,
|
| + const base::ListValue& content) {
|
| + if (name == "getSigninInfo") {
|
| + ios::ChromeBrowserState* browser_state =
|
| + ios::ChromeBrowserState::FromWebUIIOS(web_ui());
|
| + DCHECK(browser_state);
|
| +
|
| + AboutSigninInternals* about_signin_internals =
|
| + ios::AboutSigninInternalsFactory::GetForBrowserState(browser_state);
|
| + // TODO(vishwath): The UI would look better if we passed in a dict with some
|
| + // reasonable defaults, so the about:signin-internals page doesn't look
|
| + // empty in incognito mode. Alternatively, we could force about:signin to
|
| + // open in non-incognito mode always (like about:settings for ex.).
|
| + if (about_signin_internals) {
|
| + const std::string& reply_handler =
|
| + "chrome.signin.getSigninInfo.handleReply";
|
| + web_ui()->CallJavascriptFunction(
|
| + reply_handler, *about_signin_internals->GetSigninStatus());
|
| + std::vector<gaia::ListedAccount> cookie_accounts;
|
| + GaiaCookieManagerService* cookie_manager_service =
|
| + ios::GaiaCookieManagerServiceFactory::GetForBrowserState(
|
| + browser_state);
|
| + std::vector<gaia::ListedAccount> signed_out_accounts;
|
| + if (cookie_manager_service->ListAccounts(
|
| + &cookie_accounts, &signed_out_accounts,
|
| + "ChromiumSignInInternalsUIIOS")) {
|
| + about_signin_internals->OnGaiaAccountsInCookieUpdated(
|
| + cookie_accounts, signed_out_accounts,
|
| + GoogleServiceAuthError(GoogleServiceAuthError::NONE));
|
| + }
|
| +
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +void SignInInternalsUIIOS::OnSigninStateChanged(
|
| + const base::DictionaryValue* info) {
|
| + const std::string& event_handler = "chrome.signin.onSigninInfoChanged.fire";
|
| + web_ui()->CallJavascriptFunction(event_handler, *info);
|
| +}
|
| +
|
| +void SignInInternalsUIIOS::OnCookieAccountsFetched(
|
| + const base::DictionaryValue* info) {
|
| + web_ui()->CallJavascriptFunction("chrome.signin.onCookieAccountsFetched.fire",
|
| + *info);
|
| +}
|
|
|