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

Side by Side Diff: chrome/browser/signin/signin_manager.cc

Issue 12088040: Add a SigninAllowed policy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Some bugfixes. Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
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/signin/signin_manager.h" 5 #include "chrome/browser/signin/signin_manager.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/string_split.h" 13 #include "base/string_split.h"
14 #include "base/string_util.h" 14 #include "base/string_util.h"
15 #include "base/time.h" 15 #include "base/time.h"
16 #include "base/utf_string_conversions.h" 16 #include "base/utf_string_conversions.h"
17 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/content_settings/cookie_settings.h" 18 #include "chrome/browser/content_settings/cookie_settings.h"
19 #include "chrome/browser/prefs/pref_service.h" 19 #include "chrome/browser/prefs/pref_service.h"
20 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/profiles/profile_io_data.h"
21 #include "chrome/browser/signin/about_signin_internals.h" 22 #include "chrome/browser/signin/about_signin_internals.h"
22 #include "chrome/browser/signin/about_signin_internals_factory.h" 23 #include "chrome/browser/signin/about_signin_internals_factory.h"
23 #include "chrome/browser/signin/signin_global_error.h" 24 #include "chrome/browser/signin/signin_global_error.h"
24 #include "chrome/browser/signin/signin_internals_util.h" 25 #include "chrome/browser/signin/signin_internals_util.h"
25 #include "chrome/browser/signin/token_service.h" 26 #include "chrome/browser/signin/token_service.h"
26 #include "chrome/browser/signin/token_service_factory.h" 27 #include "chrome/browser/signin/token_service_factory.h"
27 #include "chrome/browser/sync/profile_sync_service.h" 28 #include "chrome/browser/sync/profile_sync_service.h"
28 #include "chrome/browser/ui/global_error/global_error_service.h" 29 #include "chrome/browser/ui/global_error/global_error_service.h"
29 #include "chrome/browser/ui/global_error/global_error_service_factory.h" 30 #include "chrome/browser/ui/global_error/global_error_service_factory.h"
30 #include "chrome/common/chrome_notification_types.h" 31 #include "chrome/common/chrome_notification_types.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 signin_global_error_.get()); 205 signin_global_error_.get());
205 PrefService* local_state = g_browser_process->local_state(); 206 PrefService* local_state = g_browser_process->local_state();
206 // local_state can be null during unit tests. 207 // local_state can be null during unit tests.
207 if (local_state) { 208 if (local_state) {
208 local_state_pref_registrar_.Init(local_state); 209 local_state_pref_registrar_.Init(local_state);
209 local_state_pref_registrar_.Add( 210 local_state_pref_registrar_.Add(
210 prefs::kGoogleServicesUsernamePattern, 211 prefs::kGoogleServicesUsernamePattern,
211 base::Bind(&SigninManager::OnGoogleServicesUsernamePatternChanged, 212 base::Bind(&SigninManager::OnGoogleServicesUsernamePatternChanged,
212 base::Unretained(this))); 213 base::Unretained(this)));
213 } 214 }
215 signin_allowed_.Init(prefs::kSigninAllowed, profile_->GetPrefs(),
216 base::Bind(&SigninManager::OnSigninAllowedPrefChanged,
217 base::Unretained(this)));
214 218
215 // If the user is clearing the token service from the command line, then 219 // If the user is clearing the token service from the command line, then
216 // clear their login info also (not valid to be logged in without any 220 // clear their login info also (not valid to be logged in without any
217 // tokens). 221 // tokens).
218 CommandLine* cmd_line = CommandLine::ForCurrentProcess(); 222 CommandLine* cmd_line = CommandLine::ForCurrentProcess();
219 if (cmd_line->HasSwitch(switches::kClearTokenService)) 223 if (cmd_line->HasSwitch(switches::kClearTokenService))
220 profile->GetPrefs()->ClearPref(prefs::kGoogleServicesUsername); 224 profile->GetPrefs()->ClearPref(prefs::kGoogleServicesUsername);
221 225
222 std::string user = profile_->GetPrefs()->GetString( 226 std::string user = profile_->GetPrefs()->GetString(
223 prefs::kGoogleServicesUsername); 227 prefs::kGoogleServicesUsername);
(...skipping 27 matching lines...) Expand all
251 bool SigninManager::IsAllowedUsername(const std::string& username) const { 255 bool SigninManager::IsAllowedUsername(const std::string& username) const {
252 PrefService* local_state = g_browser_process->local_state(); 256 PrefService* local_state = g_browser_process->local_state();
253 if (!local_state) 257 if (!local_state)
254 return true; // In a unit test with no local state - all names are allowed. 258 return true; // In a unit test with no local state - all names are allowed.
255 259
256 std::string pattern = local_state->GetString( 260 std::string pattern = local_state->GetString(
257 prefs::kGoogleServicesUsernamePattern); 261 prefs::kGoogleServicesUsernamePattern);
258 return IsAllowedUsername(username, pattern); 262 return IsAllowedUsername(username, pattern);
259 } 263 }
260 264
265 bool SigninManager::IsSigninAllowed() const {
266 return signin_allowed_.GetValue();
267 }
268
269 // static
270 bool SigninManager::IsSigninAllowedOnIOThread(ProfileIOData* io_data) {
271 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
272 return io_data->signin_allowed()->GetValue();
273 }
274
275 void SigninManager::AddSigninPrefObserver(
276 SigninPrefObserver* signin_pref_observer) {
277 signin_pref_observers_.AddObserver(signin_pref_observer);
278 }
279
280 void SigninManager::RemoveSigninPrefObserver(
281 SigninPrefObserver* signin_pref_observer) {
282 signin_pref_observers_.RemoveObserver(signin_pref_observer);
283 }
284
261 void SigninManager::CleanupNotificationRegistration() { 285 void SigninManager::CleanupNotificationRegistration() {
262 #if !defined(OS_CHROMEOS) 286 #if !defined(OS_CHROMEOS)
263 content::Source<TokenService> token_service( 287 content::Source<TokenService> token_service(
264 TokenServiceFactory::GetForProfile(profile_)); 288 TokenServiceFactory::GetForProfile(profile_));
265 if (registrar_.IsRegistered(this, 289 if (registrar_.IsRegistered(this,
266 chrome::NOTIFICATION_TOKEN_AVAILABLE, 290 chrome::NOTIFICATION_TOKEN_AVAILABLE,
267 token_service)) { 291 token_service)) {
268 registrar_.Remove(this, 292 registrar_.Remove(this,
269 chrome::NOTIFICATION_TOKEN_AVAILABLE, 293 chrome::NOTIFICATION_TOKEN_AVAILABLE,
270 token_service); 294 token_service);
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 765
742 void SigninManager::OnGoogleServicesUsernamePatternChanged() { 766 void SigninManager::OnGoogleServicesUsernamePatternChanged() {
743 if (!authenticated_username_.empty() && 767 if (!authenticated_username_.empty() &&
744 !IsAllowedUsername(authenticated_username_)) { 768 !IsAllowedUsername(authenticated_username_)) {
745 // Signed in user is invalid according to the current policy so sign 769 // Signed in user is invalid according to the current policy so sign
746 // the user out. 770 // the user out.
747 SignOut(); 771 SignOut();
748 } 772 }
749 } 773 }
750 774
775 void SigninManager::OnSigninAllowedPrefChanged() {
776 if (!IsSigninAllowed())
Andrew T Wilson (Slow) 2013/02/04 15:41:48 Is this called during startup? You might want to a
Adrian Kuegel 2013/02/05 10:55:15 True, I missed that. Thanks for pointing it out. I
777 SignOut();
778 FOR_EACH_OBSERVER(SigninPrefObserver, signin_pref_observers_,
779 OnSigninAllowedPrefChange(*signin_allowed_));
780 }
781
751 void SigninManager::AddSigninDiagnosticsObserver( 782 void SigninManager::AddSigninDiagnosticsObserver(
752 SigninDiagnosticsObserver* observer) { 783 SigninDiagnosticsObserver* observer) {
753 signin_diagnostics_observers_.AddObserver(observer); 784 signin_diagnostics_observers_.AddObserver(observer);
754 } 785 }
755 786
756 void SigninManager::RemoveSigninDiagnosticsObserver( 787 void SigninManager::RemoveSigninDiagnosticsObserver(
757 SigninDiagnosticsObserver* observer) { 788 SigninDiagnosticsObserver* observer) {
758 signin_diagnostics_observers_.RemoveObserver(observer); 789 signin_diagnostics_observers_.RemoveObserver(observer);
759 } 790 }
760 791
761 void SigninManager::NotifyDiagnosticsObservers( 792 void SigninManager::NotifyDiagnosticsObservers(
762 const UntimedSigninStatusField& field, 793 const UntimedSigninStatusField& field,
763 const std::string& value) { 794 const std::string& value) {
764 FOR_EACH_OBSERVER(SigninDiagnosticsObserver, 795 FOR_EACH_OBSERVER(SigninDiagnosticsObserver,
765 signin_diagnostics_observers_, 796 signin_diagnostics_observers_,
766 NotifySigninValueChanged(field, value)); 797 NotifySigninValueChanged(field, value));
767 } 798 }
768 799
769 void SigninManager::NotifyDiagnosticsObservers( 800 void SigninManager::NotifyDiagnosticsObservers(
770 const TimedSigninStatusField& field, 801 const TimedSigninStatusField& field,
771 const std::string& value) { 802 const std::string& value) {
772 FOR_EACH_OBSERVER(SigninDiagnosticsObserver, 803 FOR_EACH_OBSERVER(SigninDiagnosticsObserver,
773 signin_diagnostics_observers_, 804 signin_diagnostics_observers_,
774 NotifySigninValueChanged(field, value)); 805 NotifySigninValueChanged(field, value));
775 } 806 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698