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

Unified Diff: content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc

Issue 2103063002: ServiceWorker: Reland of bypassing SW when no fetch handler existed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@return_response_to_forward_to_network
Patch Set: Use FallbackToNetworkOrRenderer and add a test case Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc b/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
index 1e2ac4515070979882e80feec88043ef9e4518aa..ef10ba48af85fbbca9a387baa525522c7f0ecf6f 100644
--- a/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
+++ b/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
@@ -60,7 +60,8 @@ class ServiceWorkerControlleeRequestHandlerTest : public testing::Test {
ServiceWorkerRequestTestResources(
ServiceWorkerControlleeRequestHandlerTest* test,
const GURL& url,
- ResourceType type)
+ ResourceType type,
+ FetchRequestMode fetch_type = FETCH_REQUEST_MODE_NO_CORS)
: test_(test),
request_(test->url_request_context_.CreateRequest(
url,
@@ -70,7 +71,7 @@ class ServiceWorkerControlleeRequestHandlerTest : public testing::Test {
test->context()->AsWeakPtr(),
test->provider_host_,
base::WeakPtr<storage::BlobStorageContext>(),
- FETCH_REQUEST_MODE_NO_CORS,
+ fetch_type,
FETCH_CREDENTIALS_MODE_OMIT,
FetchRedirectMode::FOLLOW_MODE,
type,
@@ -171,6 +172,7 @@ TEST_F(ServiceWorkerControlleeRequestHandlerTest, DisallowServiceWorker) {
// Store an activated worker.
version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
+ version_->set_has_fetch_handler(true);
registration_->SetActiveVersion(version_);
context()->storage()->StoreRegistration(
registration_.get(),
@@ -199,6 +201,7 @@ TEST_F(ServiceWorkerControlleeRequestHandlerTest, DisallowServiceWorker) {
TEST_F(ServiceWorkerControlleeRequestHandlerTest, ActivateWaitingVersion) {
// Store a registration that is installed but not activated yet.
version_->SetStatus(ServiceWorkerVersion::INSTALLED);
+ version_->set_has_fetch_handler(true);
registration_->SetWaitingVersion(version_);
context()->storage()->StoreRegistration(
registration_.get(),
@@ -232,6 +235,7 @@ TEST_F(ServiceWorkerControlleeRequestHandlerTest, ActivateWaitingVersion) {
TEST_F(ServiceWorkerControlleeRequestHandlerTest, InstallingRegistration) {
// Create an installing registration.
version_->SetStatus(ServiceWorkerVersion::INSTALLING);
+ version_->set_has_fetch_handler(true);
registration_->SetInstallingVersion(version_);
context()->storage()->NotifyInstallingRegistration(registration_.get());
@@ -257,6 +261,7 @@ TEST_F(ServiceWorkerControlleeRequestHandlerTest, DeletedProviderHost) {
// Store a registration so the call to FindRegistrationForDocument will read
// from the database.
version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
+ version_->set_has_fetch_handler(true);
registration_->SetActiveVersion(version_);
context()->storage()->StoreRegistration(
registration_.get(),
@@ -284,4 +289,53 @@ TEST_F(ServiceWorkerControlleeRequestHandlerTest, DeletedProviderHost) {
EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
}
+TEST_F(ServiceWorkerControlleeRequestHandlerTest, FallbackWithNoFetchHandler) {
+ version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
+ version_->set_has_fetch_handler(false);
+ registration_->SetActiveVersion(version_);
+ context()->storage()->StoreRegistration(
+ registration_.get(), version_.get(),
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
+ base::RunLoop().RunUntilIdle();
+
+ ServiceWorkerRequestTestResources main_test_resources(
+ this, GURL("https://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME);
+ ServiceWorkerURLRequestJob* main_job = main_test_resources.MaybeCreateJob();
+
+ EXPECT_FALSE(main_job->ShouldFallbackToNetwork());
+ EXPECT_FALSE(main_job->ShouldForwardToServiceWorker());
+ EXPECT_FALSE(version_->HasControllee());
+
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_TRUE(main_job->ShouldFallbackToNetwork());
+ EXPECT_FALSE(main_job->ShouldForwardToServiceWorker());
+ EXPECT_TRUE(version_->HasControllee());
+ EXPECT_EQ(version_, provider_host_->controlling_version());
+
+ ServiceWorkerRequestTestResources sub_test_resources(
+ this, GURL("https://host/scope/doc/subresource"), RESOURCE_TYPE_IMAGE);
+ ServiceWorkerURLRequestJob* sub_job = sub_test_resources.MaybeCreateJob();
+
+ // This job shouldn't be created because this worker doesn't have fetch
+ // handler.
+ EXPECT_EQ(nullptr, sub_job);
+
+ // CORS request should be returned to renderer for CORS checking.
+ ServiceWorkerRequestTestResources sub_test_resources_cors(
+ this, GURL("https://host/scope/doc/subresource"), RESOURCE_TYPE_SCRIPT,
+ FETCH_REQUEST_MODE_CORS);
+ ServiceWorkerURLRequestJob* sub_cors_job =
+ sub_test_resources_cors.MaybeCreateJob();
+
+ EXPECT_TRUE(sub_cors_job);
+ EXPECT_FALSE(sub_cors_job->ShouldFallbackToNetwork());
+ EXPECT_FALSE(sub_cors_job->ShouldForwardToServiceWorker());
+
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_FALSE(sub_cors_job->ShouldFallbackToNetwork());
+ EXPECT_FALSE(sub_cors_job->ShouldForwardToServiceWorker());
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698