| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/service_worker/link_header_support.h" | 5 #include "content/browser/service_worker/link_header_support.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "content/browser/loader/resource_request_info_impl.h" | 10 #include "content/browser/loader/resource_request_info_impl.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 | 72 |
| 73 ServiceWorkerContextCore* context() { return helper_->context(); } | 73 ServiceWorkerContextCore* context() { return helper_->context(); } |
| 74 ServiceWorkerContextWrapper* context_wrapper() { | 74 ServiceWorkerContextWrapper* context_wrapper() { |
| 75 return helper_->context_wrapper(); | 75 return helper_->context_wrapper(); |
| 76 } | 76 } |
| 77 ServiceWorkerProviderHost* provider_host() { return provider_host_.get(); } | 77 ServiceWorkerProviderHost* provider_host() { return provider_host_.get(); } |
| 78 int render_process_id() const { return helper_->mock_render_process_id(); } | 78 int render_process_id() const { return helper_->mock_render_process_id(); } |
| 79 | 79 |
| 80 void CreateDocumentProviderHost() { | 80 void CreateDocumentProviderHost() { |
| 81 // An empty host. | 81 // An empty host. |
| 82 remote_endpoints_.emplace_back(); |
| 82 std::unique_ptr<ServiceWorkerProviderHost> host = | 83 std::unique_ptr<ServiceWorkerProviderHost> host = |
| 83 CreateProviderHostForWindow(render_process_id(), kMockProviderId, | 84 CreateProviderHostForWindow(render_process_id(), kMockProviderId, |
| 84 true /* is_parent_frame_secure */, | 85 true /* is_parent_frame_secure */, |
| 85 context()->AsWeakPtr()); | 86 context()->AsWeakPtr(), |
| 87 &remote_endpoints_.back()); |
| 86 provider_host_ = host->AsWeakPtr(); | 88 provider_host_ = host->AsWeakPtr(); |
| 87 EXPECT_FALSE( | 89 EXPECT_FALSE( |
| 88 context()->GetProviderHost(host->process_id(), host->provider_id())); | 90 context()->GetProviderHost(host->process_id(), host->provider_id())); |
| 89 context()->AddProviderHost(std::move(host)); | 91 context()->AddProviderHost(std::move(host)); |
| 90 } | 92 } |
| 91 | 93 |
| 92 void CreateInsecureDocumentProviderHost() { | 94 void CreateInsecureDocumentProviderHost() { |
| 93 // An empty host. | 95 // An empty host. |
| 96 remote_endpoints_.emplace_back(); |
| 94 std::unique_ptr<ServiceWorkerProviderHost> host = | 97 std::unique_ptr<ServiceWorkerProviderHost> host = |
| 95 CreateProviderHostForWindow(render_process_id(), kMockProviderId, | 98 CreateProviderHostForWindow(render_process_id(), kMockProviderId, |
| 96 false /* is_parent_frame_secure */, | 99 false /* is_parent_frame_secure */, |
| 97 context()->AsWeakPtr()); | 100 context()->AsWeakPtr(), |
| 101 &remote_endpoints_.back()); |
| 98 provider_host_ = host->AsWeakPtr(); | 102 provider_host_ = host->AsWeakPtr(); |
| 99 EXPECT_FALSE( | 103 EXPECT_FALSE( |
| 100 context()->GetProviderHost(host->process_id(), host->provider_id())); | 104 context()->GetProviderHost(host->process_id(), host->provider_id())); |
| 101 context()->AddProviderHost(std::move(host)); | 105 context()->AddProviderHost(std::move(host)); |
| 102 } | 106 } |
| 103 | 107 |
| 104 void CreateServiceWorkerProviderHost() { | 108 void CreateServiceWorkerProviderHost() { |
| 109 remote_endpoints_.emplace_back(); |
| 105 std::unique_ptr<ServiceWorkerProviderHost> host = | 110 std::unique_ptr<ServiceWorkerProviderHost> host = |
| 106 CreateProviderHostForServiceWorkerContext( | 111 CreateProviderHostForServiceWorkerContext( |
| 107 render_process_id(), kMockProviderId, | 112 render_process_id(), kMockProviderId, |
| 108 true /* is_parent_frame_secure */, context()->AsWeakPtr()); | 113 true /* is_parent_frame_secure */, context()->AsWeakPtr(), |
| 114 &remote_endpoints_.back()); |
| 109 provider_host_ = host->AsWeakPtr(); | 115 provider_host_ = host->AsWeakPtr(); |
| 110 EXPECT_FALSE( | 116 EXPECT_FALSE( |
| 111 context()->GetProviderHost(host->process_id(), host->provider_id())); | 117 context()->GetProviderHost(host->process_id(), host->provider_id())); |
| 112 context()->AddProviderHost(std::move(host)); | 118 context()->AddProviderHost(std::move(host)); |
| 113 | 119 |
| 114 scoped_refptr<ServiceWorkerRegistration> registration = | 120 scoped_refptr<ServiceWorkerRegistration> registration = |
| 115 new ServiceWorkerRegistration(GURL("https://host/scope"), 1L, | 121 new ServiceWorkerRegistration(GURL("https://host/scope"), 1L, |
| 116 context()->AsWeakPtr()); | 122 context()->AsWeakPtr()); |
| 117 scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion( | 123 scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion( |
| 118 registration.get(), GURL("https://host/script.js"), 1L, | 124 registration.get(), GURL("https://host/script.js"), 1L, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 std::vector<ServiceWorkerRegistrationInfo> GetRegistrations() { | 160 std::vector<ServiceWorkerRegistrationInfo> GetRegistrations() { |
| 155 bool called; | 161 bool called; |
| 156 std::vector<ServiceWorkerRegistrationInfo> registrations; | 162 std::vector<ServiceWorkerRegistrationInfo> registrations; |
| 157 context_wrapper()->GetAllRegistrations( | 163 context_wrapper()->GetAllRegistrations( |
| 158 SaveFoundRegistrations(SERVICE_WORKER_OK, &called, ®istrations)); | 164 SaveFoundRegistrations(SERVICE_WORKER_OK, &called, ®istrations)); |
| 159 base::RunLoop().RunUntilIdle(); | 165 base::RunLoop().RunUntilIdle(); |
| 160 EXPECT_TRUE(called); | 166 EXPECT_TRUE(called); |
| 161 return registrations; | 167 return registrations; |
| 162 } | 168 } |
| 163 | 169 |
| 164 private: | 170 protected: |
| 165 TestBrowserThreadBundle thread_bundle_; | 171 TestBrowserThreadBundle thread_bundle_; |
| 166 std::unique_ptr<EmbeddedWorkerTestHelper> helper_; | 172 std::unique_ptr<EmbeddedWorkerTestHelper> helper_; |
| 167 net::TestURLRequestContext request_context_; | 173 net::TestURLRequestContext request_context_; |
| 168 net::TestDelegate request_delegate_; | 174 net::TestDelegate request_delegate_; |
| 169 MockResourceContext resource_context_; | 175 MockResourceContext resource_context_; |
| 170 base::WeakPtr<ServiceWorkerProviderHost> provider_host_; | 176 base::WeakPtr<ServiceWorkerProviderHost> provider_host_; |
| 171 storage::BlobStorageContext blob_storage_context_; | 177 storage::BlobStorageContext blob_storage_context_; |
| 178 std::vector<ServiceWorkerRemoteProviderEndpoint> remote_endpoints_; |
| 172 }; | 179 }; |
| 173 | 180 |
| 174 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_Basic) { | 181 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_Basic) { |
| 175 CreateDocumentProviderHost(); | 182 CreateDocumentProviderHost(); |
| 176 ProcessLinkHeaderForRequest( | 183 ProcessLinkHeaderForRequest( |
| 177 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), | 184 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), |
| 178 "<../foo.js>; rel=serviceworker", context_wrapper()); | 185 "<../foo.js>; rel=serviceworker", context_wrapper()); |
| 179 base::RunLoop().RunUntilIdle(); | 186 base::RunLoop().RunUntilIdle(); |
| 180 | 187 |
| 181 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 188 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 base::RunLoop().RunUntilIdle(); | 397 base::RunLoop().RunUntilIdle(); |
| 391 | 398 |
| 392 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 399 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
| 393 ASSERT_EQ(0u, registrations.size()); | 400 ASSERT_EQ(0u, registrations.size()); |
| 394 } | 401 } |
| 395 | 402 |
| 396 TEST_F(LinkHeaderServiceWorkerTest, | 403 TEST_F(LinkHeaderServiceWorkerTest, |
| 397 InstallServiceWorker_FromWorkerWithControllees) { | 404 InstallServiceWorker_FromWorkerWithControllees) { |
| 398 CreateServiceWorkerProviderHost(); | 405 CreateServiceWorkerProviderHost(); |
| 399 | 406 |
| 407 remote_endpoints_.emplace_back(); |
| 400 std::unique_ptr<ServiceWorkerProviderHost> controllee = | 408 std::unique_ptr<ServiceWorkerProviderHost> controllee = |
| 401 CreateProviderHostForWindow(render_process_id(), kMockProviderId, | 409 CreateProviderHostForWindow(render_process_id(), kMockProviderId, |
| 402 true /* is_parent_frame_secure */, | 410 true /* is_parent_frame_secure */, |
| 403 context()->AsWeakPtr()); | 411 context()->AsWeakPtr(), |
| 412 &remote_endpoints_.back()); |
| 404 provider_host()->running_hosted_version()->AddControllee(controllee.get()); | 413 provider_host()->running_hosted_version()->AddControllee(controllee.get()); |
| 405 | 414 |
| 406 ProcessLinkHeaderForRequest( | 415 ProcessLinkHeaderForRequest( |
| 407 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), | 416 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), |
| 408 "<../foo.js>; rel=serviceworker", context_wrapper()); | 417 "<../foo.js>; rel=serviceworker", context_wrapper()); |
| 409 base::RunLoop().RunUntilIdle(); | 418 base::RunLoop().RunUntilIdle(); |
| 410 | 419 |
| 411 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 420 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
| 412 ASSERT_EQ(1u, registrations.size()); | 421 ASSERT_EQ(1u, registrations.size()); |
| 413 } | 422 } |
| 414 | 423 |
| 415 } // namespace content | 424 } // namespace content |
| OLD | NEW |