// Copyright 2022 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_PROFILES_PROFILE_KEYED_SERVICE_FACTORY_H_ #define CHROME_BROWSER_PROFILES_PROFILE_KEYED_SERVICE_FACTORY_H_ #include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "chrome/browser/profiles/profile_selections.h" namespace profiles::testing { class ScopedProfileSelectionsForFactoryTesting; } // Detailed doc: "./profile_keyed_service_factory.md" // // ProfileKeyedServiceFactory provides a `Profile`-specific interface for // `KeyedServiceFactory` under chrome/. // // When a KeyedServiceFactory builds a service for a "Profile A", it can // actually return a service attached to a "Profile B". A common case is when a // service of the original profile is reused by the Off-The-Record (OTR) profile // (ProfileSelection::kRedirectedToOriginal()). Furthermore, a service can also // be created for either only the original profile, or only the OTR profile. // // `ProfileKeyedServiceFactory' provides control over how services are created // by default for non-regular profiles and how services are redirected across // profiles. The defaults can be overridden with the `ProfileSelections` // constructor parameter. // // - Example of a factory redirecting in incognito: // // class MyRedirectingKeyedServiceFactory: public ProfileKeyedServiceFactory { // private: // MyRedirectingKeyedServiceFactory() // : ProfileKeyedServiceFactory( // "MyRedirectingKeyedService", // ProfileSelections::BuildRedirectedInIncognito()) // {} // } // }; // // // - Example of a service that does not exist in OTR (default behavior): // // class MyDefaultKeyedServiceFactory: public ProfileKeyedServiceFactory { // private: // MyDefaultKeyedServiceFactory() // : ProfileKeyedServiceFactory("MyDefaultKeyedService") {} // } // }; // // Any change to this class should also be reflected on // `RefcountedProfileKeyedServiceFactory`. class ProfileKeyedServiceFactory : public BrowserContextKeyedServiceFactory { … }; #endif // CHROME_BROWSER_PROFILES_PROFILE_KEYED_SERVICE_FACTORY_H_