| OLD | NEW |
| 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 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 } | 296 } |
| 297 } else { | 297 } else { |
| 298 // Perform a redirection to the NTP/Apps page to hide the blank page when | 298 // Perform a redirection to the NTP/Apps page to hide the blank page when |
| 299 // the action is CLOSE or CREATE_NEW_USER. The redirection is useful when | 299 // the action is CLOSE or CREATE_NEW_USER. The redirection is useful when |
| 300 // the action is CREATE_NEW_USER because the "Create new user" page might | 300 // the action is CREATE_NEW_USER because the "Create new user" page might |
| 301 // be opened in a different tab that is already showing settings. | 301 // be opened in a different tab that is already showing settings. |
| 302 if (enable_inline) { | 302 if (enable_inline) { |
| 303 // Redirect/tab closing for inline flow is handled by the sync callback. | 303 // Redirect/tab closing for inline flow is handled by the sync callback. |
| 304 args.callback.Run(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE); | 304 args.callback.Run(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE); |
| 305 } else { | 305 } else { |
| 306 // Don't redirect when the visible URL is not a blank page: if the | 306 // Redirect, but don't do so immediately; otherwise there might be two |
| 307 // source is SOURCE_WEBSTORE_INSTALL, |contents| might be showing an app | 307 // nested navigations, which would cause a crash: http://crbug.com/293261 |
| 308 // page that shouldn't be hidden. | 308 // Instead, post a task to the current thread. |
| 309 // | 309 base::MessageLoopProxy::current()->PostNonNestableTask( |
| 310 // If redirecting, don't do so immediately, otherwise there may be 2 | 310 FROM_HERE, |
| 311 // nested navigations and a crash would occur (crbug.com/293261). Post | 311 base::Bind(RedirectToNtpOrAppsPageWithIds, |
| 312 // the task to the current thread instead. | 312 contents->GetRenderProcessHost()->GetID(), |
| 313 if (signin::IsContinueUrlForWebBasedSigninFlow( | 313 contents->GetRoutingID(), |
| 314 contents->GetVisibleURL())) { | 314 args.source)); |
| 315 base::MessageLoopProxy::current()->PostNonNestableTask( | |
| 316 FROM_HERE, | |
| 317 base::Bind(RedirectToNtpOrAppsPageWithIds, | |
| 318 contents->GetRenderProcessHost()->GetID(), | |
| 319 contents->GetRoutingID(), | |
| 320 args.source)); | |
| 321 } | |
| 322 } | 315 } |
| 323 if (action == ConfirmEmailDialogDelegate::CREATE_NEW_USER) { | 316 if (action == ConfirmEmailDialogDelegate::CREATE_NEW_USER) { |
| 324 chrome::ShowSettingsSubPage(args.browser, | 317 chrome::ShowSettingsSubPage(args.browser, |
| 325 std::string(chrome::kCreateProfileSubPage)); | 318 std::string(chrome::kCreateProfileSubPage)); |
| 326 } | 319 } |
| 327 } | 320 } |
| 328 } | 321 } |
| 329 | 322 |
| 330 void ClearPendingEmailOnIOThread(content::ResourceContext* context) { | 323 void ClearPendingEmailOnIOThread(content::ResourceContext* context) { |
| 331 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); | 324 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 session_index(session_index), | 514 session_index(session_index), |
| 522 email(email), | 515 email(email), |
| 523 password(password), | 516 password(password), |
| 524 refresh_token(refresh_token), | 517 refresh_token(refresh_token), |
| 525 web_contents(web_contents), | 518 web_contents(web_contents), |
| 526 source(source), | 519 source(source), |
| 527 callback(callback) { | 520 callback(callback) { |
| 528 DCHECK(session_index.empty() != refresh_token.empty()); | 521 DCHECK(session_index.empty() != refresh_token.empty()); |
| 529 if (untrusted_confirmation_required) { | 522 if (untrusted_confirmation_required) { |
| 530 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; | 523 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; |
| 531 } else if (source == signin::SOURCE_SETTINGS || | 524 } else if (source == signin::SOURCE_SETTINGS) { |
| 532 source == signin::SOURCE_WEBSTORE_INSTALL) { | 525 // Do not display a status confirmation for re-auth. |
| 533 // Do not display a status confirmation for webstore installs or re-auth. | |
| 534 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION; | 526 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION; |
| 535 } else { | 527 } else { |
| 536 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; | 528 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; |
| 537 } | 529 } |
| 538 } | 530 } |
| 539 | 531 |
| 540 OneClickSigninHelper::StartSyncArgs::~StartSyncArgs() {} | 532 OneClickSigninHelper::StartSyncArgs::~StartSyncArgs() {} |
| 541 | 533 |
| 542 // SyncStarterWrapper --------------------------------------------------------- | 534 // SyncStarterWrapper --------------------------------------------------------- |
| 543 | 535 |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 720 one_click_signin::HISTOGRAM_MAX); | 712 one_click_signin::HISTOGRAM_MAX); |
| 721 break; | 713 break; |
| 722 case signin::SOURCE_SETTINGS: | 714 case signin::SOURCE_SETTINGS: |
| 723 UMA_HISTOGRAM_ENUMERATION("Signin.SettingsActions", action, | 715 UMA_HISTOGRAM_ENUMERATION("Signin.SettingsActions", action, |
| 724 one_click_signin::HISTOGRAM_MAX); | 716 one_click_signin::HISTOGRAM_MAX); |
| 725 break; | 717 break; |
| 726 case signin::SOURCE_EXTENSION_INSTALL_BUBBLE: | 718 case signin::SOURCE_EXTENSION_INSTALL_BUBBLE: |
| 727 UMA_HISTOGRAM_ENUMERATION("Signin.ExtensionInstallBubbleActions", action, | 719 UMA_HISTOGRAM_ENUMERATION("Signin.ExtensionInstallBubbleActions", action, |
| 728 one_click_signin::HISTOGRAM_MAX); | 720 one_click_signin::HISTOGRAM_MAX); |
| 729 break; | 721 break; |
| 730 case signin::SOURCE_WEBSTORE_INSTALL: | |
| 731 UMA_HISTOGRAM_ENUMERATION("Signin.WebstoreInstallActions", action, | |
| 732 one_click_signin::HISTOGRAM_MAX); | |
| 733 break; | |
| 734 case signin::SOURCE_APP_LAUNCHER: | 722 case signin::SOURCE_APP_LAUNCHER: |
| 735 UMA_HISTOGRAM_ENUMERATION("Signin.AppLauncherActions", action, | 723 UMA_HISTOGRAM_ENUMERATION("Signin.AppLauncherActions", action, |
| 736 one_click_signin::HISTOGRAM_MAX); | 724 one_click_signin::HISTOGRAM_MAX); |
| 737 break; | 725 break; |
| 738 case signin::SOURCE_APPS_PAGE_LINK: | 726 case signin::SOURCE_APPS_PAGE_LINK: |
| 739 UMA_HISTOGRAM_ENUMERATION("Signin.AppsPageLinkActions", action, | 727 UMA_HISTOGRAM_ENUMERATION("Signin.AppsPageLinkActions", action, |
| 740 one_click_signin::HISTOGRAM_MAX); | 728 one_click_signin::HISTOGRAM_MAX); |
| 741 break; | 729 break; |
| 742 case signin::SOURCE_BOOKMARK_BUBBLE: | 730 case signin::SOURCE_BOOKMARK_BUBBLE: |
| 743 UMA_HISTOGRAM_ENUMERATION("Signin.BookmarkBubbleActions", action, | 731 UMA_HISTOGRAM_ENUMERATION("Signin.BookmarkBubbleActions", action, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 754 case signin::SOURCE_DEVICES_PAGE: | 742 case signin::SOURCE_DEVICES_PAGE: |
| 755 UMA_HISTOGRAM_ENUMERATION("Signin.DevicesPageActions", action, | 743 UMA_HISTOGRAM_ENUMERATION("Signin.DevicesPageActions", action, |
| 756 one_click_signin::HISTOGRAM_MAX); | 744 one_click_signin::HISTOGRAM_MAX); |
| 757 break; | 745 break; |
| 758 case signin::SOURCE_REAUTH: | 746 case signin::SOURCE_REAUTH: |
| 759 UMA_HISTOGRAM_ENUMERATION("Signin.ReauthActions", action, | 747 UMA_HISTOGRAM_ENUMERATION("Signin.ReauthActions", action, |
| 760 one_click_signin::HISTOGRAM_MAX); | 748 one_click_signin::HISTOGRAM_MAX); |
| 761 break; | 749 break; |
| 762 default: | 750 default: |
| 763 // This switch statement needs to be updated when the enum Source changes. | 751 // This switch statement needs to be updated when the enum Source changes. |
| 764 COMPILE_ASSERT(signin::SOURCE_UNKNOWN == 13, | 752 COMPILE_ASSERT(signin::SOURCE_UNKNOWN == 12, |
| 765 kSourceEnumHasChangedButNotThisSwitchStatement); | 753 kSourceEnumHasChangedButNotThisSwitchStatement); |
| 766 UMA_HISTOGRAM_ENUMERATION("Signin.UnknownActions", action, | 754 UMA_HISTOGRAM_ENUMERATION("Signin.UnknownActions", action, |
| 767 one_click_signin::HISTOGRAM_MAX); | 755 one_click_signin::HISTOGRAM_MAX); |
| 768 } | 756 } |
| 769 UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action, | 757 UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action, |
| 770 one_click_signin::HISTOGRAM_MAX); | 758 one_click_signin::HISTOGRAM_MAX); |
| 771 } | 759 } |
| 772 | 760 |
| 773 // static | 761 // static |
| 774 void OneClickSigninHelper::CreateForWebContentsWithPasswordManager( | 762 void OneClickSigninHelper::CreateForWebContentsWithPasswordManager( |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1205 content::Referrer(), | 1193 content::Referrer(), |
| 1206 CURRENT_TAB, | 1194 CURRENT_TAB, |
| 1207 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, | 1195 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, |
| 1208 false); | 1196 false); |
| 1209 contents->OpenURL(params); | 1197 contents->OpenURL(params); |
| 1210 } | 1198 } |
| 1211 | 1199 |
| 1212 // static | 1200 // static |
| 1213 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary( | 1201 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary( |
| 1214 content::WebContents* contents, signin::Source source) { | 1202 content::WebContents* contents, signin::Source source) { |
| 1215 if (source != signin::SOURCE_SETTINGS && | 1203 if (source != signin::SOURCE_SETTINGS) { |
| 1216 source != signin::SOURCE_WEBSTORE_INSTALL) { | |
| 1217 RedirectToNtpOrAppsPage(contents, source); | 1204 RedirectToNtpOrAppsPage(contents, source); |
| 1218 } | 1205 } |
| 1219 } | 1206 } |
| 1220 | 1207 |
| 1221 void OneClickSigninHelper::RedirectToSignin() { | 1208 void OneClickSigninHelper::RedirectToSignin() { |
| 1222 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; | 1209 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; |
| 1223 | 1210 |
| 1224 // Extract the existing sounce=X value. Default to "2" if missing. | 1211 // Extract the existing sounce=X value. Default to "2" if missing. |
| 1225 signin::Source source = signin::GetSourceForPromoURL(continue_url_); | 1212 signin::Source source = signin::GetSourceForPromoURL(continue_url_); |
| 1226 if (source == signin::SOURCE_UNKNOWN) | 1213 if (source == signin::SOURCE_UNKNOWN) |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1548 start_mode); | 1535 start_mode); |
| 1549 } | 1536 } |
| 1550 | 1537 |
| 1551 // If this explicit sign in is not from settings page/webstore, show | 1538 // If this explicit sign in is not from settings page/webstore, show |
| 1552 // the NTP/Apps page after sign in completes. In the case of the | 1539 // the NTP/Apps page after sign in completes. In the case of the |
| 1553 // settings page, it will get auto-closed after sync setup. In the case | 1540 // settings page, it will get auto-closed after sync setup. In the case |
| 1554 // of webstore, it will redirect back to webstore. | 1541 // of webstore, it will redirect back to webstore. |
| 1555 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_); | 1542 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_); |
| 1556 } | 1543 } |
| 1557 | 1544 |
| 1558 // Observe the sync service if the Webstore tab or the settings tab | 1545 // Observe the sync service if the settings tab requested a gaia sign in, |
| 1559 // requested a gaia sign in, so that when sign in and sync setup are | 1546 // so that when sign in and sync setup are successful, we can redirect to |
| 1560 // successful, we can redirect to the correct URL, or auto-close the gaia | 1547 // the correct URL, or auto-close the gaia sign in tab. |
| 1561 // sign in tab. | 1548 if (original_source == signin::SOURCE_SETTINGS) { |
| 1562 if (original_source == signin::SOURCE_SETTINGS || | |
| 1563 (original_source == signin::SOURCE_WEBSTORE_INSTALL && | |
| 1564 source_ == signin::SOURCE_SETTINGS)) { | |
| 1565 // The observer deletes itself once it's done. | 1549 // The observer deletes itself once it's done. |
| 1566 new OneClickSigninSyncObserver(contents, original_continue_url_); | 1550 new OneClickSigninSyncObserver(contents, original_continue_url_); |
| 1567 } | 1551 } |
| 1568 break; | 1552 break; |
| 1569 } | 1553 } |
| 1570 case AUTO_ACCEPT_REJECTED_FOR_PROFILE: | 1554 case AUTO_ACCEPT_REJECTED_FOR_PROFILE: |
| 1571 AddEmailToOneClickRejectedList(profile, email_); | 1555 AddEmailToOneClickRejectedList(profile, email_); |
| 1572 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); | 1556 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); |
| 1573 break; | 1557 break; |
| 1574 default: | 1558 default: |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1597 // If the web contents is showing a blank page and not about to be closed, | 1581 // If the web contents is showing a blank page and not about to be closed, |
| 1598 // redirect to the NTP or apps page. | 1582 // redirect to the NTP or apps page. |
| 1599 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && | 1583 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && |
| 1600 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { | 1584 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { |
| 1601 RedirectToNtpOrAppsPage( | 1585 RedirectToNtpOrAppsPage( |
| 1602 web_contents(), | 1586 web_contents(), |
| 1603 signin::GetSourceForPromoURL(original_continue_url_)); | 1587 signin::GetSourceForPromoURL(original_continue_url_)); |
| 1604 } | 1588 } |
| 1605 } | 1589 } |
| 1606 } | 1590 } |
| OLD | NEW |