Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(460)

Side by Side Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 2251633002: Use tri-state enum for the existence of Fetch Handler in ServiceWorkerVersion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_controllee_request_handler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_controllee_request_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698