From c30a6232df03e1efbd9f3b226777b07e087a1122 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 12 Oct 2020 14:27:29 +0200 Subject: BASELINE: Update Chromium to 85.0.4183.140 Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen --- .../browser_context_keyed_service_factory.h | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'chromium/components/keyed_service') 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 +#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 + using TestingSubclassFactory = + base::RepeatingCallback( + 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 + Derived* SetTestingSubclassFactoryAndUse( + content::BrowserContext* context, + TestingSubclassFactory derived_factory) { + TestingFactory upcast_factory = base::BindRepeating( + [](TestingSubclassFactory derived_factory, + content::BrowserContext* context) { + return std::unique_ptr( + derived_factory.Run(context).release()); + }, + std::move(derived_factory)); + + return static_cast( + SetTestingFactoryAndUse(context, std::move(upcast_factory))); + } + protected: // BrowserContextKeyedServiceFactories must communicate with a // BrowserContextDependencyManager. For all non-test code, write your subclass -- cgit v1.2.1