Index: content/browser/service_worker/service_worker_context_request_handler_unittest.cc |
diff --git a/content/browser/service_worker/service_worker_context_request_handler_unittest.cc b/content/browser/service_worker/service_worker_context_request_handler_unittest.cc |
index 93583b3832f3a6ceb48ac9b62129f6dcc3c09c13..96486459fe14170d8394696a2070ad420270b2e6 100644 |
--- a/content/browser/service_worker/service_worker_context_request_handler_unittest.cc |
+++ b/content/browser/service_worker/service_worker_context_request_handler_unittest.cc |
@@ -14,14 +14,17 @@ |
#include "content/browser/service_worker/embedded_worker_test_helper.h" |
#include "content/browser/service_worker/service_worker_context_core.h" |
#include "content/browser/service_worker/service_worker_provider_host.h" |
+#include "content/browser/service_worker/service_worker_read_from_cache_job.h" |
#include "content/browser/service_worker/service_worker_registration.h" |
#include "content/browser/service_worker/service_worker_test_utils.h" |
#include "content/browser/service_worker/service_worker_write_to_cache_job.h" |
#include "content/common/service_worker/service_worker_utils.h" |
#include "content/public/browser/resource_request_info.h" |
+#include "content/public/test/test_browser_context.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
#include "net/base/load_flags.h" |
#include "net/url_request/url_request_context.h" |
+#include "net/url_request/url_request_job_factory_impl.h" |
#include "storage/browser/blob/blob_storage_context.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -31,7 +34,26 @@ namespace { |
void EmptyCallback() {} |
-} |
+} // namespace |
+ |
+class MockHttpProtocolHandler |
+ : public net::URLRequestJobFactory::ProtocolHandler { |
+ public: |
+ MockHttpProtocolHandler(ResourceContext* resource_context) |
+ : resource_context_(resource_context) {} |
+ |
+ net::URLRequestJob* MaybeCreateJob( |
+ net::URLRequest* request, |
+ net::NetworkDelegate* network_delegate) const override { |
+ ServiceWorkerRequestHandler* handler = |
+ ServiceWorkerRequestHandler::GetHandler(request); |
+ return handler->MaybeCreateJob(request, network_delegate, |
+ resource_context_); |
+ } |
+ |
+ private: |
+ ResourceContext* resource_context_; |
+}; |
class ServiceWorkerContextRequestHandlerTest : public testing::Test { |
public: |
@@ -42,14 +64,14 @@ class ServiceWorkerContextRequestHandlerTest : public testing::Test { |
helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); |
// A new unstored registration/version. |
- scope_ = GURL("http://host/scope/"); |
- script_url_ = GURL("http://host/script.js"); |
+ scope_ = GURL("https://host/scope/"); |
+ script_url_ = GURL("https://host/script.js"); |
registration_ = new ServiceWorkerRegistration( |
scope_, 1L, context()->AsWeakPtr()); |
version_ = new ServiceWorkerVersion( |
registration_.get(), script_url_, 1L, context()->AsWeakPtr()); |
- // An empty host. |
+ // A provider host for the version. |
std::unique_ptr<ServiceWorkerProviderHost> host( |
new ServiceWorkerProviderHost( |
helper_->mock_render_process_id(), |
@@ -59,9 +81,16 @@ class ServiceWorkerContextRequestHandlerTest : public testing::Test { |
context()->AsWeakPtr(), nullptr)); |
provider_host_ = host->AsWeakPtr(); |
context()->AddProviderHost(std::move(host)); |
+ provider_host_->running_hosted_version_ = version_; |
context()->storage()->LazyInitialize(base::Bind(&EmptyCallback)); |
base::RunLoop().RunUntilIdle(); |
+ |
+ std::unique_ptr<MockHttpProtocolHandler> handler( |
+ new MockHttpProtocolHandler( |
+ helper_->browser_context()->GetResourceContext())); |
+ url_request_job_factory_.SetProtocolHandler("https", std::move(handler)); |
+ url_request_context_.set_job_factory(&url_request_job_factory_); |
} |
void TearDown() override { |
@@ -72,6 +101,13 @@ class ServiceWorkerContextRequestHandlerTest : public testing::Test { |
ServiceWorkerContextCore* context() const { return helper_->context(); } |
+ EmbeddedWorkerTestHelper* helper() { return helper_.get(); } |
+ ServiceWorkerVersion* version() { return version_.get(); } |
+ ServiceWorkerProviderHost* provider_host() { return provider_host_.get(); } |
+ storage::BlobStorageContext* blob_storage_context() { |
+ return &blob_storage_context_; |
+ } |
+ |
protected: |
TestBrowserThreadBundle browser_thread_bundle_; |
std::unique_ptr<EmbeddedWorkerTestHelper> helper_; |
@@ -80,6 +116,7 @@ class ServiceWorkerContextRequestHandlerTest : public testing::Test { |
base::WeakPtr<ServiceWorkerProviderHost> provider_host_; |
net::URLRequestContext url_request_context_; |
MockURLRequestDelegate url_request_delegate_; |
+ net::URLRequestJobFactoryImpl url_request_job_factory_; |
GURL scope_; |
GURL script_url_; |
storage::BlobStorageContext blob_storage_context_; |
@@ -90,10 +127,9 @@ TEST_F(ServiceWorkerContextRequestHandlerTest, UpdateBefore24Hours) { |
// we're installing a new version. |
registration_->set_last_update_check(base::Time::Now()); |
version_->SetStatus(ServiceWorkerVersion::NEW); |
- provider_host_->running_hosted_version_ = version_; |
// Conduct a resource fetch for the main script. |
- const GURL kScriptUrl("http://host/script.js"); |
+ const GURL kScriptUrl("https://host/script.js"); |
std::unique_ptr<net::URLRequest> request = url_request_context_.CreateRequest( |
kScriptUrl, net::DEFAULT_PRIORITY, &url_request_delegate_); |
std::unique_ptr<ServiceWorkerContextRequestHandler> handler( |
@@ -117,10 +153,9 @@ TEST_F(ServiceWorkerContextRequestHandlerTest, UpdateAfter24Hours) { |
registration_->set_last_update_check( |
base::Time::Now() - base::TimeDelta::FromDays(7)); |
version_->SetStatus(ServiceWorkerVersion::NEW); |
- provider_host_->running_hosted_version_ = version_; |
// Conduct a resource fetch for the main script. |
- const GURL kScriptUrl("http://host/script.js"); |
+ const GURL kScriptUrl("https://host/script.js"); |
std::unique_ptr<net::URLRequest> request = url_request_context_.CreateRequest( |
kScriptUrl, net::DEFAULT_PRIORITY, &url_request_delegate_); |
std::unique_ptr<ServiceWorkerContextRequestHandler> handler( |
@@ -144,10 +179,9 @@ TEST_F(ServiceWorkerContextRequestHandlerTest, UpdateForceBypassCache) { |
registration_->set_last_update_check(base::Time::Now()); |
version_->SetStatus(ServiceWorkerVersion::NEW); |
version_->set_force_bypass_cache_for_scripts(true); |
- provider_host_->running_hosted_version_ = version_; |
// Conduct a resource fetch for the main script. |
- const GURL kScriptUrl("http://host/script.js"); |
+ const GURL kScriptUrl("https://host/script.js"); |
std::unique_ptr<net::URLRequest> request = url_request_context_.CreateRequest( |
kScriptUrl, net::DEFAULT_PRIORITY, &url_request_delegate_); |
std::unique_ptr<ServiceWorkerContextRequestHandler> handler( |
@@ -168,10 +202,9 @@ TEST_F(ServiceWorkerContextRequestHandlerTest, UpdateForceBypassCache) { |
TEST_F(ServiceWorkerContextRequestHandlerTest, |
ServiceWorkerDataRequestAnnotation) { |
version_->SetStatus(ServiceWorkerVersion::NEW); |
- provider_host_->running_hosted_version_ = version_; |
// Conduct a resource fetch for the main script. |
- const GURL kScriptUrl("http://host/script.js"); |
+ const GURL kScriptUrl("https://host/script.js"); |
std::unique_ptr<net::URLRequest> request = url_request_context_.CreateRequest( |
kScriptUrl, net::DEFAULT_PRIORITY, &url_request_delegate_); |
std::unique_ptr<ServiceWorkerContextRequestHandler> handler( |
@@ -197,8 +230,7 @@ TEST_F(ServiceWorkerContextRequestHandlerTest, |
SkipServiceWorkerForServiceWorkerRequest) { |
// Conduct a resource fetch for the main script. |
version_->SetStatus(ServiceWorkerVersion::NEW); |
- provider_host_->running_hosted_version_ = version_; |
- const GURL kScriptUrl("http://host/script.js"); |
+ const GURL kScriptUrl("https://host/script.js"); |
std::unique_ptr<net::URLRequest> request = url_request_context_.CreateRequest( |
kScriptUrl, net::DEFAULT_PRIORITY, &url_request_delegate_); |
ServiceWorkerRequestHandler::InitializeHandler( |
@@ -214,4 +246,25 @@ TEST_F(ServiceWorkerContextRequestHandlerTest, |
EXPECT_TRUE(handler); |
} |
+TEST_F(ServiceWorkerContextRequestHandlerTest, RedundantVersion) { |
+ // Create a redundant version. |
+ version_->SetStatus(ServiceWorkerVersion::REDUNDANT); |
+ |
+ // Conduct a resource fetch for the main script. |
+ std::unique_ptr<net::URLRequest> request = url_request_context_.CreateRequest( |
+ version_->script_url(), net::DEFAULT_PRIORITY, &url_request_delegate_); |
+ ServiceWorkerRequestHandler::InitializeHandler( |
+ request.get(), helper()->context_wrapper(), blob_storage_context(), |
+ helper()->mock_render_process_id(), provider_host()->provider_id(), |
+ true /* skip_service_worker */, FETCH_REQUEST_MODE_NO_CORS, |
+ FETCH_CREDENTIALS_MODE_OMIT, FetchRedirectMode::FOLLOW_MODE, |
+ RESOURCE_TYPE_SERVICE_WORKER, REQUEST_CONTEXT_TYPE_SERVICE_WORKER, |
+ REQUEST_CONTEXT_FRAME_TYPE_NONE, nullptr); |
+ |
+ // Verify that the request fails. |
+ request->Start(); |
+ base::RunLoop().Run(); |
+ EXPECT_EQ(net::ERR_FAILED, url_request_delegate_.request_status()); |
+} |
+ |
} // namespace content |