Index: content/browser/service_worker/link_header_support_unittest.cc |
diff --git a/content/browser/service_worker/link_header_support_unittest.cc b/content/browser/service_worker/link_header_support_unittest.cc |
index ce7406f30246c01eee1d5d750f8f36063899e32b..21d3d066669664c20e7d0e11ca06d555fe6bb062 100644 |
--- a/content/browser/service_worker/link_header_support_unittest.cc |
+++ b/content/browser/service_worker/link_header_support_unittest.cc |
@@ -13,6 +13,7 @@ |
#include "content/browser/service_worker/service_worker_registration.h" |
#include "content/browser/service_worker/service_worker_request_handler.h" |
#include "content/browser/service_worker/service_worker_test_utils.h" |
+#include "content/common/service_worker/service_worker_utils.h" |
#include "content/public/common/content_switches.h" |
#include "content/public/test/mock_resource_context.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
@@ -49,6 +50,8 @@ SaveFoundRegistrations( |
registrations); |
} |
+} // namespace |
+ |
class LinkHeaderServiceWorkerTest : public ::testing::Test { |
public: |
LinkHeaderServiceWorkerTest() |
@@ -80,6 +83,28 @@ class LinkHeaderServiceWorkerTest : public ::testing::Test { |
return helper_->context_wrapper(); |
} |
ServiceWorkerProviderHost* provider_host() { return provider_host_.get(); } |
+ int render_process_id() const { return helper_->mock_render_process_id(); } |
falken
2016/11/21 04:13:42
nit: If we introduce this, there's several helper_
Marijn Kruisselbrink
2016/11/21 05:10:56
Done
|
+ |
+ void CreateServiceWorkerProviderHost() { |
+ 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)); |
+ provider_host_ = host->AsWeakPtr(); |
+ context()->RemoveProviderHost(host->process_id(), host->provider_id()); |
+ context()->AddProviderHost(std::move(host)); |
+ |
+ scoped_refptr<ServiceWorkerRegistration> registration = |
+ new ServiceWorkerRegistration(GURL("https://host/scope"), 1L, |
+ context()->AsWeakPtr()); |
+ scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion( |
+ registration.get(), GURL("https://host/script.js"), 1L, |
+ context()->AsWeakPtr()); |
+ |
+ provider_host_->running_hosted_version_ = version; |
+ } |
std::unique_ptr<net::URLRequest> CreateRequest(const GURL& request_url, |
ResourceType resource_type) { |
@@ -334,10 +359,41 @@ TEST_P(LinkHeaderServiceWorkerTestP, |
ASSERT_EQ(0u, registrations.size()); |
} |
+TEST_P(LinkHeaderServiceWorkerTestP, |
+ InstallServiceWorker_FromWorkerWithoutControllees) { |
+ CreateServiceWorkerProviderHost(); |
+ ProcessLinkHeaderForRequest( |
+ CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), |
+ "<../foo.js>; rel=serviceworker", context_wrapper()); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
+ ASSERT_EQ(0u, registrations.size()); |
+} |
+ |
+TEST_P(LinkHeaderServiceWorkerTestP, |
+ InstallServiceWorker_FromWorkerWithControllees) { |
+ CreateServiceWorkerProviderHost(); |
+ |
+ std::unique_ptr<ServiceWorkerProviderHost> controllee( |
+ new ServiceWorkerProviderHost( |
+ render_process_id(), MSG_ROUTING_NONE, kMockProviderId, |
+ SERVICE_WORKER_PROVIDER_FOR_WINDOW, |
+ ServiceWorkerProviderHost::FrameSecurityLevel::UNINITIALIZED, |
+ context()->AsWeakPtr(), nullptr)); |
+ provider_host()->running_hosted_version()->AddControllee(controllee.get()); |
+ |
+ ProcessLinkHeaderForRequest( |
+ CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), |
+ "<../foo.js>; rel=serviceworker", context_wrapper()); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
+ ASSERT_EQ(1u, registrations.size()); |
+} |
+ |
INSTANTIATE_TEST_CASE_P(LinkHeaderServiceWorkerTest, |
LinkHeaderServiceWorkerTestP, |
testing::Bool()); |
-} // namespace |
- |
} // namespace content |