| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_LACROS_CERT_CERT_DB_INITIALIZER_FACTORY_H_ |
| #define CHROME_BROWSER_LACROS_CERT_CERT_DB_INITIALIZER_FACTORY_H_ |
| |
| #include "base/no_destructor.h" |
| #include "chrome/browser/profiles/profile_keyed_service_factory.h" |
| |
| class CertDbInitializer; |
| |
| // Factory that manages creation of CertDbInitializer. The initialization is |
| // handled differently depending on the environment: |
| // * On real ChromeOS devices with TPMs: |
| // ** if the user is affiliated: CertDbInitializer is automatically |
| // created right after its profile is created. It receives a path to software |
| // cert database and slot IDs for Chaps from Ash and uses them. |
| // ** if the user is not affiliated: TODO(b/197082753): not officially supported |
| // yet, handled as if there's no TPM. |
| // * In emulated environments (e.g. when running ChromeOS on Linux) and in the |
| // future on ChromeOS without TPMs: Same as real ChromeOS, but Ash only sends |
| // the software database path. |
| // * In browsertests: CertDbInitializer is not created by default because it |
| // requires crosapi mojo interface. It is configured through the |
| // `SetCreateWithBrowserContextForTesting()` method. This can be overridden by |
| // individual tests or they can create their own instances of the service. |
| // * In unittests: CertDbInitializer is not created by default (see |
| // `ServiceIsNULLWhileTesting()`). |
| class CertDbInitializerFactory : public ProfileKeyedServiceFactory { |
| public: |
| static CertDbInitializerFactory* GetInstance(); |
| static CertDbInitializer* GetForBrowserContext( |
| content::BrowserContext* context); |
| |
| // Configures whether CertDbInitializer should be automatically created on |
| // profile creation in browser tests. |
| // Currently it is configured that in browser tests the service is not created |
| // by default. Individual tests can override it when needed. |
| void SetCreateWithBrowserContextForTesting(bool should_create); |
| // Configures whether CertDbInitializer should be automatically created when |
| // something is trying to use it. In production it is created together with |
| // BrowserContext, which can make it hard for browser tests to set up |
| // everything in time. |
| void SetCreateOnDemandForTesting(bool should_create); |
| |
| private: |
| friend class base::NoDestructor<CertDbInitializerFactory>; |
| |
| CertDbInitializerFactory(); |
| ~CertDbInitializerFactory() override = default; |
| |
| // BrowserStateKeyedServiceFactory |
| bool ServiceIsCreatedWithBrowserContext() const override; |
| std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext( |
| content::BrowserContext* context) const override; |
| |
| bool should_create_with_browser_context_ = true; |
| bool should_create_on_demand_ = false; |
| }; |
| |
| #endif // CHROME_BROWSER_LACROS_CERT_CERT_DB_INITIALIZER_FACTORY_H_ |