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

Unified Diff: components/nacl/renderer/ppb_nacl_private_impl.cc

Issue 288773002: Pepper: Simplify manifest download logic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/nacl/renderer/nexe_load_manager.cc ('k') | ppapi/api/private/ppb_nacl_private.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/nacl/renderer/ppb_nacl_private_impl.cc
diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc
index 429d99e74c7c76225517bb868889fa5ae2ebc32c..d11de15417b3548def9ea790d1fe12604ca6a366 100644
--- a/components/nacl/renderer/ppb_nacl_private_impl.cc
+++ b/components/nacl/renderer/ppb_nacl_private_impl.cc
@@ -809,18 +809,57 @@ int64_t GetNexeSize(PP_Instance instance) {
return 0;
}
-PP_Bool RequestNaClManifest(PP_Instance instance,
- const char* url,
- PP_Bool* pp_is_data_uri) {
+void DownloadManifestToBuffer(PP_Instance instance,
+ struct PP_Var* out_data,
+ struct PP_CompletionCallback callback);
+
+void RequestNaClManifest(PP_Instance instance,
+ const char* url,
+ PP_Var* out_data,
+ PP_CompletionCallback callback) {
NexeLoadManager* load_manager = GetNexeLoadManager(instance);
DCHECK(load_manager);
- if (load_manager) {
- bool is_data_uri;
- bool result = load_manager->RequestNaClManifest(url, &is_data_uri);
- *pp_is_data_uri = PP_FromBool(is_data_uri);
- return PP_FromBool(result);
+ if (!load_manager) {
+ ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
+ FROM_HERE,
+ base::Bind(callback.func, callback.user_data,
+ static_cast<int32_t>(PP_ERROR_FAILED)));
+ return;
+ }
+
+ if (!load_manager->RequestNaClManifest(url)) {
+ ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
+ FROM_HERE,
+ base::Bind(callback.func, callback.user_data,
+ static_cast<int32_t>(PP_ERROR_FAILED)));
+ return;
+ }
+
+ const GURL& base_url = load_manager->manifest_base_url();
+ if (base_url.SchemeIs("data")) {
+ GURL gurl(base_url);
+ std::string mime_type;
+ std::string charset;
+ std::string data;
+ int32_t error = PP_ERROR_FAILED;
+ if (net::DataURL::Parse(gurl, &mime_type, &charset, &data)) {
+ if (data.size() <= ManifestDownloader::kNaClManifestMaxFileBytes) {
+ error = PP_OK;
+ *out_data = ppapi::StringVar::StringToPPVar(data);
+ } else {
+ load_manager->ReportLoadError(PP_NACL_ERROR_MANIFEST_TOO_LARGE,
+ "manifest file too large.");
+ }
+ } else {
+ load_manager->ReportLoadError(PP_NACL_ERROR_MANIFEST_LOAD_URL,
+ "could not load manifest url.");
+ }
+ ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
+ FROM_HERE,
+ base::Bind(callback.func, callback.user_data, error));
+ } else {
+ DownloadManifestToBuffer(instance, out_data, callback);
}
- return PP_FALSE;
}
PP_Var GetManifestBaseURL(PP_Instance instance) {
@@ -846,16 +885,6 @@ PP_Bool ResolvesRelativeToPluginBaseURL(PP_Instance instance,
return PP_TRUE;
}
-PP_Var ParseDataURL(const char* data_url) {
- GURL gurl(data_url);
- std::string mime_type;
- std::string charset;
- std::string data;
- if (!net::DataURL::Parse(gurl, &mime_type, &charset, &data))
- return PP_MakeUndefined();
- return ppapi::StringVar::StringToPPVar(data);
-}
-
void ProcessNaClManifest(PP_Instance instance, const char* program_url) {
nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
if (load_manager)
@@ -1287,11 +1316,9 @@ const PPB_NaCl_Private nacl_interface = {
&RequestNaClManifest,
&GetManifestBaseURL,
&ResolvesRelativeToPluginBaseURL,
- &ParseDataURL,
&ProcessNaClManifest,
&GetManifestURLArgument,
&DevInterfacesEnabled,
- &DownloadManifestToBuffer,
&CreatePNaClManifest,
&CreateJsonManifest,
&DestroyManifest,
« no previous file with comments | « components/nacl/renderer/nexe_load_manager.cc ('k') | ppapi/api/private/ppb_nacl_private.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698