| Index: chrome/browser/browser_signin.cc
|
| diff --git a/chrome/browser/browser_signin.cc b/chrome/browser/browser_signin.cc
|
| deleted file mode 100644
|
| index 4fc16b46a78495c12e449db79a840c07074a53b7..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/browser_signin.cc
|
| +++ /dev/null
|
| @@ -1,335 +0,0 @@
|
| -// Copyright (c) 2011 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/browser_signin.h"
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/json/json_reader.h"
|
| -#include "base/json/json_writer.h"
|
| -#include "base/memory/singleton.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/string_util.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/prefs/pref_service.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/sync/profile_sync_service.h"
|
| -#include "chrome/browser/sync/sync_setup_flow.h"
|
| -#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
|
| -#include "chrome/browser/ui/webui/constrained_html_ui.h"
|
| -#include "chrome/browser/ui/webui/html_dialog_ui.h"
|
| -#include "chrome/common/chrome_notification_types.h"
|
| -#include "chrome/common/jstemplate_builder.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "content/browser/browser_thread.h"
|
| -#include "content/browser/renderer_host/render_view_host.h"
|
| -#include "content/browser/tab_contents/tab_contents.h"
|
| -#include "content/common/notification_details.h"
|
| -#include "content/common/notification_source.h"
|
| -#include "grit/browser_resources.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -
|
| -class BrowserSigninResourcesSource : public ChromeURLDataManager::DataSource {
|
| - public:
|
| - BrowserSigninResourcesSource()
|
| - : DataSource(chrome::kChromeUIDialogHost, MessageLoop::current()) {
|
| - }
|
| -
|
| - virtual void StartDataRequest(const std::string& path,
|
| - bool is_incognito,
|
| - int request_id);
|
| -
|
| - virtual std::string GetMimeType(const std::string& path) const {
|
| - return "text/html";
|
| - }
|
| -
|
| - private:
|
| - virtual ~BrowserSigninResourcesSource() {}
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BrowserSigninResourcesSource);
|
| -};
|
| -
|
| -void BrowserSigninResourcesSource::StartDataRequest(const std::string& path,
|
| - bool is_incognito,
|
| - int request_id) {
|
| - const char kSigninPath[] = "signin";
|
| -
|
| - std::string response;
|
| - if (path == kSigninPath) {
|
| - const base::StringPiece html(
|
| - ResourceBundle::GetSharedInstance().GetRawDataResource(
|
| - IDR_SIGNIN_HTML));
|
| - DictionaryValue dict;
|
| - SetFontAndTextDirection(&dict);
|
| - response = jstemplate_builder::GetI18nTemplateHtml(html, &dict);
|
| - }
|
| -
|
| - SendResponse(request_id, base::RefCountedString::TakeString(&response));
|
| -}
|
| -
|
| -class BrowserSigninHtml : public HtmlDialogUIDelegate,
|
| - public WebUIMessageHandler {
|
| - public:
|
| - BrowserSigninHtml(BrowserSignin* signin,
|
| - const string16& suggested_email,
|
| - const string16& login_message);
|
| - virtual ~BrowserSigninHtml() {}
|
| -
|
| - // HtmlDialogUIDelegate implementation
|
| - virtual bool IsDialogModal() const OVERRIDE {
|
| - return false;
|
| - };
|
| - virtual string16 GetDialogTitle() const OVERRIDE {
|
| - return string16();
|
| - }
|
| - virtual GURL GetDialogContentURL() const OVERRIDE {
|
| - return GURL("chrome://dialog/signin");
|
| - }
|
| - virtual void GetWebUIMessageHandlers(
|
| - std::vector<WebUIMessageHandler*>* handlers) const OVERRIDE {
|
| - const WebUIMessageHandler* handler = this;
|
| - handlers->push_back(const_cast<WebUIMessageHandler*>(handler));
|
| - }
|
| - virtual void GetDialogSize(gfx::Size* size) const OVERRIDE {
|
| - size->set_width(600);
|
| - size->set_height(300);
|
| - }
|
| - virtual std::string GetDialogArgs() const OVERRIDE {
|
| - return UTF16ToASCII(login_message_);
|
| - }
|
| - virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE {
|
| - closed_ = true;
|
| - signin_->Cancel();
|
| - }
|
| - virtual void OnCloseContents(TabContents* source,
|
| - bool* out_close_dialog) OVERRIDE {
|
| - }
|
| - virtual bool ShouldShowDialogTitle() const OVERRIDE { return true; }
|
| -
|
| - // WebUIMessageHandler implementation.
|
| - virtual void RegisterMessages() OVERRIDE;
|
| -
|
| - // Refreshes the UI, such as after an authentication error.
|
| - void ReloadUI();
|
| -
|
| - // Method which calls into javascript to force the dialog to close.
|
| - void ForceDialogClose();
|
| -
|
| - private:
|
| - // JS callback handlers.
|
| - void HandleSigninInit(const ListValue* args);
|
| - void HandleSubmitAuth(const ListValue* args);
|
| -
|
| - // Nonowned pointer; |signin_| owns this object.
|
| - BrowserSignin* signin_;
|
| -
|
| - string16 suggested_email_;
|
| - string16 login_message_;
|
| -
|
| - bool closed_;
|
| -};
|
| -
|
| -BrowserSigninHtml::BrowserSigninHtml(BrowserSignin* signin,
|
| - const string16& suggested_email,
|
| - const string16& login_message)
|
| - : signin_(signin),
|
| - suggested_email_(suggested_email),
|
| - login_message_(login_message),
|
| - closed_(false) {
|
| -}
|
| -
|
| -void BrowserSigninHtml::RegisterMessages() {
|
| - web_ui_->RegisterMessageCallback(
|
| - "SubmitAuth", NewCallback(this, &BrowserSigninHtml::HandleSubmitAuth));
|
| - web_ui_->RegisterMessageCallback(
|
| - "SigninInit", NewCallback(this, &BrowserSigninHtml::HandleSigninInit));
|
| -}
|
| -
|
| -void BrowserSigninHtml::ReloadUI() {
|
| - HandleSigninInit(NULL);
|
| -}
|
| -
|
| -void BrowserSigninHtml::ForceDialogClose() {
|
| - if (!closed_ && web_ui_) {
|
| - StringValue value("DialogClose");
|
| - ListValue close_args;
|
| - close_args.Append(new StringValue(""));
|
| - web_ui_->CallJavascriptFunction("chrome.send", value, close_args);
|
| - }
|
| -}
|
| -
|
| -void BrowserSigninHtml::HandleSigninInit(const ListValue* args) {
|
| - if (!web_ui_)
|
| - return;
|
| -
|
| - RenderViewHost* rvh = web_ui_->tab_contents()->render_view_host();
|
| - rvh->ExecuteJavascriptInWebFrame(ASCIIToUTF16("//iframe[@id='login']"),
|
| - ASCIIToUTF16("hideBlurb();"));
|
| -
|
| - DictionaryValue json_args;
|
| - std::string json;
|
| - std::wstring javascript(L"");
|
| - SyncSetupFlow::GetArgsForGaiaLogin(signin_->GetProfileSyncService(),
|
| - &json_args);
|
| -
|
| - // Replace the suggested email, unless sync has already required a
|
| - // particular value.
|
| - bool is_editable;
|
| - std::string user;
|
| - if (!json_args.GetBoolean("editable_user", &is_editable))
|
| - is_editable = false;
|
| - json_args.GetString("user", &user);
|
| - if (is_editable && user.empty() && !suggested_email_.empty())
|
| - json_args.SetString("user", suggested_email_);
|
| -
|
| - base::JSONWriter::Write(&json_args, false, &json);
|
| - javascript += L"showGaiaLogin(" + UTF8ToWide(json) + L");";
|
| - rvh->ExecuteJavascriptInWebFrame(ASCIIToUTF16("//iframe[@id='login']"),
|
| - WideToUTF16Hack(javascript));
|
| -}
|
| -
|
| -void BrowserSigninHtml::HandleSubmitAuth(const ListValue* args) {
|
| - std::string json;
|
| - if (!args->GetString(0, &json))
|
| - NOTREACHED() << "Could not read JSON argument";
|
| -
|
| - scoped_ptr<DictionaryValue> result(static_cast<DictionaryValue*>(
|
| - base::JSONReader::Read(json, false)));
|
| - std::string username;
|
| - std::string password;
|
| - std::string captcha;
|
| - std::string access_code;
|
| - if (!result.get() ||
|
| - !result->GetString("user", &username) ||
|
| - !result->GetString("pass", &password) ||
|
| - !result->GetString("captcha", &captcha) ||
|
| - !result->GetString("access_code", &access_code)) {
|
| - LOG(ERROR) << "Unintelligble format for authentication data from page.";
|
| - signin_->Cancel();
|
| - }
|
| - signin_->GetProfileSyncService()->OnUserSubmittedAuth(
|
| - username, password, captcha, access_code);
|
| -}
|
| -
|
| -BrowserSignin::BrowserSignin(Profile* profile)
|
| - : profile_(profile),
|
| - delegate_(NULL),
|
| - html_dialog_ui_delegate_(NULL) {
|
| - // profile is NULL during testing.
|
| - if (profile) {
|
| - BrowserSigninResourcesSource* source = new BrowserSigninResourcesSource();
|
| - profile->GetChromeURLDataManager()->AddDataSource(source);
|
| - }
|
| -}
|
| -
|
| -BrowserSignin::~BrowserSignin() {
|
| - delegate_ = NULL;
|
| -}
|
| -
|
| -void BrowserSignin::RequestSignin(TabContents* tab_contents,
|
| - const string16& suggested_email,
|
| - const string16& login_message,
|
| - SigninDelegate* delegate) {
|
| - CHECK(tab_contents);
|
| - CHECK(delegate);
|
| - // Cancel existing request.
|
| - if (delegate_)
|
| - Cancel();
|
| - delegate_ = delegate;
|
| - suggested_email_ = suggested_email;
|
| - login_message_ = login_message;
|
| - RegisterAuthNotifications();
|
| - ShowSigninTabModal(tab_contents);
|
| -}
|
| -
|
| -std::string BrowserSignin::GetSignedInUsername() const {
|
| - std::string username =
|
| - profile_->GetPrefs()->GetString(prefs::kGoogleServicesUsername);
|
| - VLOG(1) << "GetSignedInUsername: " << username;
|
| - return username;
|
| -}
|
| -
|
| -void BrowserSignin::Observe(int type,
|
| - const NotificationSource& source,
|
| - const NotificationDetails& details) {
|
| - switch (type) {
|
| - case chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL: {
|
| - VLOG(1) << "GOOGLE_SIGNIN_SUCCESSFUL";
|
| - if (delegate_)
|
| - delegate_->OnLoginSuccess();
|
| - // Close the dialog.
|
| - OnLoginFinished();
|
| - break;
|
| - }
|
| - case chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED: {
|
| - VLOG(1) << "GOOGLE_SIGNIN_FAILED";
|
| - // The signin failed, refresh the UI with error information.
|
| - html_dialog_ui_delegate_->ReloadUI();
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -void BrowserSignin::Cancel() {
|
| - if (delegate_) {
|
| - delegate_->OnLoginFailure(GoogleServiceAuthError(
|
| - GoogleServiceAuthError::REQUEST_CANCELED));
|
| - GetProfileSyncService()->OnUserCancelledDialog();
|
| - }
|
| - OnLoginFinished();
|
| -}
|
| -
|
| -void BrowserSignin::OnLoginFinished() {
|
| - if (html_dialog_ui_delegate_)
|
| - html_dialog_ui_delegate_->ForceDialogClose();
|
| - // The dialog will be deleted by WebUI due to the dialog close,
|
| - // don't hold a reference.
|
| - html_dialog_ui_delegate_ = NULL;
|
| -
|
| - if (delegate_) {
|
| - UnregisterAuthNotifications();
|
| - delegate_ = NULL;
|
| - }
|
| -}
|
| -
|
| -ProfileSyncService* BrowserSignin::GetProfileSyncService() const {
|
| - return profile_->GetProfileSyncService();
|
| -}
|
| -
|
| -BrowserSigninHtml* BrowserSignin::CreateHtmlDialogUI() {
|
| - return new BrowserSigninHtml(this, suggested_email_, login_message_);
|
| -}
|
| -
|
| -void BrowserSignin::RegisterAuthNotifications() {
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
|
| - Source<Profile>(profile_));
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED,
|
| - Source<Profile>(profile_));
|
| -}
|
| -
|
| -void BrowserSignin::UnregisterAuthNotifications() {
|
| - registrar_.Remove(this,
|
| - chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
|
| - Source<Profile>(profile_));
|
| - registrar_.Remove(this,
|
| - chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED,
|
| - Source<Profile>(profile_));
|
| -}
|
| -
|
| -void BrowserSignin::ShowSigninTabModal(TabContents* tab_contents) {
|
| -// TODO(johnnyg): Need a linux views implementation for ConstrainedHtmlDialog.
|
| -#if defined(OS_WIN) || defined(OS_CHROMEOS) || !defined(TOOLKIT_VIEWS)
|
| - html_dialog_ui_delegate_ = CreateHtmlDialogUI();
|
| - ConstrainedHtmlUI::CreateConstrainedHtmlDialog(profile_,
|
| - html_dialog_ui_delegate_,
|
| - tab_contents);
|
| -#endif
|
| -}
|
|
|