Chromium Code Reviews| 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 5c6a1d7a1e1d1f0d8310b5d2b6607336a285b06b..c805344c9bbd1084b62eb9a9ebb00e7f1c2feef6 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,6 +14,7 @@ |
| #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" |
| @@ -22,6 +23,7 @@ |
| #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 +33,23 @@ namespace { |
| void EmptyCallback() {} |
| -} |
| +} // namespace |
| + |
| +class ServiceWorkerContextRequestHandlerTest; |
| + |
| +class MockHttpProtocolHandler |
|
horo
2017/01/10 07:09:27
class MockHttpProtocolHandler
: public net::UR
falken
2017/01/10 08:17:46
Done.
|
| + : public net::URLRequestJobFactory::ProtocolHandler { |
| + public: |
| + MockHttpProtocolHandler(ServiceWorkerContextRequestHandlerTest* test); |
| + |
| + net::URLRequestJob* MaybeCreateJob( |
| + net::URLRequest* request, |
| + net::NetworkDelegate* network_delegate) const override; |
| + |
| + private: |
| + // Owns |this|. |
| + ServiceWorkerContextRequestHandlerTest* test_; |
| +}; |
| class ServiceWorkerContextRequestHandlerTest : public testing::Test { |
| public: |
| @@ -42,14 +60,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 +77,15 @@ 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(this)); |
| + url_request_job_factory_.SetProtocolHandler("https", std::move(handler)); |
| + url_request_context_.set_job_factory(&url_request_job_factory_); |
| } |
| void TearDown() override { |
| @@ -72,6 +96,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,11 +111,35 @@ 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_; |
| }; |
| +MockHttpProtocolHandler::MockHttpProtocolHandler( |
| + ServiceWorkerContextRequestHandlerTest* test) |
| + : test_(test) {} |
| + |
| +net::URLRequestJob* MockHttpProtocolHandler::MaybeCreateJob( |
| + net::URLRequest* request, |
| + net::NetworkDelegate* network_delegate) const { |
| + bool is_main_script = request->url() == test_->version()->script_url(); |
| + ResourceType resource_type = |
| + is_main_script ? RESOURCE_TYPE_SERVICE_WORKER : RESOURCE_TYPE_SCRIPT; |
| + ServiceWorkerRequestHandler::InitializeHandler( |
|
horo
2017/01/10 07:09:27
Calling ServiceWorkerRequestHandler::InitializeHan
falken
2017/01/10 08:17:46
Good idea, done.
|
| + request, test_->helper()->context_wrapper(), |
| + test_->blob_storage_context(), test_->helper()->mock_render_process_id(), |
| + test_->provider_host()->provider_id(), true /* skip_service_worker */, |
| + FETCH_REQUEST_MODE_NO_CORS, FETCH_CREDENTIALS_MODE_OMIT, |
| + FetchRedirectMode::FOLLOW_MODE, resource_type, |
| + REQUEST_CONTEXT_TYPE_SERVICE_WORKER, REQUEST_CONTEXT_FRAME_TYPE_NONE, |
| + nullptr); |
| + ServiceWorkerRequestHandler* handler = |
| + ServiceWorkerRequestHandler::GetHandler(request); |
| + return handler->MaybeCreateJob(request, network_delegate, nullptr); |
| +} |
| + |
| class ServiceWorkerContextRequestHandlerTestP |
| : public MojoServiceWorkerTestP<ServiceWorkerContextRequestHandlerTest> {}; |
| @@ -93,10 +148,9 @@ TEST_P(ServiceWorkerContextRequestHandlerTestP, 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( |
| @@ -120,10 +174,9 @@ TEST_P(ServiceWorkerContextRequestHandlerTestP, 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( |
| @@ -147,10 +200,9 @@ TEST_P(ServiceWorkerContextRequestHandlerTestP, 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( |
| @@ -171,10 +223,9 @@ TEST_P(ServiceWorkerContextRequestHandlerTestP, UpdateForceBypassCache) { |
| TEST_P(ServiceWorkerContextRequestHandlerTestP, |
| 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( |
| @@ -200,8 +251,7 @@ TEST_P(ServiceWorkerContextRequestHandlerTestP, |
| 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( |
| @@ -217,6 +267,20 @@ TEST_P(ServiceWorkerContextRequestHandlerTestP, |
| EXPECT_TRUE(handler); |
| } |
| +TEST_P(ServiceWorkerContextRequestHandlerTestP, 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_); |
| + |
|
horo
2017/01/10 07:09:27
You can call ServiceWorkerRequestHandler::Initiali
falken
2017/01/10 08:17:46
Done.
|
| + // Verify that the request fails. |
| + request->Start(); |
| + base::RunLoop().Run(); |
| + EXPECT_EQ(net::ERR_FAILED, url_request_delegate_.request_status()); |
| +} |
| + |
| INSTANTIATE_TEST_CASE_P(ServiceWorkerContextRequestHandlerTest, |
| ServiceWorkerContextRequestHandlerTestP, |
| testing::Bool()); |