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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 #include "chrome/browser/ui/browser_tabstrip.h" | 47 #include "chrome/browser/ui/browser_tabstrip.h" |
48 #include "chrome/browser/ui/browser_window.h" | 48 #include "chrome/browser/ui/browser_window.h" |
49 #include "chrome/browser/ui/chrome_pages.h" | 49 #include "chrome/browser/ui/chrome_pages.h" |
50 #include "chrome/browser/ui/sync/one_click_signin_histogram.h" | 50 #include "chrome/browser/ui/sync/one_click_signin_histogram.h" |
51 #include "chrome/browser/ui/sync/one_click_signin_sync_observer.h" | 51 #include "chrome/browser/ui/sync/one_click_signin_sync_observer.h" |
52 #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h" | 52 #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h" |
53 #include "chrome/browser/ui/sync/signin_histogram.h" | 53 #include "chrome/browser/ui/sync/signin_histogram.h" |
54 #include "chrome/browser/ui/tab_modal_confirm_dialog.h" | 54 #include "chrome/browser/ui/tab_modal_confirm_dialog.h" |
55 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" | 55 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" |
56 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 56 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 57 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" |
57 #include "chrome/common/chrome_version_info.h" | 58 #include "chrome/common/chrome_version_info.h" |
58 #include "chrome/common/net/url_util.h" | 59 #include "chrome/common/net/url_util.h" |
59 #include "chrome/common/pref_names.h" | 60 #include "chrome/common/pref_names.h" |
60 #include "chrome/common/url_constants.h" | 61 #include "chrome/common/url_constants.h" |
61 #include "components/autofill/core/common/password_form.h" | 62 #include "components/autofill/core/common/password_form.h" |
62 #include "components/google/core/browser/google_util.h" | 63 #include "components/google/core/browser/google_util.h" |
63 #include "components/password_manager/core/browser/password_manager.h" | 64 #include "components/password_manager/core/browser/password_manager.h" |
64 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 65 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
65 #include "components/signin/core/browser/signin_client.h" | 66 #include "components/signin/core/browser/signin_client.h" |
66 #include "components/signin/core/browser/signin_error_controller.h" | 67 #include "components/signin/core/browser/signin_error_controller.h" |
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
637 GoogleServiceAuthError( | 638 GoogleServiceAuthError( |
638 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS).ToString()); | 639 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS).ToString()); |
639 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 640 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
640 } | 641 } |
641 } | 642 } |
642 | 643 |
643 void OneClickSigninHelper::SyncStarterWrapper::DisplayErrorBubble( | 644 void OneClickSigninHelper::SyncStarterWrapper::DisplayErrorBubble( |
644 const std::string& error_message) { | 645 const std::string& error_message) { |
645 args_.browser = OneClickSigninSyncStarter::EnsureBrowser( | 646 args_.browser = OneClickSigninSyncStarter::EnsureBrowser( |
646 args_.browser, args_.profile, desktop_type_); | 647 args_.browser, args_.profile, desktop_type_); |
647 args_.browser->window()->ShowOneClickSigninBubble( | 648 LoginUIServiceFactory::GetForProfile(args_.profile)->DisplayLoginResult( |
648 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, | 649 args_.browser, base::UTF8ToUTF16(error_message)); |
649 base::string16(), // No email required - this is not a SAML confirmation. | |
650 base::UTF8ToUTF16(error_message), | |
651 // Callback is ignored. | |
652 BrowserWindow::StartSyncCallback()); | |
653 } | 650 } |
654 | 651 |
655 void OneClickSigninHelper::SyncStarterWrapper::StartSigninOAuthHelper() { | 652 void OneClickSigninHelper::SyncStarterWrapper::StartSigninOAuthHelper() { |
656 std::string signin_scoped_device_id = GetSigninScopedDeviceId(args_.profile); | 653 std::string signin_scoped_device_id = GetSigninScopedDeviceId(args_.profile); |
657 signin_oauth_helper_.reset( | 654 signin_oauth_helper_.reset( |
658 new SigninOAuthHelper(args_.profile->GetRequestContext(), | 655 new SigninOAuthHelper(args_.profile->GetRequestContext(), |
659 args_.session_index, | 656 args_.session_index, |
660 signin_scoped_device_id, | 657 signin_scoped_device_id, |
661 this)); | 658 this)); |
662 } | 659 } |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1138 void OneClickSigninHelper::RemoveSigninRedirectURLHistoryItem( | 1135 void OneClickSigninHelper::RemoveSigninRedirectURLHistoryItem( |
1139 content::WebContents* web_contents) { | 1136 content::WebContents* web_contents) { |
1140 // Only actually remove the item if it's the blank.html continue url. | 1137 // Only actually remove the item if it's the blank.html continue url. |
1141 if (signin::IsContinueUrlForWebBasedSigninFlow( | 1138 if (signin::IsContinueUrlForWebBasedSigninFlow( |
1142 web_contents->GetLastCommittedURL())) { | 1139 web_contents->GetLastCommittedURL())) { |
1143 new CurrentHistoryCleaner(web_contents); // will self-destruct when done | 1140 new CurrentHistoryCleaner(web_contents); // will self-destruct when done |
1144 } | 1141 } |
1145 } | 1142 } |
1146 | 1143 |
1147 // static | 1144 // static |
1148 void OneClickSigninHelper::ShowSigninErrorBubble(Browser* browser, | |
1149 const std::string& error) { | |
1150 DCHECK(!error.empty()); | |
1151 | |
1152 browser->window()->ShowOneClickSigninBubble( | |
1153 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, | |
1154 base::string16(), /* no SAML email */ | |
1155 base::UTF8ToUTF16(error), | |
1156 // This callback is never invoked. | |
1157 // TODO(rogerta): Separate out the bubble API so we don't have to pass | |
1158 // ignored |email| and |callback| params. | |
1159 BrowserWindow::StartSyncCallback()); | |
1160 } | |
1161 | |
1162 // static | |
1163 bool OneClickSigninHelper::HandleCrossAccountError( | 1145 bool OneClickSigninHelper::HandleCrossAccountError( |
1164 Profile* profile, | 1146 Profile* profile, |
1165 const std::string& session_index, | 1147 const std::string& session_index, |
1166 const std::string& email, | 1148 const std::string& email, |
1167 const std::string& password, | 1149 const std::string& password, |
1168 const std::string& refresh_token, | 1150 const std::string& refresh_token, |
1169 OneClickSigninHelper::AutoAccept auto_accept, | 1151 OneClickSigninHelper::AutoAccept auto_accept, |
1170 signin::Source source, | 1152 signin::Source source, |
1171 OneClickSigninSyncStarter::StartSyncMode start_mode, | 1153 OneClickSigninSyncStarter::StartSyncMode start_mode, |
1172 OneClickSigninSyncStarter::Callback sync_callback) { | 1154 OneClickSigninSyncStarter::Callback sync_callback) { |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1365 if (!error_message_.empty() && auto_accept_ == AUTO_ACCEPT_EXPLICIT) { | 1347 if (!error_message_.empty() && auto_accept_ == AUTO_ACCEPT_EXPLICIT) { |
1366 VLOG(1) << "OneClickSigninHelper::DidStopLoading: error=" << error_message_; | 1348 VLOG(1) << "OneClickSigninHelper::DidStopLoading: error=" << error_message_; |
1367 RemoveSigninRedirectURLHistoryItem(contents); | 1349 RemoveSigninRedirectURLHistoryItem(contents); |
1368 // After we redirect to NTP, our browser pointer gets corrupted because the | 1350 // After we redirect to NTP, our browser pointer gets corrupted because the |
1369 // WebContents have changed, so grab the browser pointer | 1351 // WebContents have changed, so grab the browser pointer |
1370 // before the navigation. | 1352 // before the navigation. |
1371 Browser* browser = chrome::FindBrowserWithWebContents(contents); | 1353 Browser* browser = chrome::FindBrowserWithWebContents(contents); |
1372 | 1354 |
1373 // Redirect to the landing page and display an error popup. | 1355 // Redirect to the landing page and display an error popup. |
1374 RedirectToNtpOrAppsPage(web_contents(), source_); | 1356 RedirectToNtpOrAppsPage(web_contents(), source_); |
1375 ShowSigninErrorBubble(browser, error_message_); | 1357 LoginUIServiceFactory::GetForProfile(profile)-> |
| 1358 DisplayLoginResult(browser, base::UTF8ToUTF16(error_message_)); |
1376 CleanTransientState(); | 1359 CleanTransientState(); |
1377 return; | 1360 return; |
1378 } | 1361 } |
1379 | 1362 |
1380 if (AreWeShowingSignin(url, source_, email_)) { | 1363 if (AreWeShowingSignin(url, source_, email_)) { |
1381 if (!showing_signin_) { | 1364 if (!showing_signin_) { |
1382 if (source_ == signin::SOURCE_UNKNOWN) | 1365 if (source_ == signin::SOURCE_UNKNOWN) |
1383 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN); | 1366 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN); |
1384 else | 1367 else |
1385 LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN); | 1368 LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN); |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1614 // If the web contents is showing a blank page and not about to be closed, | 1597 // If the web contents is showing a blank page and not about to be closed, |
1615 // redirect to the NTP or apps page. | 1598 // redirect to the NTP or apps page. |
1616 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && | 1599 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && |
1617 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { | 1600 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { |
1618 RedirectToNtpOrAppsPage( | 1601 RedirectToNtpOrAppsPage( |
1619 web_contents(), | 1602 web_contents(), |
1620 signin::GetSourceForPromoURL(original_continue_url_)); | 1603 signin::GetSourceForPromoURL(original_continue_url_)); |
1621 } | 1604 } |
1622 } | 1605 } |
1623 } | 1606 } |
OLD | NEW |