Chromium Code Reviews| Index: chrome/browser/extensions/extension_factory_registry.h |
| diff --git a/chrome/browser/extensions/extension_factory_registry.h b/chrome/browser/extensions/extension_factory_registry.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..40dac2c015b9f2b23b604a4a07294bd311532a74 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/extension_factory_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_FACTORY_REGISTRY_H_ |
|
Aaron Boodman
2012/03/15 02:27:47
Sadly, it is actually an ExtensionFunction Factory
|
| +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FACTORY_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 FactoryRegistry { |
| + public: |
| + static FactoryRegistry* GetInstance(); |
| + explicit FactoryRegistry(); |
| + virtual ~FactoryRegistry(); |
| + |
| + // 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_FACTORY_REGISTRY_H_ |