OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "components/nacl/renderer/ppb_nacl_private.h" | 5 #include "components/nacl/renderer/ppb_nacl_private.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
11 #include <numeric> | 11 #include <numeric> |
12 #include <string> | 12 #include <string> |
| 13 #include <unordered_map> |
13 #include <utility> | 14 #include <utility> |
14 #include <vector> | 15 #include <vector> |
15 | 16 |
16 #include "base/bind.h" | 17 #include "base/bind.h" |
17 #include "base/bind_helpers.h" | 18 #include "base/bind_helpers.h" |
18 #include "base/command_line.h" | 19 #include "base/command_line.h" |
19 #include "base/containers/scoped_ptr_hash_map.h" | |
20 #include "base/cpu.h" | 20 #include "base/cpu.h" |
21 #include "base/files/file.h" | 21 #include "base/files/file.h" |
22 #include "base/json/json_reader.h" | 22 #include "base/json/json_reader.h" |
23 #include "base/lazy_instance.h" | 23 #include "base/lazy_instance.h" |
24 #include "base/location.h" | 24 #include "base/location.h" |
25 #include "base/logging.h" | 25 #include "base/logging.h" |
26 #include "base/macros.h" | 26 #include "base/macros.h" |
27 #include "base/process/process_handle.h" | 27 #include "base/process/process_handle.h" |
28 #include "base/single_thread_task_runner.h" | 28 #include "base/single_thread_task_runner.h" |
29 #include "base/strings/string_split.h" | 29 #include "base/strings/string_split.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 | 141 |
142 NexeLoadManager nexe_load_manager; | 142 NexeLoadManager nexe_load_manager; |
143 std::unique_ptr<JsonManifest> json_manifest; | 143 std::unique_ptr<JsonManifest> json_manifest; |
144 std::unique_ptr<InstanceInfo> instance_info; | 144 std::unique_ptr<InstanceInfo> instance_info; |
145 | 145 |
146 // When translation is complete, this records the size of the pexe in | 146 // When translation is complete, this records the size of the pexe in |
147 // bytes so that it can be reported in a later load event. | 147 // bytes so that it can be reported in a later load event. |
148 uint64_t pexe_size; | 148 uint64_t pexe_size; |
149 }; | 149 }; |
150 | 150 |
151 typedef base::ScopedPtrHashMap<PP_Instance, std::unique_ptr<NaClPluginInstance>> | 151 typedef std::unordered_map<PP_Instance, std::unique_ptr<NaClPluginInstance>> |
152 InstanceMap; | 152 InstanceMap; |
153 base::LazyInstance<InstanceMap> g_instance_map = LAZY_INSTANCE_INITIALIZER; | 153 base::LazyInstance<InstanceMap> g_instance_map = LAZY_INSTANCE_INITIALIZER; |
154 | 154 |
155 NaClPluginInstance* GetNaClPluginInstance(PP_Instance instance) { | 155 NaClPluginInstance* GetNaClPluginInstance(PP_Instance instance) { |
156 InstanceMap& map = g_instance_map.Get(); | 156 InstanceMap& map = g_instance_map.Get(); |
157 InstanceMap::iterator iter = map.find(instance); | 157 auto iter = map.find(instance); |
158 if (iter == map.end()) | 158 if (iter == map.end()) |
159 return NULL; | 159 return NULL; |
160 return iter->second; | 160 return iter->second.get(); |
161 } | 161 } |
162 | 162 |
163 NexeLoadManager* GetNexeLoadManager(PP_Instance instance) { | 163 NexeLoadManager* GetNexeLoadManager(PP_Instance instance) { |
164 NaClPluginInstance* nacl_plugin_instance = GetNaClPluginInstance(instance); | 164 NaClPluginInstance* nacl_plugin_instance = GetNaClPluginInstance(instance); |
165 if (!nacl_plugin_instance) | 165 if (!nacl_plugin_instance) |
166 return NULL; | 166 return NULL; |
167 return &nacl_plugin_instance->nexe_load_manager; | 167 return &nacl_plugin_instance->nexe_load_manager; |
168 } | 168 } |
169 | 169 |
170 JsonManifest* GetJsonManifest(PP_Instance instance) { | 170 JsonManifest* GetJsonManifest(PP_Instance instance) { |
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
860 PP_NaClError error, | 860 PP_NaClError error, |
861 const char* error_message) { | 861 const char* error_message) { |
862 NexeLoadManager* load_manager = GetNexeLoadManager(instance); | 862 NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
863 if (load_manager) | 863 if (load_manager) |
864 load_manager->ReportLoadError(error, error_message); | 864 load_manager->ReportLoadError(error, error_message); |
865 } | 865 } |
866 | 866 |
867 // static | 867 // static |
868 void PPBNaClPrivate::InstanceCreated(PP_Instance instance) { | 868 void PPBNaClPrivate::InstanceCreated(PP_Instance instance) { |
869 InstanceMap& map = g_instance_map.Get(); | 869 InstanceMap& map = g_instance_map.Get(); |
870 CHECK(!ContainsKey(map, instance)); // Sanity check. | 870 CHECK(map.find(instance) == map.end()); // Sanity check. |
871 std::unique_ptr<NaClPluginInstance> new_instance( | 871 std::unique_ptr<NaClPluginInstance> new_instance( |
872 new NaClPluginInstance(instance)); | 872 new NaClPluginInstance(instance)); |
873 map.add(instance, std::move(new_instance)); | 873 map[instance] = std::move(new_instance); |
874 } | 874 } |
875 | 875 |
876 // static | 876 // static |
877 void PPBNaClPrivate::InstanceDestroyed(PP_Instance instance) { | 877 void PPBNaClPrivate::InstanceDestroyed(PP_Instance instance) { |
878 InstanceMap& map = g_instance_map.Get(); | 878 InstanceMap& map = g_instance_map.Get(); |
879 InstanceMap::iterator iter = map.find(instance); | 879 auto iter = map.find(instance); |
880 CHECK(iter != map.end()); | 880 CHECK(iter != map.end()); |
881 // The erase may call NexeLoadManager's destructor prior to removing it from | 881 // The erase may call NexeLoadManager's destructor prior to removing it from |
882 // the map. In that case, it is possible for the trusted Plugin to re-enter | 882 // the map. In that case, it is possible for the trusted Plugin to re-enter |
883 // the NexeLoadManager (e.g., by calling ReportLoadError). Passing out the | 883 // the NexeLoadManager (e.g., by calling ReportLoadError). Passing out the |
884 // NexeLoadManager to a local scoped_ptr just ensures that its entry is gone | 884 // NexeLoadManager to a local scoped_ptr just ensures that its entry is gone |
885 // from the map prior to the destructor being invoked. | 885 // from the map prior to the destructor being invoked. |
886 std::unique_ptr<NaClPluginInstance> temp(map.take(instance)); | 886 std::unique_ptr<NaClPluginInstance> temp = std::move(iter->second); |
887 map.erase(iter); | 887 map.erase(iter); |
888 } | 888 } |
889 | 889 |
890 // static | 890 // static |
891 void PPBNaClPrivate::TerminateNaClLoader(PP_Instance instance) { | 891 void PPBNaClPrivate::TerminateNaClLoader(PP_Instance instance) { |
892 auto* load_mgr = GetNexeLoadManager(instance); | 892 auto* load_mgr = GetNexeLoadManager(instance); |
893 if (load_mgr) | 893 if (load_mgr) |
894 load_mgr->CloseTrustedPluginChannel(); | 894 load_mgr->CloseTrustedPluginChannel(); |
895 } | 895 } |
896 | 896 |
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1737 // Mark the request as requesting a PNaCl bitcode file, | 1737 // Mark the request as requesting a PNaCl bitcode file, |
1738 // so that component updater can detect this user action. | 1738 // so that component updater can detect this user action. |
1739 url_request.addHTTPHeaderField( | 1739 url_request.addHTTPHeaderField( |
1740 blink::WebString::fromUTF8("Accept"), | 1740 blink::WebString::fromUTF8("Accept"), |
1741 blink::WebString::fromUTF8("application/x-pnacl, */*")); | 1741 blink::WebString::fromUTF8("application/x-pnacl, */*")); |
1742 url_request.setRequestContext(blink::WebURLRequest::RequestContextObject); | 1742 url_request.setRequestContext(blink::WebURLRequest::RequestContextObject); |
1743 downloader->Load(url_request); | 1743 downloader->Load(url_request); |
1744 } | 1744 } |
1745 | 1745 |
1746 } // namespace nacl | 1746 } // namespace nacl |
OLD | NEW |