OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #define NACL_LOG_MODULE_NAME "Plugin::ServiceRuntime" | 7 #define NACL_LOG_MODULE_NAME "Plugin::ServiceRuntime" |
8 | 8 |
9 #include "native_client/src/trusted/plugin/service_runtime.h" | 9 #include "native_client/src/trusted/plugin/service_runtime.h" |
10 | 10 |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 void PluginReverseInterface::OpenManifestEntry_MainThreadContinuation( | 252 void PluginReverseInterface::OpenManifestEntry_MainThreadContinuation( |
253 OpenManifestEntryResource* p, | 253 OpenManifestEntryResource* p, |
254 int32_t err) { | 254 int32_t err) { |
255 OpenManifestEntryResource *open_cont; | 255 OpenManifestEntryResource *open_cont; |
256 UNREFERENCED_PARAMETER(err); | 256 UNREFERENCED_PARAMETER(err); |
257 // CallOnMainThread continuations always called with err == PP_OK. | 257 // CallOnMainThread continuations always called with err == PP_OK. |
258 | 258 |
259 NaClLog(4, "Entered OpenManifestEntry_MainThreadContinuation\n"); | 259 NaClLog(4, "Entered OpenManifestEntry_MainThreadContinuation\n"); |
260 | 260 |
261 std::string mapped_url; | 261 std::string mapped_url; |
262 std::string cache_identity; | 262 PnaclOptions pnacl_options; |
263 if (!manifest_->ResolveKey(p->url, &mapped_url, &cache_identity, | 263 if (!manifest_->ResolveKey(p->url, &mapped_url, |
264 p->error_info, &p->pnacl_translate)) { | 264 &pnacl_options, p->error_info)) { |
265 NaClLog(4, "OpenManifestEntry_MainThreadContinuation: ResolveKey failed\n"); | 265 NaClLog(4, "OpenManifestEntry_MainThreadContinuation: ResolveKey failed\n"); |
266 // Failed, and error_info has the details on what happened. Wake | 266 // Failed, and error_info has the details on what happened. Wake |
267 // up requesting thread -- we are done. | 267 // up requesting thread -- we are done. |
268 nacl::MutexLocker take(&mu_); | 268 nacl::MutexLocker take(&mu_); |
269 *p->op_complete_ptr = true; // done... | 269 *p->op_complete_ptr = true; // done... |
270 *p->out_desc = -1; // but failed. | 270 *p->out_desc = -1; // but failed. |
271 NaClXCondVarBroadcast(&cv_); | 271 NaClXCondVarBroadcast(&cv_); |
272 return; | 272 return; |
273 } | 273 } |
274 NaClLog(4, | 274 NaClLog(4, |
275 "OpenManifestEntry_MainThreadContinuation: " | 275 "OpenManifestEntry_MainThreadContinuation: " |
276 "ResolveKey: %s -> %s (pnacl_translate(%d))\n", | 276 "ResolveKey: %s -> %s (pnacl_translate(%d))\n", |
277 p->url.c_str(), mapped_url.c_str(), p->pnacl_translate); | 277 p->url.c_str(), mapped_url.c_str(), pnacl_options.translate()); |
278 | 278 |
279 open_cont = new OpenManifestEntryResource(*p); // copy ctor! | 279 open_cont = new OpenManifestEntryResource(*p); // copy ctor! |
280 CHECK(open_cont != NULL); | 280 CHECK(open_cont != NULL); |
281 open_cont->url = mapped_url; | 281 open_cont->url = mapped_url; |
282 if (!open_cont->pnacl_translate) { | 282 if (!pnacl_options.translate()) { |
283 pp::CompletionCallback stream_cc = WeakRefNewCallback( | 283 pp::CompletionCallback stream_cc = WeakRefNewCallback( |
284 anchor_, | 284 anchor_, |
285 this, | 285 this, |
286 &PluginReverseInterface::StreamAsFile_MainThreadContinuation, | 286 &PluginReverseInterface::StreamAsFile_MainThreadContinuation, |
287 open_cont); | 287 open_cont); |
288 // | 288 // Normal files. |
289 if (!PnaclUrls::IsPnaclComponent(mapped_url)) { | 289 if (!PnaclUrls::IsPnaclComponent(mapped_url)) { |
290 if (!plugin_->StreamAsFile(mapped_url, | 290 if (!plugin_->StreamAsFile(mapped_url, |
291 stream_cc.pp_completion_callback())) { | 291 stream_cc.pp_completion_callback())) { |
292 NaClLog(4, | 292 NaClLog(4, |
293 "OpenManifestEntry_MainThreadContinuation: " | 293 "OpenManifestEntry_MainThreadContinuation: " |
294 "StreamAsFile failed\n"); | 294 "StreamAsFile failed\n"); |
295 nacl::MutexLocker take(&mu_); | 295 nacl::MutexLocker take(&mu_); |
296 *p->op_complete_ptr = true; // done... | 296 *p->op_complete_ptr = true; // done... |
297 *p->out_desc = -1; // but failed. | 297 *p->out_desc = -1; // but failed. |
298 p->error_info->SetReport(ERROR_MANIFEST_OPEN, | 298 p->error_info->SetReport(ERROR_MANIFEST_OPEN, |
299 "ServiceRuntime: StreamAsFile failed"); | 299 "ServiceRuntime: StreamAsFile failed"); |
300 NaClXCondVarBroadcast(&cv_); | 300 NaClXCondVarBroadcast(&cv_); |
301 return; | 301 return; |
302 } | 302 } |
303 NaClLog(4, | 303 NaClLog(4, |
304 "OpenManifestEntry_MainThreadContinuation: StreamAsFile okay\n"); | 304 "OpenManifestEntry_MainThreadContinuation: StreamAsFile okay\n"); |
305 } else { | 305 } else { |
| 306 // Special PNaCl support files, that are installed on the |
| 307 // user machine. |
306 int32_t fd = PnaclResources::GetPnaclFD( | 308 int32_t fd = PnaclResources::GetPnaclFD( |
307 plugin_, | 309 plugin_, |
308 PnaclUrls::PnaclComponentURLToFilename(mapped_url).c_str()); | 310 PnaclUrls::PnaclComponentURLToFilename(mapped_url).c_str()); |
309 if (fd < 0) { | 311 if (fd < 0) { |
310 // We should check earlier if the pnacl component wasn't installed | 312 // We should check earlier if the pnacl component wasn't installed |
311 // yet. At this point, we can't do much anymore, so just continue | 313 // yet. At this point, we can't do much anymore, so just continue |
312 // with an invalid fd. | 314 // with an invalid fd. |
313 NaClLog(4, | 315 NaClLog(4, |
314 "OpenManifestEntry_MainThreadContinuation: " | 316 "OpenManifestEntry_MainThreadContinuation: " |
315 "GetReadonlyPnaclFd failed\n"); | 317 "GetReadonlyPnaclFd failed\n"); |
316 // TODO(jvoung): Separate the error codes? | 318 // TODO(jvoung): Separate the error codes? |
317 p->error_info->SetReport(ERROR_MANIFEST_OPEN, | 319 p->error_info->SetReport(ERROR_MANIFEST_OPEN, |
318 "ServiceRuntime: GetPnaclFd failed"); | 320 "ServiceRuntime: GetPnaclFd failed"); |
319 } | 321 } |
320 nacl::MutexLocker take(&mu_); | 322 nacl::MutexLocker take(&mu_); |
321 *p->op_complete_ptr = true; // done! | 323 *p->op_complete_ptr = true; // done! |
322 *p->out_desc = fd; | 324 *p->out_desc = fd; |
323 NaClXCondVarBroadcast(&cv_); | 325 NaClXCondVarBroadcast(&cv_); |
324 NaClLog(4, | 326 NaClLog(4, |
325 "OpenManifestEntry_MainThreadContinuation: GetPnaclFd okay\n"); | 327 "OpenManifestEntry_MainThreadContinuation: GetPnaclFd okay\n"); |
326 } | 328 } |
327 } else { | 329 } else { |
| 330 // Requires PNaCl translation. |
328 NaClLog(4, | 331 NaClLog(4, |
329 "OpenManifestEntry_MainThreadContinuation: " | 332 "OpenManifestEntry_MainThreadContinuation: " |
330 "pulling down and translating.\n"); | 333 "pulling down and translating.\n"); |
331 if (plugin_->nacl_interface()->IsPnaclEnabled()) { | 334 if (plugin_->nacl_interface()->IsPnaclEnabled()) { |
332 pp::CompletionCallback translate_callback = | 335 pp::CompletionCallback translate_callback = |
333 WeakRefNewCallback( | 336 WeakRefNewCallback( |
334 anchor_, | 337 anchor_, |
335 this, | 338 this, |
336 &PluginReverseInterface::BitcodeTranslate_MainThreadContinuation, | 339 &PluginReverseInterface::BitcodeTranslate_MainThreadContinuation, |
337 open_cont); | 340 open_cont); |
338 // Will always call the callback on success or failure. | 341 // Will always call the callback on success or failure. |
339 pnacl_coordinator_.reset( | 342 pnacl_coordinator_.reset( |
340 PnaclCoordinator::BitcodeToNative(plugin_, | 343 PnaclCoordinator::BitcodeToNative(plugin_, |
341 mapped_url, | 344 mapped_url, |
342 cache_identity, | 345 pnacl_options, |
343 translate_callback)); | 346 translate_callback)); |
344 } else { | 347 } else { |
345 nacl::MutexLocker take(&mu_); | 348 nacl::MutexLocker take(&mu_); |
346 *p->op_complete_ptr = true; // done... | 349 *p->op_complete_ptr = true; // done... |
347 *p->out_desc = -1; // but failed. | 350 *p->out_desc = -1; // but failed. |
348 p->error_info->SetReport(ERROR_PNACL_NOT_ENABLED, | 351 p->error_info->SetReport(ERROR_PNACL_NOT_ENABLED, |
349 "ServiceRuntime: GetPnaclFd failed -- pnacl not " | 352 "ServiceRuntime: GetPnaclFd failed -- pnacl not " |
350 "enabled with --enable-pnacl."); | 353 "enabled with --enable-pnacl."); |
351 NaClXCondVarBroadcast(&cv_); | 354 NaClXCondVarBroadcast(&cv_); |
352 return; | 355 return; |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 | 844 |
842 nacl::string ServiceRuntime::GetCrashLogOutput() { | 845 nacl::string ServiceRuntime::GetCrashLogOutput() { |
843 if (NULL != subprocess_.get()) { | 846 if (NULL != subprocess_.get()) { |
844 return subprocess_->GetCrashLogOutput(); | 847 return subprocess_->GetCrashLogOutput(); |
845 } else { | 848 } else { |
846 return ""; | 849 return ""; |
847 } | 850 } |
848 } | 851 } |
849 | 852 |
850 } // namespace plugin | 853 } // namespace plugin |
OLD | NEW |