summaryrefslogtreecommitdiff
path: root/chromium/components/keyed_service
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/keyed_service
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-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.h30
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