| Index: chrome/browser/ui/sync/one_click_signin_helper.cc
|
| diff --git a/chrome/browser/ui/sync/one_click_signin_helper.cc b/chrome/browser/ui/sync/one_click_signin_helper.cc
|
| index 3534226fdfff5aab43f556cb52e409235631f4aa..ab839b5cc019ce884d9e36f31c29bebe0aa353d3 100644
|
| --- a/chrome/browser/ui/sync/one_click_signin_helper.cc
|
| +++ b/chrome/browser/ui/sync/one_click_signin_helper.cc
|
| @@ -7,10 +7,12 @@
|
| #include "base/bind.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/metrics/histogram.h"
|
| +#include "base/metrics/field_trial.h"
|
| #include "base/string_split.h"
|
| #include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/api/infobars/confirm_infobar_delegate.h"
|
| +#include "chrome/browser/api/infobars/one_click_signin_infobar_delegate.h"
|
| #include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/defaults.h"
|
| #include "chrome/browser/infobars/infobar_tab_helper.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/prefs/scoped_user_pref_update.h"
|
| @@ -26,6 +28,7 @@
|
| #include "chrome/browser/ui/sync/one_click_signin_histogram.h"
|
| #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
|
| #include "chrome/browser/ui/tab_contents/tab_contents.h"
|
| +#include "chrome/common/chrome_version_info.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -45,28 +48,52 @@
|
| #include "webkit/forms/password_form.h"
|
| #include "webkit/forms/password_form_dom_manager.h"
|
|
|
| +namespace {
|
| +
|
| +// Set to true if this chrome instance is in the blue-button-on-white-bar
|
| +// experimental group.
|
| +bool use_blue_on_white = false;
|
| +
|
| +// Start syncing with the given user information.
|
| +void StartSync(content::WebContents* web_contents,
|
| + const std::string& session_index,
|
| + const std::string& email,
|
| + const std::string& password,
|
| + OneClickSigninSyncStarter::StartSyncMode start_mode) {
|
| + // The starter deletes itself once its done.
|
| + Browser* browser = browser::FindBrowserWithWebContents(web_contents);
|
| + new OneClickSigninSyncStarter(browser, session_index, email, password,
|
| + start_mode);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // The infobar asking the user if they want to use one-click sign in.
|
| -class OneClickLoginInfoBarDelegate : public ConfirmInfoBarDelegate {
|
| +class OneClickInfoBarDelegateImpl : public OneClickSigninInfoBarDelegate {
|
| public:
|
| - OneClickLoginInfoBarDelegate(InfoBarTabHelper* owner,
|
| + OneClickInfoBarDelegateImpl(InfoBarTabHelper* owner,
|
| const std::string& session_index,
|
| const std::string& email,
|
| const std::string& password);
|
| - virtual ~OneClickLoginInfoBarDelegate();
|
| + virtual ~OneClickInfoBarDelegateImpl();
|
|
|
| private:
|
| - // ConfirmInfoBarDelegate overrides.
|
| + // InfoBarDelegate overrides.
|
| + virtual InfoBarAutomationType GetInfoBarAutomationType() const OVERRIDE;
|
| virtual void InfoBarDismissed() OVERRIDE;
|
| virtual gfx::Image* GetIcon() const OVERRIDE;
|
| virtual Type GetInfoBarType() const OVERRIDE;
|
| virtual string16 GetMessageText() const OVERRIDE;
|
| +
|
| + // ConfirmInfoBarDelegate overrides.
|
| virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
|
| virtual bool Accept() OVERRIDE;
|
| virtual bool Cancel() OVERRIDE;
|
| virtual string16 GetLinkText() const OVERRIDE;
|
| virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
|
|
|
| - virtual InfoBarAutomationType GetInfoBarAutomationType() const OVERRIDE;
|
| + // OneClickSigninInfoBarDelegate overrides.
|
| + virtual void GetAlternateColors(AlternateColors* alt_colors) OVERRIDE;
|
|
|
| // Set the profile preference to turn off one-click sign in so that it won't
|
| // show again in this profile.
|
| @@ -87,15 +114,15 @@ class OneClickLoginInfoBarDelegate : public ConfirmInfoBarDelegate {
|
| // Whether any UI controls in the infobar were pressed or not.
|
| bool button_pressed_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(OneClickLoginInfoBarDelegate);
|
| + DISALLOW_COPY_AND_ASSIGN(OneClickInfoBarDelegateImpl);
|
| };
|
|
|
| -OneClickLoginInfoBarDelegate::OneClickLoginInfoBarDelegate(
|
| +OneClickInfoBarDelegateImpl::OneClickInfoBarDelegateImpl(
|
| InfoBarTabHelper* owner,
|
| const std::string& session_index,
|
| const std::string& email,
|
| const std::string& password)
|
| - : ConfirmInfoBarDelegate(owner),
|
| + : OneClickSigninInfoBarDelegate(owner),
|
| session_index_(session_index),
|
| email_(email),
|
| password_(password),
|
| @@ -103,53 +130,42 @@ OneClickLoginInfoBarDelegate::OneClickLoginInfoBarDelegate(
|
| RecordHistogramAction(one_click_signin::HISTOGRAM_SHOWN);
|
| }
|
|
|
| -OneClickLoginInfoBarDelegate::~OneClickLoginInfoBarDelegate() {
|
| +OneClickInfoBarDelegateImpl::~OneClickInfoBarDelegateImpl() {
|
| if (!button_pressed_)
|
| RecordHistogramAction(one_click_signin::HISTOGRAM_IGNORED);
|
| }
|
|
|
| -void OneClickLoginInfoBarDelegate::InfoBarDismissed() {
|
| +InfoBarDelegate::InfoBarAutomationType
|
| + OneClickInfoBarDelegateImpl::GetInfoBarAutomationType() const {
|
| + return ONE_CLICK_LOGIN_INFOBAR;
|
| +}
|
| +
|
| +void OneClickInfoBarDelegateImpl::InfoBarDismissed() {
|
| RecordHistogramAction(one_click_signin::HISTOGRAM_DISMISSED);
|
| button_pressed_ = true;
|
| }
|
|
|
| -gfx::Image* OneClickLoginInfoBarDelegate::GetIcon() const {
|
| +gfx::Image* OneClickInfoBarDelegateImpl::GetIcon() const {
|
| return &ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| IDR_INFOBAR_SYNC);
|
| }
|
|
|
| -InfoBarDelegate::Type OneClickLoginInfoBarDelegate::GetInfoBarType() const {
|
| +InfoBarDelegate::Type OneClickInfoBarDelegateImpl::GetInfoBarType() const {
|
| return PAGE_ACTION_TYPE;
|
| }
|
|
|
| -string16 OneClickLoginInfoBarDelegate::GetMessageText() const {
|
| +string16 OneClickInfoBarDelegateImpl::GetMessageText() const {
|
| return l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_INFOBAR_MESSAGE);
|
| }
|
|
|
| -string16 OneClickLoginInfoBarDelegate::GetButtonLabel(
|
| +string16 OneClickInfoBarDelegateImpl::GetButtonLabel(
|
| InfoBarButton button) const {
|
| return l10n_util::GetStringUTF16(
|
| (button == BUTTON_OK) ? IDS_ONE_CLICK_SIGNIN_INFOBAR_OK_BUTTON
|
| : IDS_ONE_CLICK_SIGNIN_INFOBAR_CANCEL_BUTTON);
|
| }
|
|
|
| -namespace {
|
| -
|
| -// Start syncing with the given user information.
|
| -void StartSync(content::WebContents* web_contents,
|
| - const std::string& session_index,
|
| - const std::string& email,
|
| - const std::string& password,
|
| - OneClickSigninSyncStarter::StartSyncMode start_mode) {
|
| - // The starter deletes itself once its done.
|
| - Browser* browser = browser::FindBrowserWithWebContents(web_contents);
|
| - new OneClickSigninSyncStarter(browser, session_index, email, password,
|
| - start_mode);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -bool OneClickLoginInfoBarDelegate::Accept() {
|
| +bool OneClickInfoBarDelegateImpl::Accept() {
|
| // User has accepted one-click sign-in for this account. Never ask again for
|
| // this profile.
|
| DisableOneClickSignIn();
|
| @@ -162,18 +178,18 @@ bool OneClickLoginInfoBarDelegate::Accept() {
|
| return true;
|
| }
|
|
|
| -bool OneClickLoginInfoBarDelegate::Cancel() {
|
| +bool OneClickInfoBarDelegateImpl::Cancel() {
|
| AddEmailToOneClickRejectedList(email_);
|
| RecordHistogramAction(one_click_signin::HISTOGRAM_REJECTED);
|
| button_pressed_ = true;
|
| return true;
|
| }
|
|
|
| -string16 OneClickLoginInfoBarDelegate::GetLinkText() const {
|
| +string16 OneClickInfoBarDelegateImpl::GetLinkText() const {
|
| return l10n_util::GetStringUTF16(IDS_LEARN_MORE);
|
| }
|
|
|
| -bool OneClickLoginInfoBarDelegate::LinkClicked(
|
| +bool OneClickInfoBarDelegateImpl::LinkClicked(
|
| WindowOpenDisposition disposition) {
|
| RecordHistogramAction(one_click_signin::HISTOGRAM_LEARN_MORE);
|
| content::OpenURLParams params(
|
| @@ -183,20 +199,29 @@ bool OneClickLoginInfoBarDelegate::LinkClicked(
|
| return false;
|
| }
|
|
|
| +void OneClickInfoBarDelegateImpl::GetAlternateColors(
|
| + AlternateColors* alt_colors) {
|
| + if (use_blue_on_white) {
|
| + alt_colors->enabled = true;
|
| + alt_colors->infobar_bottom_color = SK_ColorWHITE;
|
| + alt_colors->infobar_top_color = SK_ColorWHITE;
|
| + alt_colors->button_text_color = SK_ColorWHITE;
|
| + alt_colors->button_background_color = SkColorSetRGB(71, 135, 237);
|
| + alt_colors->button_border_color = SkColorSetRGB(48, 121, 237);
|
| + return;
|
| + }
|
|
|
| -InfoBarDelegate::InfoBarAutomationType
|
| - OneClickLoginInfoBarDelegate::GetInfoBarAutomationType() const {
|
| - return ONE_CLICK_LOGIN_INFOBAR;
|
| + return OneClickSigninInfoBarDelegate::GetAlternateColors(alt_colors);
|
| }
|
|
|
| -void OneClickLoginInfoBarDelegate::DisableOneClickSignIn() {
|
| +void OneClickInfoBarDelegateImpl::DisableOneClickSignIn() {
|
| PrefService* pref_service =
|
| TabContents::FromWebContents(owner()->GetWebContents())->
|
| profile()->GetPrefs();
|
| pref_service->SetBoolean(prefs::kReverseAutologinEnabled, false);
|
| }
|
|
|
| -void OneClickLoginInfoBarDelegate::AddEmailToOneClickRejectedList(
|
| +void OneClickInfoBarDelegateImpl::AddEmailToOneClickRejectedList(
|
| const std::string& email) {
|
| PrefService* pref_service =
|
| TabContents::FromWebContents(owner()->GetWebContents())->
|
| @@ -206,11 +231,18 @@ void OneClickLoginInfoBarDelegate::AddEmailToOneClickRejectedList(
|
| updater->AppendIfNotPresent(base::Value::CreateStringValue(email));
|
| }
|
|
|
| -void OneClickLoginInfoBarDelegate::RecordHistogramAction(int action) {
|
| +void OneClickInfoBarDelegateImpl::RecordHistogramAction(int action) {
|
| UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", action,
|
| one_click_signin::HISTOGRAM_MAX);
|
| }
|
|
|
| +OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents)
|
| + : content::WebContentsObserver(web_contents) {
|
| +}
|
| +
|
| +OneClickSigninHelper::~OneClickSigninHelper() {
|
| +}
|
| +
|
| // static
|
| bool OneClickSigninHelper::CanOffer(content::WebContents* web_contents,
|
| const std::string& email,
|
| @@ -281,6 +313,21 @@ bool OneClickSigninHelper::CanOffer(content::WebContents* web_contents,
|
| }
|
|
|
| // static
|
| +void OneClickSigninHelper::InitializeFieldTrial() {
|
| + scoped_refptr<base::FieldTrial> trial(
|
| + base::FieldTrialList::FactoryGetFieldTrial("OneClickSignIn", 100,
|
| + "Standard", 2013, 9, 1, NULL));
|
| +
|
| + // For dev and beta, we'll give half the people the new experience. For
|
| + // stable, only 1%. These numbers are overridable on the server.
|
| + const bool kIsStableChannel =
|
| + chrome::VersionInfo::GetChannel() == chrome::VersionInfo::CHANNEL_STABLE;
|
| + const int kBlueOnWhiteGroup = trial->AppendGroup("BlueOnWhite",
|
| + kIsStableChannel ? 1 : 50);
|
| + use_blue_on_white = trial->group() == kBlueOnWhiteGroup;
|
| +}
|
| +
|
| +// static
|
| void OneClickSigninHelper::ShowInfoBarIfPossible(net::URLRequest* request,
|
| int child_id,
|
| int route_id) {
|
| @@ -315,13 +362,6 @@ void OneClickSigninHelper::ShowInfoBarIfPossible(net::URLRequest* request,
|
| email, child_id, route_id));
|
| }
|
|
|
| -OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents)
|
| - : content::WebContentsObserver(web_contents) {
|
| -}
|
| -
|
| -OneClickSigninHelper::~OneClickSigninHelper() {
|
| -}
|
| -
|
| // static
|
| void OneClickSigninHelper::ShowInfoBarUIThread(
|
| const std::string& session_index,
|
| @@ -365,8 +405,8 @@ void OneClickSigninHelper::DidStopLoading(
|
| TabContents* tab_contents = TabContents::FromWebContents(web_contents());
|
|
|
| tab_contents->infobar_tab_helper()->AddInfoBar(
|
| - new OneClickLoginInfoBarDelegate(tab_contents->infobar_tab_helper(),
|
| - session_index_, email_, password_));
|
| + new OneClickInfoBarDelegateImpl(tab_contents->infobar_tab_helper(),
|
| + session_index_, email_, password_));
|
|
|
| email_.clear();
|
| password_.clear();
|
|
|