| 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,
|
|
|