Index: chrome/browser/extensions/extension_function_registry.h |
diff --git a/chrome/browser/extensions/extension_function_registry.h b/chrome/browser/extensions/extension_function_registry.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9ad83ec7286c771c0688e014717b52bab8f7c55f |
--- /dev/null |
+++ b/chrome/browser/extensions/extension_function_registry.h |
@@ -0,0 +1,56 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_REGISTRY_H_ |
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_REGISTRY_H_ |
+#pragma once |
+ |
+#include <map> |
+#include <string> |
+#include <vector> |
+ |
+class ExtensionFunction; |
+ |
+// A factory function for creating new ExtensionFunction instances. |
+typedef ExtensionFunction* (*ExtensionFunctionFactory)(); |
+ |
+// Template for defining ExtensionFunctionFactory. |
+template<class T> |
+ExtensionFunction* NewExtensionFunction() { |
+ return new T(); |
+} |
+ |
+// Contains a list of all known extension functions and allows clients to |
+// create instances of them. |
+class ExtensionFunctionRegistry { |
+ public: |
+ static ExtensionFunctionRegistry* GetInstance(); |
+ explicit ExtensionFunctionRegistry(); |
+ virtual ~ExtensionFunctionRegistry(); |
+ |
+ // Resets all functions to their default values. |
+ void ResetFunctions(); |
+ |
+ // Adds all function names to 'names'. |
+ void GetAllNames(std::vector<std::string>* names); |
+ |
+ // Allows overriding of specific functions (e.g. for testing). Functions |
+ // must be previously registered. Returns true if successful. |
+ bool OverrideFunction(const std::string& name, |
+ ExtensionFunctionFactory factory); |
+ |
+ // Factory method for the ExtensionFunction registered as 'name'. |
+ ExtensionFunction* NewFunction(const std::string& name); |
+ |
+ template<class T> |
+ void RegisterFunction() { |
+ factories_[T::function_name()] = &NewExtensionFunction<T>; |
+ } |
+ |
+ private: |
+ typedef std::map<std::string, ExtensionFunctionFactory> FactoryMap; |
+ FactoryMap factories_; |
+}; |
+ |
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_REGISTRY_H_ |