Chromium Code Reviews| 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 |