Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: ppapi/native_client/src/trusted/plugin/service_runtime.cc

Issue 302093012: Pepper: Refactor OpenManifestEntry. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "ppapi/native_client/src/trusted/plugin/service_runtime.h" 9 #include "ppapi/native_client/src/trusted/plugin/service_runtime.h"
10 10
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 // (Some PPAPI actions -- like StreamAsFile -- can only run on the main thread). 307 // (Some PPAPI actions -- like StreamAsFile -- can only run on the main thread).
308 // OpenManifestEntry() is waiting on a condvar for this continuation to 308 // OpenManifestEntry() is waiting on a condvar for this continuation to
309 // complete. We Broadcast and awaken OpenManifestEntry() whenever we are done 309 // complete. We Broadcast and awaken OpenManifestEntry() whenever we are done
310 // either here, or in a later MainThreadContinuation step, if there are 310 // either here, or in a later MainThreadContinuation step, if there are
311 // multiple steps. 311 // multiple steps.
312 void PluginReverseInterface::OpenManifestEntry_MainThreadContinuation( 312 void PluginReverseInterface::OpenManifestEntry_MainThreadContinuation(
313 OpenManifestEntryResource* p, 313 OpenManifestEntryResource* p,
314 int32_t err) { 314 int32_t err) {
315 UNREFERENCED_PARAMETER(err); 315 UNREFERENCED_PARAMETER(err);
316 // CallOnMainThread continuations always called with err == PP_OK. 316 // CallOnMainThread continuations always called with err == PP_OK.
317
318 NaClLog(4, "Entered OpenManifestEntry_MainThreadContinuation\n"); 317 NaClLog(4, "Entered OpenManifestEntry_MainThreadContinuation\n");
319 318
320 PP_Var pp_mapped_url;
321 PP_PNaClOptions pnacl_options = {PP_FALSE, PP_FALSE, 2};
322 if (!GetNaClInterface()->ManifestResolveKey(
323 plugin_->pp_instance(),
324 PP_FromBool(!service_runtime_->main_service_runtime()),
325 p->url.c_str(),
326 &pp_mapped_url,
327 &pnacl_options)) {
328 NaClLog(4, "OpenManifestEntry_MainThreadContinuation: ResolveKey failed\n");
329 // Failed, and error_info has the details on what happened. Wake
330 // up requesting thread -- we are done.
331 {
332 nacl::MutexLocker take(&mu_);
333 *p->op_complete_ptr = true; // done...
334 p->file_info->desc = -1; // but failed.
335 NaClXCondVarBroadcast(&cv_);
336 }
337 p->MaybeRunCallback(PP_OK);
338 return;
339 }
340 nacl::string mapped_url = pp::Var(pp_mapped_url).AsString();
341 NaClLog(4,
342 "OpenManifestEntry_MainThreadContinuation: "
343 "ResolveKey: %s -> %s (pnacl_translate(%d))\n",
344 p->url.c_str(), mapped_url.c_str(), pnacl_options.translate);
345
346 if (pnacl_options.translate) {
347 // Requires PNaCl translation, but that's not supported.
348 NaClLog(4,
349 "OpenManifestEntry_MainThreadContinuation: "
350 "Requires PNaCl translation -- not supported\n");
351 {
352 nacl::MutexLocker take(&mu_);
353 *p->op_complete_ptr = true; // done...
354 p->file_info->desc = -1; // but failed.
355 NaClXCondVarBroadcast(&cv_);
356 }
357 p->MaybeRunCallback(PP_OK);
358 return;
359 }
360
361 // Because p is owned by the callback of this invocation, so it is necessary 319 // Because p is owned by the callback of this invocation, so it is necessary
362 // to create another instance. 320 // to create another instance.
363 OpenManifestEntryResource* open_cont = new OpenManifestEntryResource(*p); 321 OpenManifestEntryResource* open_cont = new OpenManifestEntryResource(*p);
364 open_cont->url = mapped_url;
365 // Callback is now delegated from p to open_cont. So, here we manually clear
366 // complete callback.
367 p->callback = NULL;
368 322
369 pp::CompletionCallback stream_cc = WeakRefNewCallback( 323 pp::CompletionCallback stream_cc = WeakRefNewCallback(
370 anchor_, 324 anchor_,
371 this, 325 this,
372 &PluginReverseInterface::StreamAsFile_MainThreadContinuation, 326 &PluginReverseInterface::StreamAsFile_MainThreadContinuation,
373 open_cont); 327 open_cont);
374 328
375 GetNaClInterface()->DownloadFile(plugin_->pp_instance(), 329 GetNaClInterface()->OpenManifestEntry(
376 mapped_url.c_str(), 330 plugin_->pp_instance(),
377 &open_cont->pp_file_info, 331 PP_FromBool(!service_runtime_->main_service_runtime()),
378 stream_cc.pp_completion_callback()); 332 p->url.c_str(),
333 &open_cont->pp_file_info,
334 stream_cc.pp_completion_callback());
379 // p is deleted automatically. 335 // p is deleted automatically.
380 } 336 }
381 337
382 void PluginReverseInterface::StreamAsFile_MainThreadContinuation( 338 void PluginReverseInterface::StreamAsFile_MainThreadContinuation(
383 OpenManifestEntryResource* p, 339 OpenManifestEntryResource* p,
384 int32_t result) { 340 int32_t result) {
385 NaClLog(4, "Entered StreamAsFile_MainThreadContinuation\n"); 341 NaClLog(4, "Entered StreamAsFile_MainThreadContinuation\n");
386 { 342 {
387 nacl::MutexLocker take(&mu_); 343 nacl::MutexLocker take(&mu_);
388 if (result == PP_OK) { 344 if (result == PP_OK) {
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 728
773 nacl::string ServiceRuntime::GetCrashLogOutput() { 729 nacl::string ServiceRuntime::GetCrashLogOutput() {
774 if (NULL != subprocess_.get()) { 730 if (NULL != subprocess_.get()) {
775 return subprocess_->GetCrashLogOutput(); 731 return subprocess_->GetCrashLogOutput();
776 } else { 732 } else {
777 return std::string(); 733 return std::string();
778 } 734 }
779 } 735 }
780 736
781 } // namespace plugin 737 } // namespace plugin
OLDNEW
« no previous file with comments | « ppapi/c/private/ppb_nacl_private.h ('k') | ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698