| 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_
|
| +#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_
|
|
|