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 |
deleted file mode 100644 |
index dab571a86a8d6c6022bda7553edebaa457c042d7..0000000000000000000000000000000000000000 |
--- a/chrome/browser/managed_mode/managed_user_service.cc |
+++ /dev/null |
@@ -1,745 +0,0 @@ |
-// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/managed_mode/managed_user_service.h" |
- |
-#include "base/command_line.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/prefs/pref_service.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/managed_mode/custodian_profile_downloader_service.h" |
-#include "chrome/browser/managed_mode/custodian_profile_downloader_service_factory.h" |
-#include "chrome/browser/managed_mode/managed_mode_site_list.h" |
-#include "chrome/browser/managed_mode/managed_user_constants.h" |
-#include "chrome/browser/managed_mode/managed_user_registration_utility.h" |
-#include "chrome/browser/managed_mode/managed_user_settings_service.h" |
-#include "chrome/browser/managed_mode/managed_user_settings_service_factory.h" |
-#include "chrome/browser/managed_mode/managed_user_shared_settings_service_factory.h" |
-#include "chrome/browser/managed_mode/managed_user_sync_service.h" |
-#include "chrome/browser/managed_mode/managed_user_sync_service_factory.h" |
-#include "chrome/browser/managed_mode/permission_request_creator_apiary.h" |
-#include "chrome/browser/managed_mode/permission_request_creator_sync.h" |
-#include "chrome/browser/managed_mode/supervised_user_pref_mapping_service.h" |
-#include "chrome/browser/managed_mode/supervised_user_pref_mapping_service_factory.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/profiles/profile_info_cache.h" |
-#include "chrome/browser/profiles/profile_manager.h" |
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
-#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/ui/browser.h" |
-#include "chrome/browser/ui/browser_list.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/extensions/api/managed_mode_private/managed_mode_handler.h" |
-#include "chrome/common/pref_names.h" |
-#include "components/pref_registry/pref_registry_syncable.h" |
-#include "components/signin/core/browser/profile_oauth2_token_service.h" |
-#include "components/signin/core/browser/signin_manager.h" |
-#include "components/signin/core/browser/signin_manager_base.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/user_metrics.h" |
-#include "extensions/browser/extension_registry.h" |
-#include "extensions/browser/extension_system.h" |
-#include "extensions/common/extension_set.h" |
-#include "google_apis/gaia/google_service_auth_error.h" |
-#include "grit/generated_resources.h" |
-#include "net/base/escape.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-#if defined(OS_CHROMEOS) |
-#include "chrome/browser/chromeos/login/users/supervised_user_manager.h" |
-#include "chrome/browser/chromeos/login/users/user_manager.h" |
-#endif |
- |
-#if defined(ENABLE_THEMES) |
-#include "chrome/browser/themes/theme_service.h" |
-#include "chrome/browser/themes/theme_service_factory.h" |
-#endif |
- |
-using base::DictionaryValue; |
-using base::UserMetricsAction; |
-using content::BrowserThread; |
- |
-ManagedUserService::URLFilterContext::URLFilterContext() |
- : ui_url_filter_(new ManagedModeURLFilter), |
- io_url_filter_(new ManagedModeURLFilter) {} |
-ManagedUserService::URLFilterContext::~URLFilterContext() {} |
- |
-ManagedModeURLFilter* |
-ManagedUserService::URLFilterContext::ui_url_filter() const { |
- return ui_url_filter_.get(); |
-} |
- |
-ManagedModeURLFilter* |
-ManagedUserService::URLFilterContext::io_url_filter() const { |
- return io_url_filter_.get(); |
-} |
- |
-void ManagedUserService::URLFilterContext::SetDefaultFilteringBehavior( |
- ManagedModeURLFilter::FilteringBehavior behavior) { |
- ui_url_filter_->SetDefaultFilteringBehavior(behavior); |
- BrowserThread::PostTask( |
- BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&ManagedModeURLFilter::SetDefaultFilteringBehavior, |
- io_url_filter_.get(), behavior)); |
-} |
- |
-void ManagedUserService::URLFilterContext::LoadWhitelists( |
- ScopedVector<ManagedModeSiteList> site_lists) { |
- // ManagedModeURLFilter::LoadWhitelists takes ownership of |site_lists|, |
- // so we make an additional copy of it. |
- /// TODO(bauerb): This is kinda ugly. |
- ScopedVector<ManagedModeSiteList> site_lists_copy; |
- for (ScopedVector<ManagedModeSiteList>::iterator it = site_lists.begin(); |
- it != site_lists.end(); ++it) { |
- site_lists_copy.push_back((*it)->Clone()); |
- } |
- ui_url_filter_->LoadWhitelists(site_lists.Pass()); |
- BrowserThread::PostTask( |
- BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&ManagedModeURLFilter::LoadWhitelists, |
- io_url_filter_, base::Passed(&site_lists_copy))); |
-} |
- |
-void ManagedUserService::URLFilterContext::SetManualHosts( |
- scoped_ptr<std::map<std::string, bool> > host_map) { |
- ui_url_filter_->SetManualHosts(host_map.get()); |
- BrowserThread::PostTask( |
- BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&ManagedModeURLFilter::SetManualHosts, |
- io_url_filter_, base::Owned(host_map.release()))); |
-} |
- |
-void ManagedUserService::URLFilterContext::SetManualURLs( |
- scoped_ptr<std::map<GURL, bool> > url_map) { |
- ui_url_filter_->SetManualURLs(url_map.get()); |
- BrowserThread::PostTask( |
- BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&ManagedModeURLFilter::SetManualURLs, |
- io_url_filter_, base::Owned(url_map.release()))); |
-} |
- |
-ManagedUserService::ManagedUserService(Profile* profile) |
- : profile_(profile), |
- active_(false), |
- delegate_(NULL), |
- extension_registry_observer_(this), |
- waiting_for_sync_initialization_(false), |
- is_profile_active_(false), |
- elevated_for_testing_(false), |
- did_shutdown_(false), |
- waiting_for_permissions_(false), |
- weak_ptr_factory_(this) { |
-} |
- |
-ManagedUserService::~ManagedUserService() { |
- DCHECK(did_shutdown_); |
-} |
- |
-void ManagedUserService::Shutdown() { |
- did_shutdown_ = true; |
- if (ProfileIsManaged()) { |
- content::RecordAction(UserMetricsAction("ManagedUsers_QuitBrowser")); |
- } |
- SetActive(false); |
-} |
- |
-bool ManagedUserService::ProfileIsManaged() const { |
- return profile_->IsSupervised(); |
-} |
- |
-// static |
-void ManagedUserService::RegisterProfilePrefs( |
- user_prefs::PrefRegistrySyncable* registry) { |
- registry->RegisterDictionaryPref( |
- prefs::kSupervisedUserManualHosts, |
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
- registry->RegisterDictionaryPref( |
- prefs::kSupervisedUserManualURLs, |
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
- registry->RegisterIntegerPref( |
- prefs::kDefaultSupervisedUserFilteringBehavior, |
- ManagedModeURLFilter::ALLOW, |
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
- registry->RegisterStringPref( |
- prefs::kSupervisedUserCustodianEmail, std::string(), |
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
- registry->RegisterStringPref( |
- prefs::kSupervisedUserCustodianName, std::string(), |
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
- registry->RegisterBooleanPref(prefs::kSupervisedUserCreationAllowed, true, |
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
-} |
- |
-// static |
-void ManagedUserService::MigrateUserPrefs(PrefService* prefs) { |
- if (!prefs->HasPrefPath(prefs::kProfileIsSupervised)) |
- return; |
- |
- bool is_managed = prefs->GetBoolean(prefs::kProfileIsSupervised); |
- prefs->ClearPref(prefs::kProfileIsSupervised); |
- |
- if (!is_managed) |
- return; |
- |
- std::string managed_user_id = prefs->GetString(prefs::kSupervisedUserId); |
- if (!managed_user_id.empty()) |
- return; |
- |
- prefs->SetString(prefs::kSupervisedUserId, "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(); |
-} |
- |
-ManagedModeURLFilter* ManagedUserService::GetURLFilterForUIThread() { |
- return url_filter_context_.ui_url_filter(); |
-} |
- |
-// Items not on any list must return -1 (CATEGORY_NOT_ON_LIST in history.js). |
-// Items on a list, but with no category, must return 0 (CATEGORY_OTHER). |
-#define CATEGORY_NOT_ON_LIST -1; |
-#define CATEGORY_OTHER 0; |
- |
-int ManagedUserService::GetCategory(const GURL& url) { |
- std::vector<ManagedModeSiteList::Site*> sites; |
- GetURLFilterForUIThread()->GetSites(url, &sites); |
- if (sites.empty()) |
- return CATEGORY_NOT_ON_LIST; |
- |
- return (*sites.begin())->category_id; |
-} |
- |
-// static |
-void ManagedUserService::GetCategoryNames(CategoryList* list) { |
- ManagedModeSiteList::GetCategoryNames(list); |
-} |
- |
-std::string ManagedUserService::GetCustodianEmailAddress() const { |
-#if defined(OS_CHROMEOS) |
- return chromeos::UserManager::Get()->GetSupervisedUserManager()-> |
- GetManagerDisplayEmail( |
- chromeos::UserManager::Get()->GetActiveUser()->email()); |
-#else |
- return profile_->GetPrefs()->GetString(prefs::kSupervisedUserCustodianEmail); |
-#endif |
-} |
- |
-std::string ManagedUserService::GetCustodianName() const { |
-#if defined(OS_CHROMEOS) |
- return base::UTF16ToUTF8(chromeos::UserManager::Get()-> |
- GetSupervisedUserManager()->GetManagerDisplayName( |
- chromeos::UserManager::Get()->GetActiveUser()->email())); |
-#else |
- std::string name = profile_->GetPrefs()->GetString( |
- prefs::kSupervisedUserCustodianName); |
- return name.empty() ? GetCustodianEmailAddress() : name; |
-#endif |
-} |
- |
-void ManagedUserService::AddNavigationBlockedCallback( |
- const NavigationBlockedCallback& callback) { |
- navigation_blocked_callbacks_.push_back(callback); |
-} |
- |
-void ManagedUserService::DidBlockNavigation( |
- content::WebContents* web_contents) { |
- for (std::vector<NavigationBlockedCallback>::iterator it = |
- navigation_blocked_callbacks_.begin(); |
- it != navigation_blocked_callbacks_.end(); ++it) { |
- it->Run(web_contents); |
- } |
-} |
- |
-std::string ManagedUserService::GetDebugPolicyProviderName() const { |
- // Save the string space in official builds. |
-#ifdef NDEBUG |
- NOTREACHED(); |
- return std::string(); |
-#else |
- return "Managed User Service"; |
-#endif |
-} |
- |
-bool ManagedUserService::UserMayLoad(const extensions::Extension* extension, |
- base::string16* error) const { |
- base::string16 tmp_error; |
- if (ExtensionManagementPolicyImpl(extension, &tmp_error)) |
- return true; |
- |
- // If the extension is already loaded, we allow it, otherwise we'd unload |
- // all existing extensions. |
- ExtensionService* extension_service = |
- extensions::ExtensionSystem::Get(profile_)->extension_service(); |
- |
- // |extension_service| can be NULL in a unit test. |
- if (extension_service && |
- extension_service->GetInstalledExtension(extension->id())) |
- return true; |
- |
- bool was_installed_by_default = extension->was_installed_by_default(); |
-#if defined(OS_CHROMEOS) |
- // On Chrome OS all external sources are controlled by us so it means that |
- // they are "default". Method was_installed_by_default returns false because |
- // extensions creation flags are ignored in case of default extensions with |
- // update URL(the flags aren't passed to OnExternalExtensionUpdateUrlFound). |
- // TODO(dpolukhin): remove this Chrome OS specific code as soon as creation |
- // flags are not ignored. |
- was_installed_by_default = |
- extensions::Manifest::IsExternalLocation(extension->location()); |
-#endif |
- if (extension->location() == extensions::Manifest::COMPONENT || |
- was_installed_by_default) { |
- return true; |
- } |
- |
- if (error) |
- *error = tmp_error; |
- return false; |
-} |
- |
-bool ManagedUserService::UserMayModifySettings( |
- const extensions::Extension* extension, |
- base::string16* error) const { |
- return ExtensionManagementPolicyImpl(extension, error); |
-} |
- |
-void ManagedUserService::OnStateChanged() { |
- ProfileSyncService* service = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- if (waiting_for_sync_initialization_ && service->sync_initialized()) { |
- waiting_for_sync_initialization_ = false; |
- service->RemoveObserver(this); |
- SetupSync(); |
- return; |
- } |
- |
- DLOG_IF(ERROR, service->GetAuthError().state() == |
- GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS) |
- << "Credentials rejected"; |
-} |
- |
-void ManagedUserService::OnExtensionLoaded( |
- content::BrowserContext* browser_context, |
- const extensions::Extension* extension) { |
- if (!extensions::ManagedModeInfo::GetContentPackSiteList(extension).empty()) { |
- UpdateSiteLists(); |
- } |
-} |
-void ManagedUserService::OnExtensionUnloaded( |
- content::BrowserContext* browser_context, |
- const extensions::Extension* extension, |
- extensions::UnloadedExtensionInfo::Reason reason) { |
- if (!extensions::ManagedModeInfo::GetContentPackSiteList(extension).empty()) { |
- UpdateSiteLists(); |
- } |
-} |
- |
-void ManagedUserService::SetupSync() { |
- ProfileSyncService* service = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- DCHECK(service->sync_initialized()); |
- |
- bool sync_everything = false; |
- syncer::ModelTypeSet synced_datatypes; |
- synced_datatypes.Put(syncer::SUPERVISED_USER_SETTINGS); |
- service->OnUserChoseDatatypes(sync_everything, synced_datatypes); |
- |
- // Notify ProfileSyncService that we are done with configuration. |
- service->SetSetupInProgress(false); |
- service->SetSyncSetupCompleted(); |
-} |
- |
-bool ManagedUserService::ExtensionManagementPolicyImpl( |
- const extensions::Extension* extension, |
- base::string16* error) const { |
- // |extension| can be NULL in unit_tests. |
- if (!ProfileIsManaged() || (extension && extension->is_theme())) |
- return true; |
- |
- if (elevated_for_testing_) |
- return true; |
- |
- if (error) |
- *error = l10n_util::GetStringUTF16(IDS_EXTENSIONS_LOCKED_MANAGED_USER); |
- return false; |
-} |
- |
-ScopedVector<ManagedModeSiteList> ManagedUserService::GetActiveSiteLists() { |
- ScopedVector<ManagedModeSiteList> site_lists; |
- ExtensionService* extension_service = |
- extensions::ExtensionSystem::Get(profile_)->extension_service(); |
- // Can be NULL in unit tests. |
- if (!extension_service) |
- return site_lists.Pass(); |
- |
- const extensions::ExtensionSet* extensions = extension_service->extensions(); |
- for (extensions::ExtensionSet::const_iterator it = extensions->begin(); |
- it != extensions->end(); ++it) { |
- const extensions::Extension* extension = it->get(); |
- if (!extension_service->IsExtensionEnabled(extension->id())) |
- continue; |
- |
- extensions::ExtensionResource site_list = |
- extensions::ManagedModeInfo::GetContentPackSiteList(extension); |
- if (!site_list.empty()) { |
- site_lists.push_back(new ManagedModeSiteList(extension->id(), |
- site_list.GetFilePath())); |
- } |
- } |
- |
- return site_lists.Pass(); |
-} |
- |
-ManagedUserSettingsService* ManagedUserService::GetSettingsService() { |
- return ManagedUserSettingsServiceFactory::GetForProfile(profile_); |
-} |
- |
-void ManagedUserService::OnManagedUserIdChanged() { |
- std::string managed_user_id = |
- profile_->GetPrefs()->GetString(prefs::kSupervisedUserId); |
- SetActive(!managed_user_id.empty()); |
-} |
- |
-void ManagedUserService::OnDefaultFilteringBehaviorChanged() { |
- DCHECK(ProfileIsManaged()); |
- |
- int behavior_value = profile_->GetPrefs()->GetInteger( |
- prefs::kDefaultSupervisedUserFilteringBehavior); |
- ManagedModeURLFilter::FilteringBehavior behavior = |
- ManagedModeURLFilter::BehaviorFromInt(behavior_value); |
- url_filter_context_.SetDefaultFilteringBehavior(behavior); |
-} |
- |
-void ManagedUserService::UpdateSiteLists() { |
- url_filter_context_.LoadWhitelists(GetActiveSiteLists()); |
-} |
- |
-bool ManagedUserService::AccessRequestsEnabled() { |
- if (waiting_for_permissions_) |
- return false; |
- |
- ProfileSyncService* service = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- GoogleServiceAuthError::State state = service->GetAuthError().state(); |
- // We allow requesting access if Sync is working or has a transient error. |
- return (state == GoogleServiceAuthError::NONE || |
- state == GoogleServiceAuthError::CONNECTION_FAILED || |
- state == GoogleServiceAuthError::SERVICE_UNAVAILABLE); |
-} |
- |
-void ManagedUserService::OnPermissionRequestIssued() { |
- waiting_for_permissions_ = false; |
- // TODO(akuegel): Figure out how to show the result of issuing the permission |
- // request in the UI. Currently, we assume the permission request was created |
- // successfully. |
-} |
- |
-void ManagedUserService::AddAccessRequest(const GURL& url) { |
- // Normalize the URL. |
- GURL normalized_url = ManagedModeURLFilter::Normalize(url); |
- |
- // Escape the URL. |
- std::string output(net::EscapeQueryParamValue(normalized_url.spec(), true)); |
- |
- waiting_for_permissions_ = true; |
- permissions_creator_->CreatePermissionRequest( |
- output, |
- base::Bind(&ManagedUserService::OnPermissionRequestIssued, |
- weak_ptr_factory_.GetWeakPtr())); |
-} |
- |
-ManagedUserService::ManualBehavior ManagedUserService::GetManualBehaviorForHost( |
- const std::string& hostname) { |
- const base::DictionaryValue* dict = |
- profile_->GetPrefs()->GetDictionary(prefs::kSupervisedUserManualHosts); |
- bool allow = false; |
- if (!dict->GetBooleanWithoutPathExpansion(hostname, &allow)) |
- return MANUAL_NONE; |
- |
- return allow ? MANUAL_ALLOW : MANUAL_BLOCK; |
-} |
- |
-ManagedUserService::ManualBehavior ManagedUserService::GetManualBehaviorForURL( |
- const GURL& url) { |
- const base::DictionaryValue* dict = |
- profile_->GetPrefs()->GetDictionary(prefs::kSupervisedUserManualURLs); |
- GURL normalized_url = ManagedModeURLFilter::Normalize(url); |
- bool allow = false; |
- if (!dict->GetBooleanWithoutPathExpansion(normalized_url.spec(), &allow)) |
- return MANUAL_NONE; |
- |
- return allow ? MANUAL_ALLOW : MANUAL_BLOCK; |
-} |
- |
-void ManagedUserService::GetManualExceptionsForHost(const std::string& host, |
- std::vector<GURL>* urls) { |
- const base::DictionaryValue* dict = |
- profile_->GetPrefs()->GetDictionary(prefs::kSupervisedUserManualURLs); |
- for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { |
- GURL url(it.key()); |
- if (url.host() == host) |
- urls->push_back(url); |
- } |
-} |
- |
-void ManagedUserService::InitSync(const std::string& refresh_token) { |
- ProfileSyncService* service = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- // Tell the sync service that setup is in progress so we don't start syncing |
- // until we've finished configuration. |
- service->SetSetupInProgress(true); |
- |
- ProfileOAuth2TokenService* token_service = |
- ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); |
- token_service->UpdateCredentials(managed_users::kManagedUserPseudoEmail, |
- refresh_token); |
- |
- // Continue in SetupSync() once the Sync backend has been initialized. |
- if (service->sync_initialized()) { |
- SetupSync(); |
- } else { |
- ProfileSyncServiceFactory::GetForProfile(profile_)->AddObserver(this); |
- waiting_for_sync_initialization_ = true; |
- } |
-} |
- |
-void ManagedUserService::Init() { |
- DCHECK(GetSettingsService()->IsReady()); |
- |
- pref_change_registrar_.Init(profile_->GetPrefs()); |
- pref_change_registrar_.Add( |
- prefs::kSupervisedUserId, |
- base::Bind(&ManagedUserService::OnManagedUserIdChanged, |
- base::Unretained(this))); |
- |
- SetActive(ProfileIsManaged()); |
-} |
- |
-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::kSupervisedUserSyncToken)) { |
- InitSync( |
- command_line->GetSwitchValueASCII( |
- switches::kSupervisedUserSyncToken)); |
- } |
- |
- ProfileOAuth2TokenService* token_service = |
- ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); |
- token_service->LoadCredentials(managed_users::kManagedUserPseudoEmail); |
- } |
- } |
- |
- // Now activate/deactivate anything not handled by the delegate yet. |
- |
-#if defined(ENABLE_THEMES) |
- // 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(); |
- } |
-#endif |
- |
- 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 (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::kSupervisedUserId))); |
- } |
- |
- if (management_policy) |
- management_policy->RegisterProvider(this); |
- |
- extension_registry_observer_.Add( |
- extensions::ExtensionRegistry::Get(profile_)); |
- |
- pref_change_registrar_.Add( |
- prefs::kDefaultSupervisedUserFilteringBehavior, |
- base::Bind(&ManagedUserService::OnDefaultFilteringBehaviorChanged, |
- base::Unretained(this))); |
- pref_change_registrar_.Add(prefs::kSupervisedUserManualHosts, |
- base::Bind(&ManagedUserService::UpdateManualHosts, |
- base::Unretained(this))); |
- pref_change_registrar_.Add(prefs::kSupervisedUserManualURLs, |
- 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); |
-#endif |
- } else { |
- permissions_creator_.reset(); |
- |
- if (management_policy) |
- management_policy->UnregisterProvider(this); |
- |
- extension_registry_observer_.RemoveAll(); |
- |
- pref_change_registrar_.Remove( |
- prefs::kDefaultSupervisedUserFilteringBehavior); |
- pref_change_registrar_.Remove(prefs::kSupervisedUserManualHosts); |
- pref_change_registrar_.Remove(prefs::kSupervisedUserManualURLs); |
- |
- 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( |
- ManagedUserRegistrationUtility* registration_utility, |
- Profile* custodian_profile, |
- const std::string& managed_user_id, |
- const AuthErrorCallback& callback) { |
- DCHECK(ProfileIsManaged()); |
- DCHECK(!custodian_profile->IsSupervised()); |
- |
- base::string16 name = base::UTF8ToUTF16( |
- profile_->GetPrefs()->GetString(prefs::kProfileName)); |
- int avatar_index = profile_->GetPrefs()->GetInteger( |
- prefs::kProfileAvatarIndex); |
- ManagedUserRegistrationInfo info(name, avatar_index); |
- registration_utility->Register( |
- managed_user_id, |
- info, |
- base::Bind(&ManagedUserService::OnManagedUserRegistered, |
- weak_ptr_factory_.GetWeakPtr(), callback, custodian_profile)); |
- |
- // Fetch the custodian's profile information, to store the name. |
- // TODO(pamg): If --google-profile-info (flag: switches::kGoogleProfileInfo) |
- // is ever enabled, take the name from the ProfileInfoCache instead. |
- CustodianProfileDownloaderService* profile_downloader_service = |
- CustodianProfileDownloaderServiceFactory::GetForProfile( |
- custodian_profile); |
- profile_downloader_service->DownloadProfile( |
- base::Bind(&ManagedUserService::OnCustodianProfileDownloaded, |
- weak_ptr_factory_.GetWeakPtr())); |
-} |
- |
-void ManagedUserService::OnCustodianProfileDownloaded( |
- const base::string16& full_name) { |
- profile_->GetPrefs()->SetString(prefs::kSupervisedUserCustodianName, |
- base::UTF16ToUTF8(full_name)); |
-} |
- |
-void ManagedUserService::OnManagedUserRegistered( |
- const AuthErrorCallback& callback, |
- Profile* custodian_profile, |
- const GoogleServiceAuthError& auth_error, |
- const std::string& token) { |
- if (auth_error.state() == GoogleServiceAuthError::NONE) { |
- InitSync(token); |
- SigninManagerBase* signin = |
- SigninManagerFactory::GetForProfile(custodian_profile); |
- profile_->GetPrefs()->SetString(prefs::kSupervisedUserCustodianEmail, |
- signin->GetAuthenticatedUsername()); |
- |
- // The managed-user profile is now ready for use. |
- ProfileManager* profile_manager = g_browser_process->profile_manager(); |
- ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); |
- size_t index = cache.GetIndexOfProfileWithPath(profile_->GetPath()); |
- cache.SetIsOmittedProfileAtIndex(index, false); |
- } else { |
- DCHECK_EQ(std::string(), token); |
- } |
- |
- callback.Run(auth_error); |
-} |
- |
-void ManagedUserService::UpdateManualHosts() { |
- const base::DictionaryValue* dict = |
- profile_->GetPrefs()->GetDictionary(prefs::kSupervisedUserManualHosts); |
- scoped_ptr<std::map<std::string, bool> > host_map( |
- new std::map<std::string, bool>()); |
- for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { |
- bool allow = false; |
- bool result = it.value().GetAsBoolean(&allow); |
- DCHECK(result); |
- (*host_map)[it.key()] = allow; |
- } |
- url_filter_context_.SetManualHosts(host_map.Pass()); |
-} |
- |
-void ManagedUserService::UpdateManualURLs() { |
- const base::DictionaryValue* dict = |
- profile_->GetPrefs()->GetDictionary(prefs::kSupervisedUserManualURLs); |
- scoped_ptr<std::map<GURL, bool> > url_map(new std::map<GURL, bool>()); |
- for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { |
- bool allow = false; |
- bool result = it.value().GetAsBoolean(&allow); |
- DCHECK(result); |
- (*url_map)[GURL(it.key())] = allow; |
- } |
- url_filter_context_.SetManualURLs(url_map.Pass()); |
-} |
- |
-void ManagedUserService::OnBrowserSetLastActive(Browser* browser) { |
- bool profile_became_active = profile_->IsSameProfile(browser->profile()); |
- if (!is_profile_active_ && profile_became_active) |
- content::RecordAction(UserMetricsAction("ManagedUsers_OpenProfile")); |
- else if (is_profile_active_ && !profile_became_active) |
- content::RecordAction(UserMetricsAction("ManagedUsers_SwitchProfile")); |
- |
- is_profile_active_ = profile_became_active; |
-} |