| 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 // The signin manager encapsulates some functionality tracking | 5 // The signin manager encapsulates some functionality tracking |
| 6 // which user is signed in. | 6 // which user is signed in. |
| 7 // | 7 // |
| 8 // **NOTE** on semantics of SigninManager: | 8 // **NOTE** on semantics of SigninManager: |
| 9 // | 9 // |
| 10 // Once a signin is successful, the username becomes "established" and will not | 10 // Once a signin is successful, the username becomes "established" and will not |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 | 55 |
| 56 // Details for the Notification type NOTIFICATION_GOOGLE_SIGNED_OUT. | 56 // Details for the Notification type NOTIFICATION_GOOGLE_SIGNED_OUT. |
| 57 struct GoogleServiceSignoutDetails { | 57 struct GoogleServiceSignoutDetails { |
| 58 explicit GoogleServiceSignoutDetails(const std::string& in_username) | 58 explicit GoogleServiceSignoutDetails(const std::string& in_username) |
| 59 : username(in_username) {} | 59 : username(in_username) {} |
| 60 std::string username; | 60 std::string username; |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 class SigninManagerBase : public ProfileKeyedService { | 63 class SigninManagerBase : public ProfileKeyedService { |
| 64 public: | 64 public: |
| 65 // Returns true if the username is allowed based on the policy string. | |
| 66 static bool IsAllowedUsername(const std::string& username, | |
| 67 const std::string& policy); | |
| 68 | |
| 69 SigninManagerBase(); | 65 SigninManagerBase(); |
| 70 virtual ~SigninManagerBase(); | 66 virtual ~SigninManagerBase(); |
| 71 | 67 |
| 72 // If user was signed in, load tokens from DB if available. | 68 // If user was signed in, load tokens from DB if available. |
| 73 void Initialize(Profile* profile); | 69 virtual void Initialize(Profile* profile); |
| 74 bool IsInitialized() const; | 70 bool IsInitialized() const; |
| 75 | 71 |
| 76 // Returns true if the passed username is allowed by policy. Virtual for | |
| 77 // mocking in tests. | |
| 78 virtual bool IsAllowedUsername(const std::string& username) const; | |
| 79 | |
| 80 // Returns true if a signin to Chrome is allowed (by policy or pref). | 72 // Returns true if a signin to Chrome is allowed (by policy or pref). |
| 81 bool IsSigninAllowed() const; | 73 // TODO(tim): kSigninAllowed is defined for all platforms in pref_names.h. |
| 82 | 74 // If kSigninAllowed pref was non-Chrome OS-only, this method wouldn't be |
| 83 // Checks if signin is allowed for the profile that owns |io_data|. This must | 75 // needed, but as is we provide this method to let all interested code |
| 84 // be invoked on the IO thread, and can be used to check if signin is enabled | 76 // code query the value in one way, versus half using PrefService directly |
| 85 // on that thread. | 77 // and the other half using SigninManager. |
| 86 static bool IsSigninAllowedOnIOThread(ProfileIOData* io_data); | 78 virtual bool IsSigninAllowed() const; |
| 87 | 79 |
| 88 // If a user has previously established a username and SignOut has not been | 80 // If a user has previously established a username and SignOut has not been |
| 89 // called, this will return the username. | 81 // called, this will return the username. |
| 90 // Otherwise, it will return an empty string. | 82 // Otherwise, it will return an empty string. |
| 91 const std::string& GetAuthenticatedUsername() const; | 83 const std::string& GetAuthenticatedUsername() const; |
| 92 | 84 |
| 93 // Sets the user name. Note: |username| should be already authenticated as | 85 // Sets the user name. Note: |username| should be already authenticated as |
| 94 // this is a sticky operation (in contrast to StartSignIn). | 86 // this is a sticky operation (in contrast to StartSignIn). |
| 95 // TODO(tim): Remove this in favor of passing username on construction by | 87 // TODO(tim): Remove this in favor of passing username on construction by |
| 96 // (by platform / depending on StartBehavior). Bug 88109. | 88 // (by platform / depending on StartBehavior). Bug 88109. |
| 97 void SetAuthenticatedUsername(const std::string& username); | 89 void SetAuthenticatedUsername(const std::string& username); |
| 98 | 90 |
| 99 // Sign a user out, removing the preference, erasing all keys | |
| 100 // associated with the user, and canceling all auth in progress. | |
| 101 // TODO(tim): Remove SignOut here, it belongs in the derived class. | |
| 102 // Bug 174927. | |
| 103 virtual void SignOut(); | |
| 104 | |
| 105 // Returns true if there's a signin in progress. | 91 // Returns true if there's a signin in progress. |
| 106 virtual bool AuthInProgress() const; | 92 virtual bool AuthInProgress() const; |
| 107 | 93 |
| 108 SigninGlobalError* signin_global_error() { | 94 SigninGlobalError* signin_global_error() { |
| 109 return signin_global_error_.get(); | 95 return signin_global_error_.get(); |
| 110 } | 96 } |
| 111 | 97 |
| 112 const SigninGlobalError* signin_global_error() const { | 98 const SigninGlobalError* signin_global_error() const { |
| 113 return signin_global_error_.get(); | 99 return signin_global_error_.get(); |
| 114 } | 100 } |
| 115 | 101 |
| 116 // ProfileKeyedService implementation. | 102 // ProfileKeyedService implementation. |
| 117 virtual void Shutdown() OVERRIDE; | 103 virtual void Shutdown() OVERRIDE; |
| 118 | 104 |
| 119 // Methods to register or remove SigninDiagnosticObservers | 105 // Methods to register or remove SigninDiagnosticObservers |
| 120 void AddSigninDiagnosticsObserver( | 106 void AddSigninDiagnosticsObserver( |
| 121 signin_internals_util::SigninDiagnosticsObserver* observer); | 107 signin_internals_util::SigninDiagnosticsObserver* observer); |
| 122 void RemoveSigninDiagnosticsObserver( | 108 void RemoveSigninDiagnosticsObserver( |
| 123 signin_internals_util::SigninDiagnosticsObserver* observer); | 109 signin_internals_util::SigninDiagnosticsObserver* observer); |
| 124 | 110 |
| 125 protected: | 111 protected: |
| 126 // Lets different platforms initialize TokenService in their own way. | 112 // Lets different platforms initialize TokenService in their own way. |
| 127 virtual void InitTokenService(); | 113 virtual void InitTokenService(); |
| 128 | 114 |
| 115 // Used by subclass to clear authenticated_username_ instead of using |
| 116 // SetAuthenticatedUsername, which enforces special preconditions due |
| 117 // to the fact that it is part of the public API and called by clients. |
| 118 void clear_authenticated_username(); |
| 119 |
| 129 // Pointer to parent profile (protected so FakeSigninManager can access | 120 // Pointer to parent profile (protected so FakeSigninManager can access |
| 130 // it). | 121 // it). |
| 131 Profile* profile_; | 122 Profile* profile_; |
| 132 | 123 |
| 133 // Used to show auth errors in the wrench menu. The SigninGlobalError is | 124 // Used to show auth errors in the wrench menu. The SigninGlobalError is |
| 134 // different than most GlobalErrors in that its lifetime is controlled by | 125 // different than most GlobalErrors in that its lifetime is controlled by |
| 135 // SigninManager (so we can expose a reference for use in the wrench menu). | 126 // SigninManager (so we can expose a reference for use in the wrench menu). |
| 136 scoped_ptr<SigninGlobalError> signin_global_error_; | 127 scoped_ptr<SigninGlobalError> signin_global_error_; |
| 137 | 128 |
| 138 // Helper methods to notify all registered diagnostics observers with. | 129 // Helper methods to notify all registered diagnostics observers with. |
| 139 void NotifyDiagnosticsObservers( | 130 void NotifyDiagnosticsObservers( |
| 140 const signin_internals_util::UntimedSigninStatusField& field, | 131 const signin_internals_util::UntimedSigninStatusField& field, |
| 141 const std::string& value); | 132 const std::string& value); |
| 142 void NotifyDiagnosticsObservers( | 133 void NotifyDiagnosticsObservers( |
| 143 const signin_internals_util::TimedSigninStatusField& field, | 134 const signin_internals_util::TimedSigninStatusField& field, |
| 144 const std::string& value); | 135 const std::string& value); |
| 145 | 136 |
| 146 private: | 137 private: |
| 147 friend class FakeSigninManagerBase; | 138 friend class FakeSigninManagerBase; |
| 148 friend class FakeSigninManager; | 139 friend class FakeSigninManager; |
| 149 void OnGoogleServicesUsernamePatternChanged(); | |
| 150 | |
| 151 void OnSigninAllowedPrefChanged(); | |
| 152 | |
| 153 // Helper object to listen for changes to signin preferences stored in non- | |
| 154 // profile-specific local prefs (like kGoogleServicesUsernamePattern). | |
| 155 PrefChangeRegistrar local_state_pref_registrar_; | |
| 156 | |
| 157 // Helper object to listen for changes to the signin allowed preference. | |
| 158 BooleanPrefMember signin_allowed_; | |
| 159 | 140 |
| 160 // Actual username after successful authentication. | 141 // Actual username after successful authentication. |
| 161 std::string authenticated_username_; | 142 std::string authenticated_username_; |
| 162 | 143 |
| 163 // The list of SigninDiagnosticObservers. | 144 // The list of SigninDiagnosticObservers. |
| 164 ObserverList<signin_internals_util::SigninDiagnosticsObserver, true> | 145 ObserverList<signin_internals_util::SigninDiagnosticsObserver, true> |
| 165 signin_diagnostics_observers_; | 146 signin_diagnostics_observers_; |
| 166 | 147 |
| 167 base::WeakPtrFactory<SigninManagerBase> weak_pointer_factory_; | 148 base::WeakPtrFactory<SigninManagerBase> weak_pointer_factory_; |
| 168 | 149 |
| 169 DISALLOW_COPY_AND_ASSIGN(SigninManagerBase); | 150 DISALLOW_COPY_AND_ASSIGN(SigninManagerBase); |
| 170 }; | 151 }; |
| 171 | 152 |
| 172 #endif // CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_BASE_H_ | 153 #endif // CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_BASE_H_ |
| OLD | NEW |