| Index: chrome/browser/chromeos/login/multi_profile_user_controller.cc
|
| diff --git a/chrome/browser/chromeos/login/multi_profile_user_controller.cc b/chrome/browser/chromeos/login/multi_profile_user_controller.cc
|
| deleted file mode 100644
|
| index 46861cca0f0035e25b9d2658628a88997806a818..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/login/multi_profile_user_controller.cc
|
| +++ /dev/null
|
| @@ -1,213 +0,0 @@
|
| -// Copyright 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/chromeos/login/multi_profile_user_controller.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/prefs/pref_change_registrar.h"
|
| -#include "base/prefs/pref_registry_simple.h"
|
| -#include "base/prefs/pref_service.h"
|
| -#include "base/prefs/scoped_user_pref_update.h"
|
| -#include "chrome/browser/chromeos/login/multi_profile_user_controller_delegate.h"
|
| -#include "chrome/browser/chromeos/login/user.h"
|
| -#include "chrome/browser/chromeos/login/user_manager.h"
|
| -#include "chrome/browser/chromeos/policy/policy_cert_service.h"
|
| -#include "chrome/browser/chromeos/policy/policy_cert_service_factory.h"
|
| -#include "chrome/browser/prefs/pref_service_syncable.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "google_apis/gaia/gaia_auth_util.h"
|
| -
|
| -namespace chromeos {
|
| -
|
| -namespace {
|
| -
|
| -std::string SanitizeBehaviorValue(const std::string& value) {
|
| - if (value == MultiProfileUserController::kBehaviorUnrestricted ||
|
| - value == MultiProfileUserController::kBehaviorPrimaryOnly ||
|
| - value == MultiProfileUserController::kBehaviorNotAllowed) {
|
| - return value;
|
| - }
|
| -
|
| - return std::string(MultiProfileUserController::kBehaviorUnrestricted);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// static
|
| -const char MultiProfileUserController::kBehaviorUnrestricted[] = "unrestricted";
|
| -const char MultiProfileUserController::kBehaviorPrimaryOnly[] = "primary-only";
|
| -const char MultiProfileUserController::kBehaviorNotAllowed[] = "not-allowed";
|
| -
|
| -MultiProfileUserController::MultiProfileUserController(
|
| - MultiProfileUserControllerDelegate* delegate,
|
| - PrefService* local_state)
|
| - : delegate_(delegate),
|
| - local_state_(local_state) {
|
| -}
|
| -
|
| -MultiProfileUserController::~MultiProfileUserController() {}
|
| -
|
| -// static
|
| -void MultiProfileUserController::RegisterPrefs(
|
| - PrefRegistrySimple* registry) {
|
| - registry->RegisterDictionaryPref(prefs::kCachedMultiProfileUserBehavior);
|
| -}
|
| -
|
| -// static
|
| -void MultiProfileUserController::RegisterProfilePrefs(
|
| - user_prefs::PrefRegistrySyncable* registry) {
|
| - registry->RegisterStringPref(
|
| - prefs::kMultiProfileUserBehavior,
|
| - kBehaviorUnrestricted,
|
| - user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| - registry->RegisterBooleanPref(
|
| - prefs::kMultiProfileNeverShowIntro,
|
| - false,
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| - registry->RegisterBooleanPref(
|
| - prefs::kMultiProfileWarningShowDismissed,
|
| - false,
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| -}
|
| -
|
| -MultiProfileUserController::UserAllowedInSessionResult
|
| -MultiProfileUserController::IsUserAllowedInSession(
|
| - const std::string& user_email) const {
|
| - UserManager* user_manager = UserManager::Get();
|
| - CHECK(user_manager);
|
| -
|
| - const User* primary_user = user_manager->GetPrimaryUser();
|
| - std::string primary_user_email;
|
| - if (primary_user)
|
| - primary_user_email = primary_user->email();
|
| -
|
| - // Always allow if there is no primary user or user being checked is the
|
| - // primary user.
|
| - if (primary_user_email.empty() || primary_user_email == user_email)
|
| - return ALLOWED;
|
| -
|
| - // Owner is not allowed to be secondary user.
|
| - if (user_manager->GetOwnerEmail() == user_email)
|
| - return NOT_ALLOWED_OWNER_AS_SECONDARY;
|
| -
|
| - // Don't allow profiles potentially tainted by data fetched with policy-pushed
|
| - // certificates to join a multiprofile session.
|
| - if (policy::PolicyCertServiceFactory::UsedPolicyCertificates(user_email))
|
| - return NOT_ALLOWED_POLICY_CERT_TAINTED;
|
| -
|
| - // Don't allow any secondary profiles if the primary profile is tainted.
|
| - if (policy::PolicyCertServiceFactory::UsedPolicyCertificates(
|
| - primary_user_email)) {
|
| - // Check directly in local_state before checking if the primary user has
|
| - // a PolicyCertService. His profile may have been tainted previously though
|
| - // he didn't get a PolicyCertService created for this session.
|
| - return NOT_ALLOWED_PRIMARY_POLICY_CERT_TAINTED;
|
| - }
|
| -
|
| - // If the primary profile already has policy certificates installed but hasn't
|
| - // used them yet then it can become tainted at any time during this session;
|
| - // disable secondary profiles in this case too.
|
| - Profile* primary_user_profile =
|
| - primary_user ? user_manager->GetProfileByUser(primary_user) : NULL;
|
| - policy::PolicyCertService* service =
|
| - primary_user_profile ? policy::PolicyCertServiceFactory::GetForProfile(
|
| - primary_user_profile)
|
| - : NULL;
|
| - if (service && service->has_policy_certificates())
|
| - return NOT_ALLOWED_PRIMARY_POLICY_CERT_TAINTED;
|
| -
|
| - // No user is allowed if the primary user policy forbids it.
|
| - const std::string primary_user_behavior =
|
| - primary_user_profile->GetPrefs()->GetString(
|
| - prefs::kMultiProfileUserBehavior);
|
| - if (primary_user_behavior == kBehaviorNotAllowed)
|
| - return NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS;
|
| -
|
| - // The user must have 'unrestricted' policy to be a secondary user.
|
| - const std::string behavior = GetCachedValue(user_email);
|
| - return behavior == kBehaviorUnrestricted ? ALLOWED :
|
| - NOT_ALLOWED_POLICY_FORBIDS;
|
| -}
|
| -
|
| -void MultiProfileUserController::StartObserving(Profile* user_profile) {
|
| - // Profile name could be empty during tests.
|
| - if (user_profile->GetProfileName().empty())
|
| - return;
|
| -
|
| - scoped_ptr<PrefChangeRegistrar> registrar(new PrefChangeRegistrar);
|
| - registrar->Init(user_profile->GetPrefs());
|
| - registrar->Add(
|
| - prefs::kMultiProfileUserBehavior,
|
| - base::Bind(&MultiProfileUserController::OnUserPrefChanged,
|
| - base::Unretained(this),
|
| - user_profile));
|
| - pref_watchers_.push_back(registrar.release());
|
| -
|
| - OnUserPrefChanged(user_profile);
|
| -}
|
| -
|
| -void MultiProfileUserController::RemoveCachedValues(
|
| - const std::string& user_email) {
|
| - DictionaryPrefUpdate update(local_state_,
|
| - prefs::kCachedMultiProfileUserBehavior);
|
| - update->RemoveWithoutPathExpansion(user_email, NULL);
|
| - policy::PolicyCertServiceFactory::ClearUsedPolicyCertificates(user_email);
|
| -}
|
| -
|
| -std::string MultiProfileUserController::GetCachedValue(
|
| - const std::string& user_email) const {
|
| - const base::DictionaryValue* dict =
|
| - local_state_->GetDictionary(prefs::kCachedMultiProfileUserBehavior);
|
| - std::string value;
|
| - if (dict && dict->GetStringWithoutPathExpansion(user_email, &value))
|
| - return SanitizeBehaviorValue(value);
|
| -
|
| - return std::string(kBehaviorUnrestricted);
|
| -}
|
| -
|
| -void MultiProfileUserController::SetCachedValue(
|
| - const std::string& user_email,
|
| - const std::string& behavior) {
|
| - DictionaryPrefUpdate update(local_state_,
|
| - prefs::kCachedMultiProfileUserBehavior);
|
| - update->SetStringWithoutPathExpansion(user_email,
|
| - SanitizeBehaviorValue(behavior));
|
| -}
|
| -
|
| -void MultiProfileUserController::CheckSessionUsers() {
|
| - const UserList& users = UserManager::Get()->GetLoggedInUsers();
|
| - for (UserList::const_iterator it = users.begin(); it != users.end(); ++it) {
|
| - if (IsUserAllowedInSession((*it)->email()) != ALLOWED) {
|
| - delegate_->OnUserNotAllowed((*it)->email());
|
| - return;
|
| - }
|
| - }
|
| -}
|
| -
|
| -void MultiProfileUserController::OnUserPrefChanged(
|
| - Profile* user_profile) {
|
| - std::string user_email = user_profile->GetProfileName();
|
| - CHECK(!user_email.empty());
|
| - user_email = gaia::CanonicalizeEmail(user_email);
|
| -
|
| - PrefService* prefs = user_profile->GetPrefs();
|
| - if (prefs->FindPreference(prefs::kMultiProfileUserBehavior)
|
| - ->IsDefaultValue()) {
|
| - // Migration code to clear cached default behavior.
|
| - // TODO(xiyuan): Remove this after M35.
|
| - DictionaryPrefUpdate update(local_state_,
|
| - prefs::kCachedMultiProfileUserBehavior);
|
| - update->RemoveWithoutPathExpansion(user_email, NULL);
|
| - } else {
|
| - const std::string behavior =
|
| - prefs->GetString(prefs::kMultiProfileUserBehavior);
|
| - SetCachedValue(user_email, behavior);
|
| - }
|
| -
|
| - CheckSessionUsers();
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|