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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
490 fetch_run_loop.QuitClosure(), &prepare_result, | 490 fetch_run_loop.QuitClosure(), &prepare_result, |
491 &fetch_result)); | 491 &fetch_result)); |
492 fetch_run_loop.Run(); | 492 fetch_run_loop.Run(); |
493 ASSERT_TRUE(prepare_result); | 493 ASSERT_TRUE(prepare_result); |
494 *result = fetch_result.result; | 494 *result = fetch_result.result; |
495 *response = fetch_result.response; | 495 *response = fetch_result.response; |
496 *blob_data_handle = std::move(fetch_result.blob_data_handle); | 496 *blob_data_handle = std::move(fetch_result.blob_data_handle); |
497 ASSERT_EQ(SERVICE_WORKER_OK, fetch_result.status); | 497 ASSERT_EQ(SERVICE_WORKER_OK, fetch_result.status); |
498 } | 498 } |
499 | 499 |
500 void FetchTestHelper( | |
501 const std::string& worker_url, | |
502 ServiceWorkerFetchEventResult* result, | |
503 ServiceWorkerResponse* response, | |
504 std::unique_ptr<storage::BlobDataHandle>* blob_data_handle) { | |
505 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, | |
506 base::Unretained(this), worker_url)); | |
507 FetchOnRegisteredWorker(result, response, blob_data_handle); | |
508 } | |
509 | |
510 void SetUpRegistrationOnIOThread(const std::string& worker_url) { | 500 void SetUpRegistrationOnIOThread(const std::string& worker_url) { |
511 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 501 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
512 const GURL pattern = embedded_test_server()->GetURL("/service_worker/"); | 502 const GURL pattern = embedded_test_server()->GetURL("/service_worker/"); |
513 registration_ = new ServiceWorkerRegistration( | 503 registration_ = new ServiceWorkerRegistration( |
514 pattern, | 504 pattern, |
515 wrapper()->context()->storage()->NewRegistrationId(), | 505 wrapper()->context()->storage()->NewRegistrationId(), |
516 wrapper()->context()->AsWeakPtr()); | 506 wrapper()->context()->AsWeakPtr()); |
517 // Set the update check time to avoid triggering updates in the middle of | 507 // Set the update check time to avoid triggering updates in the middle of |
518 // tests. | 508 // tests. |
519 registration_->set_last_update_check(base::Time::Now()); | 509 registration_->set_last_update_check(base::Time::Now()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
552 wrapper()->context()->AddProviderHost(std::move(host)); | 542 wrapper()->context()->AddProviderHost(std::move(host)); |
553 } | 543 } |
554 | 544 |
555 void AddWaitingWorkerOnIOThread(const std::string& worker_url) { | 545 void AddWaitingWorkerOnIOThread(const std::string& worker_url) { |
556 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 546 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
557 scoped_refptr<ServiceWorkerVersion> waiting_version( | 547 scoped_refptr<ServiceWorkerVersion> waiting_version( |
558 new ServiceWorkerVersion( | 548 new ServiceWorkerVersion( |
559 registration_.get(), embedded_test_server()->GetURL(worker_url), | 549 registration_.get(), embedded_test_server()->GetURL(worker_url), |
560 wrapper()->context()->storage()->NewVersionId(), | 550 wrapper()->context()->storage()->NewVersionId(), |
561 wrapper()->context()->AsWeakPtr())); | 551 wrapper()->context()->AsWeakPtr())); |
552 waiting_version->set_has_fetch_handler(true); | |
562 waiting_version->SetStatus(ServiceWorkerVersion::INSTALLED); | 553 waiting_version->SetStatus(ServiceWorkerVersion::INSTALLED); |
563 registration_->SetWaitingVersion(waiting_version.get()); | 554 registration_->SetWaitingVersion(waiting_version.get()); |
564 registration_->ActivateWaitingVersionWhenReady(); | 555 registration_->ActivateWaitingVersionWhenReady(); |
565 } | 556 } |
566 | 557 |
567 void StartWorker(ServiceWorkerStatusCode expected_status) { | 558 void StartWorker(ServiceWorkerStatusCode expected_status) { |
568 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 559 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
569 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 560 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
570 base::RunLoop start_run_loop; | 561 base::RunLoop start_run_loop; |
571 BrowserThread::PostTask( | 562 BrowserThread::PostTask( |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
698 ServiceWorkerVersion* version = | 689 ServiceWorkerVersion* version = |
699 wrapper()->context()->GetLiveVersion(version_id); | 690 wrapper()->context()->GetLiveVersion(version_id); |
700 wrapper()->context()->storage()->StoreRegistration( | 691 wrapper()->context()->storage()->StoreRegistration( |
701 registration_.get(), version, | 692 registration_.get(), version, |
702 CreateReceiver(BrowserThread::UI, done, result)); | 693 CreateReceiver(BrowserThread::UI, done, result)); |
703 } | 694 } |
704 | 695 |
705 void ActivateOnIOThread(const base::Closure& done, | 696 void ActivateOnIOThread(const base::Closure& done, |
706 ServiceWorkerStatusCode* result) { | 697 ServiceWorkerStatusCode* result) { |
707 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 698 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
699 version_->set_has_fetch_handler(true); | |
708 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); | 700 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); |
709 registration_->SetActiveVersion(version_.get()); | 701 registration_->SetActiveVersion(version_.get()); |
710 version_->RunAfterStartWorker( | 702 version_->RunAfterStartWorker( |
711 ServiceWorkerMetrics::EventType::ACTIVATE, | 703 ServiceWorkerMetrics::EventType::ACTIVATE, |
712 base::Bind(&self::DispatchActivateEventOnIOThread, | 704 base::Bind(&self::DispatchActivateEventOnIOThread, |
713 base::Unretained(this), done, result), | 705 base::Unretained(this), done, result), |
714 CreateReceiver(BrowserThread::UI, done, result)); | 706 CreateReceiver(BrowserThread::UI, done, result)); |
715 } | 707 } |
716 | 708 |
717 void DispatchActivateEventOnIOThread(const base::Closure& done, | 709 void DispatchActivateEventOnIOThread(const base::Closure& done, |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
821 | 813 |
822 // Start a worker for nonexistent URL. | 814 // Start a worker for nonexistent URL. |
823 StartWorker(SERVICE_WORKER_ERROR_NETWORK); | 815 StartWorker(SERVICE_WORKER_ERROR_NETWORK); |
824 } | 816 } |
825 | 817 |
826 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, ReadResourceFailure) { | 818 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, ReadResourceFailure) { |
827 // Create a registration. | 819 // Create a registration. |
828 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, | 820 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, |
829 base::Unretained(this), | 821 base::Unretained(this), |
830 "/service_worker/worker.js")); | 822 "/service_worker/worker.js")); |
823 version_->set_has_fetch_handler(true); | |
831 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 824 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
832 | 825 |
833 // Add a non-existent resource to the version. | 826 // Add a non-existent resource to the version. |
834 std::vector<ServiceWorkerDatabase::ResourceRecord> records; | 827 std::vector<ServiceWorkerDatabase::ResourceRecord> records; |
835 records.push_back( | 828 records.push_back( |
836 ServiceWorkerDatabase::ResourceRecord(30, version_->script_url(), 100)); | 829 ServiceWorkerDatabase::ResourceRecord(30, version_->script_url(), 100)); |
837 version_->script_cache_map()->SetResources(records); | 830 version_->script_cache_map()->SetResources(records); |
838 | 831 |
839 // Store the registration. | 832 // Store the registration. |
840 StoreRegistration(version_->version_id(), SERVICE_WORKER_OK); | 833 StoreRegistration(version_->version_id(), SERVICE_WORKER_OK); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
906 } | 899 } |
907 | 900 |
908 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, | 901 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
909 InstallWithWaitUntil_Fulfilled) { | 902 InstallWithWaitUntil_Fulfilled) { |
910 InstallTestHelper("/service_worker/worker_install_fulfilled.js", | 903 InstallTestHelper("/service_worker/worker_install_fulfilled.js", |
911 SERVICE_WORKER_OK); | 904 SERVICE_WORKER_OK); |
912 } | 905 } |
913 | 906 |
914 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, | 907 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
915 InstallWithFetchHandler) { | 908 InstallWithFetchHandler) { |
916 InstallTestHelper("/service_worker/fetch_event.js", SERVICE_WORKER_OK); | 909 InstallTestHelper("/service_worker/fetch_event.js", SERVICE_WORKER_OK); |
shimazu
2016/08/18 04:47:03
How about adding EXPECT_EQ(base::nullopt, version_
horo
2016/08/18 08:03:27
Done by using tri-state enum.
| |
917 EXPECT_TRUE(version_->has_fetch_handler()); | 910 EXPECT_TRUE(version_->has_fetch_handler().value()); |
918 } | 911 } |
919 | 912 |
920 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, | 913 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
921 InstallWithoutFetchHandler) { | 914 InstallWithoutFetchHandler) { |
922 InstallTestHelper("/service_worker/worker.js", SERVICE_WORKER_OK); | 915 InstallTestHelper("/service_worker/worker.js", SERVICE_WORKER_OK); |
923 EXPECT_FALSE(version_->has_fetch_handler()); | 916 EXPECT_FALSE(version_->has_fetch_handler().value()); |
924 } | 917 } |
925 | 918 |
926 // Check that ServiceWorker script requests set a "Service-Worker: script" | 919 // Check that ServiceWorker script requests set a "Service-Worker: script" |
927 // header. | 920 // header. |
928 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, | 921 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
929 ServiceWorkerScriptHeader) { | 922 ServiceWorkerScriptHeader) { |
930 embedded_test_server()->RegisterRequestHandler( | 923 embedded_test_server()->RegisterRequestHandler( |
931 base::Bind(&VerifyServiceWorkerHeaderInRequest)); | 924 base::Bind(&VerifyServiceWorkerHeaderInRequest)); |
932 InstallTestHelper("/service_worker/generated_sw.js", SERVICE_WORKER_OK); | 925 InstallTestHelper("/service_worker/generated_sw.js", SERVICE_WORKER_OK); |
933 } | 926 } |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1063 | 1056 |
1064 // Terminating a worker, even one in an infinite loop, is treated as if | 1057 // Terminating a worker, even one in an infinite loop, is treated as if |
1065 // waitUntil was rejected in the renderer code. | 1058 // waitUntil was rejected in the renderer code. |
1066 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); | 1059 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); |
1067 } | 1060 } |
1068 | 1061 |
1069 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) { | 1062 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) { |
1070 ServiceWorkerFetchEventResult result; | 1063 ServiceWorkerFetchEventResult result; |
1071 ServiceWorkerResponse response; | 1064 ServiceWorkerResponse response; |
1072 std::unique_ptr<storage::BlobDataHandle> blob_data_handle; | 1065 std::unique_ptr<storage::BlobDataHandle> blob_data_handle; |
1073 FetchTestHelper("/service_worker/fetch_event.js", | 1066 ActivateTestHelper("/service_worker/fetch_event.js", SERVICE_WORKER_OK); |
1074 &result, &response, &blob_data_handle); | 1067 |
1068 FetchOnRegisteredWorker(&result, &response, &blob_data_handle); | |
1075 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); | 1069 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); |
1076 EXPECT_EQ(301, response.status_code); | 1070 EXPECT_EQ(301, response.status_code); |
1077 EXPECT_EQ("Moved Permanently", response.status_text); | 1071 EXPECT_EQ("Moved Permanently", response.status_text); |
1078 ServiceWorkerHeaderMap expected_headers; | 1072 ServiceWorkerHeaderMap expected_headers; |
1079 expected_headers["content-language"] = "fi"; | 1073 expected_headers["content-language"] = "fi"; |
1080 expected_headers["content-type"] = "text/html; charset=UTF-8"; | 1074 expected_headers["content-type"] = "text/html; charset=UTF-8"; |
1081 EXPECT_EQ(expected_headers, response.headers); | 1075 EXPECT_EQ(expected_headers, response.headers); |
1082 | 1076 |
1083 std::string body; | 1077 std::string body; |
1084 RunOnIOThread( | 1078 RunOnIOThread( |
1085 base::Bind(&ReadResponseBody, | 1079 base::Bind(&ReadResponseBody, |
1086 &body, base::Owned(blob_data_handle.release()))); | 1080 &body, base::Owned(blob_data_handle.release()))); |
1087 EXPECT_EQ("This resource is gone. Gone, gone, gone.", body); | 1081 EXPECT_EQ("This resource is gone. Gone, gone, gone.", body); |
1088 } | 1082 } |
1089 | 1083 |
1090 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, | 1084 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
1091 FetchEvent_ResponseViaCache) { | 1085 FetchEvent_ResponseViaCache) { |
1092 ServiceWorkerFetchEventResult result; | 1086 ServiceWorkerFetchEventResult result; |
1093 ServiceWorkerResponse response1; | 1087 ServiceWorkerResponse response1; |
1094 ServiceWorkerResponse response2; | 1088 ServiceWorkerResponse response2; |
1095 std::unique_ptr<storage::BlobDataHandle> blob_data_handle; | 1089 std::unique_ptr<storage::BlobDataHandle> blob_data_handle; |
1096 const base::Time start_time(base::Time::Now()); | 1090 const base::Time start_time(base::Time::Now()); |
1097 | 1091 ActivateTestHelper("/service_worker/fetch_event_response_via_cache.js", |
1098 RunOnIOThread( | 1092 SERVICE_WORKER_OK); |
1099 base::Bind(&self::SetUpRegistrationOnIOThread, base::Unretained(this), | |
1100 "/service_worker/fetch_event_response_via_cache.js")); | |
1101 | 1093 |
1102 FetchOnRegisteredWorker(&result, &response1, &blob_data_handle); | 1094 FetchOnRegisteredWorker(&result, &response1, &blob_data_handle); |
1103 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); | 1095 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); |
1104 EXPECT_EQ(200, response1.status_code); | 1096 EXPECT_EQ(200, response1.status_code); |
1105 EXPECT_EQ("OK", response1.status_text); | 1097 EXPECT_EQ("OK", response1.status_text); |
1106 EXPECT_TRUE(response1.response_time >= start_time); | 1098 EXPECT_TRUE(response1.response_time >= start_time); |
1107 EXPECT_FALSE(response1.is_in_cache_storage); | 1099 EXPECT_FALSE(response1.is_in_cache_storage); |
1108 EXPECT_EQ(std::string(), response2.cache_storage_cache_name); | 1100 EXPECT_EQ(std::string(), response2.cache_storage_cache_name); |
1109 | 1101 |
1110 FetchOnRegisteredWorker(&result, &response2, &blob_data_handle); | 1102 FetchOnRegisteredWorker(&result, &response2, &blob_data_handle); |
1111 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); | 1103 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); |
1112 EXPECT_EQ(200, response2.status_code); | 1104 EXPECT_EQ(200, response2.status_code); |
1113 EXPECT_EQ("OK", response2.status_text); | 1105 EXPECT_EQ("OK", response2.status_text); |
1114 EXPECT_EQ(response1.response_time, response2.response_time); | 1106 EXPECT_EQ(response1.response_time, response2.response_time); |
1115 EXPECT_TRUE(response2.is_in_cache_storage); | 1107 EXPECT_TRUE(response2.is_in_cache_storage); |
1116 EXPECT_EQ("cache_name", response2.cache_storage_cache_name); | 1108 EXPECT_EQ("cache_name", response2.cache_storage_cache_name); |
1117 } | 1109 } |
1118 | 1110 |
1119 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, | 1111 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
1120 FetchEvent_respondWithRejection) { | 1112 FetchEvent_respondWithRejection) { |
1121 ServiceWorkerFetchEventResult result; | 1113 ServiceWorkerFetchEventResult result; |
1122 ServiceWorkerResponse response; | 1114 ServiceWorkerResponse response; |
1123 std::unique_ptr<storage::BlobDataHandle> blob_data_handle; | 1115 std::unique_ptr<storage::BlobDataHandle> blob_data_handle; |
1124 | 1116 ActivateTestHelper("/service_worker/fetch_event_rejected.js", |
1125 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, | 1117 SERVICE_WORKER_OK); |
1126 base::Unretained(this), | |
1127 "/service_worker/fetch_event_rejected.js")); | |
1128 | 1118 |
1129 ConsoleListener console_listener; | 1119 ConsoleListener console_listener; |
1130 RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::AddListener, | 1120 RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::AddListener, |
1131 base::Unretained(version_->embedded_worker()), | 1121 base::Unretained(version_->embedded_worker()), |
1132 &console_listener)); | 1122 &console_listener)); |
1133 | 1123 |
1134 FetchOnRegisteredWorker(&result, &response, &blob_data_handle); | 1124 FetchOnRegisteredWorker(&result, &response, &blob_data_handle); |
1135 const base::string16 expected1 = base::ASCIIToUTF16( | 1125 const base::string16 expected1 = base::ASCIIToUTF16( |
1136 "resulted in a network error response: the promise was rejected."); | 1126 "resulted in a network error response: the promise was rejected."); |
1137 const base::string16 expected2 = | 1127 const base::string16 expected2 = |
(...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2025 | 2015 |
2026 IN_PROC_BROWSER_TEST_F(ServiceWorkerDisableWebSecurityTest, UpdateNoCrash) { | 2016 IN_PROC_BROWSER_TEST_F(ServiceWorkerDisableWebSecurityTest, UpdateNoCrash) { |
2027 const char kPageUrl[] = "/service_worker/disable_web_security_update.html"; | 2017 const char kPageUrl[] = "/service_worker/disable_web_security_update.html"; |
2028 const char kScopeUrl[] = "/service_worker/scope/"; | 2018 const char kScopeUrl[] = "/service_worker/scope/"; |
2029 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js"; | 2019 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js"; |
2030 RegisterServiceWorkerOnCrossOriginServer(kScopeUrl, kWorkerUrl); | 2020 RegisterServiceWorkerOnCrossOriginServer(kScopeUrl, kWorkerUrl); |
2031 RunTestWithCrossOriginURL(kPageUrl, kScopeUrl); | 2021 RunTestWithCrossOriginURL(kPageUrl, kScopeUrl); |
2032 } | 2022 } |
2033 | 2023 |
2034 } // namespace content | 2024 } // namespace content |
OLD | NEW |