Index: chrome/test/base/testing_profile.cc |
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc |
index 84aa2519a04bdd64e3d25238ac7553df235557ec..335b68548a3eb95281ed1937d24f3f7e0a68b371 100644 |
--- a/chrome/test/base/testing_profile.cc |
+++ b/chrome/test/base/testing_profile.cc |
@@ -184,7 +184,6 @@ const char TestingProfile::kTestUserProfileDir[] = "Default"; |
TestingProfile::TestingProfile() |
: start_time_(Time::Now()), |
testing_prefs_(NULL), |
- incognito_(false), |
force_incognito_(false), |
original_profile_(NULL), |
guest_session_(false), |
@@ -203,7 +202,6 @@ TestingProfile::TestingProfile() |
TestingProfile::TestingProfile(const base::FilePath& path) |
: start_time_(Time::Now()), |
testing_prefs_(NULL), |
- incognito_(false), |
force_incognito_(false), |
original_profile_(NULL), |
guest_session_(false), |
@@ -221,7 +219,6 @@ TestingProfile::TestingProfile(const base::FilePath& path, |
Delegate* delegate) |
: start_time_(Time::Now()), |
testing_prefs_(NULL), |
- incognito_(false), |
force_incognito_(false), |
original_profile_(NULL), |
guest_session_(false), |
@@ -248,7 +245,7 @@ TestingProfile::TestingProfile( |
scoped_refptr<ExtensionSpecialStoragePolicy> extension_policy, |
#endif |
scoped_ptr<PrefServiceSyncable> prefs, |
- bool incognito, |
+ TestingProfile* parent, |
bool guest_session, |
const std::string& supervised_user_id, |
scoped_ptr<policy::PolicyService> policy_service, |
@@ -256,9 +253,8 @@ TestingProfile::TestingProfile( |
: start_time_(Time::Now()), |
prefs_(prefs.release()), |
testing_prefs_(NULL), |
- incognito_(incognito), |
force_incognito_(false), |
- original_profile_(NULL), |
+ original_profile_(parent), |
guest_session_(guest_session), |
supervised_user_id_(supervised_user_id), |
last_session_exited_cleanly_(true), |
@@ -271,6 +267,9 @@ TestingProfile::TestingProfile( |
resource_context_(NULL), |
delegate_(delegate), |
policy_service_(policy_service.release()) { |
+ if (parent) |
+ parent->SetOffTheRecordProfile(scoped_ptr<Profile>(this)); |
+ |
// If no profile path was supplied, create one. |
if (profile_path_.empty()) { |
CreateTempProfileDir(); |
@@ -342,6 +341,8 @@ void TestingProfile::Init() { |
if (prefs_.get()) |
user_prefs::UserPrefs::Set(this, prefs_.get()); |
+ else if (IsOffTheRecord()) |
+ CreateIncognitoPrefService(); |
else |
CreateTestingPrefService(); |
@@ -359,10 +360,10 @@ void TestingProfile::Init() { |
this, extensions::TestExtensionSystem::Build); |
#endif |
- // If no original profile was specified for this profile: register preferences |
- // even if this is an incognito profile - this allows tests to create a |
- // standalone incognito profile while still having prefs registered. |
- if (!IsOffTheRecord() || !original_profile_) { |
+ // Prefs for incognito profiles are set in CreateIncognitoPrefService() by |
+ // simulating ProfileImpl::GetOffTheRecordPrefs(). |
+ if (!IsOffTheRecord()) { |
+ DCHECK(!original_profile_); |
user_prefs::PrefRegistrySyncable* pref_registry = |
static_cast<user_prefs::PrefRegistrySyncable*>( |
prefs_->DeprecatedGetPrefRegistry()); |
@@ -380,11 +381,13 @@ void TestingProfile::Init() { |
#endif |
#if defined(ENABLE_MANAGED_USERS) |
- SupervisedUserSettingsService* settings_service = |
- SupervisedUserSettingsServiceFactory::GetForProfile(this); |
- TestingPrefStore* store = new TestingPrefStore(); |
- settings_service->Init(store); |
- store->SetInitializationCompleted(); |
+ if (!IsOffTheRecord()) { |
+ SupervisedUserSettingsService* settings_service = |
+ SupervisedUserSettingsServiceFactory::GetForProfile(this); |
+ TestingPrefStore* store = new TestingPrefStore(); |
+ settings_service->Init(store); |
+ store->SetInitializationCompleted(); |
+ } |
#endif |
profile_name_ = "testing_profile"; |
@@ -409,6 +412,9 @@ TestingProfile::~TestingProfile() { |
// Revert to non-incognito mode before shutdown. |
force_incognito_ = false; |
+ // If this profile owns an incognito profile, tear it down first. |
+ incognito_profile_.reset(); |
+ |
// Any objects holding live URLFetchers should be deleted before teardown. |
TemplateURLFetcherFactory::ShutdownForProfile(this); |
@@ -601,8 +607,7 @@ scoped_refptr<base::SequencedTaskRunner> TestingProfile::GetIOTaskRunner() { |
} |
TestingPrefServiceSyncable* TestingProfile::GetTestingPrefService() { |
- if (!prefs_.get()) |
- CreateTestingPrefService(); |
+ DCHECK(prefs_); |
DCHECK(testing_prefs_); |
return testing_prefs_; |
} |
@@ -618,35 +623,26 @@ std::string TestingProfile::GetProfileName() { |
Profile::ProfileType TestingProfile::GetProfileType() const { |
if (guest_session_) |
return GUEST_PROFILE; |
- if (force_incognito_ || incognito_) |
+ if (force_incognito_ || original_profile_) |
return INCOGNITO_PROFILE; |
return REGULAR_PROFILE; |
} |
bool TestingProfile::IsOffTheRecord() const { |
- return force_incognito_ || incognito_; |
+ return force_incognito_ || original_profile_; |
} |
void TestingProfile::SetOffTheRecordProfile(scoped_ptr<Profile> profile) { |
DCHECK(!IsOffTheRecord()); |
+ DCHECK_EQ(this, profile->GetOriginalProfile()); |
incognito_profile_ = profile.Pass(); |
} |
-void TestingProfile::SetOriginalProfile(Profile* profile) { |
- DCHECK(IsOffTheRecord()); |
- original_profile_ = profile; |
-} |
- |
Profile* TestingProfile::GetOffTheRecordProfile() { |
if (IsOffTheRecord()) |
return this; |
- if (!incognito_profile_) { |
- TestingProfile::Builder builder; |
- builder.SetIncognito(); |
- scoped_ptr<TestingProfile> incognito_test_profile(builder.Build()); |
- incognito_test_profile->SetOriginalProfile(this); |
- SetOffTheRecordProfile(incognito_test_profile.PassAs<Profile>()); |
- } |
+ if (!incognito_profile_) |
+ TestingProfile::Builder().BuildIncognito(this); |
return incognito_profile_.get(); |
} |
@@ -697,6 +693,15 @@ void TestingProfile::CreateTestingPrefService() { |
chrome::RegisterUserProfilePrefs(testing_prefs_->registry()); |
} |
+void TestingProfile::CreateIncognitoPrefService() { |
+ DCHECK(original_profile_); |
+ DCHECK(!testing_prefs_); |
+ // Simplified version of ProfileImpl::GetOffTheRecordPrefs(). Note this |
+ // leaves testing_prefs_ unset. |
+ prefs_.reset(original_profile_->prefs_->CreateIncognitoPrefService(NULL)); |
+ user_prefs::UserPrefs::Set(this, prefs_.get()); |
+} |
+ |
void TestingProfile::CreateProfilePolicyConnector() { |
#if defined(ENABLE_CONFIGURATION_POLICY) |
schema_registry_service_ = |
@@ -723,9 +728,7 @@ if (!policy_service_) { |
} |
PrefService* TestingProfile::GetPrefs() { |
- if (!prefs_.get()) { |
- CreateTestingPrefService(); |
- } |
+ DCHECK(prefs_); |
return prefs_.get(); |
} |
@@ -921,7 +924,6 @@ Profile::ExitType TestingProfile::GetLastSessionExitType() { |
TestingProfile::Builder::Builder() |
: build_called_(false), |
delegate_(NULL), |
- incognito_(false), |
guest_session_(false) { |
} |
@@ -948,10 +950,6 @@ void TestingProfile::Builder::SetPrefService( |
pref_service_ = prefs.Pass(); |
} |
-void TestingProfile::Builder::SetIncognito() { |
- incognito_ = true; |
-} |
- |
void TestingProfile::Builder::SetGuestSession() { |
guest_session_ = true; |
} |
@@ -976,16 +974,35 @@ scoped_ptr<TestingProfile> TestingProfile::Builder::Build() { |
DCHECK(!build_called_); |
build_called_ = true; |
- return scoped_ptr<TestingProfile>(new TestingProfile( |
- path_, |
- delegate_, |
+ return scoped_ptr<TestingProfile>(new TestingProfile(path_, |
+ delegate_, |
+#if defined(ENABLE_EXTENSIONS) |
+ extension_policy_, |
+#endif |
+ pref_service_.Pass(), |
+ NULL, |
+ guest_session_, |
+ supervised_user_id_, |
+ policy_service_.Pass(), |
+ testing_factories_)); |
+} |
+ |
+TestingProfile* TestingProfile::Builder::BuildIncognito( |
+ TestingProfile* original_profile) { |
+ DCHECK(!build_called_); |
+ DCHECK(original_profile); |
+ build_called_ = true; |
+ |
+ // Note: Owned by |original_profile|. |
+ return new TestingProfile(path_, |
+ delegate_, |
#if defined(ENABLE_EXTENSIONS) |
- extension_policy_, |
+ extension_policy_, |
#endif |
- pref_service_.Pass(), |
- incognito_, |
- guest_session_, |
- supervised_user_id_, |
- policy_service_.Pass(), |
- testing_factories_)); |
+ pref_service_.Pass(), |
+ original_profile, |
+ guest_session_, |
+ supervised_user_id_, |
+ policy_service_.Pass(), |
+ testing_factories_); |
} |