| OLD | NEW |
| 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" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 #include "ppapi/native_client/src/trusted/plugin/nacl_entry_points.h" | 37 #include "ppapi/native_client/src/trusted/plugin/nacl_entry_points.h" |
| 38 #include "ppapi/native_client/src/trusted/plugin/nacl_subprocess.h" | 38 #include "ppapi/native_client/src/trusted/plugin/nacl_subprocess.h" |
| 39 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h" | 39 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h" |
| 40 #include "ppapi/native_client/src/trusted/plugin/service_runtime.h" | 40 #include "ppapi/native_client/src/trusted/plugin/service_runtime.h" |
| 41 #include "ppapi/native_client/src/trusted/plugin/utility.h" | 41 #include "ppapi/native_client/src/trusted/plugin/utility.h" |
| 42 | 42 |
| 43 namespace plugin { | 43 namespace plugin { |
| 44 | 44 |
| 45 namespace { | 45 namespace { |
| 46 | 46 |
| 47 // This is a pretty arbitrary limit on the byte size of the NaCl manfest file. | |
| 48 // Note that the resulting string object has to have at least one byte extra | |
| 49 // for the null termination character. | |
| 50 const size_t kNaClManifestMaxFileBytes = 1024 * 1024; | |
| 51 | |
| 52 // Up to 20 seconds | 47 // Up to 20 seconds |
| 53 const int64_t kTimeSmallMin = 1; // in ms | 48 const int64_t kTimeSmallMin = 1; // in ms |
| 54 const int64_t kTimeSmallMax = 20000; // in ms | 49 const int64_t kTimeSmallMax = 20000; // in ms |
| 55 const uint32_t kTimeSmallBuckets = 100; | 50 const uint32_t kTimeSmallBuckets = 100; |
| 56 | 51 |
| 57 const int64_t kSizeKBMin = 1; | 52 const int64_t kSizeKBMin = 1; |
| 58 const int64_t kSizeKBMax = 512*1024; // very large .nexe | 53 const int64_t kSizeKBMax = 512*1024; // very large .nexe |
| 59 const uint32_t kSizeKBBuckets = 100; | 54 const uint32_t kSizeKBBuckets = 100; |
| 60 | 55 |
| 61 } // namespace | 56 } // namespace |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 true, | 586 true, |
| 592 &UpdateDownloadProgress)); | 587 &UpdateDownloadProgress)); |
| 593 } | 588 } |
| 594 return; | 589 return; |
| 595 } | 590 } |
| 596 } | 591 } |
| 597 } | 592 } |
| 598 | 593 |
| 599 void Plugin::RequestNaClManifest(const nacl::string& url) { | 594 void Plugin::RequestNaClManifest(const nacl::string& url) { |
| 600 PLUGIN_PRINTF(("Plugin::RequestNaClManifest (url='%s')\n", url.c_str())); | 595 PLUGIN_PRINTF(("Plugin::RequestNaClManifest (url='%s')\n", url.c_str())); |
| 601 PP_Bool is_data_uri; | 596 pp::CompletionCallback open_callback = |
| 602 ErrorInfo error_info; | 597 callback_factory_.NewCallback(&Plugin::NaClManifestFileDidOpen); |
| 603 if (!nacl_interface_->RequestNaClManifest(pp_instance(), url.c_str(), | 598 nacl_interface_->RequestNaClManifest(pp_instance(), |
| 604 &is_data_uri)) | 599 url.c_str(), |
| 605 return; | 600 &manifest_data_var_, |
| 606 pp::Var nmf_resolved_url = | 601 open_callback.pp_completion_callback()); |
| 607 pp::Var(pp::PASS_REF, nacl_interface_->GetManifestBaseURL(pp_instance())); | |
| 608 if (is_data_uri) { | |
| 609 std::string string_nmf_resolved_url = nmf_resolved_url.AsString(); | |
| 610 pp::Var nmf_data = pp::Var( | |
| 611 pp::PASS_REF, | |
| 612 nacl_interface_->ParseDataURL(string_nmf_resolved_url.c_str())); | |
| 613 if (!nmf_data.is_string()) { | |
| 614 error_info.SetReport(PP_NACL_ERROR_MANIFEST_LOAD_URL, | |
| 615 "could not load manifest url."); | |
| 616 ReportLoadError(error_info); | |
| 617 } else if (nmf_data.AsString().size() > kNaClManifestMaxFileBytes) { | |
| 618 error_info.SetReport(PP_NACL_ERROR_MANIFEST_TOO_LARGE, | |
| 619 "manifest file too large."); | |
| 620 ReportLoadError(error_info); | |
| 621 } else { | |
| 622 ProcessNaClManifest(nmf_data.AsString()); | |
| 623 } | |
| 624 } else { | |
| 625 pp::CompletionCallback open_callback = | |
| 626 callback_factory_.NewCallback(&Plugin::NaClManifestFileDidOpen); | |
| 627 std::string nmf_resolved_url_str = nmf_resolved_url.AsString(); | |
| 628 nacl_interface_->DownloadManifestToBuffer( | |
| 629 pp_instance(), | |
| 630 &manifest_data_var_, | |
| 631 open_callback.pp_completion_callback()); | |
| 632 } | |
| 633 } | 602 } |
| 634 | 603 |
| 635 | 604 |
| 636 bool Plugin::SetManifestObject(const nacl::string& manifest_json) { | 605 bool Plugin::SetManifestObject(const nacl::string& manifest_json) { |
| 637 PLUGIN_PRINTF(("Plugin::SetManifestObject(): manifest_json='%s'.\n", | 606 PLUGIN_PRINTF(("Plugin::SetManifestObject(): manifest_json='%s'.\n", |
| 638 manifest_json.c_str())); | 607 manifest_json.c_str())); |
| 639 // Determine whether lookups should use portable (i.e., pnacl versions) | 608 // Determine whether lookups should use portable (i.e., pnacl versions) |
| 640 // rather than platform-specific files. | 609 // rather than platform-specific files. |
| 641 pp::Var manifest_base_url = | 610 pp::Var manifest_base_url = |
| 642 pp::Var(pp::PASS_REF, nacl_interface_->GetManifestBaseURL(pp_instance())); | 611 pp::Var(pp::PASS_REF, nacl_interface_->GetManifestBaseURL(pp_instance())); |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 860 | 829 |
| 861 void Plugin::SetExitStatusOnMainThread(int32_t pp_error, | 830 void Plugin::SetExitStatusOnMainThread(int32_t pp_error, |
| 862 int exit_status) { | 831 int exit_status) { |
| 863 DCHECK(pp::Module::Get()->core()->IsMainThread()); | 832 DCHECK(pp::Module::Get()->core()->IsMainThread()); |
| 864 DCHECK(nacl_interface_); | 833 DCHECK(nacl_interface_); |
| 865 nacl_interface_->SetExitStatus(pp_instance(), exit_status); | 834 nacl_interface_->SetExitStatus(pp_instance(), exit_status); |
| 866 } | 835 } |
| 867 | 836 |
| 868 | 837 |
| 869 } // namespace plugin | 838 } // namespace plugin |
| OLD | NEW |