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

Side by Side Diff: chrome/browser/ui/sync/one_click_signin_helper.cc

Issue 11494003: Enable "Let me choose what to sync" checkbox in gaia sign in page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased, and adjusted gaia URL Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/sync/one_click_signin_helper.h" 5 #include "chrome/browser/ui/sync/one_click_signin_helper.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/metrics/field_trial.h" 11 #include "base/metrics/field_trial.h"
12 #include "base/string_split.h" 12 #include "base/string_split.h"
13 #include "base/string_util.h"
13 #include "base/supports_user_data.h" 14 #include "base/supports_user_data.h"
14 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/api/infobars/infobar_service.h" 16 #include "chrome/browser/api/infobars/infobar_service.h"
16 #include "chrome/browser/api/infobars/one_click_signin_infobar_delegate.h" 17 #include "chrome/browser/api/infobars/one_click_signin_infobar_delegate.h"
17 #include "chrome/browser/browser_process.h" 18 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/defaults.h" 19 #include "chrome/browser/defaults.h"
20 #include "chrome/browser/google/google_util.h"
19 #include "chrome/browser/prefs/pref_service.h" 21 #include "chrome/browser/prefs/pref_service.h"
20 #include "chrome/browser/prefs/scoped_user_pref_update.h" 22 #include "chrome/browser/prefs/scoped_user_pref_update.h"
21 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
22 #include "chrome/browser/profiles/profile_info_cache.h" 24 #include "chrome/browser/profiles/profile_info_cache.h"
23 #include "chrome/browser/profiles/profile_io_data.h" 25 #include "chrome/browser/profiles/profile_io_data.h"
24 #include "chrome/browser/profiles/profile_manager.h" 26 #include "chrome/browser/profiles/profile_manager.h"
25 #include "chrome/browser/signin/signin_manager.h" 27 #include "chrome/browser/signin/signin_manager.h"
26 #include "chrome/browser/signin/signin_manager_factory.h" 28 #include "chrome/browser/signin/signin_manager_factory.h"
27 #include "chrome/browser/signin/signin_names_io_thread.h" 29 #include "chrome/browser/signin/signin_names_io_thread.h"
28 #include "chrome/browser/sync/profile_sync_service.h" 30 #include "chrome/browser/sync/profile_sync_service.h"
(...skipping 15 matching lines...) Expand all
44 #include "content/public/browser/web_contents_view.h" 46 #include "content/public/browser/web_contents_view.h"
45 #include "content/public/common/frame_navigate_params.h" 47 #include "content/public/common/frame_navigate_params.h"
46 #include "content/public/common/page_transition_types.h" 48 #include "content/public/common/page_transition_types.h"
47 #include "content/public/common/password_form.h" 49 #include "content/public/common/password_form.h"
48 #include "google_apis/gaia/gaia_auth_util.h" 50 #include "google_apis/gaia/gaia_auth_util.h"
49 #include "google_apis/gaia/gaia_urls.h" 51 #include "google_apis/gaia/gaia_urls.h"
50 #include "googleurl/src/gurl.h" 52 #include "googleurl/src/gurl.h"
51 #include "grit/chromium_strings.h" 53 #include "grit/chromium_strings.h"
52 #include "grit/generated_resources.h" 54 #include "grit/generated_resources.h"
53 #include "grit/theme_resources.h" 55 #include "grit/theme_resources.h"
54 #include "net/base/escape.h"
55 #include "net/cookies/cookie_monster.h" 56 #include "net/cookies/cookie_monster.h"
56 #include "net/url_request/url_request.h" 57 #include "net/url_request/url_request.h"
57 #include "ui/base/l10n/l10n_util.h" 58 #include "ui/base/l10n/l10n_util.h"
58 #include "ui/base/resource/resource_bundle.h" 59 #include "ui/base/resource/resource_bundle.h"
59 60
60 #include <functional> 61 #include <functional>
61 62
62 DEFINE_WEB_CONTENTS_USER_DATA_KEY(OneClickSigninHelper) 63 DEFINE_WEB_CONTENTS_USER_DATA_KEY(OneClickSigninHelper)
63 64
64 namespace { 65 namespace {
65 66
66 // Set to true if this chrome instance is in the blue-button-on-white-bar 67 // Set to true if this chrome instance is in the blue-button-on-white-bar
67 // experimental group. 68 // experimental group.
68 bool use_blue_on_white = false; 69 bool use_blue_on_white = false;
69 70
71 // Add a specific email to the list of emails rejected for one-click
72 // sign-in, for this profile.
73 void AddEmailToOneClickRejectedList(Profile* profile,
74 const std::string& email) {
75 PrefService* pref_service = profile->GetPrefs();
76 ListPrefUpdate updater(pref_service,
77 prefs::kReverseAutologinRejectedEmailList);
78 updater->AppendIfNotPresent(new base::StringValue(email));
79 }
80
70 // Start syncing with the given user information. 81 // Start syncing with the given user information.
71 void StartSync(Browser* browser, 82 void StartSync(Browser* browser,
72 OneClickSigninHelper::AutoAccept auto_accept, 83 OneClickSigninHelper::AutoAccept auto_accept,
73 const std::string& session_index, 84 const std::string& session_index,
74 const std::string& email, 85 const std::string& email,
75 const std::string& password, 86 const std::string& password,
76 OneClickSigninSyncStarter::StartSyncMode start_mode) { 87 OneClickSigninSyncStarter::StartSyncMode start_mode) {
77 // The starter deletes itself once its done. 88 // The starter deletes itself once its done.
78 new OneClickSigninSyncStarter(browser, session_index, email, password, 89 new OneClickSigninSyncStarter(browser, session_index, email, password,
79 start_mode); 90 start_mode);
80 91
81 int action = one_click_signin::HISTOGRAM_MAX; 92 int action = one_click_signin::HISTOGRAM_MAX;
82 switch (auto_accept) { 93 switch (auto_accept) {
83 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT: 94 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT:
84 action = one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS; 95 action = one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS;
85 break; 96 break;
86 case OneClickSigninHelper::AUTO_ACCEPT: 97 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED:
87 action = 98 action =
88 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ? 99 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ?
89 one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS : 100 one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS :
90 one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; 101 one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED;
91 break; 102 break;
92 case OneClickSigninHelper::NO_AUTO_ACCEPT: 103 case OneClickSigninHelper::AUTO_ACCEPT_NONE:
93 action = 104 action =
94 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ? 105 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ?
95 one_click_signin::HISTOGRAM_WITH_DEFAULTS : 106 one_click_signin::HISTOGRAM_WITH_DEFAULTS :
96 one_click_signin::HISTOGRAM_WITH_ADVANCED; 107 one_click_signin::HISTOGRAM_WITH_ADVANCED;
97 break; 108 break;
98 case OneClickSigninHelper::AUTO_ACCEPT_CONFIGURE: 109 case OneClickSigninHelper::AUTO_ACCEPT_CONFIGURE:
99 DCHECK(start_mode == OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 110 DCHECK(start_mode == OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
100 action = one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; 111 action = one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED;
101 break; 112 break;
102 default: 113 default:
103 NOTREACHED() << "Invalid auto_accept: " << auto_accept; 114 NOTREACHED() << "Invalid auto_accept: " << auto_accept;
104 break; 115 break;
105 } 116 }
106 117
107 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", action, 118 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", action,
108 one_click_signin::HISTOGRAM_MAX); 119 one_click_signin::HISTOGRAM_MAX);
109 } 120 }
110 121
111 // Determines the source of the sign in. Its either one of the known sign in 122 // Determines the source of the sign in and the continue URL. Its either one
112 // access point (first run, NTP, menu, settings) or its an implicit sign in 123 // of the known sign in access point (first run, NTP, menu, settings) or its
113 // via another Google property. In the former case, "service" is also 124 // an implicit sign in via another Google property. In the former case,
114 // checked to make sure its "chromiumsync". 125 // "service" is also checked to make sure its "chromiumsync".
115 SyncPromoUI::Source GetSigninSource(const GURL& url) { 126 SyncPromoUI::Source GetSigninSource(const GURL& url, GURL* continue_url) {
116 std::string value; 127 std::string value;
117 chrome_common_net::GetValueForKeyInQuery(url, "service", &value); 128 chrome_common_net::GetValueForKeyInQuery(url, "service", &value);
118 bool is_explicit_signin = value == "chromiumsync"; 129 bool possibly_an_explicit_signin = value == "chromiumsync";
119 130
120 chrome_common_net::GetValueForKeyInQuery(url, "continue", &value); 131 // Find the final continue URL for this sign in. In some cases, Gaia can
121 SyncPromoUI::Source source = 132 // continue to itself, with the original continue URL buried under a couple
122 SyncPromoUI::GetSourceForSyncPromoURL(GURL( 133 // of layers of indirection. Peel those layers away.
123 net::UnescapeURLComponent(value, 134 GURL local_continue_url = url;
124 net::UnescapeRule::URL_SPECIAL_CHARS))); 135 do {
136 local_continue_url =
137 SyncPromoUI::GetNextPageURLForSyncPromoURL(local_continue_url);
138 } while (gaia::IsGaiaSignonRealm(local_continue_url.GetOrigin()));
125 139
126 if (!is_explicit_signin) 140 if (continue_url && local_continue_url.is_valid()) {
127 source = SyncPromoUI::SOURCE_UNKNOWN; 141 DCHECK(!continue_url->is_valid() || *continue_url == local_continue_url);
142 *continue_url = local_continue_url;
143 }
128 144
129 return source; 145 return possibly_an_explicit_signin ?
146 SyncPromoUI::GetSourceForSyncPromoURL(local_continue_url) :
147 SyncPromoUI::SOURCE_UNKNOWN;
148 }
149
150 // Returns true if |url| is a valid URL that can occur during the sign in
151 // process. Valid URLs are of the form:
152 //
153 // https://accounts.google.{TLD}/...
154 // https://accounts.youtube.com/...
155 // https://accounts.blogger.com/...
156 //
157 // All special headers used by one click sign in occur on
158 // https://accounts.google.com URLs. However, the sign in process may redirect
159 // to intermediate Gaia URLs that do not end with .com. For example, an account
160 // that uses SMS 2-factor outside the US may redirect to country specific URLs.
161 //
162 // The sign in process may also redirect to youtube and blogger account URLs
163 // so that Gaia acts as a single signon service.
164 bool IsValidGaiaSigninRedirectOrResponseURL(const GURL& url) {
165 std::string hostname = url.host();
166 if (google_util::IsGoogleHostname(hostname, google_util::ALLOW_SUBDOMAIN)) {
167 // Also using IsGaiaSignonRealm() to handle overriding with command line.
168 return gaia::IsGaiaSignonRealm(url.GetOrigin()) ||
169 StartsWithASCII(hostname, "accounts.", false);
170 }
171
172 GURL origin = url.GetOrigin();
173 if (origin == GURL("https://accounts.youtube.com") ||
174 origin == GURL("https://accounts.blogger.com"))
175 return true;
176
177 return false;
130 } 178 }
131 179
132 // This class is associated as user data with a given URLRequest object, in 180 // This class is associated as user data with a given URLRequest object, in
133 // order to pass information from one response to another during the process 181 // order to pass information from one response to another during the process
134 // of signing the user into their Gaia account. This class is only meant 182 // of signing the user into their Gaia account. This class is only meant
135 // to be used from the IO thread. 183 // to be used from the IO thread.
136 class OneClickSigninRequestUserData : public base::SupportsUserData::Data { 184 class OneClickSigninRequestUserData : public base::SupportsUserData::Data {
137 public: 185 public:
138 const std::string& email() const { return email_; } 186 const std::string& email() const { return email_; }
139 187
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 // ConfirmInfoBarDelegate overrides. 249 // ConfirmInfoBarDelegate overrides.
202 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; 250 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
203 virtual bool Accept() OVERRIDE; 251 virtual bool Accept() OVERRIDE;
204 virtual bool Cancel() OVERRIDE; 252 virtual bool Cancel() OVERRIDE;
205 virtual string16 GetLinkText() const OVERRIDE; 253 virtual string16 GetLinkText() const OVERRIDE;
206 virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; 254 virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
207 255
208 // OneClickSigninInfoBarDelegate overrides. 256 // OneClickSigninInfoBarDelegate overrides.
209 virtual void GetAlternateColors(AlternateColors* alt_colors) OVERRIDE; 257 virtual void GetAlternateColors(AlternateColors* alt_colors) OVERRIDE;
210 258
211 // Add a specific email to the list of emails rejected for one-click
212 // sign-in, for this profile.
213 void AddEmailToOneClickRejectedList(const std::string& email);
214
215 // Record the specified action in the histogram for one-click sign in. 259 // Record the specified action in the histogram for one-click sign in.
216 void RecordHistogramAction(int action); 260 void RecordHistogramAction(int action);
217 261
218 // Information about the account that has just logged in. 262 // Information about the account that has just logged in.
219 std::string session_index_; 263 std::string session_index_;
220 std::string email_; 264 std::string email_;
221 std::string password_; 265 std::string password_;
222 266
223 // Whether any UI controls in the infobar were pressed or not. 267 // Whether any UI controls in the infobar were pressed or not.
224 bool button_pressed_; 268 bool button_pressed_;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 } 312 }
269 313
270 string16 OneClickInfoBarDelegateImpl::GetButtonLabel( 314 string16 OneClickInfoBarDelegateImpl::GetButtonLabel(
271 InfoBarButton button) const { 315 InfoBarButton button) const {
272 return l10n_util::GetStringUTF16( 316 return l10n_util::GetStringUTF16(
273 (button == BUTTON_OK) ? IDS_ONE_CLICK_SIGNIN_INFOBAR_OK_BUTTON 317 (button == BUTTON_OK) ? IDS_ONE_CLICK_SIGNIN_INFOBAR_OK_BUTTON
274 : IDS_ONE_CLICK_SIGNIN_INFOBAR_CANCEL_BUTTON); 318 : IDS_ONE_CLICK_SIGNIN_INFOBAR_CANCEL_BUTTON);
275 } 319 }
276 320
277 bool OneClickInfoBarDelegateImpl::Accept() { 321 bool OneClickInfoBarDelegateImpl::Accept() {
322 content::WebContents* web_contents = owner()->GetWebContents();
323 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
324 Profile* profile = Profile::FromBrowserContext(
325 web_contents->GetBrowserContext());
326
278 // User has accepted one-click sign-in for this account. Never ask again for 327 // User has accepted one-click sign-in for this account. Never ask again for
279 // this profile. 328 // this profile.
280 Profile* profile = Profile::FromBrowserContext(
281 owner()->GetWebContents()->GetBrowserContext());
282 SigninManager::DisableOneClickSignIn(profile); 329 SigninManager::DisableOneClickSignIn(profile);
283
284 content::WebContents* web_contents = owner()->GetWebContents();
285 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
286 RecordHistogramAction(one_click_signin::HISTOGRAM_ACCEPTED); 330 RecordHistogramAction(one_click_signin::HISTOGRAM_ACCEPTED);
287 chrome::FindBrowserWithWebContents(web_contents)->window()-> 331 chrome::FindBrowserWithWebContents(web_contents)->window()->
288 ShowOneClickSigninBubble(base::Bind(&StartSync, browser, 332 ShowOneClickSigninBubble(
289 OneClickSigninHelper::NO_AUTO_ACCEPT, 333 base::Bind(&StartSync, browser,
290 session_index_, email_, password_)); 334 OneClickSigninHelper::AUTO_ACCEPT_NONE, session_index_,
335 email_, password_));
291 button_pressed_ = true; 336 button_pressed_ = true;
292 return true; 337 return true;
293 } 338 }
294 339
295 bool OneClickInfoBarDelegateImpl::Cancel() { 340 bool OneClickInfoBarDelegateImpl::Cancel() {
296 AddEmailToOneClickRejectedList(email_); 341 AddEmailToOneClickRejectedList(Profile::FromBrowserContext(
342 owner()->GetWebContents()->GetBrowserContext()), email_);
297 RecordHistogramAction(one_click_signin::HISTOGRAM_REJECTED); 343 RecordHistogramAction(one_click_signin::HISTOGRAM_REJECTED);
298 button_pressed_ = true; 344 button_pressed_ = true;
299 return true; 345 return true;
300 } 346 }
301 347
302 string16 OneClickInfoBarDelegateImpl::GetLinkText() const { 348 string16 OneClickInfoBarDelegateImpl::GetLinkText() const {
303 return l10n_util::GetStringUTF16(IDS_LEARN_MORE); 349 return l10n_util::GetStringUTF16(IDS_LEARN_MORE);
304 } 350 }
305 351
306 bool OneClickInfoBarDelegateImpl::LinkClicked( 352 bool OneClickInfoBarDelegateImpl::LinkClicked(
(...skipping 14 matching lines...) Expand all
321 alt_colors->infobar_top_color = SK_ColorWHITE; 367 alt_colors->infobar_top_color = SK_ColorWHITE;
322 alt_colors->button_text_color = SK_ColorWHITE; 368 alt_colors->button_text_color = SK_ColorWHITE;
323 alt_colors->button_background_color = SkColorSetRGB(71, 135, 237); 369 alt_colors->button_background_color = SkColorSetRGB(71, 135, 237);
324 alt_colors->button_border_color = SkColorSetRGB(48, 121, 237); 370 alt_colors->button_border_color = SkColorSetRGB(48, 121, 237);
325 return; 371 return;
326 } 372 }
327 373
328 return OneClickSigninInfoBarDelegate::GetAlternateColors(alt_colors); 374 return OneClickSigninInfoBarDelegate::GetAlternateColors(alt_colors);
329 } 375 }
330 376
331 void OneClickInfoBarDelegateImpl::AddEmailToOneClickRejectedList(
332 const std::string& email) {
333 Profile* profile = Profile::FromBrowserContext(
334 owner()->GetWebContents()->GetBrowserContext());
335 PrefService* pref_service = profile->GetPrefs();
336 ListPrefUpdate updater(pref_service,
337 prefs::kReverseAutologinRejectedEmailList);
338 updater->AppendIfNotPresent(new base::StringValue(email));
339 }
340
341 void OneClickInfoBarDelegateImpl::RecordHistogramAction(int action) { 377 void OneClickInfoBarDelegateImpl::RecordHistogramAction(int action) {
342 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", action, 378 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", action,
343 one_click_signin::HISTOGRAM_MAX); 379 one_click_signin::HISTOGRAM_MAX);
344 } 380 }
345 381
346 OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents) 382 OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents)
347 : content::WebContentsObserver(web_contents), 383 : content::WebContentsObserver(web_contents),
348 auto_accept_(NO_AUTO_ACCEPT), 384 auto_accept_(AUTO_ACCEPT_NONE),
349 source_(SyncPromoUI::SOURCE_UNKNOWN) { 385 source_(SyncPromoUI::SOURCE_UNKNOWN) {
350 } 386 }
351 387
352 OneClickSigninHelper::~OneClickSigninHelper() { 388 OneClickSigninHelper::~OneClickSigninHelper() {
353 } 389 }
354 390
355 // static 391 // static
356 void OneClickSigninHelper::AssociateWithRequestForTesting( 392 void OneClickSigninHelper::AssociateWithRequestForTesting(
357 base::SupportsUserData* request, 393 base::SupportsUserData* request,
358 const std::string& email) { 394 const std::string& email) {
359 OneClickSigninRequestUserData::AssociateWithRequest(request, email); 395 OneClickSigninRequestUserData::AssociateWithRequest(request, email);
360 } 396 }
361 397
362 // static 398 // static
363 bool OneClickSigninHelper::CanOffer(content::WebContents* web_contents, 399 bool OneClickSigninHelper::CanOffer(content::WebContents* web_contents,
364 CanOfferFor can_offer_for, 400 CanOfferFor can_offer_for,
365 const std::string& email, 401 const std::string& email,
366 int* error_message_id) { 402 int* error_message_id) {
367 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 403 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
404 VLOG(1) << "OneClickSigninHelper::CanOffer";
368 405
369 if (error_message_id) 406 if (error_message_id)
370 *error_message_id = 0; 407 *error_message_id = 0;
371 408
372 if (!web_contents) 409 if (!web_contents)
373 return false; 410 return false;
374 411
375 if (web_contents->GetBrowserContext()->IsOffTheRecord()) 412 if (web_contents->GetBrowserContext()->IsOffTheRecord())
376 return false; 413 return false;
377 414
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 ProfileSyncService* service = 487 ProfileSyncService* service =
451 ProfileSyncServiceFactory::GetForProfile(profile); 488 ProfileSyncServiceFactory::GetForProfile(profile);
452 if (!service) 489 if (!service)
453 return false; 490 return false;
454 491
455 if (service->FirstSetupInProgress()) 492 if (service->FirstSetupInProgress())
456 return false; 493 return false;
457 } 494 }
458 } 495 }
459 496
497 VLOG(1) << "OneClickSigninHelper::CanOffer: yes we can";
460 return true; 498 return true;
461 } 499 }
462 500
463 // static 501 // static
464 OneClickSigninHelper::Offer OneClickSigninHelper::CanOfferOnIOThread( 502 OneClickSigninHelper::Offer OneClickSigninHelper::CanOfferOnIOThread(
465 net::URLRequest* request, 503 net::URLRequest* request,
466 ProfileIOData* io_data) { 504 ProfileIOData* io_data) {
467 return CanOfferOnIOThreadImpl(request->url(), request->referrer(), 505 return CanOfferOnIOThreadImpl(request->url(), request->referrer(),
468 request, io_data); 506 request, io_data);
469 } 507 }
470 508
471 // static 509 // static
472 OneClickSigninHelper::Offer OneClickSigninHelper::CanOfferOnIOThreadImpl( 510 OneClickSigninHelper::Offer OneClickSigninHelper::CanOfferOnIOThreadImpl(
473 const GURL& url, 511 const GURL& url,
474 const std::string& referrer, 512 const std::string& referrer,
475 base::SupportsUserData* request, 513 base::SupportsUserData* request,
476 ProfileIOData* io_data) { 514 ProfileIOData* io_data) {
477 if (!gaia::IsGaiaSignonRealm(url.GetOrigin())) 515 if (!gaia::IsGaiaSignonRealm(url.GetOrigin()))
478 return IGNORE_REQUEST; 516 return IGNORE_REQUEST;
479 517
480 if (!io_data) 518 if (!io_data)
481 return DONT_OFFER; 519 return DONT_OFFER;
482 520
483 if (!SyncPromoUI::UseWebBasedSigninFlow()) 521 if (!SyncPromoUI::UseWebBasedSigninFlow())
484 return DONT_OFFER; 522 return DONT_OFFER;
485 523
486 // Don't offer if the source is known, as that means it's an explicit sign
487 // in request.
488 if (GetSigninSource(url) != SyncPromoUI::SOURCE_UNKNOWN ||
489 GetSigninSource(GURL(referrer)) != SyncPromoUI::SOURCE_UNKNOWN) {
490 return DONT_OFFER;
491 }
492
493 if (!ProfileSyncService::IsSyncEnabled()) 524 if (!ProfileSyncService::IsSyncEnabled())
494 return DONT_OFFER; 525 return DONT_OFFER;
495 526
496 // Check for incognito before other parts of the io_data, since those 527 // Check for incognito before other parts of the io_data, since those
497 // members may not be initalized. 528 // members may not be initalized.
498 if (io_data->is_incognito()) 529 if (io_data->is_incognito())
499 return DONT_OFFER; 530 return DONT_OFFER;
500 531
501 if (!io_data->reverse_autologin_enabled()->GetValue()) 532 if (!io_data->reverse_autologin_enabled()->GetValue())
502 return DONT_OFFER; 533 return DONT_OFFER;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 void OneClickSigninHelper::ShowInfoBarIfPossible(net::URLRequest* request, 591 void OneClickSigninHelper::ShowInfoBarIfPossible(net::URLRequest* request,
561 int child_id, 592 int child_id,
562 int route_id) { 593 int route_id) {
563 std::string google_chrome_signin_value; 594 std::string google_chrome_signin_value;
564 std::string google_accounts_signin_value; 595 std::string google_accounts_signin_value;
565 request->GetResponseHeaderByName("Google-Chrome-SignIn", 596 request->GetResponseHeaderByName("Google-Chrome-SignIn",
566 &google_chrome_signin_value); 597 &google_chrome_signin_value);
567 request->GetResponseHeaderByName("Google-Accounts-SignIn", 598 request->GetResponseHeaderByName("Google-Accounts-SignIn",
568 &google_accounts_signin_value); 599 &google_accounts_signin_value);
569 600
570 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:" 601 if (!google_accounts_signin_value.empty() ||
571 << " g-a-s='" << google_accounts_signin_value << "'" 602 !google_chrome_signin_value.empty()) {
572 << " g-c-s='" << google_chrome_signin_value << "'"; 603 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:"
604 << " g-a-s='" << google_accounts_signin_value << "'"
605 << " g-c-s='" << google_chrome_signin_value << "'";
606 }
573 607
574 if (!SyncPromoUI::UseWebBasedSigninFlow() && 608 if (!SyncPromoUI::UseWebBasedSigninFlow() &&
575 google_accounts_signin_value.empty()) { 609 google_accounts_signin_value.empty()) {
576 return; 610 return;
577 } 611 }
578 612
579 if (!gaia::IsGaiaSignonRealm(request->original_url().GetOrigin())) 613 if (!gaia::IsGaiaSignonRealm(request->original_url().GetOrigin()))
580 return; 614 return;
581 615
582 // Parse Google-Accounts-SignIn. 616 // Parse Google-Accounts-SignIn.
(...skipping 12 matching lines...) Expand all
595 session_index = value; 629 session_index = value;
596 } 630 }
597 } 631 }
598 632
599 // Later in the chain of this request, we'll need to check the email address 633 // Later in the chain of this request, we'll need to check the email address
600 // in the IO thread (see CanOfferOnIOThread). So save the email address as 634 // in the IO thread (see CanOfferOnIOThread). So save the email address as
601 // user data on the request (only for web-based flow). 635 // user data on the request (only for web-based flow).
602 if (SyncPromoUI::UseWebBasedSigninFlow() && !email.empty()) 636 if (SyncPromoUI::UseWebBasedSigninFlow() && !email.empty())
603 OneClickSigninRequestUserData::AssociateWithRequest(request, email); 637 OneClickSigninRequestUserData::AssociateWithRequest(request, email);
604 638
605 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:" 639 if (!email.empty() || !session_index.empty()) {
606 << " email=" << email 640 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:"
607 << " sessionindex=" << session_index; 641 << " email=" << email
642 << " sessionindex=" << session_index;
643 }
608 644
609 // Parse Google-Chrome-SignIn. 645 // Parse Google-Chrome-SignIn.
610 AutoAccept auto_accept = NO_AUTO_ACCEPT; 646 AutoAccept auto_accept = AUTO_ACCEPT_NONE;
611 SyncPromoUI::Source source = SyncPromoUI::SOURCE_UNKNOWN; 647 SyncPromoUI::Source source = SyncPromoUI::SOURCE_UNKNOWN;
648 GURL continue_url;
612 if (SyncPromoUI::UseWebBasedSigninFlow()) { 649 if (SyncPromoUI::UseWebBasedSigninFlow()) {
613 std::vector<std::string> tokens; 650 std::vector<std::string> tokens;
614 base::SplitString(google_chrome_signin_value, ',', &tokens); 651 base::SplitString(google_chrome_signin_value, ',', &tokens);
615 for (size_t i = 0; i < tokens.size(); ++i) { 652 for (size_t i = 0; i < tokens.size(); ++i) {
616 const std::string& token = tokens[i]; 653 const std::string& token = tokens[i];
617 if (token == "accepted") { 654 if (token == "accepted") {
618 auto_accept = AUTO_ACCEPT; 655 auto_accept = AUTO_ACCEPT_ACCEPTED;
619 } else if (token == "configure") { 656 } else if (token == "configure") {
620 auto_accept = AUTO_ACCEPT_CONFIGURE; 657 auto_accept = AUTO_ACCEPT_CONFIGURE;
621 } else if (token == "rejected-for-profile") { 658 } else if (token == "rejected-for-profile") {
622 auto_accept = REJECTED_FOR_PROFILE; 659 auto_accept = AUTO_ACCEPT_REJECTED_FOR_PROFILE;
623 } 660 }
624 } 661 }
625 662
626 // If this is an explicit sign in (i.e., first run, NTP, menu,settings) 663 // If this is an explicit sign in (i.e., first run, NTP, menu,settings)
627 // then force the auto accept type to explicit. 664 // then force the auto accept type to explicit.
628 source = GetSigninSource(request->original_url()); 665 source = GetSigninSource(request->original_url(), &continue_url);
629 if (source == SyncPromoUI::SOURCE_UNKNOWN)
630 source = GetSigninSource(GURL(request->referrer()));
631
632 if (source != SyncPromoUI::SOURCE_UNKNOWN) 666 if (source != SyncPromoUI::SOURCE_UNKNOWN)
633 auto_accept = AUTO_ACCEPT_EXPLICIT; 667 auto_accept = AUTO_ACCEPT_EXPLICIT;
634 } 668 }
635 669
636 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:" 670 if (auto_accept != AUTO_ACCEPT_NONE) {
637 << " auto_accept=" << auto_accept; 671 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:"
672 << " auto_accept=" << auto_accept;
673 }
638 674
639 // If |session_index|, |email|, and |auto_accept| all have their default 675 // If |session_index|, |email|, |auto_accept|, and |continue_url| all have
640 // value, don't bother posting a task to the UI thread. It will be a noop 676 // their default value, don't bother posting a task to the UI thread.
641 // anyway. 677 // It will be a noop anyway.
642 // 678 //
643 // The two headers above may (but not always) come in different http requests 679 // The two headers above may (but not always) come in different http requests
644 // so a post to the UI thread is still needed if |auto_accept| is not its 680 // so a post to the UI thread is still needed if |auto_accept| is not its
645 // default value, but |email| and |session_index| are. 681 // default value, but |email| and |session_index| are.
646 if (session_index.empty() && email.empty() && auto_accept == NO_AUTO_ACCEPT) 682 if (session_index.empty() && email.empty() &&
683 auto_accept == AUTO_ACCEPT_NONE && !continue_url.is_valid()) {
647 return; 684 return;
685 }
648 686
649 content::BrowserThread::PostTask( 687 content::BrowserThread::PostTask(
650 content::BrowserThread::UI, FROM_HERE, 688 content::BrowserThread::UI, FROM_HERE,
651 base::Bind(&OneClickSigninHelper::ShowInfoBarUIThread, session_index, 689 base::Bind(&OneClickSigninHelper::ShowInfoBarUIThread, session_index,
652 email, auto_accept, source, child_id, route_id)); 690 email, auto_accept, source, continue_url, child_id, route_id));
653 } 691 }
654 692
655 // static 693 // static
656 void OneClickSigninHelper::ShowInfoBarUIThread( 694 void OneClickSigninHelper::ShowInfoBarUIThread(
657 const std::string& session_index, 695 const std::string& session_index,
658 const std::string& email, 696 const std::string& email,
659 AutoAccept auto_accept, 697 AutoAccept auto_accept,
660 SyncPromoUI::Source source, 698 SyncPromoUI::Source source,
699 const GURL& continue_url,
661 int child_id, 700 int child_id,
662 int route_id) { 701 int route_id) {
663 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 702 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
664 703
665 content::WebContents* web_contents = tab_util::GetWebContentsByID(child_id, 704 content::WebContents* web_contents = tab_util::GetWebContentsByID(child_id,
666 route_id); 705 route_id);
667 706
668 // TODO(mathp): The appearance of this infobar should be tested using a 707 // TODO(mathp): The appearance of this infobar should be tested using a
669 // browser_test. 708 // browser_test.
670 OneClickSigninHelper* helper = 709 OneClickSigninHelper* helper =
(...skipping 19 matching lines...) Expand all
690 729
691 // Save the email in the one-click signin manager. The manager may 730 // Save the email in the one-click signin manager. The manager may
692 // not exist if the contents is incognito or if the profile is already 731 // not exist if the contents is incognito or if the profile is already
693 // connected to a Google account. 732 // connected to a Google account.
694 if (!session_index.empty()) 733 if (!session_index.empty())
695 helper->session_index_ = session_index; 734 helper->session_index_ = session_index;
696 735
697 if (!email.empty()) 736 if (!email.empty())
698 helper->email_ = email; 737 helper->email_ = email;
699 738
700 if (auto_accept != NO_AUTO_ACCEPT) { 739 if (auto_accept != AUTO_ACCEPT_NONE) {
701 helper->auto_accept_ = auto_accept; 740 helper->auto_accept_ = auto_accept;
702 helper->source_ = source; 741 helper->source_ = source;
703 } 742 }
743
744 if (continue_url.is_valid()) {
745 // When Gaia finally redirects to the continue URL, Gaia will add some
746 // extra query parameters. So ignore the parameters when checking to see
747 // if the user has continued.
748 GURL::Replacements replacements;
749 replacements.ClearQuery();
750 helper->continue_url_ = continue_url.ReplaceComponents(replacements);
751 }
704 } 752 }
705 753
706 void OneClickSigninHelper::RedirectToNTP() { 754 void OneClickSigninHelper::RedirectToNTP() {
755 VLOG(1) << "OneClickSigninHelper::RedirectToNTP";
756
707 // Redirect to NTP with sign in bubble visible. 757 // Redirect to NTP with sign in bubble visible.
708 content::WebContents* contents = web_contents(); 758 content::WebContents* contents = web_contents();
709 Profile* profile = 759 Profile* profile =
710 Profile::FromBrowserContext(contents->GetBrowserContext()); 760 Profile::FromBrowserContext(contents->GetBrowserContext());
711 PrefService* pref_service = profile->GetPrefs(); 761 PrefService* pref_service = profile->GetPrefs();
712 pref_service->SetBoolean(prefs::kSyncPromoShowNTPBubble, true); 762 pref_service->SetBoolean(prefs::kSyncPromoShowNTPBubble, true);
713 pref_service->SetString(prefs::kSyncPromoErrorMessage, error_message_); 763 pref_service->SetString(prefs::kSyncPromoErrorMessage, error_message_);
714 764
715 contents->GetController().LoadURL(GURL(chrome::kChromeUINewTabURL), 765 contents->GetController().LoadURL(GURL(chrome::kChromeUINewTabURL),
716 content::Referrer(), 766 content::Referrer(),
717 content::PAGE_TRANSITION_AUTO_TOPLEVEL, 767 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
718 std::string()); 768 std::string());
719 769
720 error_message_.clear(); 770 error_message_.clear();
721 signin_tracker_.reset(); 771 signin_tracker_.reset();
722 } 772 }
723 773
724 void OneClickSigninHelper::CleanTransientState() { 774 void OneClickSigninHelper::CleanTransientState() {
775 VLOG(1) << "OneClickSigninHelper::CleanTransientState";
725 email_.clear(); 776 email_.clear();
726 password_.clear(); 777 password_.clear();
727 auto_accept_ = NO_AUTO_ACCEPT; 778 auto_accept_ = AUTO_ACCEPT_NONE;
728 source_ = SyncPromoUI::SOURCE_UNKNOWN; 779 source_ = SyncPromoUI::SOURCE_UNKNOWN;
780 continue_url_ = GURL();
729 } 781 }
730 782
731 void OneClickSigninHelper::DidNavigateAnyFrame( 783 void OneClickSigninHelper::DidNavigateAnyFrame(
732 const content::LoadCommittedDetails& details, 784 const content::LoadCommittedDetails& details,
733 const content::FrameNavigateParams& params) { 785 const content::FrameNavigateParams& params) {
734 // We only need to scrape the password for Gaia logins. 786 // We only need to scrape the password for Gaia logins.
735 const content::PasswordForm& form = params.password_form; 787 const content::PasswordForm& form = params.password_form;
736 if (form.origin.is_valid() && 788 if (form.origin.is_valid() &&
737 gaia::IsGaiaSignonRealm(GURL(form.signon_realm))) { 789 gaia::IsGaiaSignonRealm(GURL(form.signon_realm))) {
738 VLOG(1) << "OneClickSigninHelper::DidNavigateAnyFrame: got password"; 790 VLOG(1) << "OneClickSigninHelper::DidNavigateAnyFrame: got password";
739 password_ = UTF16ToUTF8(params.password_form.password_value); 791 password_ = UTF16ToUTF8(params.password_form.password_value);
740 } 792 }
741 } 793 }
742 794
743 void OneClickSigninHelper::DidStopLoading( 795 void OneClickSigninHelper::DidStopLoading(
744 content::RenderViewHost* render_view_host) { 796 content::RenderViewHost* render_view_host) {
745 // If the user left the sign in process, clear all members. 797 // If the user left the sign in process, clear all members.
746 // TODO(rogerta): might need to allow some youtube URLs. 798 // TODO(rogerta): might need to allow some youtube URLs.
747 content::WebContents* contents = web_contents(); 799 content::WebContents* contents = web_contents();
800 const GURL url = contents->GetURL();
801 VLOG(1) << "OneClickSigninHelper::DidStopLoading: url=" << url.spec();
748 802
749 // If an error has already occured during the sign in flow, make sure to 803 // If an error has already occured during the sign in flow, make sure to
750 // display it to the user and abort the process. Do this only for 804 // display it to the user and abort the process. Do this only for
751 // explicit sign ins. 805 // explicit sign ins.
752 if (!error_message_.empty() && auto_accept_ == AUTO_ACCEPT_EXPLICIT) { 806 if (!error_message_.empty() && auto_accept_ == AUTO_ACCEPT_EXPLICIT) {
753 VLOG(1) << "OneClickSigninHelper::DidStopLoading: error=" << error_message_; 807 VLOG(1) << "OneClickSigninHelper::DidStopLoading: error=" << error_message_;
754 RedirectToNTP(); 808 RedirectToNTP();
755 return; 809 return;
756 } 810 }
757 811
758 // If there is no valid email or password yet, there is nothing to do. 812 // If there is no valid email or password yet, there is nothing to do.
759 if (email_.empty() || password_.empty()) 813 if (email_.empty() || password_.empty())
760 return; 814 return;
761 815
816 // When the user use the firt-run, ntp, or hotdog menu to sign in, then have
817 // the option of checking the the box "Let me choose what to sync". When the
818 // sign in process started, the source parameter in the continue URL may have
819 // indicated one of the three options above. However, once this box is
820 // checked, the source parameter will indicate settings. This will only be
821 // comminucated back to chrome when Gaia redirects to the continue URL, and
822 // this is considered here a last minute change to the source. See a little
823 // further below for when this variable is set to true.
824 bool last_minute_source_change = false;
825
826 if (SyncPromoUI::UseWebBasedSigninFlow()) {
827 if (IsValidGaiaSigninRedirectOrResponseURL(url))
828 return;
829
830 // During an explicit sign in, if the user has not yet reached the final
831 // continue URL, wait for it to arrive. Note that Gaia will add some extra
832 // query parameters to the continue URL. Ignore them when checking to
833 // see if the user has continued.
834 //
835 // If this is not an explicit sign in, we don't need to check if we landed
836 // on the right continue URL. This is important because the continue URL
837 // may itself lead to a redirect, which means this function will never see
838 // the continue URL go by.
839 if (auto_accept_ == AUTO_ACCEPT_EXPLICIT) {
840 DCHECK(source_ != SyncPromoUI::SOURCE_UNKNOWN);
841 GURL::Replacements replacements;
842 replacements.ClearQuery();
843 const bool continue_url_match =
844 url.ReplaceComponents(replacements) == continue_url_;
845 if (!continue_url_match) {
846 VLOG(1) << "OneClickSigninHelper::DidStopLoading: invalid url='"
847 << url.spec()
848 << "' expected continue url=" << continue_url_;
849 CleanTransientState();
850 return;
851 }
852
853 // In explicit sign ins, the user may have checked the box
854 // "Let me choose what to sync". This is reflected as a change in the
855 // source of the continue URL. Make one last check of the current URL
856 // to see if there is a valid source and its set to settings. If so,
857 // it overrides the current source.
858 SyncPromoUI::Source source =
859 SyncPromoUI::GetSourceForSyncPromoURL(url);
860 if (source == SyncPromoUI::SOURCE_SETTINGS) {
861 source_ = SyncPromoUI::SOURCE_SETTINGS;
862 last_minute_source_change = true;
863 }
864 }
865 }
866
762 Browser* browser = chrome::FindBrowserWithWebContents(contents); 867 Browser* browser = chrome::FindBrowserWithWebContents(contents);
763 InfoBarService* infobar_service = 868 Profile* profile =
869 Profile::FromBrowserContext(contents->GetBrowserContext());
870 InfoBarService* infobar_tab_helper =
764 InfoBarService::FromWebContents(contents); 871 InfoBarService::FromWebContents(contents);
765 872
873 VLOG(1) << "OneClickSigninHelper::DidStopLoading: signin is go."
874 << " auto_accept=" << auto_accept_
875 << " source=" << source_;
876
766 switch (auto_accept_) { 877 switch (auto_accept_) {
767 case AUTO_ACCEPT: 878 case AUTO_ACCEPT_NONE:
879 if (SyncPromoUI::UseWebBasedSigninFlow()) {
880 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse",
881 one_click_signin::HISTOGRAM_DISMISSED,
882 one_click_signin::HISTOGRAM_MAX);
883 } else {
884 infobar_tab_helper->AddInfoBar(
885 new OneClickInfoBarDelegateImpl(infobar_tab_helper, session_index_,
886 email_, password_));
887 }
888 break;
889 case AUTO_ACCEPT_ACCEPTED:
890 SigninManager::DisableOneClickSignIn(profile);
768 browser->window()->ShowOneClickSigninBubble( 891 browser->window()->ShowOneClickSigninBubble(
769 base::Bind(&StartSync, browser, auto_accept_, session_index_, 892 base::Bind(&StartSync, browser, auto_accept_, session_index_,
770 email_, password_)); 893 email_, password_));
771 break; 894 break;
772 case NO_AUTO_ACCEPT:
773 infobar_service->AddInfoBar(
774 new OneClickInfoBarDelegateImpl(infobar_service, session_index_,
775 email_, password_));
776 break;
777 case AUTO_ACCEPT_CONFIGURE: 895 case AUTO_ACCEPT_CONFIGURE:
896 SigninManager::DisableOneClickSignIn(profile);
778 StartSync(browser, auto_accept_, session_index_, email_, password_, 897 StartSync(browser, auto_accept_, session_index_, email_, password_,
779 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 898 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
780 break; 899 break;
781 case AUTO_ACCEPT_EXPLICIT: 900 case AUTO_ACCEPT_EXPLICIT:
782 StartSync(browser, auto_accept_, session_index_, email_, password_, 901 StartSync(browser, auto_accept_, session_index_, email_, password_,
783 source_ == SyncPromoUI::SOURCE_SETTINGS ? 902 source_ == SyncPromoUI::SOURCE_SETTINGS ?
784 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : 903 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST :
785 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); 904 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
905
906 // If this was a last minute switch to the settings page, this means the
907 // started with first-run/NTP/wrench menu, and checked the "configure
908 // first" checkbox. Replace the default blank continue page with an
909 // about:blank page, so that when the settings page is displayed, it
910 // reuses the tab.
911 if (last_minute_source_change) {
912 contents->GetController().LoadURL(
913 GURL("about:blank"), content::Referrer(),
914 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string());
915 }
786 break; 916 break;
787 case REJECTED_FOR_PROFILE: 917 case AUTO_ACCEPT_REJECTED_FOR_PROFILE:
918 AddEmailToOneClickRejectedList(profile, email_);
788 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", 919 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse",
789 one_click_signin::HISTOGRAM_REJECTED, 920 one_click_signin::HISTOGRAM_REJECTED,
790 one_click_signin::HISTOGRAM_MAX); 921 one_click_signin::HISTOGRAM_MAX);
791 break; 922 break;
792 default: 923 default:
793 NOTREACHED() << "Invalid auto_accept=" << auto_accept_; 924 NOTREACHED() << "Invalid auto_accept=" << auto_accept_;
794 break; 925 break;
795 } 926 }
796 927
797 // If this explicit sign in is not from settings page, show the NTP after 928 // If this explicit sign in is not from settings page, show the NTP after
798 // sign in completes. In the case of the settings page, it will get closed 929 // sign in completes. In the case of the settings page, it will get closed
799 // by SyncSetupHandler. 930 // by SyncSetupHandler.
800 if (auto_accept_ == AUTO_ACCEPT_EXPLICIT && 931 if (auto_accept_ == AUTO_ACCEPT_EXPLICIT &&
801 source_ != SyncPromoUI::SOURCE_SETTINGS) { 932 source_ != SyncPromoUI::SOURCE_SETTINGS) {
802 Profile* profile =
803 Profile::FromBrowserContext(contents->GetBrowserContext());
804 signin_tracker_.reset(new SigninTracker(profile, this)); 933 signin_tracker_.reset(new SigninTracker(profile, this));
805 } 934 }
806 935
807 CleanTransientState(); 936 CleanTransientState();
808 } 937 }
809 938
810 void OneClickSigninHelper::GaiaCredentialsValid() { 939 void OneClickSigninHelper::GaiaCredentialsValid() {
811 } 940 }
812 941
813 void OneClickSigninHelper::SigninFailed(const GoogleServiceAuthError& error) { 942 void OneClickSigninHelper::SigninFailed(const GoogleServiceAuthError& error) {
(...skipping 13 matching lines...) Expand all
827 break; 956 break;
828 } 957 }
829 } 958 }
830 959
831 RedirectToNTP(); 960 RedirectToNTP();
832 } 961 }
833 962
834 void OneClickSigninHelper::SigninSuccess() { 963 void OneClickSigninHelper::SigninSuccess() {
835 RedirectToNTP(); 964 RedirectToNTP();
836 } 965 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/sync/one_click_signin_helper.h ('k') | chrome/browser/ui/sync/one_click_signin_helper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698