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

Side by Side 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 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 11
12 namespace extensions { 12 namespace extensions {
13 13
14 namespace { 14 namespace {
15 15
16 class ManifestHandlerRegistry { 16 class ManifestHandlerRegistry {
17 public: 17 public:
18 void RegisterManifestHandler(const std::string& key, 18 void RegisterManifestHandler(const std::string& key,
19 ManifestHandler* handler); 19 ManifestHandler* handler);
20 void RegisterManifestMultiKeyHandler(ManifestMultiKeyHandler* handler);
20 ManifestHandler* GetManifestHandler(const std::string& key); 21 ManifestHandler* GetManifestHandler(const std::string& key);
22 ManifestMultiKeyHandler* GetManifestMultiKeyHandler(
23 const ManifestMultiKeyHandler::KeySet& key_set);
21 std::vector<std::string> GetManifestHandlerKeys(); 24 std::vector<std::string> GetManifestHandlerKeys();
25 std::vector<ManifestMultiKeyHandler::KeySet>
26 GetManifestMultiKeyHandlerKeySets();
22 27
23 private: 28 private:
24 friend struct base::DefaultLazyInstanceTraits<ManifestHandlerRegistry>; 29 friend struct base::DefaultLazyInstanceTraits<ManifestHandlerRegistry>;
25 typedef std::map<std::string, linked_ptr<ManifestHandler> > 30 typedef std::map<std::string, linked_ptr<ManifestHandler> >
26 ManifestHandlerMap; 31 ManifestHandlerMap;
32 typedef std::map<ManifestMultiKeyHandler::KeySet,
33 linked_ptr<ManifestMultiKeyHandler> >
34 ManifestMultiKeyHandlerMap;
27 35
28 ManifestHandlerMap handlers_; 36 ManifestHandlerMap handlers_;
37 ManifestMultiKeyHandlerMap multi_key_handlers_;
29 }; 38 };
30 39
31 void ManifestHandlerRegistry::RegisterManifestHandler( 40 void ManifestHandlerRegistry::RegisterManifestHandler(
32 const std::string& key, ManifestHandler* handler) { 41 const std::string& key, ManifestHandler* handler) {
33 handlers_[key] = make_linked_ptr(handler); 42 handlers_[key] = make_linked_ptr(handler);
34 } 43 }
35 44
45 void ManifestHandlerRegistry::RegisterManifestMultiKeyHandler(
46 ManifestMultiKeyHandler* handler) {
47 multi_key_handlers_[handler->key_set()] = make_linked_ptr(handler);
48 }
49
36 ManifestHandler* ManifestHandlerRegistry::GetManifestHandler( 50 ManifestHandler* ManifestHandlerRegistry::GetManifestHandler(
37 const std::string& key) { 51 const std::string& key) {
38 ManifestHandlerMap::iterator iter = handlers_.find(key); 52 ManifestHandlerMap::iterator iter = handlers_.find(key);
39 if (iter != handlers_.end()) 53 if (iter != handlers_.end())
40 return iter->second.get(); 54 return iter->second.get();
41 // TODO(yoz): The NOTREACHED only makes sense as long as 55 // TODO(yoz): The NOTREACHED only makes sense as long as
42 // GetManifestHandlerKeys is how we're getting the available 56 // GetManifestHandlerKeys is how we're getting the available
43 // manifest handlers. 57 // manifest handlers.
44 NOTREACHED(); 58 NOTREACHED();
45 return NULL; 59 return NULL;
46 } 60 }
47 61
62 ManifestMultiKeyHandler* ManifestHandlerRegistry::GetManifestMultiKeyHandler(
63 const ManifestMultiKeyHandler::KeySet& key_set) {
64 ManifestMultiKeyHandlerMap::iterator iter = multi_key_handlers_.find(key_set);
65 if (iter != multi_key_handlers_.end())
66 return iter->second.get();
67 // TODO(yoz): The NOTREACHED only makes sense as long as
68 // GetManifestMultiKeyHandlerKeySets is how we're getting the available
69 // manifest handlers.
70 NOTREACHED();
71 return NULL;
72 }
73
48 std::vector<std::string> ManifestHandlerRegistry::GetManifestHandlerKeys() { 74 std::vector<std::string> ManifestHandlerRegistry::GetManifestHandlerKeys() {
49 std::vector<std::string> keys; 75 std::vector<std::string> keys;
50 for (ManifestHandlerMap::iterator iter = handlers_.begin(); 76 for (ManifestHandlerMap::iterator iter = handlers_.begin();
51 iter != handlers_.end(); ++iter) { 77 iter != handlers_.end(); ++iter) {
52 keys.push_back(iter->first); 78 keys.push_back(iter->first);
53 } 79 }
54 return keys; 80 return keys;
55 } 81 }
56 82
83 std::vector<ManifestMultiKeyHandler::KeySet>
84 ManifestHandlerRegistry::GetManifestMultiKeyHandlerKeySets() {
85 std::vector<ManifestMultiKeyHandler::KeySet> key_sets;
86 for (ManifestMultiKeyHandlerMap::iterator iter = multi_key_handlers_.begin();
87 iter != multi_key_handlers_.end(); ++iter) {
88 key_sets.push_back(iter->first);
89 }
90 return key_sets;
91 }
92
57 static base::LazyInstance<ManifestHandlerRegistry> g_registry = 93 static base::LazyInstance<ManifestHandlerRegistry> g_registry =
58 LAZY_INSTANCE_INITIALIZER; 94 LAZY_INSTANCE_INITIALIZER;
59 95
60 } // namespace 96 } // namespace
61 97
62 ManifestHandler::ManifestHandler() { 98 ManifestHandler::ManifestHandler() {
63 } 99 }
64 100
65 ManifestHandler::~ManifestHandler() { 101 ManifestHandler::~ManifestHandler() {
66 } 102 }
(...skipping 11 matching lines...) Expand all
78 // static 114 // static
79 ManifestHandler* ManifestHandler::Get(const std::string& key) { 115 ManifestHandler* ManifestHandler::Get(const std::string& key) {
80 return g_registry.Get().GetManifestHandler(key); 116 return g_registry.Get().GetManifestHandler(key);
81 } 117 }
82 118
83 // static 119 // static
84 std::vector<std::string> ManifestHandler::GetKeys() { 120 std::vector<std::string> ManifestHandler::GetKeys() {
85 return g_registry.Get().GetManifestHandlerKeys(); 121 return g_registry.Get().GetManifestHandlerKeys();
86 } 122 }
87 123
124 ManifestMultiKeyHandler::ManifestMultiKeyHandler() {
125 }
126
127 ManifestMultiKeyHandler::~ManifestMultiKeyHandler() {
128 }
129
130 // static
131 void ManifestMultiKeyHandler::Register(ManifestMultiKeyHandler* handler) {
132 g_registry.Get().RegisterManifestMultiKeyHandler(handler);
133 }
134
135 // static
136 ManifestMultiKeyHandler* ManifestMultiKeyHandler::Get(const KeySet& key_set) {
137 return g_registry.Get().GetManifestMultiKeyHandler(key_set);
138 }
139
140 // static
141 std::vector<ManifestMultiKeyHandler::KeySet>
142 ManifestMultiKeyHandler::GetKeySets() {
143 return g_registry.Get().GetManifestMultiKeyHandlerKeySets();
144 }
145
88 } // namespace extensions 146 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698