| 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_impl.h" | 5 #include "components/nacl/renderer/ppb_nacl_private_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/containers/scoped_ptr_hash_map.h" | 10 #include "base/containers/scoped_ptr_hash_map.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include "ppapi/shared_impl/ppapi_preferences.h" | 41 #include "ppapi/shared_impl/ppapi_preferences.h" |
| 42 #include "ppapi/shared_impl/var.h" | 42 #include "ppapi/shared_impl/var.h" |
| 43 #include "ppapi/thunk/enter.h" | 43 #include "ppapi/thunk/enter.h" |
| 44 #include "third_party/WebKit/public/platform/WebURLLoader.h" | 44 #include "third_party/WebKit/public/platform/WebURLLoader.h" |
| 45 #include "third_party/WebKit/public/web/WebDocument.h" | 45 #include "third_party/WebKit/public/web/WebDocument.h" |
| 46 #include "third_party/WebKit/public/web/WebElement.h" | 46 #include "third_party/WebKit/public/web/WebElement.h" |
| 47 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 47 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
| 48 #include "third_party/WebKit/public/web/WebPluginContainer.h" | 48 #include "third_party/WebKit/public/web/WebPluginContainer.h" |
| 49 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" | 49 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" |
| 50 #include "third_party/WebKit/public/web/WebURLLoaderOptions.h" | 50 #include "third_party/WebKit/public/web/WebURLLoaderOptions.h" |
| 51 #include "third_party/jsoncpp/source/include/json/reader.h" |
| 52 #include "third_party/jsoncpp/source/include/json/value.h" |
| 51 | 53 |
| 52 namespace nacl { | 54 namespace nacl { |
| 53 namespace { | 55 namespace { |
| 54 | 56 |
| 55 base::LazyInstance<scoped_refptr<PnaclTranslationResourceHost> > | 57 base::LazyInstance<scoped_refptr<PnaclTranslationResourceHost> > |
| 56 g_pnacl_resource_host = LAZY_INSTANCE_INITIALIZER; | 58 g_pnacl_resource_host = LAZY_INSTANCE_INITIALIZER; |
| 57 | 59 |
| 58 bool InitializePnaclResourceHost() { | 60 bool InitializePnaclResourceHost() { |
| 59 // Must run on the main thread. | 61 // Must run on the main thread. |
| 60 content::RenderThread* render_thread = content::RenderThread::Get(); | 62 content::RenderThread* render_thread = content::RenderThread::Get(); |
| (...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1103 if (it == g_manifest_map.Get().end()) | 1105 if (it == g_manifest_map.Get().end()) |
| 1104 return PP_FALSE; | 1106 return PP_FALSE; |
| 1105 | 1107 |
| 1106 std::string full_url; | 1108 std::string full_url; |
| 1107 bool ok = it->second->ResolveKey(key, &full_url, pnacl_options); | 1109 bool ok = it->second->ResolveKey(key, &full_url, pnacl_options); |
| 1108 if (ok) | 1110 if (ok) |
| 1109 *pp_full_url = ppapi::StringVar::StringToPPVar(full_url); | 1111 *pp_full_url = ppapi::StringVar::StringToPPVar(full_url); |
| 1110 return PP_FromBool(ok); | 1112 return PP_FromBool(ok); |
| 1111 } | 1113 } |
| 1112 | 1114 |
| 1115 PP_Bool GetPNaClResourceInfo(PP_Instance instance, |
| 1116 const char* filename, |
| 1117 PP_Var* llc_tool_name, |
| 1118 PP_Var* ld_tool_name) { |
| 1119 NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
| 1120 DCHECK(load_manager); |
| 1121 if (!load_manager) |
| 1122 return PP_FALSE; |
| 1123 |
| 1124 base::PlatformFile file = GetReadonlyPnaclFD(filename); |
| 1125 if (file == base::kInvalidPlatformFileValue) { |
| 1126 load_manager->ReportLoadError( |
| 1127 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
| 1128 "The Portable Native Client (pnacl) component is not " |
| 1129 "installed. Please consult chrome://components for more " |
| 1130 "information."); |
| 1131 return PP_FALSE; |
| 1132 } |
| 1133 |
| 1134 const int kBufferSize = 1 << 20; |
| 1135 scoped_ptr<char[]> buffer(new char[kBufferSize]); |
| 1136 if (base::ReadPlatformFile(file, 0, buffer.get(), kBufferSize) < 0) { |
| 1137 load_manager->ReportLoadError( |
| 1138 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
| 1139 std::string("PnaclResources::ReadResourceInfo reading failed for: ") + |
| 1140 filename); |
| 1141 return PP_FALSE; |
| 1142 } |
| 1143 |
| 1144 // Expect the JSON file to contain a top-level object (dictionary). |
| 1145 Json::Reader json_reader; |
| 1146 Json::Value json_data; |
| 1147 if (!json_reader.parse(buffer.get(), json_data)) { |
| 1148 load_manager->ReportLoadError( |
| 1149 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
| 1150 std::string("Parsing resource info failed: JSON parse error: ") + |
| 1151 json_reader.getFormattedErrorMessages()); |
| 1152 return PP_FALSE; |
| 1153 } |
| 1154 |
| 1155 if (!json_data.isObject()) { |
| 1156 load_manager->ReportLoadError( |
| 1157 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
| 1158 "Parsing resource info failed: Malformed JSON dictionary"); |
| 1159 return PP_FALSE; |
| 1160 } |
| 1161 |
| 1162 if (json_data.isMember("pnacl-llc-name")) { |
| 1163 Json::Value json_name = json_data["pnacl-llc-name"]; |
| 1164 if (json_name.isString()) { |
| 1165 std::string llc_tool_name_str = json_name.asString(); |
| 1166 *llc_tool_name = ppapi::StringVar::StringToPPVar(llc_tool_name_str); |
| 1167 } |
| 1168 } |
| 1169 |
| 1170 if (json_data.isMember("pnacl-ld-name")) { |
| 1171 Json::Value json_name = json_data["pnacl-ld-name"]; |
| 1172 if (json_name.isString()) { |
| 1173 std::string ld_tool_name_str = json_name.asString(); |
| 1174 *ld_tool_name = ppapi::StringVar::StringToPPVar(ld_tool_name_str); |
| 1175 } |
| 1176 } |
| 1177 return PP_TRUE; |
| 1178 } |
| 1179 |
| 1113 const PPB_NaCl_Private nacl_interface = { | 1180 const PPB_NaCl_Private nacl_interface = { |
| 1114 &LaunchSelLdr, | 1181 &LaunchSelLdr, |
| 1115 &StartPpapiProxy, | 1182 &StartPpapiProxy, |
| 1116 &UrandomFD, | 1183 &UrandomFD, |
| 1117 &Are3DInterfacesDisabled, | 1184 &Are3DInterfacesDisabled, |
| 1118 &BrokerDuplicateHandle, | 1185 &BrokerDuplicateHandle, |
| 1119 &GetReadonlyPnaclFD, | 1186 &GetReadonlyPnaclFD, |
| 1120 &CreateTemporaryFile, | 1187 &CreateTemporaryFile, |
| 1121 &GetNumberOfProcessors, | 1188 &GetNumberOfProcessors, |
| 1122 &IsNonSFIModeEnabled, | 1189 &IsNonSFIModeEnabled, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1147 &ParseDataURL, | 1214 &ParseDataURL, |
| 1148 &ProcessNaClManifest, | 1215 &ProcessNaClManifest, |
| 1149 &GetManifestURLArgument, | 1216 &GetManifestURLArgument, |
| 1150 &IsPNaCl, | 1217 &IsPNaCl, |
| 1151 &DevInterfacesEnabled, | 1218 &DevInterfacesEnabled, |
| 1152 &DownloadManifestToBuffer, | 1219 &DownloadManifestToBuffer, |
| 1153 &CreatePNaClManifest, | 1220 &CreatePNaClManifest, |
| 1154 &CreateJsonManifest, | 1221 &CreateJsonManifest, |
| 1155 &DestroyManifest, | 1222 &DestroyManifest, |
| 1156 &ManifestGetProgramURL, | 1223 &ManifestGetProgramURL, |
| 1157 &ManifestResolveKey | 1224 &ManifestResolveKey, |
| 1225 &GetPNaClResourceInfo |
| 1158 }; | 1226 }; |
| 1159 | 1227 |
| 1160 } // namespace | 1228 } // namespace |
| 1161 | 1229 |
| 1162 const PPB_NaCl_Private* GetNaClPrivateInterface() { | 1230 const PPB_NaCl_Private* GetNaClPrivateInterface() { |
| 1163 return &nacl_interface; | 1231 return &nacl_interface; |
| 1164 } | 1232 } |
| 1165 | 1233 |
| 1166 } // namespace nacl | 1234 } // namespace nacl |
| OLD | NEW |