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

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

Issue 335833003: Rename "managed (mode|user)" to "supervised user" (part 2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review comments (+ a few other cleanups) 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
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;
-}
« no previous file with comments | « chrome/browser/managed_mode/managed_user_service.h ('k') | chrome/browser/managed_mode/managed_user_service_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698