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

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

Issue 263683002: Set file tokens for NaCl main nexe if available to enable validation caching. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clear tokens too Created 6 years, 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifdef _MSC_VER 5 #ifdef _MSC_VER
6 // Do not warn about use of std::copy with raw pointers. 6 // Do not warn about use of std::copy with raw pointers.
7 #pragma warning(disable : 4996) 7 #pragma warning(disable : 4996)
8 #endif 8 #endif
9 9
10 #include "ppapi/native_client/src/trusted/plugin/plugin.h" 10 #include "ppapi/native_client/src/trusted/plugin/plugin.h"
11 11
12 #include <sys/stat.h> 12 #include <sys/stat.h>
13 #include <sys/types.h> 13 #include <sys/types.h>
14 14
15 #include <algorithm> 15 #include <algorithm>
16 #include <string> 16 #include <string>
17 #include <vector> 17 #include <vector>
18 18
19 #include "native_client/src/include/nacl_base.h" 19 #include "native_client/src/include/nacl_base.h"
20 #include "native_client/src/include/nacl_macros.h" 20 #include "native_client/src/include/nacl_macros.h"
21 #include "native_client/src/include/nacl_scoped_ptr.h" 21 #include "native_client/src/include/nacl_scoped_ptr.h"
22 #include "native_client/src/include/nacl_string.h" 22 #include "native_client/src/include/nacl_string.h"
23 #include "native_client/src/include/portability.h" 23 #include "native_client/src/include/portability.h"
24 #include "native_client/src/include/portability_io.h" 24 #include "native_client/src/include/portability_io.h"
25 #include "native_client/src/include/portability_string.h" 25 #include "native_client/src/include/portability_string.h"
26 #include "native_client/src/public/nacl_file_info.h"
26 #include "native_client/src/shared/platform/nacl_check.h" 27 #include "native_client/src/shared/platform/nacl_check.h"
27 #include "native_client/src/trusted/desc/nacl_desc_wrapper.h" 28 #include "native_client/src/trusted/desc/nacl_desc_wrapper.h"
28 #include "native_client/src/trusted/nonnacl_util/sel_ldr_launcher.h" 29 #include "native_client/src/trusted/nonnacl_util/sel_ldr_launcher.h"
29 #include "native_client/src/trusted/service_runtime/nacl_error_code.h" 30 #include "native_client/src/trusted/service_runtime/nacl_error_code.h"
30 31
31 #include "ppapi/c/pp_errors.h" 32 #include "ppapi/c/pp_errors.h"
32 #include "ppapi/c/ppb_var.h" 33 #include "ppapi/c/ppb_var.h"
33 #include "ppapi/c/private/ppb_nacl_private.h" 34 #include "ppapi/c/private/ppb_nacl_private.h"
34 #include "ppapi/cpp/dev/url_util_dev.h" 35 #include "ppapi/cpp/dev/url_util_dev.h"
35 #include "ppapi/cpp/module.h" 36 #include "ppapi/cpp/module.h"
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 callback_factory_.Initialize(this); 369 callback_factory_.Initialize(this);
369 nacl_interface_ = GetNaClInterface(); 370 nacl_interface_ = GetNaClInterface();
370 CHECK(nacl_interface_ != NULL); 371 CHECK(nacl_interface_ != NULL);
371 372
372 // Notify PPB_NaCl_Private that the instance is created before altering any 373 // Notify PPB_NaCl_Private that the instance is created before altering any
373 // state that it tracks. 374 // state that it tracks.
374 nacl_interface_->InstanceCreated(pp_instance); 375 nacl_interface_->InstanceCreated(pp_instance);
375 // We call set_exit_status() here to ensure that the 'exitStatus' property is 376 // We call set_exit_status() here to ensure that the 'exitStatus' property is
376 // set. This can only be called when nacl_interface_ is not NULL. 377 // set. This can only be called when nacl_interface_ is not NULL.
377 set_exit_status(-1); 378 set_exit_status(-1);
379 memset(&nexe_file_info_, 0, sizeof nexe_file_info_);
380 nexe_file_info_.desc = -1;
378 } 381 }
379 382
380 383
381 Plugin::~Plugin() { 384 Plugin::~Plugin() {
382 int64_t shutdown_start = NaClGetTimeOfDayMicroseconds(); 385 int64_t shutdown_start = NaClGetTimeOfDayMicroseconds();
383 386
384 PLUGIN_PRINTF(("Plugin::~Plugin (this=%p)\n", 387 PLUGIN_PRINTF(("Plugin::~Plugin (this=%p)\n",
385 static_cast<void*>(this))); 388 static_cast<void*>(this)));
386 // Destroy the coordinator while the rest of the data is still there 389 // Destroy the coordinator while the rest of the data is still there
387 pnacl_coordinator_.reset(NULL); 390 pnacl_coordinator_.reset(NULL);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 static_cast<void*>(this))); 442 static_cast<void*>(this)));
440 // We don't know if the plugin will handle the document load, but return 443 // We don't know if the plugin will handle the document load, but return
441 // true in order to give it a chance to respond once the proxy is started. 444 // true in order to give it a chance to respond once the proxy is started.
442 return true; 445 return true;
443 } 446 }
444 447
445 void Plugin::NexeFileDidOpen(int32_t pp_error) { 448 void Plugin::NexeFileDidOpen(int32_t pp_error) {
446 if (pp_error != PP_OK) 449 if (pp_error != PP_OK)
447 return; 450 return;
448 451
449 int32_t desc = ConvertFileDescriptor(nexe_handle_); 452 nexe_file_info_.desc = ConvertFileDescriptor(nexe_handle_);
teravest 2014/05/21 16:49:42 I'm a little confused why nexe_file_info_ needs to
jvoung (off chromium) 2014/05/21 21:10:56 It was mostly to avoid heap allocating the NaClFil
450 nexe_handle_ = PP_kInvalidFileHandle; // Clear out nexe handle. 453 nexe_handle_ = PP_kInvalidFileHandle; // Clear out nexe handle.
451 454
455 NaClDesc *desc = NaClDescIoFromFileInfo(nexe_file_info_, O_RDONLY);
456 if (desc == NULL)
457 return;
458 // nexe_file_info_ is handed to desc, clear out old copy.
459 memset(&nexe_file_info_, 0, sizeof nexe_file_info_);
460 nexe_file_info_.desc = -1;
452 nacl::scoped_ptr<nacl::DescWrapper> 461 nacl::scoped_ptr<nacl::DescWrapper>
453 wrapper(wrapper_factory()->MakeFileDesc(desc, O_RDONLY)); 462 wrapper(wrapper_factory()->MakeGenericCleanup(desc));
454 NaClLog(4, "NexeFileDidOpen: invoking LoadNaClModule\n"); 463 NaClLog(4, "NexeFileDidOpen: invoking LoadNaClModule\n");
455 LoadNaClModule( 464 LoadNaClModule(
456 wrapper.release(), 465 wrapper.release(),
457 uses_nonsfi_mode_, 466 uses_nonsfi_mode_,
458 true, /* enable_dyncode_syscalls */ 467 true, /* enable_dyncode_syscalls */
459 true, /* enable_exception_handling */ 468 true, /* enable_exception_handling */
460 false, /* enable_crash_throttling */ 469 false, /* enable_crash_throttling */
461 callback_factory_.NewCallback(&Plugin::NexeFileDidOpenContinuation), 470 callback_factory_.NewCallback(&Plugin::NexeFileDidOpenContinuation),
462 callback_factory_.NewCallback(&Plugin::NexeDidCrash)); 471 callback_factory_.NewCallback(&Plugin::NexeDidCrash));
463 } 472 }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 pnacl_options, 576 pnacl_options,
568 translate_callback)); 577 translate_callback));
569 return; 578 return;
570 } else { 579 } else {
571 pp::CompletionCallback open_callback = 580 pp::CompletionCallback open_callback =
572 callback_factory_.NewCallback(&Plugin::NexeFileDidOpen); 581 callback_factory_.NewCallback(&Plugin::NexeFileDidOpen);
573 // Will always call the callback on success or failure. 582 // Will always call the callback on success or failure.
574 nacl_interface_->DownloadNexe(pp_instance(), 583 nacl_interface_->DownloadNexe(pp_instance(),
575 program_url_.c_str(), 584 program_url_.c_str(),
576 &nexe_handle_, 585 &nexe_handle_,
586 &nexe_file_info_.file_token.lo,
587 &nexe_file_info_.file_token.hi,
577 open_callback.pp_completion_callback()); 588 open_callback.pp_completion_callback());
578 return; 589 return;
579 } 590 }
580 } 591 }
581 } 592 }
582 593
583 void Plugin::RequestNaClManifest(const nacl::string& url) { 594 void Plugin::RequestNaClManifest(const nacl::string& url) {
584 PLUGIN_PRINTF(("Plugin::RequestNaClManifest (url='%s')\n", url.c_str())); 595 PLUGIN_PRINTF(("Plugin::RequestNaClManifest (url='%s')\n", url.c_str()));
585 pp::CompletionCallback open_callback = 596 pp::CompletionCallback open_callback =
586 callback_factory_.NewCallback(&Plugin::NaClManifestFileDidOpen); 597 callback_factory_.NewCallback(&Plugin::NaClManifestFileDidOpen);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 823
813 void Plugin::SetExitStatusOnMainThread(int32_t pp_error, 824 void Plugin::SetExitStatusOnMainThread(int32_t pp_error,
814 int exit_status) { 825 int exit_status) {
815 DCHECK(pp::Module::Get()->core()->IsMainThread()); 826 DCHECK(pp::Module::Get()->core()->IsMainThread());
816 DCHECK(nacl_interface_); 827 DCHECK(nacl_interface_);
817 nacl_interface_->SetExitStatus(pp_instance(), exit_status); 828 nacl_interface_->SetExitStatus(pp_instance(), exit_status);
818 } 829 }
819 830
820 831
821 } // namespace plugin 832 } // namespace plugin
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698