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 788 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
799 } | 799 } |
800 | 800 |
801 PP_NaClReadyState GetNaClReadyState(PP_Instance instance) { | 801 PP_NaClReadyState GetNaClReadyState(PP_Instance instance) { |
802 NexeLoadManager* load_manager = GetNexeLoadManager(instance); | 802 NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
803 DCHECK(load_manager); | 803 DCHECK(load_manager); |
804 if (load_manager) | 804 if (load_manager) |
805 return load_manager->nacl_ready_state(); | 805 return load_manager->nacl_ready_state(); |
806 return PP_NACL_READY_STATE_UNSENT; | 806 return PP_NACL_READY_STATE_UNSENT; |
807 } | 807 } |
808 | 808 |
809 PP_Bool GetIsInstalled(PP_Instance instance) { | |
810 NexeLoadManager* load_manager = GetNexeLoadManager(instance); | |
811 DCHECK(load_manager); | |
812 if (load_manager) | |
813 return PP_FromBool(load_manager->is_installed()); | |
814 return PP_FALSE; | |
815 } | |
816 | |
817 int32_t GetExitStatus(PP_Instance instance) { | 809 int32_t GetExitStatus(PP_Instance instance) { |
818 NexeLoadManager* load_manager = GetNexeLoadManager(instance); | 810 NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
819 DCHECK(load_manager); | 811 DCHECK(load_manager); |
820 if (load_manager) | 812 if (load_manager) |
821 return load_manager->exit_status(); | 813 return load_manager->exit_status(); |
822 return -1; | 814 return -1; |
823 } | 815 } |
824 | 816 |
825 void SetExitStatus(PP_Instance instance, int32_t exit_status) { | 817 void SetExitStatus(PP_Instance instance, int32_t exit_status) { |
826 NexeLoadManager* load_manager = GetNexeLoadManager(instance); | 818 NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
(...skipping 25 matching lines...) Expand all Loading... |
852 } | 844 } |
853 | 845 |
854 void DownloadManifestToBuffer(PP_Instance instance, | 846 void DownloadManifestToBuffer(PP_Instance instance, |
855 struct PP_CompletionCallback callback); | 847 struct PP_CompletionCallback callback); |
856 | 848 |
857 bool CreateJsonManifest(PP_Instance instance, | 849 bool CreateJsonManifest(PP_Instance instance, |
858 const std::string& manifest_url, | 850 const std::string& manifest_url, |
859 const std::string& manifest_data); | 851 const std::string& manifest_data); |
860 | 852 |
861 void RequestNaClManifest(PP_Instance instance, | 853 void RequestNaClManifest(PP_Instance instance, |
862 const char* url, | |
863 PP_CompletionCallback callback) { | 854 PP_CompletionCallback callback) { |
864 NexeLoadManager* load_manager = GetNexeLoadManager(instance); | 855 NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
865 DCHECK(load_manager); | 856 DCHECK(load_manager); |
866 if (!load_manager) { | 857 if (!load_manager) { |
867 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( | 858 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( |
868 FROM_HERE, | 859 FROM_HERE, |
869 base::Bind(callback.func, callback.user_data, | 860 base::Bind(callback.func, callback.user_data, |
870 static_cast<int32_t>(PP_ERROR_FAILED))); | 861 static_cast<int32_t>(PP_ERROR_FAILED))); |
871 return; | 862 return; |
872 } | 863 } |
873 | 864 |
874 if (!load_manager->RequestNaClManifest(url)) { | 865 std::string url = load_manager->GetManifestURLArgument(); |
| 866 if (url.empty() || !load_manager->RequestNaClManifest(url)) { |
875 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( | 867 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( |
876 FROM_HERE, | 868 FROM_HERE, |
877 base::Bind(callback.func, callback.user_data, | 869 base::Bind(callback.func, callback.user_data, |
878 static_cast<int32_t>(PP_ERROR_FAILED))); | 870 static_cast<int32_t>(PP_ERROR_FAILED))); |
879 return; | 871 return; |
880 } | 872 } |
881 | 873 |
882 const GURL& base_url = load_manager->manifest_base_url(); | 874 const GURL& base_url = load_manager->manifest_base_url(); |
883 if (base_url.SchemeIs("data")) { | 875 if (base_url.SchemeIs("data")) { |
884 GURL gurl(base_url); | 876 GURL gurl(base_url); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
916 return PP_MakeUndefined(); | 908 return PP_MakeUndefined(); |
917 return ppapi::StringVar::StringToPPVar(gurl.spec()); | 909 return ppapi::StringVar::StringToPPVar(gurl.spec()); |
918 } | 910 } |
919 | 911 |
920 void ProcessNaClManifest(PP_Instance instance, const char* program_url) { | 912 void ProcessNaClManifest(PP_Instance instance, const char* program_url) { |
921 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance); | 913 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
922 if (load_manager) | 914 if (load_manager) |
923 load_manager->ProcessNaClManifest(program_url); | 915 load_manager->ProcessNaClManifest(program_url); |
924 } | 916 } |
925 | 917 |
926 PP_Var GetManifestURLArgument(PP_Instance instance) { | |
927 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance); | |
928 if (load_manager) { | |
929 return ppapi::StringVar::StringToPPVar( | |
930 load_manager->GetManifestURLArgument()); | |
931 } | |
932 return PP_MakeUndefined(); | |
933 } | |
934 | |
935 PP_Bool DevInterfacesEnabled(PP_Instance instance) { | 918 PP_Bool DevInterfacesEnabled(PP_Instance instance) { |
936 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance); | 919 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
937 if (load_manager) | 920 if (load_manager) |
938 return PP_FromBool(load_manager->DevInterfacesEnabled()); | 921 return PP_FromBool(load_manager->DevInterfacesEnabled()); |
939 return PP_FALSE; | 922 return PP_FALSE; |
940 } | 923 } |
941 | 924 |
942 void DownloadManifestToBufferCompletion(PP_Instance instance, | 925 void DownloadManifestToBufferCompletion(PP_Instance instance, |
943 struct PP_CompletionCallback callback, | 926 struct PP_CompletionCallback callback, |
944 base::Time start_time, | 927 base::Time start_time, |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1521 // FileDownloader deletes itself after invoking DownloadNexeCompletion. | 1504 // FileDownloader deletes itself after invoking DownloadNexeCompletion. |
1522 FileDownloader* file_downloader = new FileDownloader( | 1505 FileDownloader* file_downloader = new FileDownloader( |
1523 url_loader.Pass(), | 1506 url_loader.Pass(), |
1524 target_file, | 1507 target_file, |
1525 base::Bind(&DownloadFileCompletion, target_file, file_info, callback), | 1508 base::Bind(&DownloadFileCompletion, target_file, file_info, callback), |
1526 base::Bind(&ProgressEventRateLimiter::ReportProgress, | 1509 base::Bind(&ProgressEventRateLimiter::ReportProgress, |
1527 base::Owned(tracker), url)); | 1510 base::Owned(tracker), url)); |
1528 file_downloader->Load(url_request); | 1511 file_downloader->Load(url_request); |
1529 } | 1512 } |
1530 | 1513 |
| 1514 void ReportSelLdrStatus(PP_Instance instance, |
| 1515 int32_t load_status, |
| 1516 int32_t max_status) { |
| 1517 HistogramEnumerate("NaCl.LoadStatus.SelLdr", load_status, max_status); |
| 1518 NexeLoadManager* load_manager = GetNexeLoadManager(instance); |
| 1519 DCHECK(load_manager); |
| 1520 if (!load_manager) |
| 1521 return; |
| 1522 |
| 1523 // Gather data to see if being installed changes load outcomes. |
| 1524 const char* name = load_manager->is_installed() ? |
| 1525 "NaCl.LoadStatus.SelLdr.InstalledApp" : |
| 1526 "NaCl.LoadStatus.SelLdr.NotInstalledApp"; |
| 1527 HistogramEnumerate(name, load_status, max_status); |
| 1528 } |
| 1529 |
1531 const PPB_NaCl_Private nacl_interface = { | 1530 const PPB_NaCl_Private nacl_interface = { |
1532 &LaunchSelLdr, | 1531 &LaunchSelLdr, |
1533 &StartPpapiProxy, | 1532 &StartPpapiProxy, |
1534 &UrandomFD, | 1533 &UrandomFD, |
1535 &Are3DInterfacesDisabled, | 1534 &Are3DInterfacesDisabled, |
1536 &BrokerDuplicateHandle, | 1535 &BrokerDuplicateHandle, |
1537 &GetReadonlyPnaclFd, | 1536 &GetReadonlyPnaclFd, |
1538 &CreateTemporaryFile, | 1537 &CreateTemporaryFile, |
1539 &GetNumberOfProcessors, | 1538 &GetNumberOfProcessors, |
1540 &PPIsNonSFIModeEnabled, | 1539 &PPIsNonSFIModeEnabled, |
1541 &GetNexeFd, | 1540 &GetNexeFd, |
1542 &ReportTranslationFinished, | 1541 &ReportTranslationFinished, |
1543 &DispatchEvent, | 1542 &DispatchEvent, |
1544 &ReportLoadSuccess, | 1543 &ReportLoadSuccess, |
1545 &ReportLoadError, | 1544 &ReportLoadError, |
1546 &ReportLoadAbort, | 1545 &ReportLoadAbort, |
1547 &NexeDidCrash, | 1546 &NexeDidCrash, |
1548 &InstanceCreated, | 1547 &InstanceCreated, |
1549 &InstanceDestroyed, | 1548 &InstanceDestroyed, |
1550 &NaClDebugEnabledForURL, | 1549 &NaClDebugEnabledForURL, |
1551 &GetSandboxArch, | 1550 &GetSandboxArch, |
1552 &LogToConsole, | 1551 &LogToConsole, |
1553 &GetNaClReadyState, | 1552 &GetNaClReadyState, |
1554 &GetIsInstalled, | |
1555 &GetExitStatus, | 1553 &GetExitStatus, |
1556 &SetExitStatus, | 1554 &SetExitStatus, |
1557 &Vlog, | 1555 &Vlog, |
1558 &InitializePlugin, | 1556 &InitializePlugin, |
1559 &GetNexeSize, | 1557 &GetNexeSize, |
1560 &RequestNaClManifest, | 1558 &RequestNaClManifest, |
1561 &GetManifestBaseURL, | 1559 &GetManifestBaseURL, |
1562 &ProcessNaClManifest, | 1560 &ProcessNaClManifest, |
1563 &GetManifestURLArgument, | |
1564 &DevInterfacesEnabled, | 1561 &DevInterfacesEnabled, |
1565 &ManifestGetProgramURL, | 1562 &ManifestGetProgramURL, |
1566 &ManifestResolveKey, | 1563 &ManifestResolveKey, |
1567 &GetPNaClResourceInfo, | 1564 &GetPNaClResourceInfo, |
1568 &GetCpuFeatureAttrs, | 1565 &GetCpuFeatureAttrs, |
1569 &PostMessageToJavaScript, | 1566 &PostMessageToJavaScript, |
1570 &DownloadNexe, | 1567 &DownloadNexe, |
1571 &DownloadFile | 1568 &DownloadFile, |
| 1569 &ReportSelLdrStatus |
1572 }; | 1570 }; |
1573 | 1571 |
1574 } // namespace | 1572 } // namespace |
1575 | 1573 |
1576 const PPB_NaCl_Private* GetNaClPrivateInterface() { | 1574 const PPB_NaCl_Private* GetNaClPrivateInterface() { |
1577 return &nacl_interface; | 1575 return &nacl_interface; |
1578 } | 1576 } |
1579 | 1577 |
1580 } // namespace nacl | 1578 } // namespace nacl |
OLD | NEW |