| 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
|
|
|