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

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

Issue 777143003: Clean up straggler classes to use embedded signin in page in the new profiles world. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 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
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 <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 30 matching lines...) Expand all
41 #include "chrome/browser/signin/signin_manager_factory.h" 41 #include "chrome/browser/signin/signin_manager_factory.h"
42 #include "chrome/browser/signin/signin_names_io_thread.h" 42 #include "chrome/browser/signin/signin_names_io_thread.h"
43 #include "chrome/browser/sync/profile_sync_service.h" 43 #include "chrome/browser/sync/profile_sync_service.h"
44 #include "chrome/browser/sync/profile_sync_service_factory.h" 44 #include "chrome/browser/sync/profile_sync_service_factory.h"
45 #include "chrome/browser/tab_contents/tab_util.h" 45 #include "chrome/browser/tab_contents/tab_util.h"
46 #include "chrome/browser/ui/browser_finder.h" 46 #include "chrome/browser/ui/browser_finder.h"
47 #include "chrome/browser/ui/browser_list.h" 47 #include "chrome/browser/ui/browser_list.h"
48 #include "chrome/browser/ui/browser_tabstrip.h" 48 #include "chrome/browser/ui/browser_tabstrip.h"
49 #include "chrome/browser/ui/browser_window.h" 49 #include "chrome/browser/ui/browser_window.h"
50 #include "chrome/browser/ui/chrome_pages.h" 50 #include "chrome/browser/ui/chrome_pages.h"
51 #include "chrome/browser/ui/sync/one_click_signin_histogram.h"
52 #include "chrome/browser/ui/sync/one_click_signin_sync_observer.h" 51 #include "chrome/browser/ui/sync/one_click_signin_sync_observer.h"
53 #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h" 52 #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
54 #include "chrome/browser/ui/sync/signin_histogram.h"
55 #include "chrome/browser/ui/tab_modal_confirm_dialog.h" 53 #include "chrome/browser/ui/tab_modal_confirm_dialog.h"
56 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" 54 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h"
57 #include "chrome/browser/ui/tabs/tab_strip_model.h" 55 #include "chrome/browser/ui/tabs/tab_strip_model.h"
58 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 56 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
59 #include "chrome/common/chrome_version_info.h" 57 #include "chrome/common/chrome_version_info.h"
60 #include "chrome/common/net/url_util.h" 58 #include "chrome/common/net/url_util.h"
61 #include "chrome/common/pref_names.h" 59 #include "chrome/common/pref_names.h"
62 #include "chrome/common/url_constants.h" 60 #include "chrome/common/url_constants.h"
63 #include "chrome/grit/chromium_strings.h" 61 #include "chrome/grit/chromium_strings.h"
64 #include "chrome/grit/generated_resources.h" 62 #include "chrome/grit/generated_resources.h"
65 #include "components/autofill/core/common/password_form.h" 63 #include "components/autofill/core/common/password_form.h"
66 #include "components/google/core/browser/google_util.h" 64 #include "components/google/core/browser/google_util.h"
67 #include "components/password_manager/core/browser/password_manager.h" 65 #include "components/password_manager/core/browser/password_manager.h"
68 #include "components/signin/core/browser/profile_oauth2_token_service.h" 66 #include "components/signin/core/browser/profile_oauth2_token_service.h"
69 #include "components/signin/core/browser/signin_client.h" 67 #include "components/signin/core/browser/signin_client.h"
70 #include "components/signin/core/browser/signin_error_controller.h" 68 #include "components/signin/core/browser/signin_error_controller.h"
71 #include "components/signin/core/browser/signin_manager.h" 69 #include "components/signin/core/browser/signin_manager.h"
72 #include "components/signin/core/browser/signin_manager_cookie_helper.h" 70 #include "components/signin/core/browser/signin_manager_cookie_helper.h"
71 #include "components/signin/core/browser/signin_metrics.h"
73 #include "components/signin/core/common/profile_management_switches.h" 72 #include "components/signin/core/common/profile_management_switches.h"
74 #include "components/sync_driver/sync_prefs.h" 73 #include "components/sync_driver/sync_prefs.h"
75 #include "content/public/browser/browser_thread.h" 74 #include "content/public/browser/browser_thread.h"
76 #include "content/public/browser/navigation_entry.h" 75 #include "content/public/browser/navigation_entry.h"
77 #include "content/public/browser/page_navigator.h" 76 #include "content/public/browser/page_navigator.h"
78 #include "content/public/browser/render_frame_host.h" 77 #include "content/public/browser/render_frame_host.h"
79 #include "content/public/browser/render_process_host.h" 78 #include "content/public/browser/render_process_host.h"
80 #include "content/public/browser/web_contents.h" 79 #include "content/public/browser/web_contents.h"
81 #include "content/public/browser/web_contents_delegate.h" 80 #include "content/public/browser/web_contents_delegate.h"
82 #include "content/public/common/frame_navigate_params.h" 81 #include "content/public/common/frame_navigate_params.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 222
224 // Add a specific email to the list of emails rejected for one-click 223 // Add a specific email to the list of emails rejected for one-click
225 // sign-in, for this profile. 224 // sign-in, for this profile.
226 void AddEmailToOneClickRejectedList(Profile* profile, 225 void AddEmailToOneClickRejectedList(Profile* profile,
227 const std::string& email) { 226 const std::string& email) {
228 ListPrefUpdate updater(profile->GetPrefs(), 227 ListPrefUpdate updater(profile->GetPrefs(),
229 prefs::kReverseAutologinRejectedEmailList); 228 prefs::kReverseAutologinRejectedEmailList);
230 updater->AppendIfNotPresent(new base::StringValue(email)); 229 updater->AppendIfNotPresent(new base::StringValue(email));
231 } 230 }
232 231
233 void LogOneClickHistogramValue(int action) {
234 UMA_HISTOGRAM_ENUMERATION("Signin.OneClickActions", action,
235 one_click_signin::HISTOGRAM_MAX);
236 UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action,
237 one_click_signin::HISTOGRAM_MAX);
238 }
239
240 void RedirectToNtpOrAppsPageWithIds(int child_id, 232 void RedirectToNtpOrAppsPageWithIds(int child_id,
241 int route_id, 233 int route_id,
242 signin::Source source) { 234 signin_metrics::Source source) {
243 content::WebContents* web_contents = tab_util::GetWebContentsByID(child_id, 235 content::WebContents* web_contents = tab_util::GetWebContentsByID(child_id,
244 route_id); 236 route_id);
245 if (!web_contents) 237 if (!web_contents)
246 return; 238 return;
247 239
248 OneClickSigninHelper::RedirectToNtpOrAppsPage(web_contents, source); 240 OneClickSigninHelper::RedirectToNtpOrAppsPage(web_contents, source);
249 } 241 }
250 242
251 // Start syncing with the given user information. 243 // Start syncing with the given user information.
252 void StartSync(const OneClickSigninHelper::StartSyncArgs& args, 244 void StartSync(const OneClickSigninHelper::StartSyncArgs& args,
253 OneClickSigninSyncStarter::StartSyncMode start_mode) { 245 OneClickSigninSyncStarter::StartSyncMode start_mode) {
254 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) { 246 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) {
255 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO); 247 OneClickSigninHelper::LogHistogramValue(signin_metrics::HISTOGRAM_UNDO);
256 return; 248 return;
257 } 249 }
258 250
259 // The wrapper deletes itself once it's done. 251 // The wrapper deletes itself once it's done.
260 OneClickSigninHelper::SyncStarterWrapper* wrapper = 252 OneClickSigninHelper::SyncStarterWrapper* wrapper =
261 new OneClickSigninHelper::SyncStarterWrapper(args, start_mode); 253 new OneClickSigninHelper::SyncStarterWrapper(args, start_mode);
262 wrapper->Start(); 254 wrapper->Start();
263 255
264 int action = one_click_signin::HISTOGRAM_MAX; 256 int action = signin_metrics::HISTOGRAM_MAX;
265 switch (args.auto_accept) { 257 switch (args.auto_accept) {
266 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT: 258 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT:
267 break; 259 break;
268 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED: 260 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED:
269 action = 261 action =
270 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ? 262 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ?
271 one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS : 263 signin_metrics::HISTOGRAM_AUTO_WITH_DEFAULTS :
272 one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; 264 signin_metrics::HISTOGRAM_AUTO_WITH_ADVANCED;
273 break; 265 break;
274 case OneClickSigninHelper::AUTO_ACCEPT_CONFIGURE: 266 case OneClickSigninHelper::AUTO_ACCEPT_CONFIGURE:
275 DCHECK(start_mode == OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 267 DCHECK(start_mode == OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
276 action = one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; 268 action = signin_metrics::HISTOGRAM_AUTO_WITH_ADVANCED;
277 break; 269 break;
278 default: 270 default:
279 NOTREACHED() << "Invalid auto_accept: " << args.auto_accept; 271 NOTREACHED() << "Invalid auto_accept: " << args.auto_accept;
280 break; 272 break;
281 } 273 }
282 if (action != one_click_signin::HISTOGRAM_MAX) 274 if (action != signin_metrics::HISTOGRAM_MAX)
283 LogOneClickHistogramValue(action); 275 OneClickSigninHelper::LogHistogramValue(action);
284 } 276 }
285 277
286 void StartExplicitSync(const OneClickSigninHelper::StartSyncArgs& args, 278 void StartExplicitSync(const OneClickSigninHelper::StartSyncArgs& args,
287 content::WebContents* contents, 279 content::WebContents* contents,
288 OneClickSigninSyncStarter::StartSyncMode start_mode, 280 OneClickSigninSyncStarter::StartSyncMode start_mode,
289 ConfirmEmailDialogDelegate::Action action) { 281 ConfirmEmailDialogDelegate::Action action) {
290 bool enable_inline = !switches::IsEnableWebBasedSignin(); 282 bool enable_inline = !switches::IsEnableWebBasedSignin();
291 if (action == ConfirmEmailDialogDelegate::START_SYNC) { 283 if (action == ConfirmEmailDialogDelegate::START_SYNC) {
292 StartSync(args, start_mode); 284 StartSync(args, start_mode);
293 if (!enable_inline) { 285 if (!enable_inline) {
(...skipping 30 matching lines...) Expand all
324 void ClearPendingEmailOnIOThread(content::ResourceContext* context) { 316 void ClearPendingEmailOnIOThread(content::ResourceContext* context) {
325 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 317 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context);
326 DCHECK(io_data); 318 DCHECK(io_data);
327 io_data->set_reverse_autologin_pending_email(std::string()); 319 io_data->set_reverse_autologin_pending_email(std::string());
328 } 320 }
329 321
330 // Determines the source of the sign in and the continue URL. It's either one 322 // Determines the source of the sign in and the continue URL. It's either one
331 // of the known sign-in access points (first run, NTP, Apps page, menu, or 323 // of the known sign-in access points (first run, NTP, Apps page, menu, or
332 // settings) or it's an implicit sign in via another Google property. In the 324 // settings) or it's an implicit sign in via another Google property. In the
333 // former case, "service" is also checked to make sure its "chromiumsync". 325 // former case, "service" is also checked to make sure its "chromiumsync".
334 signin::Source GetSigninSource(const GURL& url, GURL* continue_url) { 326 signin_metrics::Source GetSigninSource(const GURL& url, GURL* continue_url) {
335 DCHECK(url.is_valid()); 327 DCHECK(url.is_valid());
336 std::string value; 328 std::string value;
337 net::GetValueForKeyInQuery(url, "service", &value); 329 net::GetValueForKeyInQuery(url, "service", &value);
338 bool possibly_an_explicit_signin = value == "chromiumsync"; 330 bool possibly_an_explicit_signin = value == "chromiumsync";
339 331
340 // Find the final continue URL for this sign in. In some cases, Gaia can 332 // Find the final continue URL for this sign in. In some cases, Gaia can
341 // continue to itself, with the original continue URL buried under a couple 333 // continue to itself, with the original continue URL buried under a couple
342 // of layers of indirection. Peel those layers away. The final destination 334 // of layers of indirection. Peel those layers away. The final destination
343 // can also be "IsGaiaSignonRealm" so stop if we get to the end (but be sure 335 // can also be "IsGaiaSignonRealm" so stop if we get to the end (but be sure
344 // we always extract at least one "continue" value). 336 // we always extract at least one "continue" value).
345 GURL local_continue_url = signin::GetNextPageURLForPromoURL(url); 337 GURL local_continue_url = signin::GetNextPageURLForPromoURL(url);
346 while (gaia::IsGaiaSignonRealm(local_continue_url.GetOrigin())) { 338 while (gaia::IsGaiaSignonRealm(local_continue_url.GetOrigin())) {
347 GURL next_continue_url = 339 GURL next_continue_url =
348 signin::GetNextPageURLForPromoURL(local_continue_url); 340 signin::GetNextPageURLForPromoURL(local_continue_url);
349 if (!next_continue_url.is_valid()) 341 if (!next_continue_url.is_valid())
350 break; 342 break;
351 local_continue_url = next_continue_url; 343 local_continue_url = next_continue_url;
352 } 344 }
353 345
354 if (continue_url && local_continue_url.is_valid()) { 346 if (continue_url && local_continue_url.is_valid()) {
355 DCHECK(!continue_url->is_valid() || *continue_url == local_continue_url); 347 DCHECK(!continue_url->is_valid() || *continue_url == local_continue_url);
356 *continue_url = local_continue_url; 348 *continue_url = local_continue_url;
357 } 349 }
358 350
359 return possibly_an_explicit_signin ? 351 return possibly_an_explicit_signin ?
360 signin::GetSourceForPromoURL(local_continue_url) : 352 signin::GetSourceForPromoURL(local_continue_url) :
361 signin::SOURCE_UNKNOWN; 353 signin_metrics::SOURCE_UNKNOWN;
362 } 354 }
363 355
364 // Returns true if |url| is a valid URL that can occur during the sign in 356 // Returns true if |url| is a valid URL that can occur during the sign in
365 // process. Valid URLs are of the form: 357 // process. Valid URLs are of the form:
366 // 358 //
367 // https://accounts.google.{TLD}/... 359 // https://accounts.google.{TLD}/...
368 // https://accounts.youtube.com/... 360 // https://accounts.youtube.com/...
369 // https://accounts.blogger.com/... 361 // https://accounts.blogger.com/...
370 // 362 //
371 // All special headers used by one click sign in occur on 363 // All special headers used by one click sign in occur on
(...skipping 16 matching lines...) Expand all
388 origin == GURL("https://accounts.blogger.com")) 380 origin == GURL("https://accounts.blogger.com"))
389 return true; 381 return true;
390 382
391 return false; 383 return false;
392 } 384 }
393 385
394 // Tells when we are in the process of showing either the signin to chrome page 386 // Tells when we are in the process of showing either the signin to chrome page
395 // or the one click sign in to chrome page. 387 // or the one click sign in to chrome page.
396 // NOTE: This should only be used for logging purposes since it relies on hard 388 // NOTE: This should only be used for logging purposes since it relies on hard
397 // coded URLs that could change. 389 // coded URLs that could change.
398 bool AreWeShowingSignin(GURL url, signin::Source source, std::string email) { 390 bool AreWeShowingSignin(GURL url,
391 signin_metrics::Source source,
392 std::string email) {
399 GURL::Replacements replacements; 393 GURL::Replacements replacements;
400 replacements.ClearQuery(); 394 replacements.ClearQuery();
401 GURL clean_login_url = 395 GURL clean_login_url =
402 GaiaUrls::GetInstance()->service_login_url().ReplaceComponents( 396 GaiaUrls::GetInstance()->service_login_url().ReplaceComponents(
403 replacements); 397 replacements);
404 398
405 return (url.ReplaceComponents(replacements) == clean_login_url && 399 return (url.ReplaceComponents(replacements) == clean_login_url &&
406 source != signin::SOURCE_UNKNOWN) || 400 source != signin_metrics::SOURCE_UNKNOWN) ||
407 (IsValidGaiaSigninRedirectOrResponseURL(url) && 401 (IsValidGaiaSigninRedirectOrResponseURL(url) &&
408 url.spec().find("ChromeLoginPrompt") != std::string::npos && 402 url.spec().find("ChromeLoginPrompt") != std::string::npos &&
409 !email.empty()); 403 !email.empty());
410 } 404 }
411 405
412 // If profile is valid then get signin scoped device id from signin client. 406 // If profile is valid then get signin scoped device id from signin client.
413 // Otherwise returns empty string. 407 // Otherwise returns empty string.
414 std::string GetSigninScopedDeviceId(Profile* profile) { 408 std::string GetSigninScopedDeviceId(Profile* profile) {
415 std::string signin_scoped_device_id; 409 std::string signin_scoped_device_id;
416 SigninClient* signin_client = 410 SigninClient* signin_client =
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 482
489 483
490 // StartSyncArgs -------------------------------------------------------------- 484 // StartSyncArgs --------------------------------------------------------------
491 485
492 OneClickSigninHelper::StartSyncArgs::StartSyncArgs() 486 OneClickSigninHelper::StartSyncArgs::StartSyncArgs()
493 : profile(NULL), 487 : profile(NULL),
494 browser(NULL), 488 browser(NULL),
495 auto_accept(AUTO_ACCEPT_NONE), 489 auto_accept(AUTO_ACCEPT_NONE),
496 web_contents(NULL), 490 web_contents(NULL),
497 confirmation_required(OneClickSigninSyncStarter::NO_CONFIRMATION), 491 confirmation_required(OneClickSigninSyncStarter::NO_CONFIRMATION),
498 source(signin::SOURCE_UNKNOWN) {} 492 source(signin_metrics::SOURCE_UNKNOWN) {}
499 493
500 OneClickSigninHelper::StartSyncArgs::StartSyncArgs( 494 OneClickSigninHelper::StartSyncArgs::StartSyncArgs(
501 Profile* profile, 495 Profile* profile,
502 Browser* browser, 496 Browser* browser,
503 OneClickSigninHelper::AutoAccept auto_accept, 497 OneClickSigninHelper::AutoAccept auto_accept,
504 const std::string& session_index, 498 const std::string& session_index,
505 const std::string& email, 499 const std::string& email,
506 const std::string& password, 500 const std::string& password,
507 const std::string& refresh_token, 501 const std::string& refresh_token,
508 content::WebContents* web_contents, 502 content::WebContents* web_contents,
509 bool untrusted_confirmation_required, 503 bool untrusted_confirmation_required,
510 signin::Source source, 504 signin_metrics::Source source,
511 OneClickSigninSyncStarter::Callback callback) 505 OneClickSigninSyncStarter::Callback callback)
512 : profile(profile), 506 : profile(profile),
513 browser(browser), 507 browser(browser),
514 auto_accept(auto_accept), 508 auto_accept(auto_accept),
515 session_index(session_index), 509 session_index(session_index),
516 email(email), 510 email(email),
517 password(password), 511 password(password),
518 refresh_token(refresh_token), 512 refresh_token(refresh_token),
519 web_contents(web_contents), 513 web_contents(web_contents),
520 source(source), 514 source(source),
521 callback(callback) { 515 callback(callback) {
522 DCHECK(session_index.empty() != refresh_token.empty()); 516 DCHECK(session_index.empty() != refresh_token.empty());
523 if (untrusted_confirmation_required) { 517 if (untrusted_confirmation_required) {
524 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; 518 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN;
525 } else if (source == signin::SOURCE_SETTINGS) { 519 } else if (source == signin_metrics::SOURCE_SETTINGS) {
526 // Do not display a status confirmation for re-auth. 520 // Do not display a status confirmation for re-auth.
527 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION; 521 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION;
528 } else { 522 } else {
529 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; 523 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN;
530 } 524 }
531 } 525 }
532 526
533 OneClickSigninHelper::StartSyncArgs::~StartSyncArgs() {} 527 OneClickSigninHelper::StartSyncArgs::~StartSyncArgs() {}
534 528
535 // SyncStarterWrapper --------------------------------------------------------- 529 // SyncStarterWrapper ---------------------------------------------------------
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 664
671 DEFINE_WEB_CONTENTS_USER_DATA_KEY(OneClickSigninHelper); 665 DEFINE_WEB_CONTENTS_USER_DATA_KEY(OneClickSigninHelper);
672 666
673 // static 667 // static
674 const int OneClickSigninHelper::kMaxNavigationsSince = 10; 668 const int OneClickSigninHelper::kMaxNavigationsSince = 10;
675 669
676 OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents) 670 OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents)
677 : content::WebContentsObserver(web_contents), 671 : content::WebContentsObserver(web_contents),
678 showing_signin_(false), 672 showing_signin_(false),
679 auto_accept_(AUTO_ACCEPT_NONE), 673 auto_accept_(AUTO_ACCEPT_NONE),
680 source_(signin::SOURCE_UNKNOWN), 674 source_(signin_metrics::SOURCE_UNKNOWN),
681 switched_to_advanced_(false), 675 switched_to_advanced_(false),
682 untrusted_navigations_since_signin_visit_(0), 676 untrusted_navigations_since_signin_visit_(0),
683 untrusted_confirmation_required_(false), 677 untrusted_confirmation_required_(false),
684 do_not_clear_pending_email_(false), 678 do_not_clear_pending_email_(false),
685 do_not_start_sync_for_testing_(false), 679 do_not_start_sync_for_testing_(false),
686 weak_pointer_factory_(this) { 680 weak_pointer_factory_(this) {
687 ChromePasswordManagerClient* client = 681 ChromePasswordManagerClient* client =
688 ChromePasswordManagerClient::FromWebContents(web_contents); 682 ChromePasswordManagerClient::FromWebContents(web_contents);
689 // May be NULL during testing. 683 // May be NULL during testing.
690 if (client) { 684 if (client) {
691 client->GetPasswordManager()->AddSubmissionCallback( 685 client->GetPasswordManager()->AddSubmissionCallback(
692 base::Bind(&OneClickSigninHelper::PasswordSubmitted, 686 base::Bind(&OneClickSigninHelper::PasswordSubmitted,
693 weak_pointer_factory_.GetWeakPtr())); 687 weak_pointer_factory_.GetWeakPtr()));
694 } 688 }
695 } 689 }
696 690
697 OneClickSigninHelper::~OneClickSigninHelper() {} 691 OneClickSigninHelper::~OneClickSigninHelper() {}
698 692
699 // static 693 // static
700 void OneClickSigninHelper::LogHistogramValue( 694 void OneClickSigninHelper::LogHistogramValue(int action) {
701 signin::Source source, int action) {
702 switch (source) {
703 case signin::SOURCE_START_PAGE:
704 UMA_HISTOGRAM_ENUMERATION("Signin.StartPageActions", action,
705 one_click_signin::HISTOGRAM_MAX);
706 break;
707 case signin::SOURCE_NTP_LINK:
708 UMA_HISTOGRAM_ENUMERATION("Signin.NTPLinkActions", action,
709 one_click_signin::HISTOGRAM_MAX);
710 break;
711 case signin::SOURCE_MENU:
712 UMA_HISTOGRAM_ENUMERATION("Signin.MenuActions", action,
713 one_click_signin::HISTOGRAM_MAX);
714 break;
715 case signin::SOURCE_SETTINGS:
716 UMA_HISTOGRAM_ENUMERATION("Signin.SettingsActions", action,
717 one_click_signin::HISTOGRAM_MAX);
718 break;
719 case signin::SOURCE_EXTENSION_INSTALL_BUBBLE:
720 UMA_HISTOGRAM_ENUMERATION("Signin.ExtensionInstallBubbleActions", action,
721 one_click_signin::HISTOGRAM_MAX);
722 break;
723 case signin::SOURCE_APP_LAUNCHER:
724 UMA_HISTOGRAM_ENUMERATION("Signin.AppLauncherActions", action,
725 one_click_signin::HISTOGRAM_MAX);
726 break;
727 case signin::SOURCE_APPS_PAGE_LINK:
728 UMA_HISTOGRAM_ENUMERATION("Signin.AppsPageLinkActions", action,
729 one_click_signin::HISTOGRAM_MAX);
730 break;
731 case signin::SOURCE_BOOKMARK_BUBBLE:
732 UMA_HISTOGRAM_ENUMERATION("Signin.BookmarkBubbleActions", action,
733 one_click_signin::HISTOGRAM_MAX);
734 break;
735 case signin::SOURCE_AVATAR_BUBBLE_SIGN_IN:
736 UMA_HISTOGRAM_ENUMERATION("Signin.AvatarBubbleActions", action,
737 one_click_signin::HISTOGRAM_MAX);
738 break;
739 case signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT:
740 UMA_HISTOGRAM_ENUMERATION("Signin.AvatarBubbleActions", action,
741 one_click_signin::HISTOGRAM_MAX);
742 break;
743 case signin::SOURCE_DEVICES_PAGE:
744 UMA_HISTOGRAM_ENUMERATION("Signin.DevicesPageActions", action,
745 one_click_signin::HISTOGRAM_MAX);
746 break;
747 case signin::SOURCE_REAUTH:
748 UMA_HISTOGRAM_ENUMERATION("Signin.ReauthActions", action,
749 one_click_signin::HISTOGRAM_MAX);
750 break;
751 default:
752 // This switch statement needs to be updated when the enum Source changes.
753 COMPILE_ASSERT(signin::SOURCE_UNKNOWN == 12,
754 kSourceEnumHasChangedButNotThisSwitchStatement);
755 UMA_HISTOGRAM_ENUMERATION("Signin.UnknownActions", action,
756 one_click_signin::HISTOGRAM_MAX);
757 }
758 UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action, 695 UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action,
759 one_click_signin::HISTOGRAM_MAX); 696 signin_metrics::HISTOGRAM_MAX);
760 } 697 }
761 698
762 // static 699 // static
763 bool OneClickSigninHelper::CanOffer(content::WebContents* web_contents, 700 bool OneClickSigninHelper::CanOffer(content::WebContents* web_contents,
764 CanOfferFor can_offer_for, 701 CanOfferFor can_offer_for,
765 const std::string& email, 702 const std::string& email,
766 std::string* error_message) { 703 std::string* error_message) {
767 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 704 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
768 VLOG(1) << "OneClickSigninHelper::CanOffer"; 705 VLOG(1) << "OneClickSigninHelper::CanOffer";
769 706
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 } 744 }
808 745
809 if (can_offer_for != CAN_OFFER_FOR_SECONDARY_ACCOUNT) { 746 if (can_offer_for != CAN_OFFER_FOR_SECONDARY_ACCOUNT) {
810 // If the signin manager already has an authenticated name, then this is a 747 // If the signin manager already has an authenticated name, then this is a
811 // re-auth scenario. Make sure the email just signed in corresponds to 748 // re-auth scenario. Make sure the email just signed in corresponds to
812 // the one sign in manager expects. 749 // the one sign in manager expects.
813 std::string current_email = manager->GetAuthenticatedUsername(); 750 std::string current_email = manager->GetAuthenticatedUsername();
814 const bool same_email = gaia::AreEmailsSame(current_email, email); 751 const bool same_email = gaia::AreEmailsSame(current_email, email);
815 if (!current_email.empty() && !same_email) { 752 if (!current_email.empty() && !same_email) {
816 UMA_HISTOGRAM_ENUMERATION("Signin.Reauth", 753 UMA_HISTOGRAM_ENUMERATION("Signin.Reauth",
817 signin::HISTOGRAM_ACCOUNT_MISSMATCH, 754 signin_metrics::HISTOGRAM_ACCOUNT_MISSMATCH,
818 signin::HISTOGRAM_MAX); 755 signin_metrics::HISTOGRAM_MAX);
819 if (error_message) { 756 if (error_message) {
820 error_message->assign( 757 error_message->assign(
821 l10n_util::GetStringFUTF8(IDS_SYNC_WRONG_EMAIL, 758 l10n_util::GetStringFUTF8(IDS_SYNC_WRONG_EMAIL,
822 base::UTF8ToUTF16(current_email))); 759 base::UTF8ToUTF16(current_email)));
823 } 760 }
824 return false; 761 return false;
825 } 762 }
826 763
827 // If some profile, not just the current one, is already connected to this 764 // If some profile, not just the current one, is already connected to this
828 // account, don't show the infobar. 765 // account, don't show the infobar.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 io_data->set_reverse_autologin_pending_email(email); 911 io_data->set_reverse_autologin_pending_email(email);
975 912
976 if (!email.empty() || !session_index.empty()) { 913 if (!email.empty() || !session_index.empty()) {
977 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:" 914 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:"
978 << " email=" << email 915 << " email=" << email
979 << " sessionindex=" << session_index; 916 << " sessionindex=" << session_index;
980 } 917 }
981 918
982 // Parse Google-Chrome-SignIn. 919 // Parse Google-Chrome-SignIn.
983 AutoAccept auto_accept = AUTO_ACCEPT_NONE; 920 AutoAccept auto_accept = AUTO_ACCEPT_NONE;
984 signin::Source source = signin::SOURCE_UNKNOWN; 921 signin_metrics::Source source = signin_metrics::SOURCE_UNKNOWN;
985 GURL continue_url; 922 GURL continue_url;
986 std::vector<std::string> tokens; 923 std::vector<std::string> tokens;
987 base::SplitString(google_chrome_signin_value, ',', &tokens); 924 base::SplitString(google_chrome_signin_value, ',', &tokens);
988 for (size_t i = 0; i < tokens.size(); ++i) { 925 for (size_t i = 0; i < tokens.size(); ++i) {
989 const std::string& token = tokens[i]; 926 const std::string& token = tokens[i];
990 if (token == "accepted") { 927 if (token == "accepted") {
991 auto_accept = AUTO_ACCEPT_ACCEPTED; 928 auto_accept = AUTO_ACCEPT_ACCEPTED;
992 } else if (token == "configure") { 929 } else if (token == "configure") {
993 auto_accept = AUTO_ACCEPT_CONFIGURE; 930 auto_accept = AUTO_ACCEPT_CONFIGURE;
994 } else if (token == "rejected-for-profile") { 931 } else if (token == "rejected-for-profile") {
995 auto_accept = AUTO_ACCEPT_REJECTED_FOR_PROFILE; 932 auto_accept = AUTO_ACCEPT_REJECTED_FOR_PROFILE;
996 } 933 }
997 } 934 }
998 935
999 // If this is an explicit sign in (i.e., first run, NTP, Apps page, menu, 936 // If this is an explicit sign in (i.e., first run, NTP, Apps page, menu,
1000 // settings) then force the auto accept type to explicit. 937 // settings) then force the auto accept type to explicit.
1001 source = GetSigninSource(request->url(), &continue_url); 938 source = GetSigninSource(request->url(), &continue_url);
1002 if (source != signin::SOURCE_UNKNOWN) 939 if (source != signin_metrics::SOURCE_UNKNOWN)
1003 auto_accept = AUTO_ACCEPT_EXPLICIT; 940 auto_accept = AUTO_ACCEPT_EXPLICIT;
1004 941
1005 if (auto_accept != AUTO_ACCEPT_NONE) { 942 if (auto_accept != AUTO_ACCEPT_NONE) {
1006 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:" 943 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:"
1007 << " auto_accept=" << auto_accept; 944 << " auto_accept=" << auto_accept;
1008 } 945 }
1009 946
1010 // If |session_index|, |email|, |auto_accept|, and |continue_url| all have 947 // If |session_index|, |email|, |auto_accept|, and |continue_url| all have
1011 // their default value, don't bother posting a task to the UI thread. 948 // their default value, don't bother posting a task to the UI thread.
1012 // It will be a noop anyway. 949 // It will be a noop anyway.
1013 // 950 //
1014 // The two headers above may (but not always) come in different http requests 951 // The two headers above may (but not always) come in different http requests
1015 // so a post to the UI thread is still needed if |auto_accept| is not its 952 // so a post to the UI thread is still needed if |auto_accept| is not its
1016 // default value, but |email| and |session_index| are. 953 // default value, but |email| and |session_index| are.
1017 if (session_index.empty() && email.empty() && 954 if (session_index.empty() && email.empty() &&
1018 auto_accept == AUTO_ACCEPT_NONE && !continue_url.is_valid()) { 955 auto_accept == AUTO_ACCEPT_NONE && !continue_url.is_valid()) {
1019 return; 956 return;
1020 } 957 }
1021 958
1022 content::BrowserThread::PostTask( 959 content::BrowserThread::PostTask(
1023 content::BrowserThread::UI, FROM_HERE, 960 content::BrowserThread::UI, FROM_HERE,
1024 base::Bind(&OneClickSigninHelper::ShowInfoBarUIThread, session_index, 961 base::Bind(&OneClickSigninHelper::ShowInfoBarUIThread, session_index,
1025 email, auto_accept, source, continue_url, child_id, route_id)); 962 email, auto_accept, source, continue_url, child_id, route_id));
1026 } 963 }
1027 964
1028 // static 965 // static
1029 void OneClickSigninHelper::LogConfirmHistogramValue(int action) { 966 void OneClickSigninHelper::LogConfirmHistogramValue(int action) {
1030 UMA_HISTOGRAM_ENUMERATION("Signin.OneClickConfirmation", action, 967 UMA_HISTOGRAM_ENUMERATION("Signin.OneClickConfirmation", action,
1031 one_click_signin::HISTOGRAM_CONFIRM_MAX); 968 signin_metrics::HISTOGRAM_CONFIRM_MAX);
1032 } 969 }
1033 // static 970 // static
1034 void OneClickSigninHelper::ShowInfoBarUIThread( 971 void OneClickSigninHelper::ShowInfoBarUIThread(
1035 const std::string& session_index, 972 const std::string& session_index,
1036 const std::string& email, 973 const std::string& email,
1037 AutoAccept auto_accept, 974 AutoAccept auto_accept,
1038 signin::Source source, 975 signin_metrics::Source source,
1039 const GURL& continue_url, 976 const GURL& continue_url,
1040 int child_id, 977 int child_id,
1041 int route_id) { 978 int route_id) {
1042 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 979 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
1043 980
1044 content::WebContents* web_contents = tab_util::GetWebContentsByID(child_id, 981 content::WebContents* web_contents = tab_util::GetWebContentsByID(child_id,
1045 route_id); 982 route_id);
1046 if (!web_contents) 983 if (!web_contents)
1047 return; 984 return;
1048 985
1049 // TODO(mathp): The appearance of this infobar should be tested using a 986 // TODO(mathp): The appearance of this infobar should be tested using a
1050 // browser_test. 987 // browser_test.
1051 OneClickSigninHelper* helper = 988 OneClickSigninHelper* helper =
1052 OneClickSigninHelper::FromWebContents(web_contents); 989 OneClickSigninHelper::FromWebContents(web_contents);
1053 if (!helper) 990 if (!helper)
1054 return; 991 return;
1055 992
1056 if (auto_accept != AUTO_ACCEPT_NONE) 993 if (auto_accept != AUTO_ACCEPT_NONE)
1057 helper->auto_accept_ = auto_accept; 994 helper->auto_accept_ = auto_accept;
1058 995
1059 if (source != signin::SOURCE_UNKNOWN && 996 if (source != signin_metrics::SOURCE_UNKNOWN &&
1060 helper->source_ == signin::SOURCE_UNKNOWN) { 997 helper->source_ == signin_metrics::SOURCE_UNKNOWN) {
1061 helper->source_ = source; 998 helper->source_ = source;
1062 } 999 }
1063 1000
1064 // Save the email in the one-click signin manager. The manager may 1001 // Save the email in the one-click signin manager. The manager may
1065 // not exist if the contents is incognito or if the profile is already 1002 // not exist if the contents is incognito or if the profile is already
1066 // connected to a Google account. 1003 // connected to a Google account.
1067 if (!session_index.empty()) 1004 if (!session_index.empty())
1068 helper->session_index_ = session_index; 1005 helper->session_index_ = session_index;
1069 1006
1070 if (!email.empty()) 1007 if (!email.empty())
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1121 } 1058 }
1122 1059
1123 // static 1060 // static
1124 bool OneClickSigninHelper::HandleCrossAccountError( 1061 bool OneClickSigninHelper::HandleCrossAccountError(
1125 Profile* profile, 1062 Profile* profile,
1126 const std::string& session_index, 1063 const std::string& session_index,
1127 const std::string& email, 1064 const std::string& email,
1128 const std::string& password, 1065 const std::string& password,
1129 const std::string& refresh_token, 1066 const std::string& refresh_token,
1130 OneClickSigninHelper::AutoAccept auto_accept, 1067 OneClickSigninHelper::AutoAccept auto_accept,
1131 signin::Source source, 1068 signin_metrics::Source source,
1132 OneClickSigninSyncStarter::StartSyncMode start_mode, 1069 OneClickSigninSyncStarter::StartSyncMode start_mode,
1133 OneClickSigninSyncStarter::Callback sync_callback) { 1070 OneClickSigninSyncStarter::Callback sync_callback) {
1134 std::string last_email = 1071 std::string last_email =
1135 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); 1072 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername);
1136 1073
1137 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email)) { 1074 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email)) {
1138 // If the new email address is different from the email address that 1075 // If the new email address is different from the email address that
1139 // just signed in, show a confirmation dialog on top of the current active 1076 // just signed in, show a confirmation dialog on top of the current active
1140 // tab. 1077 // tab.
1141 1078
(...skipping 20 matching lines...) Expand all
1162 contents, 1099 contents,
1163 start_mode)); 1100 start_mode));
1164 return true; 1101 return true;
1165 } 1102 }
1166 1103
1167 return false; 1104 return false;
1168 } 1105 }
1169 1106
1170 // static 1107 // static
1171 void OneClickSigninHelper::RedirectToNtpOrAppsPage( 1108 void OneClickSigninHelper::RedirectToNtpOrAppsPage(
1172 content::WebContents* contents, signin::Source source) { 1109 content::WebContents* contents, signin_metrics::Source source) {
1173 // Do nothing if a navigation is pending, since this call can be triggered 1110 // Do nothing if a navigation is pending, since this call can be triggered
1174 // from DidStartLoading. This avoids deleting the pending entry while we are 1111 // from DidStartLoading. This avoids deleting the pending entry while we are
1175 // still navigating to it. See crbug/346632. 1112 // still navigating to it. See crbug/346632.
1176 if (contents->GetController().GetPendingEntry()) 1113 if (contents->GetController().GetPendingEntry())
1177 return; 1114 return;
1178 1115
1179 VLOG(1) << "RedirectToNtpOrAppsPage"; 1116 VLOG(1) << "RedirectToNtpOrAppsPage";
1180 // Redirect to NTP/Apps page and display a confirmation bubble 1117 // Redirect to NTP/Apps page and display a confirmation bubble
1181 GURL url(source == signin::SOURCE_APPS_PAGE_LINK ? 1118 GURL url(source == signin_metrics::SOURCE_APPS_PAGE_LINK ?
1182 chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL); 1119 chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL);
1183 content::OpenURLParams params(url, 1120 content::OpenURLParams params(url,
1184 content::Referrer(), 1121 content::Referrer(),
1185 CURRENT_TAB, 1122 CURRENT_TAB,
1186 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, 1123 ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
1187 false); 1124 false);
1188 contents->OpenURL(params); 1125 contents->OpenURL(params);
1189 } 1126 }
1190 1127
1191 // static 1128 // static
1192 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary( 1129 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary(
1193 content::WebContents* contents, signin::Source source) { 1130 content::WebContents* contents, signin_metrics::Source source) {
1194 if (source != signin::SOURCE_SETTINGS) { 1131 if (source != signin_metrics::SOURCE_SETTINGS) {
1195 RedirectToNtpOrAppsPage(contents, source); 1132 RedirectToNtpOrAppsPage(contents, source);
1196 } 1133 }
1197 } 1134 }
1198 1135
1199 void OneClickSigninHelper::RedirectToSignin() { 1136 void OneClickSigninHelper::RedirectToSignin() {
1200 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; 1137 VLOG(1) << "OneClickSigninHelper::RedirectToSignin";
1201 1138
1202 // Extract the existing sounce=X value. Default to "2" if missing. 1139 // Extract the existing sounce=X value. Default to "2" if missing.
1203 signin::Source source = signin::GetSourceForPromoURL(continue_url_); 1140 signin_metrics::Source source = signin::GetSourceForPromoURL(continue_url_);
1204 if (source == signin::SOURCE_UNKNOWN) 1141 if (source == signin_metrics::SOURCE_UNKNOWN)
1205 source = signin::SOURCE_MENU; 1142 source = signin_metrics::SOURCE_MENU;
1206 GURL page = signin::GetPromoURL(source, false); 1143 GURL page = signin::GetPromoURL(source, false);
1207 1144
1208 content::WebContents* contents = web_contents(); 1145 content::WebContents* contents = web_contents();
1209 contents->GetController().LoadURL(page, 1146 contents->GetController().LoadURL(page,
1210 content::Referrer(), 1147 content::Referrer(),
1211 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, 1148 ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
1212 std::string()); 1149 std::string());
1213 } 1150 }
1214 1151
1215 void OneClickSigninHelper::CleanTransientState() { 1152 void OneClickSigninHelper::CleanTransientState() {
1216 VLOG(1) << "OneClickSigninHelper::CleanTransientState"; 1153 VLOG(1) << "OneClickSigninHelper::CleanTransientState";
1217 showing_signin_ = false; 1154 showing_signin_ = false;
1218 email_.clear(); 1155 email_.clear();
1219 password_.clear(); 1156 password_.clear();
1220 auto_accept_ = AUTO_ACCEPT_NONE; 1157 auto_accept_ = AUTO_ACCEPT_NONE;
1221 source_ = signin::SOURCE_UNKNOWN; 1158 source_ = signin_metrics::SOURCE_UNKNOWN;
1222 switched_to_advanced_ = false; 1159 switched_to_advanced_ = false;
1223 continue_url_ = GURL(); 1160 continue_url_ = GURL();
1224 untrusted_navigations_since_signin_visit_ = 0; 1161 untrusted_navigations_since_signin_visit_ = 0;
1225 untrusted_confirmation_required_ = false; 1162 untrusted_confirmation_required_ = false;
1226 error_message_.clear(); 1163 error_message_.clear();
1227 1164
1228 // Post to IO thread to clear pending email. 1165 // Post to IO thread to clear pending email.
1229 if (!do_not_clear_pending_email_) { 1166 if (!do_not_clear_pending_email_) {
1230 Profile* profile = 1167 Profile* profile =
1231 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 1168 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 1269
1333 // Redirect to the landing page and display an error popup. 1270 // Redirect to the landing page and display an error popup.
1334 RedirectToNtpOrAppsPage(web_contents(), source_); 1271 RedirectToNtpOrAppsPage(web_contents(), source_);
1335 LoginUIServiceFactory::GetForProfile(profile)-> 1272 LoginUIServiceFactory::GetForProfile(profile)->
1336 DisplayLoginResult(browser, base::UTF8ToUTF16(error_message_)); 1273 DisplayLoginResult(browser, base::UTF8ToUTF16(error_message_));
1337 CleanTransientState(); 1274 CleanTransientState();
1338 return; 1275 return;
1339 } 1276 }
1340 1277
1341 if (AreWeShowingSignin(url, source_, email_)) { 1278 if (AreWeShowingSignin(url, source_, email_)) {
1342 if (!showing_signin_) { 1279 if (!showing_signin_)
1343 if (source_ == signin::SOURCE_UNKNOWN) 1280 LogHistogramValue(signin_metrics::HISTOGRAM_SHOWN);
1344 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN);
1345 else
1346 LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN);
1347 }
1348 showing_signin_ = true; 1281 showing_signin_ = true;
1349 } 1282 }
1350 1283
1351 // When Gaia finally redirects to the continue URL, Gaia will add some 1284 // When Gaia finally redirects to the continue URL, Gaia will add some
1352 // extra query parameters. So ignore the parameters when checking to see 1285 // extra query parameters. So ignore the parameters when checking to see
1353 // if the user has continued. Sometimes locales will redirect to a country- 1286 // if the user has continued. Sometimes locales will redirect to a country-
1354 // specific TLD so just make sure it's a valid domain instead of comparing 1287 // specific TLD so just make sure it's a valid domain instead of comparing
1355 // for an exact match. 1288 // for an exact match.
1356 GURL::Replacements replacements; 1289 GURL::Replacements replacements;
1357 replacements.ClearQuery(); 1290 replacements.ClearQuery();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1405 // During an explicit sign in, if the user has not yet reached the final 1338 // During an explicit sign in, if the user has not yet reached the final
1406 // continue URL, wait for it to arrive. Note that Gaia will add some extra 1339 // continue URL, wait for it to arrive. Note that Gaia will add some extra
1407 // query parameters to the continue URL. Ignore them when checking to 1340 // query parameters to the continue URL. Ignore them when checking to
1408 // see if the user has continued. 1341 // see if the user has continued.
1409 // 1342 //
1410 // If this is not an explicit sign in, we don't need to check if we landed 1343 // If this is not an explicit sign in, we don't need to check if we landed
1411 // on the right continue URL. This is important because the continue URL 1344 // on the right continue URL. This is important because the continue URL
1412 // may itself lead to a redirect, which means this function will never see 1345 // may itself lead to a redirect, which means this function will never see
1413 // the continue URL go by. 1346 // the continue URL go by.
1414 if (auto_accept_ == AUTO_ACCEPT_EXPLICIT) { 1347 if (auto_accept_ == AUTO_ACCEPT_EXPLICIT) {
1415 DCHECK(source_ != signin::SOURCE_UNKNOWN); 1348 DCHECK(source_ != signin_metrics::SOURCE_UNKNOWN);
1416 if (!continue_url_match) { 1349 if (!continue_url_match) {
1417 VLOG(1) << "OneClickSigninHelper::DidStopLoading: invalid url='" 1350 VLOG(1) << "OneClickSigninHelper::DidStopLoading: invalid url='"
1418 << url.spec() 1351 << url.spec()
1419 << "' expected continue url=" << continue_url_; 1352 << "' expected continue url=" << continue_url_;
1420 CleanTransientState(); 1353 CleanTransientState();
1421 return; 1354 return;
1422 } 1355 }
1423 1356
1424 // In explicit sign ins, the user may have changed the box 1357 // In explicit sign ins, the user may have changed the box
1425 // "Let me choose what to sync". This is reflected as a change in the 1358 // "Let me choose what to sync". This is reflected as a change in the
1426 // source of the continue URL. Make one last check of the current URL 1359 // source of the continue URL. Make one last check of the current URL
1427 // to see if there is a valid source. If so, it overrides the 1360 // to see if there is a valid source. If so, it overrides the
1428 // current source. 1361 // current source.
1429 // 1362 //
1430 // If the source was changed to SOURCE_SETTINGS, we want 1363 // If the source was changed to SOURCE_SETTINGS, we want
1431 // OneClickSigninSyncStarter to reuse the current tab to display the 1364 // OneClickSigninSyncStarter to reuse the current tab to display the
1432 // advanced configuration. 1365 // advanced configuration.
1433 signin::Source source = signin::GetSourceForPromoURL(url); 1366 signin_metrics::Source source = signin::GetSourceForPromoURL(url);
1434 if (source != source_) { 1367 if (source != source_) {
1435 source_ = source; 1368 source_ = source;
1436 switched_to_advanced_ = source == signin::SOURCE_SETTINGS; 1369 switched_to_advanced_ = source == signin_metrics::SOURCE_SETTINGS;
1437 } 1370 }
1438 } 1371 }
1439 1372
1440 Browser* browser = chrome::FindBrowserWithWebContents(contents); 1373 Browser* browser = chrome::FindBrowserWithWebContents(contents);
1441 1374
1442 VLOG(1) << "OneClickSigninHelper::DidStopLoading: signin is go." 1375 VLOG(1) << "OneClickSigninHelper::DidStopLoading: signin is go."
1443 << " auto_accept=" << auto_accept_ 1376 << " auto_accept=" << auto_accept_
1444 << " source=" << source_; 1377 << " source=" << source_;
1445 1378
1446 switch (auto_accept_) { 1379 switch (auto_accept_) {
1447 case AUTO_ACCEPT_NONE: 1380 case AUTO_ACCEPT_NONE:
1448 if (showing_signin_) 1381 if (showing_signin_)
1449 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_DISMISSED); 1382 LogHistogramValue(signin_metrics::HISTOGRAM_DISMISSED);
1450 break; 1383 break;
1451 case AUTO_ACCEPT_ACCEPTED: 1384 case AUTO_ACCEPT_ACCEPTED:
1452 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1385 LogHistogramValue(signin_metrics::HISTOGRAM_ACCEPTED);
1453 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1386 LogHistogramValue(signin_metrics::HISTOGRAM_WITH_DEFAULTS);
1454 SigninManager::DisableOneClickSignIn(profile->GetPrefs()); 1387 SigninManager::DisableOneClickSignIn(profile->GetPrefs());
1455 // Start syncing with the default settings - prompt the user to sign in 1388 // Start syncing with the default settings - prompt the user to sign in
1456 // first. 1389 // first.
1457 if (!do_not_start_sync_for_testing_) { 1390 if (!do_not_start_sync_for_testing_) {
1458 StartSync( 1391 StartSync(
1459 StartSyncArgs(profile, browser, auto_accept_, 1392 StartSyncArgs(profile, browser, auto_accept_,
1460 session_index_, email_, password_, "", 1393 session_index_, email_, password_, "",
1461 NULL /* don't force sync setup in same tab */, 1394 NULL /* don't force sync setup in same tab */,
1462 true /* confirmation_required */, source_, 1395 true /* confirmation_required */, source_,
1463 CreateSyncStarterCallback()), 1396 CreateSyncStarterCallback()),
1464 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); 1397 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
1465 } 1398 }
1466 break; 1399 break;
1467 case AUTO_ACCEPT_CONFIGURE: 1400 case AUTO_ACCEPT_CONFIGURE:
1468 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1401 LogHistogramValue(signin_metrics::HISTOGRAM_ACCEPTED);
1469 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED); 1402 LogHistogramValue(signin_metrics::HISTOGRAM_WITH_ADVANCED);
1470 SigninManager::DisableOneClickSignIn(profile->GetPrefs()); 1403 SigninManager::DisableOneClickSignIn(profile->GetPrefs());
1471 // Display the extra confirmation (even in the SAML case) in case this 1404 // Display the extra confirmation (even in the SAML case) in case this
1472 // was an untrusted renderer. 1405 // was an untrusted renderer.
1473 if (!do_not_start_sync_for_testing_) { 1406 if (!do_not_start_sync_for_testing_) {
1474 StartSync( 1407 StartSync(
1475 StartSyncArgs(profile, browser, auto_accept_, 1408 StartSyncArgs(profile, browser, auto_accept_,
1476 session_index_, email_, password_, "", 1409 session_index_, email_, password_, "",
1477 NULL /* don't force sync setup in same tab */, 1410 NULL /* don't force sync setup in same tab */,
1478 true /* confirmation_required */, source_, 1411 true /* confirmation_required */, source_,
1479 CreateSyncStarterCallback()), 1412 CreateSyncStarterCallback()),
1480 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 1413 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
1481 } 1414 }
1482 break; 1415 break;
1483 case AUTO_ACCEPT_EXPLICIT: { 1416 case AUTO_ACCEPT_EXPLICIT: {
1484 signin::Source original_source = 1417 signin_metrics::Source original_source =
1485 signin::GetSourceForPromoURL(original_continue_url_); 1418 signin::GetSourceForPromoURL(original_continue_url_);
1486 if (switched_to_advanced_) { 1419 if (switched_to_advanced_) {
1487 LogHistogramValue(original_source, 1420 LogHistogramValue(signin_metrics::HISTOGRAM_WITH_ADVANCED);
1488 one_click_signin::HISTOGRAM_WITH_ADVANCED); 1421 LogHistogramValue(signin_metrics::HISTOGRAM_ACCEPTED);
1489 LogHistogramValue(original_source,
1490 one_click_signin::HISTOGRAM_ACCEPTED);
1491 } else { 1422 } else {
1492 LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED); 1423 LogHistogramValue(signin_metrics::HISTOGRAM_ACCEPTED);
1493 LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1424 LogHistogramValue(signin_metrics::HISTOGRAM_WITH_DEFAULTS);
1494 } 1425 }
1495 1426
1496 // - If sign in was initiated from the NTP or the hotdog menu, sync with 1427 // - If sign in was initiated from the NTP or the hotdog menu, sync with
1497 // default settings. 1428 // default settings.
1498 // - If sign in was initiated from the settings page for first time sync 1429 // - If sign in was initiated from the settings page for first time sync
1499 // set up, show the advanced sync settings dialog. 1430 // set up, show the advanced sync settings dialog.
1500 // - If sign in was initiated from the settings page due to a re-auth when 1431 // - If sign in was initiated from the settings page due to a re-auth when
1501 // sync was already setup, simply navigate back to the settings page. 1432 // sync was already setup, simply navigate back to the settings page.
1502 ProfileSyncService* sync_service = 1433 ProfileSyncService* sync_service =
1503 ProfileSyncServiceFactory::GetForProfile(profile); 1434 ProfileSyncServiceFactory::GetForProfile(profile);
1504 SigninErrorController* error_controller = 1435 SigninErrorController* error_controller =
1505 ProfileOAuth2TokenServiceFactory::GetForProfile(profile)-> 1436 ProfileOAuth2TokenServiceFactory::GetForProfile(profile)->
1506 signin_error_controller(); 1437 signin_error_controller();
1507 1438
1508 OneClickSigninSyncStarter::StartSyncMode start_mode = 1439 OneClickSigninSyncStarter::StartSyncMode start_mode =
1509 source_ == signin::SOURCE_SETTINGS ? 1440 source_ == signin_metrics::SOURCE_SETTINGS ?
1510 (error_controller->HasError() && 1441 (error_controller->HasError() &&
1511 sync_service && sync_service->HasSyncSetupCompleted()) ? 1442 sync_service && sync_service->HasSyncSetupCompleted()) ?
1512 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : 1443 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE :
1513 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : 1444 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST :
1514 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; 1445 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS;
1515 1446
1516 if (!HandleCrossAccountError(profile, session_index_, email_, password_, 1447 if (!HandleCrossAccountError(profile, session_index_, email_, password_,
1517 "", auto_accept_, source_, start_mode, 1448 "", auto_accept_, source_, start_mode,
1518 CreateSyncStarterCallback())) { 1449 CreateSyncStarterCallback())) {
1519 if (!do_not_start_sync_for_testing_) { 1450 if (!do_not_start_sync_for_testing_) {
1520 StartSync( 1451 StartSync(
1521 StartSyncArgs(profile, browser, auto_accept_, 1452 StartSyncArgs(profile, browser, auto_accept_,
1522 session_index_, email_, password_, "", 1453 session_index_, email_, password_, "",
1523 contents, 1454 contents,
1524 untrusted_confirmation_required_, source_, 1455 untrusted_confirmation_required_, source_,
1525 CreateSyncStarterCallback()), 1456 CreateSyncStarterCallback()),
1526 start_mode); 1457 start_mode);
1527 } 1458 }
1528 1459
1529 // If this explicit sign in is not from settings page/webstore, show 1460 // If this explicit sign in is not from settings page/webstore, show
1530 // the NTP/Apps page after sign in completes. In the case of the 1461 // the NTP/Apps page after sign in completes. In the case of the
1531 // settings page, it will get auto-closed after sync setup. In the case 1462 // settings page, it will get auto-closed after sync setup. In the case
1532 // of webstore, it will redirect back to webstore. 1463 // of webstore, it will redirect back to webstore.
1533 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_); 1464 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_);
1534 } 1465 }
1535 1466
1536 // Observe the sync service if the settings tab requested a gaia sign in, 1467 // Observe the sync service if the settings tab requested a gaia sign in,
1537 // so that when sign in and sync setup are successful, we can redirect to 1468 // so that when sign in and sync setup are successful, we can redirect to
1538 // the correct URL, or auto-close the gaia sign in tab. 1469 // the correct URL, or auto-close the gaia sign in tab.
1539 if (original_source == signin::SOURCE_SETTINGS) { 1470 if (original_source == signin_metrics::SOURCE_SETTINGS) {
1540 // The observer deletes itself once it's done. 1471 // The observer deletes itself once it's done.
1541 new OneClickSigninSyncObserver(contents, original_continue_url_); 1472 new OneClickSigninSyncObserver(contents, original_continue_url_);
1542 } 1473 }
1543 break; 1474 break;
1544 } 1475 }
1545 case AUTO_ACCEPT_REJECTED_FOR_PROFILE: 1476 case AUTO_ACCEPT_REJECTED_FOR_PROFILE:
1546 AddEmailToOneClickRejectedList(profile, email_); 1477 AddEmailToOneClickRejectedList(profile, email_);
1547 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); 1478 LogHistogramValue(signin_metrics::HISTOGRAM_REJECTED);
1548 break; 1479 break;
1549 default: 1480 default:
1550 NOTREACHED() << "Invalid auto_accept=" << auto_accept_; 1481 NOTREACHED() << "Invalid auto_accept=" << auto_accept_;
1551 break; 1482 break;
1552 } 1483 }
1553 1484
1554 CleanTransientState(); 1485 CleanTransientState();
1555 } 1486 }
1556 1487
1557 OneClickSigninSyncStarter::Callback 1488 OneClickSigninSyncStarter::Callback
(...skipping 14 matching lines...) Expand all
1572 // If the web contents is showing a blank page and not about to be closed, 1503 // If the web contents is showing a blank page and not about to be closed,
1573 // redirect to the NTP or apps page. 1504 // redirect to the NTP or apps page.
1574 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && 1505 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) &&
1575 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { 1506 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) {
1576 RedirectToNtpOrAppsPage( 1507 RedirectToNtpOrAppsPage(
1577 web_contents(), 1508 web_contents(),
1578 signin::GetSourceForPromoURL(original_continue_url_)); 1509 signin::GetSourceForPromoURL(original_continue_url_));
1579 } 1510 }
1580 } 1511 }
1581 } 1512 }
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