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

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

Issue 2602853002: Eliminate network fallback from ServiceWorkerContextRequestHandler. (Closed)
Patch Set: ok Created 3 years, 11 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_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());

Powered by Google App Engine
This is Rietveld 408576698