summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/signin/identity_test_environment_profile_adaptor.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/signin/identity_test_environment_profile_adaptor.h')
-rw-r--r--chromium/chrome/browser/signin/identity_test_environment_profile_adaptor.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/chromium/chrome/browser/signin/identity_test_environment_profile_adaptor.h b/chromium/chrome/browser/signin/identity_test_environment_profile_adaptor.h
new file mode 100644
index 00000000000..ef477efd9d3
--- /dev/null
+++ b/chromium/chrome/browser/signin/identity_test_environment_profile_adaptor.h
@@ -0,0 +1,101 @@
+// Copyright 2018 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.
+
+#ifndef CHROME_BROWSER_SIGNIN_IDENTITY_TEST_ENVIRONMENT_PROFILE_ADAPTOR_H_
+#define CHROME_BROWSER_SIGNIN_IDENTITY_TEST_ENVIRONMENT_PROFILE_ADAPTOR_H_
+
+#include "chrome/test/base/testing_profile.h"
+#include "components/signin/public/identity_manager/identity_test_environment.h"
+#include "components/sync_preferences/testing_pref_service_syncable.h"
+
+// Adaptor that supports signin::IdentityTestEnvironment's usage in testing
+// contexts where the relevant fake objects must be injected via the
+// BrowserContextKeyedServiceFactory infrastructure as the production code
+// accesses IdentityManager via that infrastructure. Before using this
+// class, please consider whether you can change the production code in question
+// to take in the relevant dependencies directly rather than obtaining them from
+// the Profile; this is both cleaner in general and allows for direct usage of
+// signin::IdentityTestEnvironment in the test.
+class IdentityTestEnvironmentProfileAdaptor {
+ public:
+ // Creates and returns a TestingProfile that has been configured with the set
+ // of testing factories that IdentityTestEnvironment requires.
+ static std::unique_ptr<TestingProfile>
+ CreateProfileForIdentityTestEnvironment();
+
+ // Like the above, but additionally configures the returned Profile with
+ // |input_factories|.
+ static std::unique_ptr<TestingProfile>
+ CreateProfileForIdentityTestEnvironment(
+ const TestingProfile::TestingFactories& input_factories);
+
+ // Creates and returns a TestingProfile that has been configured with the
+ // given |builder| and the set of testing factories that
+ // IdentityTestEnvironment requires.
+ // See the above variant for comments on common parameters.
+ static std::unique_ptr<TestingProfile>
+ CreateProfileForIdentityTestEnvironment(
+ TestingProfile::Builder& builder,
+ signin::AccountConsistencyMethod account_consistency =
+ signin::AccountConsistencyMethod::kDisabled);
+
+ // Sets the testing factories that signin::IdentityTestEnvironment
+ // requires explicitly on a Profile that is passed to it.
+ // See the above variant for comments on common parameters.
+ static void SetIdentityTestEnvironmentFactoriesOnBrowserContext(
+ content::BrowserContext* browser_context);
+
+ // Appends the set of testing factories that signin::IdentityTestEnvironment
+ // requires to |factories_to_append_to|, which should be the set of testing
+ // factories supplied to TestingProfile (via one of the various mechanisms for
+ // doing so). Prefer the above API if possible, as it is less fragile. This
+ // API is primarily for use in tests that do not create the TestingProfile
+ // internally but rather simply supply the set of TestingFactories to some
+ // external facility (e.g., a superclass).
+ // See CreateProfileForIdentityTestEnvironment() for comments on common
+ // parameters.
+ static void AppendIdentityTestEnvironmentFactories(
+ TestingProfile::TestingFactories* factories_to_append_to);
+
+ // Returns the set of testing factories that signin::IdentityTestEnvironment
+ // requires, which can be useful to configure profiles for services that do
+ // not require any other testing factory than the ones specified in here.
+ static TestingProfile::TestingFactories GetIdentityTestEnvironmentFactories(
+ signin::AccountConsistencyMethod account_consistency =
+ signin::AccountConsistencyMethod::kDisabled);
+
+ // Constructs an adaptor that associates an IdentityTestEnvironment instance
+ // with |profile| via the relevant backing objects. Note that
+ // |profile| must have been configured with the IdentityTestEnvironment
+ // testing factories, either because it was created via
+ // CreateProfileForIdentityTestEnvironment() or because
+ // AppendIdentityTestEnvironmentFactories() was invoked on the set of
+ // factories supplied to it.
+ // |profile| must outlive this object.
+ explicit IdentityTestEnvironmentProfileAdaptor(Profile* profile);
+
+ IdentityTestEnvironmentProfileAdaptor(
+ const IdentityTestEnvironmentProfileAdaptor&) = delete;
+ IdentityTestEnvironmentProfileAdaptor& operator=(
+ const IdentityTestEnvironmentProfileAdaptor&) = delete;
+
+ ~IdentityTestEnvironmentProfileAdaptor() {}
+
+ // Returns the IdentityTestEnvironment associated with this object (and
+ // implicitly with the Profile passed to this object's constructor).
+ signin::IdentityTestEnvironment* identity_test_env() {
+ return &identity_test_env_;
+ }
+
+ private:
+ // Testing factory that creates an IdentityManager
+ // with a FakeProfileOAuth2TokenService.
+ static std::unique_ptr<KeyedService> BuildIdentityManagerForTests(
+ signin::AccountConsistencyMethod account_consistency,
+ content::BrowserContext* context);
+
+ signin::IdentityTestEnvironment identity_test_env_;
+};
+
+#endif // CHROME_BROWSER_SIGNIN_IDENTITY_TEST_ENVIRONMENT_PROFILE_ADAPTOR_H_