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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "components/nacl/renderer/ppb_nacl_private_impl.h" 5 #include "components/nacl/renderer/ppb_nacl_private_impl.h"
6 6
7 #include <numeric> 7 #include <numeric>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 } 802 }
803 803
804 int64_t GetNexeSize(PP_Instance instance) { 804 int64_t GetNexeSize(PP_Instance instance) {
805 NexeLoadManager* load_manager = GetNexeLoadManager(instance); 805 NexeLoadManager* load_manager = GetNexeLoadManager(instance);
806 DCHECK(load_manager); 806 DCHECK(load_manager);
807 if (load_manager) 807 if (load_manager)
808 return load_manager->nexe_size(); 808 return load_manager->nexe_size();
809 return 0; 809 return 0;
810 } 810 }
811 811
812 PP_Bool RequestNaClManifest(PP_Instance instance, 812 void DownloadManifestToBuffer(PP_Instance instance,
813 const char* url, 813 struct PP_Var* out_data,
814 PP_Bool* pp_is_data_uri) { 814 struct PP_CompletionCallback callback);
815
816 void RequestNaClManifest(PP_Instance instance,
817 const char* url,
818 PP_Var* out_data,
819 PP_CompletionCallback callback) {
815 NexeLoadManager* load_manager = GetNexeLoadManager(instance); 820 NexeLoadManager* load_manager = GetNexeLoadManager(instance);
816 DCHECK(load_manager); 821 DCHECK(load_manager);
817 if (load_manager) { 822 if (!load_manager) {
818 bool is_data_uri; 823 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
819 bool result = load_manager->RequestNaClManifest(url, &is_data_uri); 824 FROM_HERE,
820 *pp_is_data_uri = PP_FromBool(is_data_uri); 825 base::Bind(callback.func, callback.user_data,
821 return PP_FromBool(result); 826 static_cast<int32_t>(PP_ERROR_FAILED)));
827 return;
822 } 828 }
823 return PP_FALSE; 829
830 if (!load_manager->RequestNaClManifest(url)) {
831 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
832 FROM_HERE,
833 base::Bind(callback.func, callback.user_data,
834 static_cast<int32_t>(PP_ERROR_FAILED)));
835 return;
836 }
837
838 const GURL& base_url = load_manager->manifest_base_url();
839 if (base_url.SchemeIs("data")) {
840 GURL gurl(base_url);
841 std::string mime_type;
842 std::string charset;
843 std::string data;
844 int32_t error = PP_ERROR_FAILED;
845 if (net::DataURL::Parse(gurl, &mime_type, &charset, &data)) {
846 if (data.size() <= ManifestDownloader::kNaClManifestMaxFileBytes) {
847 error = PP_OK;
848 *out_data = ppapi::StringVar::StringToPPVar(data);
849 } else {
850 load_manager->ReportLoadError(PP_NACL_ERROR_MANIFEST_TOO_LARGE,
851 "manifest file too large.");
852 }
853 } else {
854 load_manager->ReportLoadError(PP_NACL_ERROR_MANIFEST_LOAD_URL,
855 "could not load manifest url.");
856 }
857 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
858 FROM_HERE,
859 base::Bind(callback.func, callback.user_data, error));
860 } else {
861 DownloadManifestToBuffer(instance, out_data, callback);
862 }
824 } 863 }
825 864
826 PP_Var GetManifestBaseURL(PP_Instance instance) { 865 PP_Var GetManifestBaseURL(PP_Instance instance) {
827 NexeLoadManager* load_manager = GetNexeLoadManager(instance); 866 NexeLoadManager* load_manager = GetNexeLoadManager(instance);
828 DCHECK(load_manager); 867 DCHECK(load_manager);
829 if (!load_manager) 868 if (!load_manager)
830 return PP_MakeUndefined(); 869 return PP_MakeUndefined();
831 const GURL& gurl = load_manager->manifest_base_url(); 870 const GURL& gurl = load_manager->manifest_base_url();
832 if (!gurl.is_valid()) 871 if (!gurl.is_valid())
833 return PP_MakeUndefined(); 872 return PP_MakeUndefined();
834 return ppapi::StringVar::StringToPPVar(gurl.spec()); 873 return ppapi::StringVar::StringToPPVar(gurl.spec());
835 } 874 }
836 875
837 PP_Bool ResolvesRelativeToPluginBaseURL(PP_Instance instance, 876 PP_Bool ResolvesRelativeToPluginBaseURL(PP_Instance instance,
838 const char *url) { 877 const char *url) {
839 NexeLoadManager* load_manager = GetNexeLoadManager(instance); 878 NexeLoadManager* load_manager = GetNexeLoadManager(instance);
840 DCHECK(load_manager); 879 DCHECK(load_manager);
841 if (!load_manager) 880 if (!load_manager)
842 return PP_FALSE; 881 return PP_FALSE;
843 const GURL& gurl = load_manager->plugin_base_url().Resolve(url); 882 const GURL& gurl = load_manager->plugin_base_url().Resolve(url);
844 if (!gurl.is_valid()) 883 if (!gurl.is_valid())
845 return PP_FALSE; 884 return PP_FALSE;
846 return PP_TRUE; 885 return PP_TRUE;
847 } 886 }
848 887
849 PP_Var ParseDataURL(const char* data_url) {
850 GURL gurl(data_url);
851 std::string mime_type;
852 std::string charset;
853 std::string data;
854 if (!net::DataURL::Parse(gurl, &mime_type, &charset, &data))
855 return PP_MakeUndefined();
856 return ppapi::StringVar::StringToPPVar(data);
857 }
858
859 void ProcessNaClManifest(PP_Instance instance, const char* program_url) { 888 void ProcessNaClManifest(PP_Instance instance, const char* program_url) {
860 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance); 889 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
861 if (load_manager) 890 if (load_manager)
862 load_manager->ProcessNaClManifest(program_url); 891 load_manager->ProcessNaClManifest(program_url);
863 } 892 }
864 893
865 PP_Var GetManifestURLArgument(PP_Instance instance) { 894 PP_Var GetManifestURLArgument(PP_Instance instance) {
866 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance); 895 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
867 if (load_manager) { 896 if (load_manager) {
868 return ppapi::StringVar::StringToPPVar( 897 return ppapi::StringVar::StringToPPVar(
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 &GetNaClReadyState, 1309 &GetNaClReadyState,
1281 &GetIsInstalled, 1310 &GetIsInstalled,
1282 &GetExitStatus, 1311 &GetExitStatus,
1283 &SetExitStatus, 1312 &SetExitStatus,
1284 &Vlog, 1313 &Vlog,
1285 &InitializePlugin, 1314 &InitializePlugin,
1286 &GetNexeSize, 1315 &GetNexeSize,
1287 &RequestNaClManifest, 1316 &RequestNaClManifest,
1288 &GetManifestBaseURL, 1317 &GetManifestBaseURL,
1289 &ResolvesRelativeToPluginBaseURL, 1318 &ResolvesRelativeToPluginBaseURL,
1290 &ParseDataURL,
1291 &ProcessNaClManifest, 1319 &ProcessNaClManifest,
1292 &GetManifestURLArgument, 1320 &GetManifestURLArgument,
1293 &DevInterfacesEnabled, 1321 &DevInterfacesEnabled,
1294 &DownloadManifestToBuffer,
1295 &CreatePNaClManifest, 1322 &CreatePNaClManifest,
1296 &CreateJsonManifest, 1323 &CreateJsonManifest,
1297 &DestroyManifest, 1324 &DestroyManifest,
1298 &ManifestGetProgramURL, 1325 &ManifestGetProgramURL,
1299 &ManifestResolveKey, 1326 &ManifestResolveKey,
1300 &GetPNaClResourceInfo, 1327 &GetPNaClResourceInfo,
1301 &GetCpuFeatureAttrs, 1328 &GetCpuFeatureAttrs,
1302 &PostMessageToJavaScript 1329 &PostMessageToJavaScript
1303 }; 1330 };
1304 1331
1305 } // namespace 1332 } // namespace
1306 1333
1307 const PPB_NaCl_Private* GetNaClPrivateInterface() { 1334 const PPB_NaCl_Private* GetNaClPrivateInterface() {
1308 return &nacl_interface; 1335 return &nacl_interface;
1309 } 1336 }
1310 1337
1311 } // namespace nacl 1338 } // namespace nacl
OLDNEW
« 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