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

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

Issue 914363003: Remove OneClickSigninHelper since it is no longer used. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ocl
Patch Set: rebased Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/sync/one_click_signin_helper.h
diff --git a/chrome/browser/ui/sync/one_click_signin_helper.h b/chrome/browser/ui/sync/one_click_signin_helper.h
deleted file mode 100644
index 335ad333f65b495ee8a6a3c3ee4deee7471ac9d1..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/sync/one_click_signin_helper.h
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_SYNC_ONE_CLICK_SIGNIN_HELPER_H_
-#define CHROME_BROWSER_UI_SYNC_ONE_CLICK_SIGNIN_HELPER_H_
-
-#include <string>
-
-#include "base/gtest_prod_util.h"
-#include "base/memory/weak_ptr.h"
-#include "chrome/browser/signin/signin_promo.h"
-#include "chrome/browser/sync/profile_sync_service_observer.h"
-#include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
-#include "components/signin/core/browser/signin_oauth_helper.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "content/public/browser/web_contents_user_data.h"
-#include "google_apis/gaia/google_service_auth_error.h"
-
-class Browser;
-class GURL;
-class ProfileIOData;
-
-namespace autofill {
-struct PasswordForm;
-}
-
-namespace content {
-class WebContents;
-struct FrameNavigateParams;
-struct LoadCommittedDetails;
-}
-
-namespace net {
-class URLRequest;
-}
-
-namespace password_manager {
-class PasswordManager;
-}
-
-// Per-tab one-click signin helper. When a user signs in to a Google service
-// and the profile is not yet connected to a Google account, will start the
-// process of helping the user connect his profile with one click. The process
-// begins with an infobar and is followed with a confirmation dialog explaining
-// more about what this means.
-class OneClickSigninHelper
- : public content::WebContentsObserver,
- public content::WebContentsUserData<OneClickSigninHelper> {
- public:
- // Represents user's decision about sign in process.
- enum AutoAccept {
- // User decision not yet known. Assume cancel.
- AUTO_ACCEPT_NONE,
-
- // User has explicitly accepted to sign in. A bubble is shown with the
- // option to start sync, configure it first, or abort.
- AUTO_ACCEPT_ACCEPTED,
-
- // User has explicitly accepted to sign in, but wants to configure sync
- // settings before turning it on.
- AUTO_ACCEPT_CONFIGURE,
-
- // User has explicitly rejected to sign in. Furthermore, the user does
- // not want to be prompted to see the interstitial again in this profile.
- AUTO_ACCEPT_REJECTED_FOR_PROFILE,
-
- // This is an explicit sign in from either first run, NTP, wrench menu,
- // or settings page. The user will be signed in automatically with sync
- // enabled using default settings.
- AUTO_ACCEPT_EXPLICIT
- };
-
- // Return value of CanOfferOnIOThread().
- enum Offer {
- CAN_OFFER,
- DONT_OFFER,
- IGNORE_REQUEST
- };
-
- // Argument to CanOffer().
- enum CanOfferFor {
- CAN_OFFER_FOR_ALL,
- CAN_OFFER_FOR_INTERSTITAL_ONLY,
- CAN_OFFER_FOR_SECONDARY_ACCOUNT
- // TODO(guohui): needs to handle adding secondary account through
- // interstitial.
- };
-
- // Arguments used with StartSync function. base::Bind() cannot support too
- // many args for performance reasons, so they are packaged up into a struct.
- struct StartSyncArgs {
- // Default contructor for testing only.
- StartSyncArgs();
- StartSyncArgs(Profile* profile,
- Browser* browser,
- OneClickSigninHelper::AutoAccept auto_accept,
- const std::string& session_index,
- const std::string& email,
- const std::string& password,
- const std::string& refresh_token,
- content::WebContents* web_contents,
- bool untrusted_confirmation_required,
- signin_metrics::Source source,
- OneClickSigninSyncStarter::Callback callback);
- ~StartSyncArgs();
-
- Profile* profile;
- Browser* browser;
- OneClickSigninHelper::AutoAccept auto_accept;
- std::string session_index;
- std::string email;
- std::string password;
- std::string refresh_token;
-
- // Web contents in which the sync setup page should be displayed,
- // if necessary. Can be NULL.
- content::WebContents* web_contents;
-
- OneClickSigninSyncStarter::ConfirmationRequired confirmation_required;
- signin_metrics::Source source;
- OneClickSigninSyncStarter::Callback callback;
- };
-
- // Wrapper to call OneClickSigninSyncStarter after fetching the refresh token
- // if needed. Also verifies that the cookies are correct if no password is
- // specified, and checks that the email from the cookies match the expected
- // email address.
- class SyncStarterWrapper : public SigninOAuthHelper::Consumer,
- public chrome::BrowserListObserver {
- public:
- SyncStarterWrapper(
- const OneClickSigninHelper::StartSyncArgs& args,
- OneClickSigninSyncStarter::StartSyncMode start_mode);
- ~SyncStarterWrapper() override;
-
- void Start();
-
- private:
- void VerifyGaiaCookiesBeforeSignIn();
- void OnGaiaCookiesFetched(const std::string session_index,
- const net::CookieList& cookie_list);
-
- // Virtual to be overridden in tests.
- virtual void DisplayErrorBubble(const std::string& error_message);
- virtual void StartSigninOAuthHelper();
- virtual void StartOneClickSigninSyncStarter(
- const std::string& email,
- const std::string& refresh_token);
-
- // Overriden from SigninOAuthHelper::Consumer.
- void OnSigninOAuthInformationAvailable(
- const std::string& email,
- const std::string& display_email,
- const std::string& refresh_token) override;
- void OnSigninOAuthInformationFailure(
- const GoogleServiceAuthError& error) override;
-
- // Overriden from chrome::BrowserListObserver.
- void OnBrowserRemoved(Browser* browser) override;
-
- OneClickSigninHelper::StartSyncArgs args_;
- chrome::HostDesktopType desktop_type_;
- OneClickSigninSyncStarter::StartSyncMode start_mode_;
- scoped_ptr<SigninOAuthHelper> signin_oauth_helper_;
- base::WeakPtrFactory<SyncStarterWrapper> weak_pointer_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(SyncStarterWrapper);
- };
-
- static void LogHistogramValue(int action);
-
- // Returns true if the one-click signin feature can be offered at this time.
- // If |email| is not empty, then the profile is checked to see if it's
- // already connected to a google account or if the user has already rejected
- // one-click sign-in with this email, in which cases a one click signin
- // should not be offered.
- //
- // If |can_offer_for| is |CAN_OFFER_FOR_INTERSTITAL_ONLY|, then only do the
- // checks that would affect the interstitial page. Otherwise, do the checks
- // that would affect the interstitial and the explicit sign ins.
- //
- // Returns in |error_message_id| an explanation as a string resource ID for
- // why one-clicked cannot be offered. |error_message_id| is valid only if
- // the return value is false. If no explanation is needed, |error_message_id|
- // may be null.
- static bool CanOffer(content::WebContents* web_contents,
- CanOfferFor can_offer_for,
- const std::string& email,
- std::string* error_message);
-
- // Returns true if the one-click signin feature can be offered at this time.
- // It can be offered if the io_data is not in an incognito window and if the
- // origin of |url| is a valid Gaia sign in origin. This function is meant
- // to called only from the IO thread.
- static Offer CanOfferOnIOThread(net::URLRequest* request,
- ProfileIOData* io_data);
-
- // Looks for the Google-Accounts-SignIn response header, and if found,
- // tries to display an infobar in the tab contents identified by the
- // child/route id.
- static void ShowInfoBarIfPossible(net::URLRequest* request,
- ProfileIOData* io_data,
- int child_id,
- int route_id);
-
- // Handles cross account sign in error. If the supplied |email| does not match
- // the last signed in email of the current profile, then Chrome will show a
- // confirmation dialog before starting sync. It returns true if there is a
- // cross account error, and false otherwise.
- static bool HandleCrossAccountError(
- Profile* profile,
- const std::string& session_index,
- const std::string& email,
- const std::string& password,
- const std::string& refresh_token,
- OneClickSigninHelper::AutoAccept auto_accept,
- signin_metrics::Source source,
- OneClickSigninSyncStarter::StartSyncMode start_mode,
- OneClickSigninSyncStarter::Callback sync_callback);
-
- static void RedirectToNtpOrAppsPage(
- content::WebContents* contents, signin_metrics::Source source);
-
- // If the |source| is not settings page/webstore, redirects to
- // the NTP/Apps page.
- static void RedirectToNtpOrAppsPageIfNecessary(
- content::WebContents* contents, signin_metrics::Source source);
-
- // Remove the item currently at the top of the history list if it's
- // the Gaia redirect URL. Due to limitations of the NavigationController
- // this cannot be done until a new page becomes "current".
- static void RemoveSigninRedirectURLHistoryItem(
- content::WebContents* web_contents);
-
- static void LogConfirmHistogramValue(int action);
-
- private:
- friend class content::WebContentsUserData<OneClickSigninHelper>;
- friend class OneClickSigninHelperTest;
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIncognitoTest,
- ShowInfoBarUIThreadIncognito);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperTest,
- SigninFromWebstoreWithConfigSyncfirst);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperTest,
- ShowSigninBubbleAfterSigninComplete);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperTest, SigninCancelled);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperTest, SigninFailed);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperTest,
- CleanTransientStateOnNavigate);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest, CanOfferOnIOThread);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadIncognito);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadNoIOData);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadBadURL);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadDisabled);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadSignedIn);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadEmailNotAllowed);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadEmailAlreadyUsed);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CreateTestProfileIOData);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadWithRejectedEmail);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadNoSigninCookies);
- FRIEND_TEST_ALL_PREFIXES(OneClickSigninHelperIOTest,
- CanOfferOnIOThreadDisabledByPolicy);
-
- // Maximum number of navigations away from the set of valid Gaia URLs before
- // clearing the internal state of the helper. This is necessary to support
- // SAML-based accounts, but causes bug crbug.com/181163.
- static const int kMaxNavigationsSince;
-
- explicit OneClickSigninHelper(content::WebContents* web_contents);
-
- ~OneClickSigninHelper() override;
-
- // Returns true if the one-click signin feature can be offered at this time.
- // It can be offered if the io_data is not in an incognito window and if the
- // origin of |url| is a valid Gaia sign in origin. This function is meant
- // to called only from the IO thread.
- static Offer CanOfferOnIOThreadImpl(const GURL& url,
- base::SupportsUserData* request,
- ProfileIOData* io_data);
-
- // The portion of ShowInfoBarIfPossible() that needs to run on the UI thread.
- // |session_index| and |email| are extracted from the Google-Accounts-SignIn
- // header. |auto_accept| is extracted from the Google-Chrome-SignIn header.
- // |source| is used to determine which of the explicit sign in mechanism is
- // being used.
- //
- // |continue_url| is where Gaia will continue to when the sign in process is
- // done. For explicit sign ins, this is a URL chrome controls. For one-click
- // sign in, this could be any google property. This URL is used to know
- // when the sign process is over and to collect infomation from the user
- // entered on the Gaia sign in page (for explicit sign ins).
- static void ShowInfoBarUIThread(const std::string& session_index,
- const std::string& email,
- AutoAccept auto_accept,
- signin_metrics::Source source,
- const GURL& continue_url,
- int child_id,
- int route_id);
-
- void RedirectToSignin();
-
- // Clear all data member of the helper, except for the error.
- void CleanTransientState();
-
- // Unitests that use a TestingProfile should call this.
- // Otherwise, clearing the pending e-mail crashes because the code expects
- // a real ResourceContext rather than the MockResourceContext a
- // TestingProfile provides.
- void SetDoNotClearPendingEmailForTesting();
-
- // In unit tests, disable starting the actual sync.
- void set_do_not_start_sync_for_testing();
-
- // Called when password has been submitted.
- void PasswordSubmitted(const autofill::PasswordForm& form);
-
- // content::WebContentsObserver overrides.
- void DidStartNavigationToPendingEntry(
- const GURL& url,
- content::NavigationController::ReloadType reload_type) override;
- void DidNavigateMainFrame(
- const content::LoadCommittedDetails& details,
- const content::FrameNavigateParams& params) override;
- void DidStopLoading(content::RenderViewHost* render_view_host) override;
-
- // Tracks if we are in the process of showing the signin or one click
- // interstitial page. It's set to true the first time we load one of those
- // pages and set to false when transient state is cleaned.
- // Note: This should only be used for logging purposes.
- bool showing_signin_;
-
- // Information about the account that has just logged in.
- std::string session_index_;
- std::string email_;
- std::string password_;
- AutoAccept auto_accept_;
- signin_metrics::Source source_;
- bool switched_to_advanced_;
- GURL continue_url_;
- // The orignal continue URL after sync setup is complete.
- GURL original_continue_url_;
- std::string error_message_;
-
- // Number of navigations since starting a sign in that is outside the
- // the set of trusted Gaia URLs. Sign in attempts that include visits to
- // one more untrusted will cause a modal dialog to appear asking the user
- // to confirm, similar to the interstitial flow.
- int untrusted_navigations_since_signin_visit_;
-
- // Whether a Gaia URL during the sign in process was not handled by the
- // dedicated sign in process (e.g. SAML login, which redirects to a
- // non-google-controlled domain).
- // This is set to true if at least one such URL is detected.
- bool untrusted_confirmation_required_;
-
- // Allows unittests to avoid accessing the ResourceContext for clearing a
- // pending e-mail.
- bool do_not_clear_pending_email_;
-
- // Allows unittest to avoid starting sync for real.
- bool do_not_start_sync_for_testing_;
-
- base::WeakPtrFactory<OneClickSigninHelper> weak_pointer_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(OneClickSigninHelper);
-};
-
-#endif // CHROME_BROWSER_UI_SYNC_ONE_CLICK_SIGNIN_HELPER_H_

Powered by Google App Engine
This is Rietveld 408576698