| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "native_client/src/trusted/plugin/plugin.h" | 10 #include "native_client/src/trusted/plugin/plugin.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 // The "nacl" attribute of the <embed> tag. We use the value of this attribute | 96 // The "nacl" attribute of the <embed> tag. We use the value of this attribute |
| 97 // to find the manifest file when NaCl is registered as a plug-in for another | 97 // to find the manifest file when NaCl is registered as a plug-in for another |
| 98 // MIME type because the "src" attribute is used to supply us with the resource | 98 // MIME type because the "src" attribute is used to supply us with the resource |
| 99 // of that MIME type that we're supposed to display. | 99 // of that MIME type that we're supposed to display. |
| 100 const char* const kNaClManifestAttribute = "nacl"; | 100 const char* const kNaClManifestAttribute = "nacl"; |
| 101 // This is a pretty arbitrary limit on the byte size of the NaCl manfest file. | 101 // This is a pretty arbitrary limit on the byte size of the NaCl manfest file. |
| 102 // Note that the resulting string object has to have at least one byte extra | 102 // Note that the resulting string object has to have at least one byte extra |
| 103 // for the null termination character. | 103 // for the null termination character. |
| 104 const size_t kNaClManifestMaxFileBytes = 1024 * 1024; | 104 const size_t kNaClManifestMaxFileBytes = 1024 * 1024; |
| 105 | 105 |
| 106 // Define an argument name to enable 'dev' interfaces. To make sure it doesn't |
| 107 // collide with any user-defined HTML attribute, make the first character '@'. |
| 108 const char* const kDevAttribute = "@dev"; |
| 109 |
| 106 // URL schemes that we treat in special ways. | 110 // URL schemes that we treat in special ways. |
| 107 const char* const kChromeExtensionUriScheme = "chrome-extension"; | 111 const char* const kChromeExtensionUriScheme = "chrome-extension"; |
| 108 const char* const kDataUriScheme = "data"; | 112 const char* const kDataUriScheme = "data"; |
| 109 | 113 |
| 110 // The key used to find the dictionary nexe URLs in the manifest file. | 114 // The key used to find the dictionary nexe URLs in the manifest file. |
| 111 const char* const kNexesKey = "nexes"; | 115 const char* const kNexesKey = "nexes"; |
| 112 | 116 |
| 113 bool GetLastError(void* obj, SrpcParams* params) { | 117 bool GetLastError(void* obj, SrpcParams* params) { |
| 114 NaClSrpcArg** outs = params->outs(); | 118 NaClSrpcArg** outs = params->outs(); |
| 115 PLUGIN_PRINTF(("GetLastError (obj=%p)\n", obj)); | 119 PLUGIN_PRINTF(("GetLastError (obj=%p)\n", obj)); |
| (...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 static_cast<const void*>(url_util_))); | 889 static_cast<const void*>(url_util_))); |
| 886 | 890 |
| 887 bool status = Plugin::Init( | 891 bool status = Plugin::Init( |
| 888 browser_interface, | 892 browser_interface, |
| 889 static_cast<int>(argc), | 893 static_cast<int>(argc), |
| 890 // TODO(polina): Can we change the args on our end to be const to | 894 // TODO(polina): Can we change the args on our end to be const to |
| 891 // avoid these ugly casts? | 895 // avoid these ugly casts? |
| 892 const_cast<char**>(argn), | 896 const_cast<char**>(argn), |
| 893 const_cast<char**>(argv)); | 897 const_cast<char**>(argv)); |
| 894 if (status) { | 898 if (status) { |
| 899 // Look for the developer attribute; if it's present, enable 'dev' |
| 900 // interfaces. |
| 901 const char* dev_settings = LookupArgument(kDevAttribute); |
| 902 enable_dev_interfaces_ = (dev_settings != NULL); |
| 903 |
| 895 const char* type_attr = LookupArgument(kTypeAttribute); | 904 const char* type_attr = LookupArgument(kTypeAttribute); |
| 896 if (type_attr != NULL) { | 905 if (type_attr != NULL) { |
| 897 mime_type_ = nacl::string(type_attr); | 906 mime_type_ = nacl::string(type_attr); |
| 898 std::transform(mime_type_.begin(), mime_type_.end(), mime_type_.begin(), | 907 std::transform(mime_type_.begin(), mime_type_.end(), mime_type_.begin(), |
| 899 tolower); | 908 tolower); |
| 900 } | 909 } |
| 901 | 910 |
| 902 const char* manifest_url = LookupArgument(kSrcManifestAttribute); | 911 const char* manifest_url = LookupArgument(kSrcManifestAttribute); |
| 903 // If the MIME type is foreign, then 'src' will be the URL for the content | 912 // If the MIME type is foreign, then 'src' will be the URL for the content |
| 904 // and 'nacl' will be the URL for the manifest. | 913 // and 'nacl' will be the URL for the manifest. |
| 905 if (IsForeignMIMEType()) { | 914 if (IsForeignMIMEType()) { |
| 906 manifest_url = LookupArgument(kNaClManifestAttribute); | 915 manifest_url = LookupArgument(kNaClManifestAttribute); |
| 907 enable_dev_interfaces_ = RequiresDevInterfaces(manifest_url); | |
| 908 } | 916 } |
| 909 // Use the document URL as the base for resolving relative URLs to find the | 917 // Use the document URL as the base for resolving relative URLs to find the |
| 910 // manifest. This takes into account the setting of <base> tags that | 918 // manifest. This takes into account the setting of <base> tags that |
| 911 // precede the embed/object. | 919 // precede the embed/object. |
| 912 CHECK(url_util_ != NULL); | 920 CHECK(url_util_ != NULL); |
| 913 pp::Var base_var = url_util_->GetDocumentURL(*this); | 921 pp::Var base_var = url_util_->GetDocumentURL(*this); |
| 914 if (!base_var.is_string()) { | 922 if (!base_var.is_string()) { |
| 915 PLUGIN_PRINTF(("Plugin::Init (unable to find document url)\n")); | 923 PLUGIN_PRINTF(("Plugin::Init (unable to find document url)\n")); |
| 916 return false; | 924 return false; |
| 917 } | 925 } |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1293 UNREFERENCED_PARAMETER(pp_error); | 1301 UNREFERENCED_PARAMETER(pp_error); |
| 1294 if (was_successful) { | 1302 if (was_successful) { |
| 1295 ReportLoadSuccess(LENGTH_IS_NOT_COMPUTABLE, | 1303 ReportLoadSuccess(LENGTH_IS_NOT_COMPUTABLE, |
| 1296 kUnknownBytes, | 1304 kUnknownBytes, |
| 1297 kUnknownBytes); | 1305 kUnknownBytes); |
| 1298 } else { | 1306 } else { |
| 1299 ReportLoadError(error_info); | 1307 ReportLoadError(error_info); |
| 1300 } | 1308 } |
| 1301 } | 1309 } |
| 1302 | 1310 |
| 1303 // Check manifest_url and return whether or not to enable PPAPI Dev interfaces. | |
| 1304 // Returning true here will enable the PPAPI Dev interfaces regardless of | |
| 1305 // the environment variable NACL_ENABLE_PPAPI_DEV. | |
| 1306 bool Plugin::RequiresDevInterfaces(const nacl::string& manifest_url) { | |
| 1307 const char* extensions[] = { | |
| 1308 "chrome-extension://acadkphlmlegjaadjagenfimbpphcgnh/", // PDF | |
| 1309 }; | |
| 1310 for (size_t i = 0; i < sizeof(extensions) / sizeof(const char*); ++i) { | |
| 1311 if (manifest_url.find(extensions[i]) == 0) { | |
| 1312 return true; | |
| 1313 } | |
| 1314 } | |
| 1315 return false; | |
| 1316 } | |
| 1317 | |
| 1318 bool Plugin::StartProxiedExecution(NaClSrpcChannel* srpc_channel, | 1311 bool Plugin::StartProxiedExecution(NaClSrpcChannel* srpc_channel, |
| 1319 ErrorInfo* error_info) { | 1312 ErrorInfo* error_info) { |
| 1320 PLUGIN_PRINTF(("Plugin::StartProxiedExecution (srpc_channel=%p)\n", | 1313 PLUGIN_PRINTF(("Plugin::StartProxiedExecution (srpc_channel=%p)\n", |
| 1321 static_cast<void*>(srpc_channel))); | 1314 static_cast<void*>(srpc_channel))); |
| 1322 | 1315 |
| 1323 // Log the amound of time that has passed between the trusted plugin being | 1316 // Log the amound of time that has passed between the trusted plugin being |
| 1324 // initialized and the untrusted plugin being initialized. This is (roughly) | 1317 // initialized and the untrusted plugin being initialized. This is (roughly) |
| 1325 // the cost of using NaCl, in terms of startup time. | 1318 // the cost of using NaCl, in terms of startup time. |
| 1326 HistogramStartupTimeMedium( | 1319 HistogramStartupTimeMedium( |
| 1327 "NaCl.Perf.StartupTime.NaClOverhead", | 1320 "NaCl.Perf.StartupTime.NaClOverhead", |
| (...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2008 std::string scheme = canonicalized.AsString().substr(comps.scheme.begin, | 2001 std::string scheme = canonicalized.AsString().substr(comps.scheme.begin, |
| 2009 comps.scheme.len); | 2002 comps.scheme.len); |
| 2010 if (scheme == kChromeExtensionUriScheme) | 2003 if (scheme == kChromeExtensionUriScheme) |
| 2011 return SCHEME_CHROME_EXTENSION; | 2004 return SCHEME_CHROME_EXTENSION; |
| 2012 if (scheme == kDataUriScheme) | 2005 if (scheme == kDataUriScheme) |
| 2013 return SCHEME_DATA; | 2006 return SCHEME_DATA; |
| 2014 return SCHEME_OTHER; | 2007 return SCHEME_OTHER; |
| 2015 } | 2008 } |
| 2016 | 2009 |
| 2017 } // namespace plugin | 2010 } // namespace plugin |
| OLD | NEW |