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..acec04caf98694e0bafb1fe2d34016feb9bb1b50 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* incognito_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_(incognito_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 (incognito_parent) |
+ incognito_parent->SetTestingOffTheRecordProfile(this); // Takes ownership. |
+ |
// 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(); |
tapted
2014/09/12 07:54:09
This was needed to resolve a lifetime issue in the
|
+ |
// 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,13 +623,13 @@ 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) { |
sky
2014/09/12 15:33:29
Can this be changed to take a TestingProfile? It w
tapted
2014/09/15 05:05:16
Not easily - that was actually my first attempt, b
|
@@ -632,21 +637,11 @@ void TestingProfile::SetOffTheRecordProfile(scoped_ptr<Profile> profile) { |
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 +692,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_ = |
@@ -722,10 +726,14 @@ if (!policy_service_) { |
policy::ProfilePolicyConnectorFactory::GetForProfile(this)); |
} |
+void TestingProfile::SetTestingOffTheRecordProfile(Profile* incognito_profile) { |
sky
2014/09/12 15:33:29
Is there a reason we need this? Why not have the c
tapted
2014/09/15 05:05:16
Nope! Removed. I think I had this taking a Testing
|
+ DCHECK(!IsOffTheRecord()); |
+ DCHECK(!incognito_profile_); |
+ SetOffTheRecordProfile(make_scoped_ptr(incognito_profile)); |
+} |
+ |
PrefService* TestingProfile::GetPrefs() { |
- if (!prefs_.get()) { |
- CreateTestingPrefService(); |
- } |
+ DCHECK(prefs_); |
return prefs_.get(); |
} |
@@ -921,7 +929,6 @@ Profile::ExitType TestingProfile::GetLastSessionExitType() { |
TestingProfile::Builder::Builder() |
: build_called_(false), |
delegate_(NULL), |
- incognito_(false), |
guest_session_(false) { |
} |
@@ -948,10 +955,6 @@ void TestingProfile::Builder::SetPrefService( |
pref_service_ = prefs.Pass(); |
} |
-void TestingProfile::Builder::SetIncognito() { |
- incognito_ = true; |
-} |
- |
void TestingProfile::Builder::SetGuestSession() { |
guest_session_ = true; |
} |
@@ -976,16 +979,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_); |
} |