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

Unified Diff: chrome/browser/ui/sync/one_click_signin_helper.cc

Issue 10911169: Setup field trial for one-click signin inforbar. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years, 3 months 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/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();
« no previous file with comments | « chrome/browser/ui/sync/one_click_signin_helper.h ('k') | chrome/browser/ui/views/infobars/confirm_infobar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698