| Index: content/browser/service_worker/foreign_fetch_request_handler_unittest.cc
|
| diff --git a/content/browser/service_worker/foreign_fetch_request_handler_unittest.cc b/content/browser/service_worker/foreign_fetch_request_handler_unittest.cc
|
| index 5727b00828f02dee986839c5849f1f261a56d47d..1045db183f2e95c7038dcdc584d3167491269d58 100644
|
| --- a/content/browser/service_worker/foreign_fetch_request_handler_unittest.cc
|
| +++ b/content/browser/service_worker/foreign_fetch_request_handler_unittest.cc
|
| @@ -68,27 +68,19 @@ class ForeignFetchRequestHandlerTest : public testing::Test {
|
| const int64_t kRegistrationId = 0;
|
| const int64_t kVersionId = 0;
|
| helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath()));
|
| +
|
| + // Create a registration for the worker which has foreign fetch event
|
| + // handler.
|
| registration_ = new ServiceWorkerRegistration(kScope, kRegistrationId,
|
| context()->AsWeakPtr());
|
| version_ = new ServiceWorkerVersion(registration_.get(), kResource1,
|
| kVersionId, context()->AsWeakPtr());
|
| -
|
| version_->set_foreign_fetch_scopes({kScope});
|
|
|
| - // An empty host.
|
| - std::unique_ptr<ServiceWorkerProviderHost> host(
|
| - new ServiceWorkerProviderHost(
|
| - helper_->mock_render_process_id(), MSG_ROUTING_NONE,
|
| - 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();
|
|
|
| + // Persist the registration data.
|
| std::vector<ServiceWorkerDatabase::ResourceRecord> records;
|
| records.push_back(
|
| ServiceWorkerDatabase::ResourceRecord(10, version_->script_url(), 100));
|
| @@ -162,17 +154,30 @@ class ForeignFetchRequestHandlerTest : public testing::Test {
|
| return ForeignFetchRequestHandler::GetHandler(request_.get());
|
| }
|
|
|
| + void CreateWindowTypeProviderHost() {
|
| + std::unique_ptr<ServiceWorkerProviderHost> host =
|
| + CreateProviderHostForWindow(
|
| + helper_->mock_render_process_id(), kMockProviderId,
|
| + true /* is_parent_frame_secure */, helper_->context()->AsWeakPtr());
|
| + EXPECT_FALSE(
|
| + context()->GetProviderHost(host->process_id(), host->provider_id()));
|
| + host->SetDocumentUrl(GURL("https://host/scope/"));
|
| + provider_host_ = host->AsWeakPtr();
|
| + context()->AddProviderHost(std::move(host));
|
| + }
|
| +
|
| void CreateServiceWorkerTypeProviderHost() {
|
| - std::unique_ptr<ServiceWorkerProviderHost> host(
|
| - new ServiceWorkerProviderHost(
|
| - helper_->mock_render_process_id(), MSG_ROUTING_NONE,
|
| - kMockProviderId, SERVICE_WORKER_PROVIDER_FOR_CONTROLLER,
|
| - ServiceWorkerProviderHost::FrameSecurityLevel::UNINITIALIZED,
|
| - context()->AsWeakPtr(), nullptr));
|
| + std::unique_ptr<ServiceWorkerProviderHost> host =
|
| + CreateProviderHostForServiceWorkerContext(
|
| + helper_->mock_render_process_id(), kMockProviderId,
|
| + true /* is_parent_frame_secure */, helper_->context()->AsWeakPtr());
|
| + EXPECT_FALSE(
|
| + context()->GetProviderHost(host->process_id(), host->provider_id()));
|
| provider_host_ = host->AsWeakPtr();
|
| - context()->RemoveProviderHost(host->process_id(), host->provider_id());
|
| context()->AddProviderHost(std::move(host));
|
|
|
| + // Create another worker whose requests will be intercepted by the foreign
|
| + // fetch event handler.
|
| scoped_refptr<ServiceWorkerRegistration> registration =
|
| new ServiceWorkerRegistration(GURL("https://host/scope"), 1L,
|
| context()->AsWeakPtr());
|
| @@ -236,6 +241,7 @@ class ForeignFetchRequestHandlerTest : public testing::Test {
|
| };
|
|
|
| TEST_F(ForeignFetchRequestHandlerTest, CheckOriginTrialToken_NoToken) {
|
| + CreateWindowTypeProviderHost();
|
| EXPECT_TRUE(CheckOriginTrialToken(version()));
|
| std::unique_ptr<net::HttpResponseInfo> http_info(
|
| CreateTestHttpResponseInfo());
|
| @@ -244,6 +250,7 @@ TEST_F(ForeignFetchRequestHandlerTest, CheckOriginTrialToken_NoToken) {
|
| }
|
|
|
| TEST_F(ForeignFetchRequestHandlerTest, CheckOriginTrialToken_ValidToken) {
|
| + CreateWindowTypeProviderHost();
|
| EXPECT_TRUE(CheckOriginTrialToken(version()));
|
| std::unique_ptr<net::HttpResponseInfo> http_info(
|
| CreateTestHttpResponseInfo());
|
| @@ -263,6 +270,7 @@ TEST_F(ForeignFetchRequestHandlerTest, CheckOriginTrialToken_ValidToken) {
|
| }
|
|
|
| TEST_F(ForeignFetchRequestHandlerTest, CheckOriginTrialToken_InvalidToken) {
|
| + CreateWindowTypeProviderHost();
|
| EXPECT_TRUE(CheckOriginTrialToken(version()));
|
| std::unique_ptr<net::HttpResponseInfo> http_info(
|
| CreateTestHttpResponseInfo());
|
| @@ -281,6 +289,7 @@ TEST_F(ForeignFetchRequestHandlerTest, CheckOriginTrialToken_InvalidToken) {
|
| }
|
|
|
| TEST_F(ForeignFetchRequestHandlerTest, CheckOriginTrialToken_ExpiredToken) {
|
| + CreateWindowTypeProviderHost();
|
| EXPECT_TRUE(CheckOriginTrialToken(version()));
|
| std::unique_ptr<net::HttpResponseInfo> http_info(
|
| CreateTestHttpResponseInfo());
|
| @@ -299,11 +308,13 @@ TEST_F(ForeignFetchRequestHandlerTest, CheckOriginTrialToken_ExpiredToken) {
|
| }
|
|
|
| TEST_F(ForeignFetchRequestHandlerTest, InitializeHandler_Success) {
|
| + CreateWindowTypeProviderHost();
|
| EXPECT_TRUE(InitializeHandler(kValidUrl, RESOURCE_TYPE_IMAGE,
|
| nullptr /* initiator */));
|
| }
|
|
|
| TEST_F(ForeignFetchRequestHandlerTest, InitializeHandler_WrongResourceType) {
|
| + CreateWindowTypeProviderHost();
|
| EXPECT_FALSE(InitializeHandler(kValidUrl, RESOURCE_TYPE_MAIN_FRAME,
|
| nullptr /* initiator */));
|
| EXPECT_FALSE(InitializeHandler(kValidUrl, RESOURCE_TYPE_SUB_FRAME,
|
| @@ -317,23 +328,30 @@ TEST_F(ForeignFetchRequestHandlerTest, InitializeHandler_WrongResourceType) {
|
| }
|
|
|
| TEST_F(ForeignFetchRequestHandlerTest, InitializeHandler_SameOriginRequest) {
|
| + CreateWindowTypeProviderHost();
|
| EXPECT_FALSE(InitializeHandler(kValidUrl, RESOURCE_TYPE_IMAGE,
|
| kValidUrl /* initiator */));
|
| }
|
|
|
| TEST_F(ForeignFetchRequestHandlerTest, InitializeHandler_NoRegisteredHandlers) {
|
| + CreateWindowTypeProviderHost();
|
| EXPECT_FALSE(InitializeHandler("https://invalid.example.com/foo",
|
| RESOURCE_TYPE_IMAGE, nullptr /* initiator */));
|
| }
|
|
|
| -TEST_F(ForeignFetchRequestHandlerTest, InitializeHandler_TimeoutBehavior) {
|
| +TEST_F(ForeignFetchRequestHandlerTest,
|
| + InitializeHandler_TimeoutBehaviorForWindow) {
|
| + CreateWindowTypeProviderHost();
|
| ForeignFetchRequestHandler* handler =
|
| InitializeHandler("https://valid.example.com/foo", RESOURCE_TYPE_IMAGE,
|
| nullptr /* initiator */);
|
| ASSERT_TRUE(handler);
|
|
|
| EXPECT_EQ(base::nullopt, timeout_for_request(handler));
|
| +}
|
|
|
| +TEST_F(ForeignFetchRequestHandlerTest,
|
| + InitializeHandler_TimeoutBehaviorForServiceWorker) {
|
| CreateServiceWorkerTypeProviderHost();
|
| ServiceWorkerVersion* version = provider_host()->running_hosted_version();
|
| std::unique_ptr<net::HttpResponseInfo> http_info(
|
| @@ -360,10 +378,12 @@ TEST_F(ForeignFetchRequestHandlerTest, InitializeHandler_TimeoutBehavior) {
|
| EXPECT_EQ(base::TimeDelta::FromSeconds(6), remaining_time);
|
|
|
| // Make sure new request only gets remaining timeout.
|
| - handler = InitializeHandler("https://valid.example.com/foo",
|
| - RESOURCE_TYPE_IMAGE, nullptr /* initiator */);
|
| + ForeignFetchRequestHandler* handler =
|
| + InitializeHandler("https://valid.example.com/foo", RESOURCE_TYPE_IMAGE,
|
| + nullptr /* initiator */);
|
| ASSERT_TRUE(handler);
|
| - EXPECT_EQ(remaining_time, timeout_for_request(handler));
|
| + ASSERT_TRUE(timeout_for_request(handler).has_value());
|
| + EXPECT_EQ(remaining_time, timeout_for_request(handler).value());
|
| }
|
|
|
| } // namespace content
|
|
|