Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2471)

Unified Diff: chrome/common/extensions/manifest_handler.cc

Issue 12042096: Move page action manifest parsing out of Extension; the first multi-key manifest handler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698