OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |