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..4a3e4786d109ecf540e1c86a7a4d4a9860f11a81 100644 |
--- a/chrome/common/extensions/manifest_handler.cc |
+++ b/chrome/common/extensions/manifest_handler.cc |
@@ -8,6 +8,7 @@ |
#include "base/lazy_instance.h" |
#include "base/memory/linked_ptr.h" |
+#include "chrome/common/extensions/manifest.h" |
namespace extensions { |
@@ -17,8 +18,7 @@ class ManifestHandlerRegistry { |
public: |
void RegisterManifestHandler(const std::string& key, |
ManifestHandler* handler); |
- ManifestHandler* GetManifestHandler(const std::string& key); |
- std::vector<std::string> GetManifestHandlerKeys(); |
+ std::set<ManifestHandler*> GetHandlers(const Manifest* manifest); |
private: |
friend struct base::DefaultLazyInstanceTraits<ManifestHandlerRegistry>; |
@@ -33,25 +33,20 @@ void ManifestHandlerRegistry::RegisterManifestHandler( |
handlers_[key] = make_linked_ptr(handler); |
} |
-ManifestHandler* ManifestHandlerRegistry::GetManifestHandler( |
- const std::string& key) { |
- ManifestHandlerMap::iterator iter = handlers_.find(key); |
- if (iter != handlers_.end()) |
- return iter->second.get(); |
- // TODO(yoz): The NOTREACHED only makes sense as long as |
- // GetManifestHandlerKeys is how we're getting the available |
- // manifest handlers. |
- NOTREACHED(); |
- return NULL; |
-} |
- |
-std::vector<std::string> ManifestHandlerRegistry::GetManifestHandlerKeys() { |
- std::vector<std::string> keys; |
+std::set<ManifestHandler*> ManifestHandlerRegistry::GetHandlers( |
+ const Manifest* manifest) { |
+ std::set<ManifestHandler*> handlers; |
for (ManifestHandlerMap::iterator iter = handlers_.begin(); |
iter != handlers_.end(); ++iter) { |
- keys.push_back(iter->first); |
+ ManifestHandler* handler = iter->second.get(); |
+ if (manifest->HasPath(iter->first) || |
+ handler->AlwaysParseForType(manifest->type())) |
+ handlers.insert(iter->second.get()); |
} |
- return keys; |
+ // TODO(yoz): Some handlers may depend on other handlers having already |
+ // parsed their keys. Reorder the handlers so that handlers needed earlier |
+ // come first in the returned container. |
+ return handlers; |
} |
static base::LazyInstance<ManifestHandlerRegistry> g_registry = |
@@ -65,8 +60,8 @@ ManifestHandler::ManifestHandler() { |
ManifestHandler::~ManifestHandler() { |
} |
-bool ManifestHandler::HasNoKey(Extension* extension, string16* error) { |
- return true; |
+bool ManifestHandler::AlwaysParseForType(Extension::Type type) { |
+ return false; |
} |
// static |
@@ -76,13 +71,9 @@ void ManifestHandler::Register(const std::string& key, |
} |
// static |
-ManifestHandler* ManifestHandler::Get(const std::string& key) { |
- return g_registry.Get().GetManifestHandler(key); |
-} |
- |
-// static |
-std::vector<std::string> ManifestHandler::GetKeys() { |
- return g_registry.Get().GetManifestHandlerKeys(); |
+std::set<ManifestHandler*> ManifestHandler::GetHandlers( |
+ const Manifest* manifest) { |
+ return g_registry.Get().GetHandlers(manifest); |
} |
} // namespace extensions |