| Index: chrome/test/base/testing_profile.h
|
| diff --git a/chrome/test/base/testing_profile.h b/chrome/test/base/testing_profile.h
|
| index 8e63e5a71b59aeb7cf6ee6d6ba8e24ca5b488e6a..03c95d463ad13d39c5cd0526546077318aef629d 100644
|
| --- a/chrome/test/base/testing_profile.h
|
| +++ b/chrome/test/base/testing_profile.h
|
| @@ -11,6 +11,7 @@
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h"
|
|
|
| namespace content {
|
| class MockResourceContext;
|
| @@ -59,6 +60,10 @@ class TestingProfile : public Profile {
|
| // Default constructor that cannot be used with multi-profiles.
|
| TestingProfile();
|
|
|
| + typedef std::vector<std::pair<
|
| + BrowserContextKeyedServiceFactory*,
|
| + BrowserContextKeyedServiceFactory::FactoryFunction> > TestingFactories;
|
| +
|
| // Helper class for building an instance of TestingProfile (allows injecting
|
| // mocks for various services prior to profile initialization).
|
| // TODO(atwilson): Remove non-default constructors and various setters in
|
| @@ -68,13 +73,19 @@ class TestingProfile : public Profile {
|
| Builder();
|
| ~Builder();
|
|
|
| - // Sets a Delegate to be called back when the Profile is fully initialized.
|
| - // This causes the final initialization to be performed via a task so the
|
| - // caller must run a MessageLoop. Caller maintains ownership of the Delegate
|
| + // Sets a Delegate to be called back during profile init. This causes the
|
| + // final initialization to be performed via a task so the caller must run
|
| + // a MessageLoop. Caller maintains ownership of the Delegate
|
| // and must manage its lifetime so it continues to exist until profile
|
| // initialization is complete.
|
| void SetDelegate(Delegate* delegate);
|
|
|
| + // Adds a testing factory to the TestingProfile. These testing factories
|
| + // are applied before the ProfileKeyedServices are created.
|
| + void AddTestingFactory(
|
| + BrowserContextKeyedServiceFactory* service_factory,
|
| + BrowserContextKeyedServiceFactory::FactoryFunction callback);
|
| +
|
| // Sets the ExtensionSpecialStoragePolicy to be returned by
|
| // GetExtensionSpecialStoragePolicy().
|
| void SetExtensionSpecialStoragePolicy(
|
| @@ -86,6 +97,9 @@ class TestingProfile : public Profile {
|
| // Sets the PrefService to be used by this profile.
|
| void SetPrefService(scoped_ptr<PrefServiceSyncable> prefs);
|
|
|
| + // Makes the Profile being built an incognito profile.
|
| + void SetIncognito();
|
| +
|
| // Creates the TestingProfile using previously-set settings.
|
| scoped_ptr<TestingProfile> Build();
|
|
|
| @@ -98,6 +112,8 @@ class TestingProfile : public Profile {
|
| scoped_refptr<ExtensionSpecialStoragePolicy> extension_policy_;
|
| base::FilePath path_;
|
| Delegate* delegate_;
|
| + bool incognito_;
|
| + TestingFactories testing_factories_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(Builder);
|
| };
|
| @@ -120,7 +136,9 @@ class TestingProfile : public Profile {
|
| TestingProfile(const base::FilePath& path,
|
| Delegate* delegate,
|
| scoped_refptr<ExtensionSpecialStoragePolicy> extension_policy,
|
| - scoped_ptr<PrefServiceSyncable> prefs);
|
| + scoped_ptr<PrefServiceSyncable> prefs,
|
| + bool incognito,
|
| + const TestingFactories& factories);
|
|
|
| virtual ~TestingProfile();
|
|
|
| @@ -186,9 +204,26 @@ class TestingProfile : public Profile {
|
|
|
| virtual TestingProfile* AsTestingProfile() OVERRIDE;
|
| virtual std::string GetProfileName() OVERRIDE;
|
| - void set_incognito(bool incognito) { incognito_ = incognito; }
|
| +
|
| + // DEPRECATED, because it's fragile to change a profile from non-incognito
|
| + // to incognito after the ProfileKeyedServices have been created (some
|
| + // ProfileKeyedServices either should not exist in incognito mode, or will
|
| + // crash when they try to get references to other services they depend on,
|
| + // but do not exist in incognito mode).
|
| + // TODO(atwilson): Remove this API (http://crbug.com/277296).
|
| + //
|
| + // Changes a profile's to/from incognito mode temporarily - profile will be
|
| + // returned to non-incognito before destruction to allow services to
|
| + // properly shutdown. This is only supported for legacy tests - new tests
|
| + // should create a true incognito profile using Builder::SetIncognito() or
|
| + // by using the TestingProfile constructor that allows setting the incognito
|
| + // flag.
|
| + void ForceIncognito(bool force_incognito) {
|
| + force_incognito_ = force_incognito;
|
| + }
|
| +
|
| // Assumes ownership.
|
| - virtual void SetOffTheRecordProfile(Profile* profile);
|
| + virtual void SetOffTheRecordProfile(scoped_ptr<Profile> profile);
|
| virtual void SetOriginalProfile(Profile* profile);
|
| virtual Profile* GetOffTheRecordProfile() OVERRIDE;
|
| virtual void DestroyOffTheRecordProfile() OVERRIDE {}
|
| @@ -306,6 +341,7 @@ class TestingProfile : public Profile {
|
| std::wstring id_;
|
|
|
| bool incognito_;
|
| + bool force_incognito_;
|
| scoped_ptr<Profile> incognito_profile_;
|
| Profile* original_profile_;
|
|
|
|
|