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

Side by Side Diff: chrome/common/extensions/manifest_handler.cc

Issue 12084034: Change manifest handler interface to always (implicitly) pass the entire manifest to handlers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/extensions/manifest_handler.h" 5 #include "chrome/common/extensions/manifest_handler.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/memory/linked_ptr.h" 10 #include "base/memory/linked_ptr.h"
11 #include "chrome/common/extensions/manifest.h"
11 12
12 namespace extensions { 13 namespace extensions {
13 14
14 namespace { 15 namespace {
15 16
16 class ManifestHandlerRegistry { 17 class ManifestHandlerRegistry {
17 public: 18 public:
18 void RegisterManifestHandler(const std::string& key, 19 void RegisterManifestHandler(const std::string& key,
19 ManifestHandler* handler); 20 ManifestHandler* handler);
20 ManifestHandler* GetManifestHandler(const std::string& key); 21 std::set<ManifestHandler*> GetHandlers(const Manifest* manifest);
21 std::vector<std::string> GetManifestHandlerKeys();
22 22
23 private: 23 private:
24 friend struct base::DefaultLazyInstanceTraits<ManifestHandlerRegistry>; 24 friend struct base::DefaultLazyInstanceTraits<ManifestHandlerRegistry>;
25 typedef std::map<std::string, linked_ptr<ManifestHandler> > 25 typedef std::map<std::string, linked_ptr<ManifestHandler> >
26 ManifestHandlerMap; 26 ManifestHandlerMap;
27 27
28 ManifestHandlerMap handlers_; 28 ManifestHandlerMap handlers_;
29 }; 29 };
30 30
31 void ManifestHandlerRegistry::RegisterManifestHandler( 31 void ManifestHandlerRegistry::RegisterManifestHandler(
32 const std::string& key, ManifestHandler* handler) { 32 const std::string& key, ManifestHandler* handler) {
33 handlers_[key] = make_linked_ptr(handler); 33 handlers_[key] = make_linked_ptr(handler);
34 } 34 }
35 35
36 ManifestHandler* ManifestHandlerRegistry::GetManifestHandler( 36 std::set<ManifestHandler*> ManifestHandlerRegistry::GetHandlers(
37 const std::string& key) { 37 const Manifest* manifest) {
38 ManifestHandlerMap::iterator iter = handlers_.find(key); 38 std::set<ManifestHandler*> handlers;
39 if (iter != handlers_.end())
40 return iter->second.get();
41 // TODO(yoz): The NOTREACHED only makes sense as long as
42 // GetManifestHandlerKeys is how we're getting the available
43 // manifest handlers.
44 NOTREACHED();
45 return NULL;
46 }
47
48 std::vector<std::string> ManifestHandlerRegistry::GetManifestHandlerKeys() {
49 std::vector<std::string> keys;
50 for (ManifestHandlerMap::iterator iter = handlers_.begin(); 39 for (ManifestHandlerMap::iterator iter = handlers_.begin();
51 iter != handlers_.end(); ++iter) { 40 iter != handlers_.end(); ++iter) {
52 keys.push_back(iter->first); 41 ManifestHandler* handler = iter->second.get();
42 if (manifest->HasPath(iter->first) ||
43 handler->AlwaysParseForType(manifest->type()))
44 handlers.insert(iter->second.get());
53 } 45 }
54 return keys; 46 // TODO(yoz): Some handlers may depend on other handlers having already
47 // parsed their keys. Reorder the handlers so that handlers needed earlier
48 // come first in the returned container.
49 return handlers;
55 } 50 }
56 51
57 static base::LazyInstance<ManifestHandlerRegistry> g_registry = 52 static base::LazyInstance<ManifestHandlerRegistry> g_registry =
58 LAZY_INSTANCE_INITIALIZER; 53 LAZY_INSTANCE_INITIALIZER;
59 54
60 } // namespace 55 } // namespace
61 56
62 ManifestHandler::ManifestHandler() { 57 ManifestHandler::ManifestHandler() {
63 } 58 }
64 59
65 ManifestHandler::~ManifestHandler() { 60 ManifestHandler::~ManifestHandler() {
66 } 61 }
67 62
68 bool ManifestHandler::HasNoKey(Extension* extension, string16* error) { 63 bool ManifestHandler::AlwaysParseForType(Extension::Type type) {
69 return true; 64 return false;
70 } 65 }
71 66
72 // static 67 // static
73 void ManifestHandler::Register(const std::string& key, 68 void ManifestHandler::Register(const std::string& key,
74 ManifestHandler* handler) { 69 ManifestHandler* handler) {
75 g_registry.Get().RegisterManifestHandler(key, handler); 70 g_registry.Get().RegisterManifestHandler(key, handler);
76 } 71 }
77 72
78 // static 73 // static
79 ManifestHandler* ManifestHandler::Get(const std::string& key) { 74 std::set<ManifestHandler*> ManifestHandler::GetHandlers(
80 return g_registry.Get().GetManifestHandler(key); 75 const Manifest* manifest) {
81 } 76 return g_registry.Get().GetHandlers(manifest);
82
83 // static
84 std::vector<std::string> ManifestHandler::GetKeys() {
85 return g_registry.Get().GetManifestHandlerKeys();
86 } 77 }
87 78
88 } // namespace extensions 79 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698