| 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
|
|
|