OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/callback.h" | 6 #include "base/callback.h" |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "content/browser/fileapi/chrome_blob_storage_context.h" | 10 #include "content/browser/fileapi/chrome_blob_storage_context.h" |
11 #include "content/browser/service_worker/embedded_worker_instance.h" | 11 #include "content/browser/service_worker/embedded_worker_instance.h" |
12 #include "content/browser/service_worker/embedded_worker_registry.h" | 12 #include "content/browser/service_worker/embedded_worker_registry.h" |
13 #include "content/browser/service_worker/service_worker_context_core.h" | 13 #include "content/browser/service_worker/service_worker_context_core.h" |
14 #include "content/browser/service_worker/service_worker_context_observer.h" | 14 #include "content/browser/service_worker/service_worker_context_observer.h" |
15 #include "content/browser/service_worker/service_worker_context_wrapper.h" | 15 #include "content/browser/service_worker/service_worker_context_wrapper.h" |
16 #include "content/browser/service_worker/service_worker_registration.h" | 16 #include "content/browser/service_worker/service_worker_registration.h" |
17 #include "content/browser/service_worker/service_worker_test_utils.h" | 17 #include "content/browser/service_worker/service_worker_test_utils.h" |
18 #include "content/browser/service_worker/service_worker_version.h" | 18 #include "content/browser/service_worker/service_worker_version.h" |
19 #include "content/common/service_worker/service_worker_messages.h" | 19 #include "content/common/service_worker/service_worker_messages.h" |
20 #include "content/common/service_worker/service_worker_status_code.h" | 20 #include "content/common/service_worker/service_worker_status_code.h" |
21 #include "content/common/service_worker/service_worker_types.h" | 21 #include "content/common/service_worker/service_worker_types.h" |
22 #include "content/public/browser/browser_context.h" | 22 #include "content/public/browser/browser_context.h" |
23 #include "content/public/browser/browser_thread.h" | 23 #include "content/public/browser/browser_thread.h" |
| 24 #include "content/public/browser/navigation_entry.h" |
24 #include "content/public/browser/render_process_host.h" | 25 #include "content/public/browser/render_process_host.h" |
25 #include "content/public/browser/storage_partition.h" | 26 #include "content/public/browser/storage_partition.h" |
26 #include "content/public/browser/web_contents.h" | 27 #include "content/public/browser/web_contents.h" |
27 #include "content/public/common/content_switches.h" | 28 #include "content/public/common/content_switches.h" |
28 #include "content/public/common/referrer.h" | 29 #include "content/public/common/referrer.h" |
| 30 #include "content/public/common/security_style.h" |
| 31 #include "content/public/common/ssl_status.h" |
29 #include "content/public/test/browser_test_utils.h" | 32 #include "content/public/test/browser_test_utils.h" |
30 #include "content/public/test/content_browser_test.h" | 33 #include "content/public/test/content_browser_test.h" |
31 #include "content/public/test/content_browser_test_utils.h" | 34 #include "content/public/test/content_browser_test_utils.h" |
32 #include "content/shell/browser/shell.h" | 35 #include "content/shell/browser/shell.h" |
33 #include "content/shell/browser/shell_content_browser_client.h" | 36 #include "content/shell/browser/shell_content_browser_client.h" |
34 #include "net/test/embedded_test_server/embedded_test_server.h" | 37 #include "net/test/embedded_test_server/embedded_test_server.h" |
35 #include "net/test/embedded_test_server/http_request.h" | 38 #include "net/test/embedded_test_server/http_request.h" |
36 #include "net/test/embedded_test_server/http_response.h" | 39 #include "net/test/embedded_test_server/http_response.h" |
37 #include "net/url_request/url_request_filter.h" | 40 #include "net/url_request/url_request_filter.h" |
38 #include "net/url_request/url_request_interceptor.h" | 41 #include "net/url_request/url_request_interceptor.h" |
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 &status)); | 762 &status)); |
760 sync_run_loop.Run(); | 763 sync_run_loop.Run(); |
761 ASSERT_EQ(SERVICE_WORKER_OK, status); | 764 ASSERT_EQ(SERVICE_WORKER_OK, status); |
762 | 765 |
763 // Should 200 after sync event. | 766 // Should 200 after sync event. |
764 FetchOnRegisteredWorker(&result, &response, &blob_data_handle); | 767 FetchOnRegisteredWorker(&result, &response, &blob_data_handle); |
765 EXPECT_EQ(200, response.status_code); | 768 EXPECT_EQ(200, response.status_code); |
766 } | 769 } |
767 | 770 |
768 IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, Reload) { | 771 IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, Reload) { |
769 const std::string kPageUrl = "/service_worker/reload.html"; | 772 const char kPageUrl[] = "/service_worker/reload.html"; |
770 const std::string kWorkerUrl = "/service_worker/fetch_event_reload.js"; | 773 const char kWorkerUrl[] = "/service_worker/fetch_event_reload.js"; |
771 { | 774 scoped_refptr<WorkerActivatedObserver> observer = |
772 scoped_refptr<WorkerActivatedObserver> observer = | 775 new WorkerActivatedObserver(wrapper()); |
773 new WorkerActivatedObserver(wrapper()); | 776 observer->Init(); |
774 observer->Init(); | 777 public_context()->RegisterServiceWorker( |
775 public_context()->RegisterServiceWorker( | 778 embedded_test_server()->GetURL(kPageUrl), |
776 embedded_test_server()->GetURL(kPageUrl), | 779 embedded_test_server()->GetURL(kWorkerUrl), |
777 embedded_test_server()->GetURL(kWorkerUrl), | 780 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); |
778 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); | 781 observer->Wait(); |
779 observer->Wait(); | 782 |
780 } | 783 const base::string16 title1 = base::ASCIIToUTF16("reload=false"); |
781 { | 784 TitleWatcher title_watcher1(shell()->web_contents(), title1); |
782 const base::string16 title = base::ASCIIToUTF16("reload=false"); | 785 NavigateToURL(shell(), embedded_test_server()->GetURL(kPageUrl)); |
783 TitleWatcher title_watcher(shell()->web_contents(), title); | 786 EXPECT_EQ(title1, title_watcher1.WaitAndGetTitle()); |
784 NavigateToURL(shell(), embedded_test_server()->GetURL(kPageUrl)); | 787 |
785 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 788 const base::string16 title2 = base::ASCIIToUTF16("reload=true"); |
786 } | 789 TitleWatcher title_watcher2(shell()->web_contents(), title2); |
787 { | 790 ReloadBlockUntilNavigationsComplete(shell(), 1); |
788 const base::string16 title = base::ASCIIToUTF16("reload=true"); | 791 EXPECT_EQ(title2, title_watcher2.WaitAndGetTitle()); |
789 TitleWatcher title_watcher(shell()->web_contents(), title); | 792 |
790 ReloadBlockUntilNavigationsComplete(shell(), 1); | |
791 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
792 } | |
793 shell()->Close(); | 793 shell()->Close(); |
794 { | 794 |
795 base::RunLoop run_loop; | 795 base::RunLoop run_loop; |
796 public_context()->UnregisterServiceWorker( | 796 public_context()->UnregisterServiceWorker( |
797 embedded_test_server()->GetURL(kPageUrl), | 797 embedded_test_server()->GetURL(kPageUrl), |
798 base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure())); | 798 base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure())); |
799 run_loop.Run(); | 799 run_loop.Run(); |
800 } | 800 } |
| 801 |
| 802 IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, |
| 803 ResponseFromHTTPSServiceWorkerIsMarkedAsSecure) { |
| 804 const char kPageUrl[] = "files/service_worker/fetch_event_blob.html"; |
| 805 const char kWorkerUrl[] = "files/service_worker/fetch_event_blob.js"; |
| 806 net::SpawnedTestServer https_server( |
| 807 net::SpawnedTestServer::TYPE_HTTPS, |
| 808 net::BaseTestServer::SSLOptions( |
| 809 net::BaseTestServer::SSLOptions::CERT_OK), |
| 810 base::FilePath(FILE_PATH_LITERAL("content/test/data/"))); |
| 811 ASSERT_TRUE(https_server.Start()); |
| 812 |
| 813 scoped_refptr<WorkerActivatedObserver> observer = |
| 814 new WorkerActivatedObserver(wrapper()); |
| 815 observer->Init(); |
| 816 public_context()->RegisterServiceWorker( |
| 817 https_server.GetURL(kPageUrl), |
| 818 https_server.GetURL(kWorkerUrl), |
| 819 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); |
| 820 observer->Wait(); |
| 821 |
| 822 const base::string16 title = base::ASCIIToUTF16("Title"); |
| 823 TitleWatcher title_watcher(shell()->web_contents(), title); |
| 824 NavigateToURL(shell(), https_server.GetURL(kPageUrl)); |
| 825 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
| 826 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent()); |
| 827 NavigationEntry* entry = |
| 828 shell()->web_contents()->GetController().GetVisibleEntry(); |
| 829 EXPECT_EQ(SECURITY_STYLE_AUTHENTICATED, entry->GetSSL().security_style); |
| 830 |
| 831 shell()->Close(); |
| 832 |
| 833 base::RunLoop run_loop; |
| 834 public_context()->UnregisterServiceWorker( |
| 835 https_server.GetURL(kPageUrl), |
| 836 base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure())); |
| 837 run_loop.Run(); |
| 838 } |
| 839 |
| 840 IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, |
| 841 ResponseFromHTTPServiceWorkerIsNotMarkedAsSecure) { |
| 842 const char kPageUrl[] = "/service_worker/fetch_event_blob.html"; |
| 843 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js"; |
| 844 scoped_refptr<WorkerActivatedObserver> observer = |
| 845 new WorkerActivatedObserver(wrapper()); |
| 846 observer->Init(); |
| 847 public_context()->RegisterServiceWorker( |
| 848 embedded_test_server()->GetURL(kPageUrl), |
| 849 embedded_test_server()->GetURL(kWorkerUrl), |
| 850 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); |
| 851 observer->Wait(); |
| 852 |
| 853 const base::string16 title = base::ASCIIToUTF16("Title"); |
| 854 TitleWatcher title_watcher(shell()->web_contents(), title); |
| 855 NavigateToURL(shell(), embedded_test_server()->GetURL(kPageUrl)); |
| 856 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
| 857 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent()); |
| 858 NavigationEntry* entry = |
| 859 shell()->web_contents()->GetController().GetVisibleEntry(); |
| 860 EXPECT_EQ(SECURITY_STYLE_UNAUTHENTICATED, entry->GetSSL().security_style); |
| 861 |
| 862 shell()->Close(); |
| 863 |
| 864 base::RunLoop run_loop; |
| 865 public_context()->UnregisterServiceWorker( |
| 866 embedded_test_server()->GetURL(kPageUrl), |
| 867 base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure())); |
| 868 run_loop.Run(); |
801 } | 869 } |
802 | 870 |
803 IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, ImportsBustMemcache) { | 871 IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, ImportsBustMemcache) { |
804 const std::string kScopeUrl = "/service_worker/imports_bust_memcache_scope/"; | 872 const char kScopeUrl[] = "/service_worker/imports_bust_memcache_scope/"; |
805 const std::string kPageUrl = "/service_worker/imports_bust_memcache.html"; | 873 const char kPageUrl[] = "/service_worker/imports_bust_memcache.html"; |
806 const std::string kScriptUrl = "/service_worker/worker_with_one_import.js"; | 874 const char kScriptUrl[] = "/service_worker/worker_with_one_import.js"; |
807 const std::string kImportUrl = "/service_worker/long_lived_import.js"; | 875 const char kImportUrl[] = "/service_worker/long_lived_import.js"; |
808 const base::string16 kOKTitle(base::ASCIIToUTF16("OK")); | 876 const base::string16 kOKTitle(base::ASCIIToUTF16("OK")); |
809 const base::string16 kFailTitle(base::ASCIIToUTF16("FAIL")); | 877 const base::string16 kFailTitle(base::ASCIIToUTF16("FAIL")); |
810 | 878 |
811 RunOnIOThread( | 879 RunOnIOThread( |
812 base::Bind(&CreateLongLivedResourceInterceptors, | 880 base::Bind(&CreateLongLivedResourceInterceptors, |
813 embedded_test_server()->GetURL(kScriptUrl), | 881 embedded_test_server()->GetURL(kScriptUrl), |
814 embedded_test_server()->GetURL(kImportUrl))); | 882 embedded_test_server()->GetURL(kImportUrl))); |
815 | 883 |
816 TitleWatcher title_watcher(shell()->web_contents(), kOKTitle); | 884 TitleWatcher title_watcher(shell()->web_contents(), kOKTitle); |
817 title_watcher.AlsoWaitForTitle(kFailTitle); | 885 title_watcher.AlsoWaitForTitle(kFailTitle); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 #if defined(OS_CHROMEOS) || defined(ANDROID) | 939 #if defined(OS_CHROMEOS) || defined(ANDROID) |
872 #define MAYBE_Registration DISABLED_Registration | 940 #define MAYBE_Registration DISABLED_Registration |
873 #else | 941 #else |
874 #define MAYBE_Registration Registration | 942 #define MAYBE_Registration Registration |
875 #endif | 943 #endif |
876 IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, MAYBE_Registration) { | 944 IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, MAYBE_Registration) { |
877 // Close the only window to be sure we're not re-using its RenderProcessHost. | 945 // Close the only window to be sure we're not re-using its RenderProcessHost. |
878 shell()->Close(); | 946 shell()->Close(); |
879 EXPECT_EQ(0, CountRenderProcessHosts()); | 947 EXPECT_EQ(0, CountRenderProcessHosts()); |
880 | 948 |
881 const std::string kWorkerUrl = "/service_worker/fetch_event.js"; | 949 const char kWorkerUrl[] = "/service_worker/fetch_event.js"; |
882 const std::string kScope = "/service_worker/"; | 950 const char kScope[] = "/service_worker/"; |
883 | 951 |
884 // Unregistering nothing should return false. | 952 // Unregistering nothing should return false. |
885 { | 953 { |
886 base::RunLoop run_loop; | 954 base::RunLoop run_loop; |
887 public_context()->UnregisterServiceWorker( | 955 public_context()->UnregisterServiceWorker( |
888 embedded_test_server()->GetURL("/"), | 956 embedded_test_server()->GetURL("/"), |
889 base::Bind(&ExpectResultAndRun, false, run_loop.QuitClosure())); | 957 base::Bind(&ExpectResultAndRun, false, run_loop.QuitClosure())); |
890 run_loop.Run(); | 958 run_loop.Run(); |
891 } | 959 } |
892 | 960 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
946 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO, | 1014 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO, |
947 this, | 1015 this, |
948 embedded_test_server()->GetURL("/service_worker/empty.html"), | 1016 embedded_test_server()->GetURL("/service_worker/empty.html"), |
949 &status)); | 1017 &status)); |
950 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status); | 1018 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status); |
951 } | 1019 } |
952 } | 1020 } |
953 | 1021 |
954 IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, CrossSiteTransfer) { | 1022 IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, CrossSiteTransfer) { |
955 // The first page registers a service worker. | 1023 // The first page registers a service worker. |
956 const std::string kRegisterPageUrl = "/service_worker/cross_site_xfer.html"; | 1024 const char kRegisterPageUrl[] = "/service_worker/cross_site_xfer.html"; |
957 const base::string16 kOKTitle1(base::ASCIIToUTF16("OK_1")); | 1025 const base::string16 kOKTitle1(base::ASCIIToUTF16("OK_1")); |
958 const base::string16 kFailTitle1(base::ASCIIToUTF16("FAIL_1")); | 1026 const base::string16 kFailTitle1(base::ASCIIToUTF16("FAIL_1")); |
959 content::TitleWatcher title_watcher1(shell()->web_contents(), kOKTitle1); | 1027 content::TitleWatcher title_watcher1(shell()->web_contents(), kOKTitle1); |
960 title_watcher1.AlsoWaitForTitle(kFailTitle1); | 1028 title_watcher1.AlsoWaitForTitle(kFailTitle1); |
961 | 1029 |
962 NavigateToURL(shell(), embedded_test_server()->GetURL(kRegisterPageUrl)); | 1030 NavigateToURL(shell(), embedded_test_server()->GetURL(kRegisterPageUrl)); |
963 ASSERT_EQ(kOKTitle1, title_watcher1.WaitAndGetTitle()); | 1031 ASSERT_EQ(kOKTitle1, title_watcher1.WaitAndGetTitle()); |
964 | 1032 |
965 // Force process swapping behavior. | 1033 // Force process swapping behavior. |
966 ShellContentBrowserClient::SetSwapProcessesForRedirect(true); | 1034 ShellContentBrowserClient::SetSwapProcessesForRedirect(true); |
967 | 1035 |
968 // The second pages loads via the serviceworker including a subresource. | 1036 // The second pages loads via the serviceworker including a subresource. |
969 const std::string kConfirmPageUrl = | 1037 const char kConfirmPageUrl[] = |
970 "/service_worker/cross_site_xfer_scope/" | 1038 "/service_worker/cross_site_xfer_scope/" |
971 "cross_site_xfer_confirm_via_serviceworker.html"; | 1039 "cross_site_xfer_confirm_via_serviceworker.html"; |
972 const base::string16 kOKTitle2(base::ASCIIToUTF16("OK_2")); | 1040 const base::string16 kOKTitle2(base::ASCIIToUTF16("OK_2")); |
973 const base::string16 kFailTitle2(base::ASCIIToUTF16("FAIL_2")); | 1041 const base::string16 kFailTitle2(base::ASCIIToUTF16("FAIL_2")); |
974 content::TitleWatcher title_watcher2(shell()->web_contents(), kOKTitle2); | 1042 content::TitleWatcher title_watcher2(shell()->web_contents(), kOKTitle2); |
975 title_watcher2.AlsoWaitForTitle(kFailTitle2); | 1043 title_watcher2.AlsoWaitForTitle(kFailTitle2); |
976 | 1044 |
977 NavigateToURL(shell(), embedded_test_server()->GetURL(kConfirmPageUrl)); | 1045 NavigateToURL(shell(), embedded_test_server()->GetURL(kConfirmPageUrl)); |
978 EXPECT_EQ(kOKTitle2, title_watcher2.WaitAndGetTitle()); | 1046 EXPECT_EQ(kOKTitle2, title_watcher2.WaitAndGetTitle()); |
979 } | 1047 } |
980 | 1048 |
981 } // namespace content | 1049 } // namespace content |
OLD | NEW |