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

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

Issue 2019613003: ServiceWorker: Bypass SW when the script doesn't have fetch handler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Factor out the forwarding codes and fix the test and foreignfetch Created 4 years, 7 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 37330150cf04cd9b1f4d01a96483d190486b95c7..5582f6491943c9b3561db5fb174602654d7b9c48 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
@@ -131,6 +131,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(),
@@ -171,6 +172,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(),
@@ -216,6 +218,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());
@@ -250,6 +253,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(),
@@ -289,4 +293,41 @@ 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();
+
+ // Conduct a main resource load.
+ const GURL kDocUrl("http://host/scope/doc");
+ std::unique_ptr<net::URLRequest> request = url_request_context_.CreateRequest(
+ kDocUrl, net::DEFAULT_PRIORITY, &url_request_delegate_);
+ std::unique_ptr<ServiceWorkerControlleeRequestHandler> handler(
+ new ServiceWorkerControlleeRequestHandler(
+ context()->AsWeakPtr(), provider_host_,
+ base::WeakPtr<storage::BlobStorageContext>(),
+ FETCH_REQUEST_MODE_NO_CORS, FETCH_CREDENTIALS_MODE_OMIT,
+ FetchRedirectMode::FOLLOW_MODE, RESOURCE_TYPE_MAIN_FRAME,
+ REQUEST_CONTEXT_TYPE_HYPERLINK, REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL,
+ scoped_refptr<ResourceRequestBody>()));
+ std::unique_ptr<net::URLRequestJob> job(
+ handler->MaybeCreateJob(request.get(), nullptr, &mock_resource_context_));
+ ServiceWorkerURLRequestJob* sw_job =
+ static_cast<ServiceWorkerURLRequestJob*>(job.get());
+
+ EXPECT_FALSE(sw_job->ShouldFallbackToNetwork());
+ EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
+ EXPECT_FALSE(version_->HasControllee());
+
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_TRUE(sw_job->ShouldFallbackToNetwork());
+ EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
+ EXPECT_TRUE(version_->HasControllee());
+ EXPECT_EQ(version_, provider_host_->controlling_version());
falken 2016/05/30 06:11:29 Would it be possible to add a test for the subreso
shimazu 2016/05/30 09:45:33 Done. Could you take a look if this null check is
+}
falken 2016/05/30 06:11:29 We usually add a blink line here, but I won't comp
shimazu 2016/05/30 09:45:33 git-cl format accepts w/ and w/o a blank line. Ad
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698