#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_REGISTRY_H_
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_REGISTRY_H_
#include <map>
#include <string>
#include <vector>
class ExtensionFunction;
typedef ExtensionFunction* (*ExtensionFunctionFactory)();
template<class T>
ExtensionFunction* NewExtensionFunction() {
return new T();
}
class ExtensionFunctionRegistry {
public:
static ExtensionFunctionRegistry* GetInstance();
explicit ExtensionFunctionRegistry();
virtual ~ExtensionFunctionRegistry();
void ResetFunctions();
void GetAllNames(std::vector<std::string>* names);
bool OverrideFunction(const std::string& name,
ExtensionFunctionFactory factory);
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