Index: content/browser/service_worker/service_worker_request_handler_unittest.cc |
diff --git a/content/browser/service_worker/service_worker_request_handler_unittest.cc b/content/browser/service_worker/service_worker_request_handler_unittest.cc |
index 414f01b33e51e3499cc57e3eb3c86cb2032dad76..42105708d14836c81d467df36079cca07d9d85b6 100644 |
--- a/content/browser/service_worker/service_worker_request_handler_unittest.cc |
+++ b/content/browser/service_worker/service_worker_request_handler_unittest.cc |
@@ -10,8 +10,8 @@ |
#include "content/browser/fileapi/mock_url_request_delegate.h" |
#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_context_wrapper.h" |
#include "content/browser/service_worker/service_worker_provider_host.h" |
-#include "content/browser/service_worker/service_worker_registration.h" |
#include "content/browser/service_worker/service_worker_test_utils.h" |
#include "content/common/resource_request_body_impl.h" |
#include "content/common/service_worker/service_worker_utils.h" |
@@ -19,7 +19,9 @@ |
#include "content/public/common/request_context_type.h" |
#include "content/public/common/resource_type.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
+#include "net/url_request/redirect_info.h" |
#include "net/url_request/url_request_context.h" |
+#include "net/url_request/url_request_job.h" |
#include "storage/browser/blob/blob_storage_context.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -29,9 +31,6 @@ namespace { |
int kMockProviderId = 1; |
-void EmptyCallback() { |
-} |
- |
} |
class ServiceWorkerRequestHandlerTest : public testing::Test { |
@@ -42,13 +41,6 @@ class ServiceWorkerRequestHandlerTest : public testing::Test { |
void SetUp() override { |
helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); |
- // A new unstored registration/version. |
- registration_ = new ServiceWorkerRegistration(GURL("https://host/scope/"), |
- 1L, context()->AsWeakPtr()); |
- version_ = new ServiceWorkerVersion(registration_.get(), |
- GURL("https://host/script.js"), 1L, |
- context()->AsWeakPtr()); |
- |
// An empty host. |
std::unique_ptr<ServiceWorkerProviderHost> host( |
new ServiceWorkerProviderHost( |
@@ -56,29 +48,12 @@ class ServiceWorkerRequestHandlerTest : public testing::Test { |
kMockProviderId, SERVICE_WORKER_PROVIDER_FOR_WINDOW, |
ServiceWorkerProviderHost::FrameSecurityLevel::SECURE, |
context()->AsWeakPtr(), nullptr)); |
- host->SetDocumentUrl(GURL("https://host/scope/")); |
provider_host_ = host->AsWeakPtr(); |
context()->AddProviderHost(std::move(host)); |
- context()->storage()->LazyInitialize(base::Bind(&EmptyCallback)); |
- base::RunLoop().RunUntilIdle(); |
- |
- version_->set_fetch_handler_existence( |
- ServiceWorkerVersion::FetchHandlerExistence::EXISTS); |
- version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
- registration_->SetActiveVersion(version_); |
- context()->storage()->StoreRegistration( |
- registration_.get(), |
- version_.get(), |
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
- provider_host_->AssociateRegistration(registration_.get(), |
- false /* notify_controllerchange */); |
- base::RunLoop().RunUntilIdle(); |
} |
void TearDown() override { |
- version_ = nullptr; |
- registration_ = nullptr; |
helper_.reset(); |
} |
@@ -87,30 +62,52 @@ class ServiceWorkerRequestHandlerTest : public testing::Test { |
return helper_->context_wrapper(); |
} |
- bool InitializeHandlerCheck(const std::string& url, |
- const std::string& method, |
- bool skip_service_worker, |
- ResourceType resource_type) { |
- const GURL kDocUrl(url); |
+ std::unique_ptr<net::URLRequest> CreateRequest(const std::string& url, |
+ const std::string& method) { |
std::unique_ptr<net::URLRequest> request = |
- url_request_context_.CreateRequest(kDocUrl, net::DEFAULT_PRIORITY, |
+ url_request_context_.CreateRequest(GURL(url), net::DEFAULT_PRIORITY, |
&url_request_delegate_); |
request->set_method(method); |
+ return request; |
+ } |
+ |
+ void InitializeHandler(net::URLRequest* request, |
+ bool skip_service_worker, |
+ ResourceType resource_type) { |
ServiceWorkerRequestHandler::InitializeHandler( |
- request.get(), context_wrapper(), &blob_storage_context_, |
+ request, context_wrapper(), &blob_storage_context_, |
helper_->mock_render_process_id(), kMockProviderId, skip_service_worker, |
FETCH_REQUEST_MODE_NO_CORS, FETCH_CREDENTIALS_MODE_OMIT, |
FetchRedirectMode::FOLLOW_MODE, resource_type, |
REQUEST_CONTEXT_TYPE_HYPERLINK, REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL, |
nullptr); |
- return ServiceWorkerRequestHandler::GetHandler(request.get()) != nullptr; |
+ } |
+ |
+ static ServiceWorkerRequestHandler* GetHandler(net::URLRequest* request) { |
+ return ServiceWorkerRequestHandler::GetHandler(request); |
+ } |
+ |
+ std::unique_ptr<net::URLRequestJob> MaybeCreateJob(net::URLRequest* request) { |
+ return std::unique_ptr<net::URLRequestJob>( |
+ ServiceWorkerRequestHandler::GetHandler(request)->MaybeCreateJob( |
shimazu
2016/12/09 05:00:46
How about calling GetHandler which is defined abov
horo
2016/12/09 05:21:21
Done.
|
+ request, url_request_context_.network_delegate(), |
+ context_wrapper()->resource_context())); |
+ } |
+ |
+ void InitializeHandlerSimpleTest(const std::string& url, |
+ const std::string& method, |
+ bool skip_service_worker, |
+ ResourceType resource_type) { |
+ std::unique_ptr<net::URLRequest> request = CreateRequest(url, method); |
+ InitializeHandler(request.get(), skip_service_worker, resource_type); |
+ ASSERT_TRUE(GetHandler(request.get())); |
+ MaybeCreateJob(request.get()); |
+ EXPECT_EQ(url, provider_host_->document_url().spec()); |
} |
protected: |
TestBrowserThreadBundle browser_thread_bundle_; |
std::unique_ptr<EmbeddedWorkerTestHelper> helper_; |
- scoped_refptr<ServiceWorkerRegistration> registration_; |
- scoped_refptr<ServiceWorkerVersion> version_; |
base::WeakPtr<ServiceWorkerProviderHost> provider_host_; |
net::URLRequestContext url_request_context_; |
MockURLRequestDelegate url_request_delegate_; |
@@ -120,51 +117,53 @@ class ServiceWorkerRequestHandlerTest : public testing::Test { |
class ServiceWorkerRequestHandlerTestP |
: public MojoServiceWorkerTestP<ServiceWorkerRequestHandlerTest> {}; |
-TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler) { |
+TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler_FTP) { |
+ std::unique_ptr<net::URLRequest> request = |
+ CreateRequest("fpp://host/scope/doc", "GET"); |
shimazu
2016/12/09 05:00:46
s%fpp://%ftp://%
horo
2016/12/09 05:21:21
Done.
|
+ InitializeHandler(request.get(), false, RESOURCE_TYPE_MAIN_FRAME); |
// Cannot initialize a handler for non-secure origins. |
- EXPECT_FALSE(InitializeHandlerCheck( |
- "ftp://host/scope/doc", "GET", false, RESOURCE_TYPE_MAIN_FRAME)); |
- // HTTP is ok because it might redirect to HTTPS. |
- EXPECT_TRUE(InitializeHandlerCheck("http://host/scope/doc", "GET", false, |
- RESOURCE_TYPE_MAIN_FRAME)); |
- EXPECT_TRUE(InitializeHandlerCheck("https://host/scope/doc", "GET", false, |
- RESOURCE_TYPE_MAIN_FRAME)); |
+ EXPECT_FALSE(GetHandler(request.get())); |
+} |
+TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler_HTTP_MAIN_FRAME) { |
+ InitializeHandlerSimpleTest("http://host/scope/doc", "GET", false, |
shimazu
2016/12/09 05:00:46
How about adding a comment like "HTTP should have
horo
2016/12/09 05:21:21
Done.
|
+ RESOURCE_TYPE_MAIN_FRAME); |
+} |
+ |
+TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler_HTTPS_MAIN_FRAME) { |
+ InitializeHandlerSimpleTest("https://host/scope/doc", "GET", false, |
+ RESOURCE_TYPE_MAIN_FRAME); |
+} |
+ |
+TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler_HTTP_SUB_FRAME) { |
+ InitializeHandlerSimpleTest("http://host/scope/doc", "GET", false, |
+ RESOURCE_TYPE_SUB_FRAME); |
+} |
+ |
+TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler_HTTPS_SUB_FRAME) { |
+ InitializeHandlerSimpleTest("https://host/scope/doc", "GET", false, |
+ RESOURCE_TYPE_SUB_FRAME); |
+} |
+ |
+TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler_HTTPS_OPTIONS) { |
// OPTIONS is also supported. See crbug.com/434660. |
- EXPECT_TRUE(InitializeHandlerCheck( |
- "https://host/scope/doc", "OPTIONS", false, RESOURCE_TYPE_MAIN_FRAME)); |
- |
- // Check provider host's URL after initializing a handler for main |
- // frame. |
- provider_host_->SetDocumentUrl(GURL("")); |
- EXPECT_FALSE(InitializeHandlerCheck( |
- "http://host/scope/doc", "GET", true, RESOURCE_TYPE_MAIN_FRAME)); |
- EXPECT_STREQ("http://host/scope/doc", |
- provider_host_->document_url().spec().c_str()); |
- EXPECT_FALSE(InitializeHandlerCheck( |
- "https://host/scope/doc", "GET", true, RESOURCE_TYPE_MAIN_FRAME)); |
- EXPECT_STREQ("https://host/scope/doc", |
- provider_host_->document_url().spec().c_str()); |
- |
- // Check provider host's URL after initializing a handler for a subframe. |
- provider_host_->SetDocumentUrl(GURL("")); |
- EXPECT_FALSE(InitializeHandlerCheck( |
- "http://host/scope/doc", "GET", true, RESOURCE_TYPE_SUB_FRAME)); |
- EXPECT_STREQ("http://host/scope/doc", |
- provider_host_->document_url().spec().c_str()); |
- EXPECT_FALSE(InitializeHandlerCheck( |
- "https://host/scope/doc", "GET", true, RESOURCE_TYPE_SUB_FRAME)); |
- EXPECT_STREQ("https://host/scope/doc", |
- provider_host_->document_url().spec().c_str()); |
+ InitializeHandlerSimpleTest("https://host/scope/doc", "OPTIONS", false, |
+ RESOURCE_TYPE_MAIN_FRAME); |
+} |
+ |
+TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler_HTTPS_SKIP) { |
+ InitializeHandlerSimpleTest("https://host/scope/doc", "GET", true, |
+ RESOURCE_TYPE_MAIN_FRAME); |
+} |
+TEST_P(ServiceWorkerRequestHandlerTestP, InitializeHandler_IMAGE) { |
// Check provider host's URL after initializing a handler for an image. |
- provider_host_->SetDocumentUrl(GURL("")); |
- EXPECT_FALSE(InitializeHandlerCheck( |
- "http://host/scope/doc", "GET", true, RESOURCE_TYPE_IMAGE)); |
- EXPECT_STREQ("", provider_host_->document_url().spec().c_str()); |
- EXPECT_FALSE(InitializeHandlerCheck( |
- "https://host/scope/doc", "GET", true, RESOURCE_TYPE_IMAGE)); |
- EXPECT_STREQ("", provider_host_->document_url().spec().c_str()); |
+ provider_host_->SetDocumentUrl(GURL("https://host/scope/doc")); |
+ std::unique_ptr<net::URLRequest> request = |
+ CreateRequest("https://host/scope/image", "GET"); |
+ InitializeHandler(request.get(), true, RESOURCE_TYPE_IMAGE); |
+ ASSERT_FALSE(GetHandler(request.get())); |
+ EXPECT_EQ(GURL("https://host/scope/doc"), provider_host_->document_url()); |
} |
INSTANTIATE_TEST_CASE_P(ServiceWorkerRequestHandlerTest, |