| 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/policy/user_policy_signin_service.h" | 5 #include "chrome/browser/policy/user_policy_signin_service.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 // TokenService should not yet have loaded its tokens since this happens in | 241 // TokenService should not yet have loaded its tokens since this happens in |
| 242 // the background after PKS initialization - so this service should always be | 242 // the background after PKS initialization - so this service should always be |
| 243 // created before the oauth token is available. | 243 // created before the oauth token is available. |
| 244 DCHECK(!TokenServiceFactory::GetForProfile(profile_)->HasOAuthLoginToken()); | 244 DCHECK(!TokenServiceFactory::GetForProfile(profile_)->HasOAuthLoginToken()); |
| 245 | 245 |
| 246 // Register a listener to be called back once the current profile has finished | 246 // Register a listener to be called back once the current profile has finished |
| 247 // initializing, so we can startup the UserCloudPolicyManager. | 247 // initializing, so we can startup the UserCloudPolicyManager. |
| 248 registrar_.Add(this, | 248 registrar_.Add(this, |
| 249 chrome::NOTIFICATION_PROFILE_ADDED, | 249 chrome::NOTIFICATION_PROFILE_ADDED, |
| 250 content::Source<Profile>(profile)); | 250 content::Source<Profile>(profile)); |
| 251 |
| 252 // Register a listener for the import finished notification in a first run |
| 253 // scenario, which indicates the profile is ready to be further initialized. |
| 254 registrar_.Add(this, |
| 255 chrome::NOTIFICATION_IMPORT_FINISHED, |
| 256 content::Source<Profile>(profile)); |
| 251 } | 257 } |
| 252 | 258 |
| 253 UserPolicySigninService::~UserPolicySigninService() {} | 259 UserPolicySigninService::~UserPolicySigninService() {} |
| 254 | 260 |
| 255 void UserPolicySigninService::RegisterPolicyClient( | 261 void UserPolicySigninService::RegisterPolicyClient( |
| 256 const std::string& username, | 262 const std::string& username, |
| 257 const std::string& oauth2_refresh_token, | 263 const std::string& oauth2_refresh_token, |
| 258 const PolicyRegistrationCallback& callback) { | 264 const PolicyRegistrationCallback& callback) { |
| 259 DCHECK(!username.empty()); | 265 DCHECK(!username.empty()); |
| 260 DCHECK(!oauth2_refresh_token.empty()); | 266 DCHECK(!oauth2_refresh_token.empty()); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 // Manager should be fully initialized by now. | 341 // Manager should be fully initialized by now. |
| 336 DCHECK(manager); | 342 DCHECK(manager); |
| 337 DCHECK(manager->core()->service()); | 343 DCHECK(manager->core()->service()); |
| 338 manager->core()->service()->AddObserver(this); | 344 manager->core()->service()->AddObserver(this); |
| 339 } | 345 } |
| 340 | 346 |
| 341 void UserPolicySigninService::Observe( | 347 void UserPolicySigninService::Observe( |
| 342 int type, | 348 int type, |
| 343 const content::NotificationSource& source, | 349 const content::NotificationSource& source, |
| 344 const content::NotificationDetails& details) { | 350 const content::NotificationDetails& details) { |
| 351 // If an import process is running, wait for NOTIFICATION_IMPORT_FINISHED |
| 352 // before potentially creating the SigninManager. Its dependencies can access |
| 353 // databases that the import process is also accessing, causing conflicts. |
| 354 // Note that the profile manager is NULL in unit tests. |
| 355 if (g_browser_process->profile_manager() && |
| 356 g_browser_process->profile_manager()->will_import()) { |
| 357 DCHECK_EQ(chrome::NOTIFICATION_PROFILE_ADDED, type); |
| 358 return; |
| 359 } |
| 360 |
| 345 // If using a TestingProfile with no SigninManager or UserCloudPolicyManager, | 361 // If using a TestingProfile with no SigninManager or UserCloudPolicyManager, |
| 346 // skip initialization. | 362 // skip initialization. |
| 347 if (!GetManager() || !SigninManagerFactory::GetForProfile(profile_)) { | 363 if (!GetManager() || !SigninManagerFactory::GetForProfile(profile_)) { |
| 348 DVLOG(1) << "Skipping initialization for tests due to missing components."; | 364 DVLOG(1) << "Skipping initialization for tests due to missing components."; |
| 349 return; | 365 return; |
| 350 } | 366 } |
| 351 | 367 |
| 352 switch (type) { | 368 switch (type) { |
| 353 case chrome::NOTIFICATION_GOOGLE_SIGNED_OUT: | 369 case chrome::NOTIFICATION_GOOGLE_SIGNED_OUT: |
| 354 ShutdownUserCloudPolicyManager(); | 370 ShutdownUserCloudPolicyManager(); |
| 355 break; | 371 break; |
| 372 case chrome::NOTIFICATION_IMPORT_FINISHED: |
| 356 case chrome::NOTIFICATION_PROFILE_ADDED: { | 373 case chrome::NOTIFICATION_PROFILE_ADDED: { |
| 357 // A new profile has been loaded - if it's signed in, then initialize the | 374 // A new profile has been loaded - if it's signed in, then initialize the |
| 358 // UCPM, otherwise shut down the UCPM (which deletes any cached policy | 375 // UCPM, otherwise shut down the UCPM (which deletes any cached policy |
| 359 // data). This must be done here instead of at constructor time because | 376 // data). This must be done here instead of at constructor time because |
| 360 // the Profile is not fully initialized when this object is constructed | 377 // the Profile is not fully initialized when this object is constructed |
| 361 // (DoFinalInit() has not yet been called, so ProfileIOData and | 378 // (DoFinalInit() has not yet been called, so ProfileIOData and |
| 362 // SSLConfigServiceManager have not been created yet). | 379 // SSLConfigServiceManager have not been created yet). |
| 363 // TODO(atwilson): Switch to using a timer instead, to avoid contention | 380 // TODO(atwilson): Switch to using a timer instead, to avoid contention |
| 364 // with other services at startup (http://crbug.com/165468). | 381 // with other services at startup (http://crbug.com/165468). |
| 365 SigninManager* signin_manager = | 382 SigninManager* signin_manager = |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 // before UserCloudPolicyManager shuts down the CloudPolicyClient. | 540 // before UserCloudPolicyManager shuts down the CloudPolicyClient. |
| 524 registration_helper_.reset(); | 541 registration_helper_.reset(); |
| 525 StopObserving(); | 542 StopObserving(); |
| 526 } | 543 } |
| 527 | 544 |
| 528 UserCloudPolicyManager* UserPolicySigninService::GetManager() { | 545 UserCloudPolicyManager* UserPolicySigninService::GetManager() { |
| 529 return UserCloudPolicyManagerFactory::GetForProfile(profile_); | 546 return UserCloudPolicyManagerFactory::GetForProfile(profile_); |
| 530 } | 547 } |
| 531 | 548 |
| 532 } // namespace policy | 549 } // namespace policy |
| OLD | NEW |