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 |