| Index: chrome/common/extensions/manifest_handler.cc
|
| diff --git a/chrome/common/extensions/manifest_handler.cc b/chrome/common/extensions/manifest_handler.cc
|
| index a88b475e16791823f3700da32bc2d07defeaac18..b9c1e75350e3b8b3ee0f0fcf16cbb3876547e522 100644
|
| --- a/chrome/common/extensions/manifest_handler.cc
|
| +++ b/chrome/common/extensions/manifest_handler.cc
|
| @@ -17,15 +17,24 @@ class ManifestHandlerRegistry {
|
| public:
|
| void RegisterManifestHandler(const std::string& key,
|
| ManifestHandler* handler);
|
| + void RegisterManifestMultiKeyHandler(ManifestMultiKeyHandler* handler);
|
| ManifestHandler* GetManifestHandler(const std::string& key);
|
| + ManifestMultiKeyHandler* GetManifestMultiKeyHandler(
|
| + const ManifestMultiKeyHandler::KeySet& key_set);
|
| std::vector<std::string> GetManifestHandlerKeys();
|
| + std::vector<ManifestMultiKeyHandler::KeySet>
|
| + GetManifestMultiKeyHandlerKeySets();
|
|
|
| private:
|
| friend struct base::DefaultLazyInstanceTraits<ManifestHandlerRegistry>;
|
| typedef std::map<std::string, linked_ptr<ManifestHandler> >
|
| ManifestHandlerMap;
|
| + typedef std::map<ManifestMultiKeyHandler::KeySet,
|
| + linked_ptr<ManifestMultiKeyHandler> >
|
| + ManifestMultiKeyHandlerMap;
|
|
|
| ManifestHandlerMap handlers_;
|
| + ManifestMultiKeyHandlerMap multi_key_handlers_;
|
| };
|
|
|
| void ManifestHandlerRegistry::RegisterManifestHandler(
|
| @@ -33,6 +42,11 @@ void ManifestHandlerRegistry::RegisterManifestHandler(
|
| handlers_[key] = make_linked_ptr(handler);
|
| }
|
|
|
| +void ManifestHandlerRegistry::RegisterManifestMultiKeyHandler(
|
| + ManifestMultiKeyHandler* handler) {
|
| + multi_key_handlers_[handler->key_set()] = make_linked_ptr(handler);
|
| +}
|
| +
|
| ManifestHandler* ManifestHandlerRegistry::GetManifestHandler(
|
| const std::string& key) {
|
| ManifestHandlerMap::iterator iter = handlers_.find(key);
|
| @@ -45,6 +59,18 @@ ManifestHandler* ManifestHandlerRegistry::GetManifestHandler(
|
| return NULL;
|
| }
|
|
|
| +ManifestMultiKeyHandler* ManifestHandlerRegistry::GetManifestMultiKeyHandler(
|
| + const ManifestMultiKeyHandler::KeySet& key_set) {
|
| + ManifestMultiKeyHandlerMap::iterator iter = multi_key_handlers_.find(key_set);
|
| + if (iter != multi_key_handlers_.end())
|
| + return iter->second.get();
|
| + // TODO(yoz): The NOTREACHED only makes sense as long as
|
| + // GetManifestMultiKeyHandlerKeySets is how we're getting the available
|
| + // manifest handlers.
|
| + NOTREACHED();
|
| + return NULL;
|
| +}
|
| +
|
| std::vector<std::string> ManifestHandlerRegistry::GetManifestHandlerKeys() {
|
| std::vector<std::string> keys;
|
| for (ManifestHandlerMap::iterator iter = handlers_.begin();
|
| @@ -54,6 +80,16 @@ std::vector<std::string> ManifestHandlerRegistry::GetManifestHandlerKeys() {
|
| return keys;
|
| }
|
|
|
| +std::vector<ManifestMultiKeyHandler::KeySet>
|
| +ManifestHandlerRegistry::GetManifestMultiKeyHandlerKeySets() {
|
| + std::vector<ManifestMultiKeyHandler::KeySet> key_sets;
|
| + for (ManifestMultiKeyHandlerMap::iterator iter = multi_key_handlers_.begin();
|
| + iter != multi_key_handlers_.end(); ++iter) {
|
| + key_sets.push_back(iter->first);
|
| + }
|
| + return key_sets;
|
| +}
|
| +
|
| static base::LazyInstance<ManifestHandlerRegistry> g_registry =
|
| LAZY_INSTANCE_INITIALIZER;
|
|
|
| @@ -85,4 +121,26 @@ std::vector<std::string> ManifestHandler::GetKeys() {
|
| return g_registry.Get().GetManifestHandlerKeys();
|
| }
|
|
|
| +ManifestMultiKeyHandler::ManifestMultiKeyHandler() {
|
| +}
|
| +
|
| +ManifestMultiKeyHandler::~ManifestMultiKeyHandler() {
|
| +}
|
| +
|
| +// static
|
| +void ManifestMultiKeyHandler::Register(ManifestMultiKeyHandler* handler) {
|
| + g_registry.Get().RegisterManifestMultiKeyHandler(handler);
|
| +}
|
| +
|
| +// static
|
| +ManifestMultiKeyHandler* ManifestMultiKeyHandler::Get(const KeySet& key_set) {
|
| + return g_registry.Get().GetManifestMultiKeyHandler(key_set);
|
| +}
|
| +
|
| +// static
|
| +std::vector<ManifestMultiKeyHandler::KeySet>
|
| +ManifestMultiKeyHandler::GetKeySets() {
|
| + return g_registry.Get().GetManifestMultiKeyHandlerKeySets();
|
| +}
|
| +
|
| } // namespace extensions
|
|
|