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

Side by Side Diff: chrome/browser/policy/user_policy_signin_service.cc

Issue 12461010: Delay loading the SigninManagerFactory until the first-run Import process has completed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: but don't regress the fix Created 7 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 // TokenService should not yet have loaded its tokens since this happens in 250 // TokenService should not yet have loaded its tokens since this happens in
251 // the background after PKS initialization - so this service should always be 251 // the background after PKS initialization - so this service should always be
252 // created before the oauth token is available. 252 // created before the oauth token is available.
253 DCHECK(!TokenServiceFactory::GetForProfile(profile_)->HasOAuthLoginToken()); 253 DCHECK(!TokenServiceFactory::GetForProfile(profile_)->HasOAuthLoginToken());
254 254
255 // Register a listener to be called back once the current profile has finished 255 // Register a listener to be called back once the current profile has finished
256 // initializing, so we can startup the UserCloudPolicyManager. 256 // initializing, so we can startup the UserCloudPolicyManager.
257 registrar_.Add(this, 257 registrar_.Add(this,
258 chrome::NOTIFICATION_PROFILE_ADDED, 258 chrome::NOTIFICATION_PROFILE_ADDED,
259 content::Source<Profile>(profile)); 259 content::Source<Profile>(profile));
260
261 // Register a listener for the import finished notification in a first run
262 // scenario, which indicates the profile is ready to be further initialized.
263 registrar_.Add(this,
264 chrome::NOTIFICATION_IMPORT_FINISHED,
265 content::Source<Profile>(profile));
260 } 266 }
261 267
262 UserPolicySigninService::~UserPolicySigninService() {} 268 UserPolicySigninService::~UserPolicySigninService() {}
263 269
264 void UserPolicySigninService::RegisterPolicyClient( 270 void UserPolicySigninService::RegisterPolicyClient(
265 const std::string& username, 271 const std::string& username,
266 const std::string& oauth2_refresh_token, 272 const std::string& oauth2_refresh_token,
267 const PolicyRegistrationCallback& callback) { 273 const PolicyRegistrationCallback& callback) {
268 DCHECK(!username.empty()); 274 DCHECK(!username.empty());
269 DCHECK(!oauth2_refresh_token.empty()); 275 DCHECK(!oauth2_refresh_token.empty());
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 // Manager should be fully initialized by now. 350 // Manager should be fully initialized by now.
345 DCHECK(manager); 351 DCHECK(manager);
346 DCHECK(manager->core()->service()); 352 DCHECK(manager->core()->service());
347 manager->core()->service()->AddObserver(this); 353 manager->core()->service()->AddObserver(this);
348 } 354 }
349 355
350 void UserPolicySigninService::Observe( 356 void UserPolicySigninService::Observe(
351 int type, 357 int type,
352 const content::NotificationSource& source, 358 const content::NotificationSource& source,
353 const content::NotificationDetails& details) { 359 const content::NotificationDetails& details) {
360 // If an import process is running, wait for NOTIFICATION_IMPORT_FINISHED
361 // before potentially creating the SigninManager. Its dependencies can access
362 // databases that the import process is also accessing, causing conflicts.
363 // Note that the profile manager is NULL in unit tests.
364 if (g_browser_process->profile_manager() &&
365 g_browser_process->profile_manager()->will_import()) {
366 DCHECK_EQ(chrome::NOTIFICATION_PROFILE_ADDED, type);
Bernhard Bauer 2013/03/26 12:29:32 Wait, doesn't this DCHECK fail when we get *any* o
Joao da Silva 2013/03/26 12:52:00 will_import() signals that the first run import wi
Bernhard Bauer 2013/03/26 14:18:22 Well, I ran into this with a local build that trie
Joao da Silva 2013/03/26 14:35:27 IIUC, that would only be a problem if you do that
367 return;
368 }
369
354 // If using a TestingProfile with no SigninManager or UserCloudPolicyManager, 370 // If using a TestingProfile with no SigninManager or UserCloudPolicyManager,
355 // skip initialization. 371 // skip initialization.
356 if (!GetManager() || !SigninManagerFactory::GetForProfile(profile_)) { 372 if (!GetManager() || !SigninManagerFactory::GetForProfile(profile_)) {
357 DVLOG(1) << "Skipping initialization for tests due to missing components."; 373 DVLOG(1) << "Skipping initialization for tests due to missing components.";
358 return; 374 return;
359 } 375 }
360 376
361 switch (type) { 377 switch (type) {
362 case chrome::NOTIFICATION_GOOGLE_SIGNED_OUT: 378 case chrome::NOTIFICATION_GOOGLE_SIGNED_OUT:
363 ShutdownUserCloudPolicyManager(); 379 ShutdownUserCloudPolicyManager();
364 break; 380 break;
381 case chrome::NOTIFICATION_IMPORT_FINISHED:
365 case chrome::NOTIFICATION_PROFILE_ADDED: { 382 case chrome::NOTIFICATION_PROFILE_ADDED: {
366 // A new profile has been loaded - if it's signed in, then initialize the 383 // A new profile has been loaded - if it's signed in, then initialize the
367 // UCPM, otherwise shut down the UCPM (which deletes any cached policy 384 // UCPM, otherwise shut down the UCPM (which deletes any cached policy
368 // data). This must be done here instead of at constructor time because 385 // data). This must be done here instead of at constructor time because
369 // the Profile is not fully initialized when this object is constructed 386 // the Profile is not fully initialized when this object is constructed
370 // (DoFinalInit() has not yet been called, so ProfileIOData and 387 // (DoFinalInit() has not yet been called, so ProfileIOData and
371 // SSLConfigServiceManager have not been created yet). 388 // SSLConfigServiceManager have not been created yet).
372 // TODO(atwilson): Switch to using a timer instead, to avoid contention 389 // TODO(atwilson): Switch to using a timer instead, to avoid contention
373 // with other services at startup (http://crbug.com/165468). 390 // with other services at startup (http://crbug.com/165468).
374 SigninManager* signin_manager = 391 SigninManager* signin_manager =
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 // before UserCloudPolicyManager shuts down the CloudPolicyClient. 552 // before UserCloudPolicyManager shuts down the CloudPolicyClient.
536 registration_helper_.reset(); 553 registration_helper_.reset();
537 StopObserving(); 554 StopObserving();
538 } 555 }
539 556
540 UserCloudPolicyManager* UserPolicySigninService::GetManager() { 557 UserCloudPolicyManager* UserPolicySigninService::GetManager() {
541 return UserCloudPolicyManagerFactory::GetForProfile(profile_); 558 return UserCloudPolicyManagerFactory::GetForProfile(profile_);
542 } 559 }
543 560
544 } // namespace policy 561 } // namespace policy
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698