OLD | NEW |
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 Loading... |
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 |
OLD | NEW |