diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/keyed_service | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/keyed_service')
-rw-r--r-- | chromium/components/keyed_service/content/browser_context_keyed_service_factory.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/chromium/components/keyed_service/content/browser_context_keyed_service_factory.h b/chromium/components/keyed_service/content/browser_context_keyed_service_factory.h index 5a3b2ccfa7b..ec62fd7c694 100644 --- a/chromium/components/keyed_service/content/browser_context_keyed_service_factory.h +++ b/chromium/components/keyed_service/content/browser_context_keyed_service_factory.h @@ -7,6 +7,8 @@ #include <memory> +#include "base/bind.h" +#include "base/callback.h" #include "base/compiler_specific.h" #include "base/macros.h" #include "components/keyed_service/core/keyed_service_export.h" @@ -48,6 +50,34 @@ class KEYED_SERVICE_EXPORT BrowserContextKeyedServiceFactory KeyedService* SetTestingFactoryAndUse(content::BrowserContext* context, TestingFactory testing_factory); + // A variant of |TestingFactory| for supplying a subclass of + // KeyedService for a given BrowserContext. + template <typename Derived> + using TestingSubclassFactory = + base::RepeatingCallback<std::unique_ptr<Derived>( + content::BrowserContext* context)>; + + // Like |SetTestingFactoryAndUse|, but instead takes a factory for a + // subclass of KeyedService and returns a pointer to this subclass. + // This allows callers to avoid using static_cast in both directions: + // casting up to KeyedService in their factory, and casting down to + // their subclass on the returned pointer. + template <typename Derived> + Derived* SetTestingSubclassFactoryAndUse( + content::BrowserContext* context, + TestingSubclassFactory<Derived> derived_factory) { + TestingFactory upcast_factory = base::BindRepeating( + [](TestingSubclassFactory<Derived> derived_factory, + content::BrowserContext* context) { + return std::unique_ptr<KeyedService>( + derived_factory.Run(context).release()); + }, + std::move(derived_factory)); + + return static_cast<Derived*>( + SetTestingFactoryAndUse(context, std::move(upcast_factory))); + } + protected: // BrowserContextKeyedServiceFactories must communicate with a // BrowserContextDependencyManager. For all non-test code, write your subclass |