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

Unified Diff: chrome/browser/managed_mode/managed_user_service.cc

Issue 316813002: Start managed_mode refactor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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/managed_mode/managed_user_service.cc
diff --git a/chrome/browser/managed_mode/managed_user_service.cc b/chrome/browser/managed_mode/managed_user_service.cc
index 4ce920deb79114f2480617062ac5dbadb4eca103..02a607224f7dcaa21c51413ace4a7a976a39646b 100644
--- a/chrome/browser/managed_mode/managed_user_service.cc
+++ b/chrome/browser/managed_mode/managed_user_service.cc
@@ -32,6 +32,8 @@
#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
+#include "chrome/browser/themes/theme_service.h"
+#include "chrome/browser/themes/theme_service_factory.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/common/chrome_switches.h"
@@ -125,6 +127,8 @@ void ManagedUserService::URLFilterContext::SetManualURLs(
ManagedUserService::ManagedUserService(Profile* profile)
: profile_(profile),
+ active_(false),
+ delegate_(NULL),
extension_registry_observer_(this),
waiting_for_sync_initialization_(false),
is_profile_active_(false),
@@ -142,19 +146,8 @@ void ManagedUserService::Shutdown() {
did_shutdown_ = true;
if (ProfileIsManaged()) {
content::RecordAction(UserMetricsAction("ManagedUsers_QuitBrowser"));
-#if !defined(OS_ANDROID)
- // TODO(bauerb): Get rid of the platform-specific #ifdef here.
- // http://crbug.com/313377
- BrowserList::RemoveObserver(this);
-#endif
}
-
- if (!waiting_for_sync_initialization_)
- return;
-
- ProfileSyncService* sync_service =
- ProfileSyncServiceFactory::GetForProfile(profile_);
- sync_service->RemoveObserver(this);
+ SetActive(false);
}
bool ManagedUserService::ProfileIsManaged() const {
@@ -201,6 +194,15 @@ void ManagedUserService::MigrateUserPrefs(PrefService* prefs) {
prefs->SetString(prefs::kManagedUserId, "Dummy ID");
}
+void ManagedUserService::SetDelegate(Delegate* delegate) {
+ if (delegate_ == delegate)
+ return;
+ // If the delegate changed, deactivate first to give the old delegate a chance
+ // to clean up.
+ SetActive(false);
+ delegate_ = delegate;
+}
+
scoped_refptr<const ManagedModeURLFilter>
ManagedUserService::GetURLFilterForIOThread() {
return url_filter_context_.io_url_filter();
@@ -319,6 +321,7 @@ bool ManagedUserService::UserMayModifySettings(
}
void ManagedUserService::OnStateChanged() {
+ DCHECK(profile_->GetProfileName().empty());
ProfileSyncService* service =
ProfileSyncServiceFactory::GetForProfile(profile_);
if (waiting_for_sync_initialization_ && service->sync_initialized()) {
@@ -350,6 +353,7 @@ void ManagedUserService::OnExtensionUnloaded(
}
void ManagedUserService::SetupSync() {
+ DCHECK(profile_->GetProfileName().empty());
ProfileSyncService* service =
ProfileSyncServiceFactory::GetForProfile(profile_);
DCHECK(service->sync_initialized());
@@ -409,6 +413,12 @@ ManagedUserSettingsService* ManagedUserService::GetSettingsService() {
return ManagedUserSettingsServiceFactory::GetForProfile(profile_);
}
+void ManagedUserService::OnManagedUserIdChanged() {
+ std::string managed_user_id =
+ profile_->GetPrefs()->GetString(prefs::kManagedUserId);
+ SetActive(!managed_user_id.empty());
+}
+
void ManagedUserService::OnDefaultFilteringBehaviorChanged() {
DCHECK(ProfileIsManaged());
@@ -492,6 +502,7 @@ void ManagedUserService::GetManualExceptionsForHost(const std::string& host,
}
void ManagedUserService::InitSync(const std::string& refresh_token) {
+ DCHECK(profile_->GetProfileName().empty());
ProfileSyncService* service =
ProfileSyncServiceFactory::GetForProfile(profile_);
// Tell the sync service that setup is in progress so we don't start syncing
@@ -513,73 +524,122 @@ void ManagedUserService::InitSync(const std::string& refresh_token) {
}
void ManagedUserService::Init() {
- ManagedUserSettingsService* settings_service = GetSettingsService();
- DCHECK(settings_service->IsReady());
- if (!ProfileIsManaged()) {
- settings_service->Clear();
- return;
- }
+ DCHECK(GetSettingsService()->IsReady());
- settings_service->Activate();
+ pref_change_registrar_.Init(profile_->GetPrefs());
+ pref_change_registrar_.Add(
+ prefs::kManagedUserId,
+ base::Bind(&ManagedUserService::OnManagedUserIdChanged,
+ base::Unretained(this)));
- SupervisedUserPrefMappingServiceFactory::GetForBrowserContext(profile_)
- ->Init();
+ SetActive(ProfileIsManaged());
+}
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switches::kManagedUserSyncToken)) {
- InitSync(
- command_line->GetSwitchValueASCII(switches::kManagedUserSyncToken));
+void ManagedUserService::SetActive(bool active) {
+ if (active_ == active)
+ return;
+ active_ = active;
+
+ if (!delegate_ || !delegate_->SetActive(active_)) {
+ if (active_) {
+ SupervisedUserPrefMappingServiceFactory::GetForBrowserContext(profile_)
+ ->Init();
+
+ CommandLine* command_line = CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(switches::kManagedUserSyncToken)) {
+ InitSync(
+ command_line->GetSwitchValueASCII(switches::kManagedUserSyncToken));
+ }
+
+ ProfileOAuth2TokenService* token_service =
+ ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
+ token_service->LoadCredentials(managed_users::kManagedUserPseudoEmail);
+ }
}
- ProfileOAuth2TokenService* token_service =
- ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
- token_service->LoadCredentials(managed_users::kManagedUserPseudoEmail);
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kPermissionRequestApiUrl)) {
- permissions_creator_ =
- PermissionRequestCreatorApiary::CreateWithProfile(profile_);
- } else {
- PrefService* pref_service = profile_->GetPrefs();
- permissions_creator_.reset(new PermissionRequestCreatorSync(
- settings_service,
- ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(profile_),
- pref_service->GetString(prefs::kProfileName),
- pref_service->GetString(prefs::kManagedUserId)));
+ // Now activate/deactivate anything not handled by the delegate yet.
+
+ // Re-set the default theme to turn the SU theme on/off.
+ ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile_);
+ if (theme_service->UsingDefaultTheme() || theme_service->UsingSystemTheme()) {
+ ThemeServiceFactory::GetForProfile(profile_)->UseDefaultTheme();
}
+ ManagedUserSettingsService* settings_service = GetSettingsService();
+ settings_service->SetActive(active_);
+
extensions::ExtensionSystem* extension_system =
extensions::ExtensionSystem::Get(profile_);
extensions::ManagementPolicy* management_policy =
extension_system->management_policy();
- if (management_policy)
- extension_system->management_policy()->RegisterProvider(this);
- extension_registry_observer_.Add(
- extensions::ExtensionRegistry::Get(profile_));
+ if (active_) {
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kPermissionRequestApiUrl)) {
+ permissions_creator_ =
+ PermissionRequestCreatorApiary::CreateWithProfile(profile_);
+ } else {
+ PrefService* pref_service = profile_->GetPrefs();
+ permissions_creator_.reset(new PermissionRequestCreatorSync(
+ settings_service,
+ ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(
+ profile_),
+ pref_service->GetString(prefs::kProfileName),
+ pref_service->GetString(prefs::kManagedUserId)));
+ }
- pref_change_registrar_.Init(profile_->GetPrefs());
- pref_change_registrar_.Add(
- prefs::kDefaultManagedModeFilteringBehavior,
- base::Bind(&ManagedUserService::OnDefaultFilteringBehaviorChanged,
- base::Unretained(this)));
- pref_change_registrar_.Add(prefs::kManagedModeManualHosts,
- base::Bind(&ManagedUserService::UpdateManualHosts,
- base::Unretained(this)));
- pref_change_registrar_.Add(prefs::kManagedModeManualURLs,
- base::Bind(&ManagedUserService::UpdateManualURLs,
- base::Unretained(this)));
+ if (management_policy)
+ management_policy->RegisterProvider(this);
+
+ extension_registry_observer_.Add(
+ extensions::ExtensionRegistry::Get(profile_));
+
+ pref_change_registrar_.Add(
+ prefs::kDefaultManagedModeFilteringBehavior,
+ base::Bind(&ManagedUserService::OnDefaultFilteringBehaviorChanged,
+ base::Unretained(this)));
+ pref_change_registrar_.Add(prefs::kManagedModeManualHosts,
+ base::Bind(&ManagedUserService::UpdateManualHosts,
+ base::Unretained(this)));
+ pref_change_registrar_.Add(prefs::kManagedModeManualURLs,
+ base::Bind(&ManagedUserService::UpdateManualURLs,
+ base::Unretained(this)));
+
+ // Initialize the filter.
+ OnDefaultFilteringBehaviorChanged();
+ UpdateSiteLists();
+ UpdateManualHosts();
+ UpdateManualURLs();
#if !defined(OS_ANDROID)
- // TODO(bauerb): Get rid of the platform-specific #ifdef here.
- // http://crbug.com/313377
- BrowserList::AddObserver(this);
+ // TODO(bauerb): Get rid of the platform-specific #ifdef here.
+ // http://crbug.com/313377
+ BrowserList::AddObserver(this);
#endif
+ } else {
+ permissions_creator_.reset();
- // Initialize the filter.
- OnDefaultFilteringBehaviorChanged();
- UpdateSiteLists();
- UpdateManualHosts();
- UpdateManualURLs();
+ if (management_policy)
+ management_policy->UnregisterProvider(this);
+
+ extension_registry_observer_.RemoveAll();
+
+ pref_change_registrar_.Remove(prefs::kDefaultManagedModeFilteringBehavior);
+ pref_change_registrar_.Remove(prefs::kManagedModeManualHosts);
+ pref_change_registrar_.Remove(prefs::kManagedModeManualURLs);
+
+ if (waiting_for_sync_initialization_) {
+ ProfileSyncService* sync_service =
+ ProfileSyncServiceFactory::GetForProfile(profile_);
+ sync_service->RemoveObserver(this);
+ }
+
+#if !defined(OS_ANDROID)
+ // TODO(bauerb): Get rid of the platform-specific #ifdef here.
+ // http://crbug.com/313377
+ BrowserList::RemoveObserver(this);
+#endif
+ }
}
void ManagedUserService::RegisterAndInitSync(
@@ -588,6 +648,7 @@ void ManagedUserService::RegisterAndInitSync(
const std::string& managed_user_id,
const AuthErrorCallback& callback) {
DCHECK(ProfileIsManaged());
+ DCHECK(profile_->GetProfileName().empty());
DCHECK(!custodian_profile->IsManaged());
base::string16 name = base::UTF8ToUTF16(

Powered by Google App Engine
This is Rietveld 408576698