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