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

Side by Side Diff: content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc

Issue 2071433003: Reland: service worker: Don't control a subframe of an insecure context (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: revised Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/service_worker_controllee_request_handl er.h" 5 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {} 98 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {}
99 99
100 void SetUp() override { 100 void SetUp() override {
101 SetUpWithHelper(new EmbeddedWorkerTestHelper(base::FilePath())); 101 SetUpWithHelper(new EmbeddedWorkerTestHelper(base::FilePath()));
102 } 102 }
103 103
104 void SetUpWithHelper(EmbeddedWorkerTestHelper* helper) { 104 void SetUpWithHelper(EmbeddedWorkerTestHelper* helper) {
105 helper_.reset(helper); 105 helper_.reset(helper);
106 106
107 // A new unstored registration/version. 107 // A new unstored registration/version.
108 scope_ = GURL("http://host/scope/"); 108 scope_ = GURL("https://host/scope/");
109 script_url_ = GURL("http://host/script.js"); 109 script_url_ = GURL("https://host/script.js");
110 registration_ = new ServiceWorkerRegistration( 110 registration_ = new ServiceWorkerRegistration(
111 scope_, 1L, context()->AsWeakPtr()); 111 scope_, 1L, context()->AsWeakPtr());
112 version_ = new ServiceWorkerVersion( 112 version_ = new ServiceWorkerVersion(
113 registration_.get(), script_url_, 1L, context()->AsWeakPtr()); 113 registration_.get(), script_url_, 1L, context()->AsWeakPtr());
114 114
115 std::vector<ServiceWorkerDatabase::ResourceRecord> records; 115 std::vector<ServiceWorkerDatabase::ResourceRecord> records;
116 records.push_back( 116 records.push_back(
117 ServiceWorkerDatabase::ResourceRecord(10, version_->script_url(), 100)); 117 ServiceWorkerDatabase::ResourceRecord(10, version_->script_url(), 100));
118 version_->script_cache_map()->SetResources(records); 118 version_->script_cache_map()->SetResources(records);
119 119
120 // An empty host. 120 // An empty host.
121 std::unique_ptr<ServiceWorkerProviderHost> host( 121 std::unique_ptr<ServiceWorkerProviderHost> host(
122 new ServiceWorkerProviderHost(helper_->mock_render_process_id(), 122 new ServiceWorkerProviderHost(
123 MSG_ROUTING_NONE, kMockProviderId, 123 helper_->mock_render_process_id(), MSG_ROUTING_NONE,
124 SERVICE_WORKER_PROVIDER_FOR_WINDOW, 124 kMockProviderId, SERVICE_WORKER_PROVIDER_FOR_WINDOW,
125 context()->AsWeakPtr(), NULL)); 125 ServiceWorkerProviderHost::FrameSecurityLevel::SECURE,
126 context()->AsWeakPtr(), NULL));
126 provider_host_ = host->AsWeakPtr(); 127 provider_host_ = host->AsWeakPtr();
127 context()->AddProviderHost(std::move(host)); 128 context()->AddProviderHost(std::move(host));
128 129
129 context()->storage()->LazyInitialize(base::Bind(&base::DoNothing)); 130 context()->storage()->LazyInitialize(base::Bind(&base::DoNothing));
130 base::RunLoop().RunUntilIdle(); 131 base::RunLoop().RunUntilIdle();
131 } 132 }
132 133
133 void TearDown() override { 134 void TearDown() override {
134 version_ = NULL; 135 version_ = NULL;
135 registration_ = NULL; 136 registration_ = NULL;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 version_->set_has_fetch_handler(true); 174 version_->set_has_fetch_handler(true);
174 registration_->SetActiveVersion(version_); 175 registration_->SetActiveVersion(version_);
175 context()->storage()->StoreRegistration( 176 context()->storage()->StoreRegistration(
176 registration_.get(), 177 registration_.get(),
177 version_.get(), 178 version_.get(),
178 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 179 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
179 base::RunLoop().RunUntilIdle(); 180 base::RunLoop().RunUntilIdle();
180 181
181 // Conduct a main resource load. 182 // Conduct a main resource load.
182 ServiceWorkerRequestTestResources test_resources( 183 ServiceWorkerRequestTestResources test_resources(
183 this, GURL("http://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME); 184 this, GURL("https://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME);
184 ServiceWorkerURLRequestJob* sw_job = test_resources.MaybeCreateJob(); 185 ServiceWorkerURLRequestJob* sw_job = test_resources.MaybeCreateJob();
185 186
186 EXPECT_FALSE(sw_job->ShouldFallbackToNetwork()); 187 EXPECT_FALSE(sw_job->ShouldFallbackToNetwork());
187 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker()); 188 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
188 EXPECT_FALSE(version_->HasControllee()); 189 EXPECT_FALSE(version_->HasControllee());
189 base::RunLoop().RunUntilIdle(); 190 base::RunLoop().RunUntilIdle();
190 191
191 // Verify we did not use the worker. 192 // Verify we did not use the worker.
192 EXPECT_TRUE(sw_job->ShouldFallbackToNetwork()); 193 EXPECT_TRUE(sw_job->ShouldFallbackToNetwork());
193 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker()); 194 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
194 EXPECT_FALSE(version_->HasControllee()); 195 EXPECT_FALSE(version_->HasControllee());
195 196
196 SetBrowserClientForTesting(old_browser_client); 197 SetBrowserClientForTesting(old_browser_client);
197 } 198 }
198 199
199 TEST_F(ServiceWorkerControlleeRequestHandlerTest, ActivateWaitingVersion) { 200 TEST_F(ServiceWorkerControlleeRequestHandlerTest, ActivateWaitingVersion) {
200 // Store a registration that is installed but not activated yet. 201 // Store a registration that is installed but not activated yet.
201 version_->SetStatus(ServiceWorkerVersion::INSTALLED); 202 version_->SetStatus(ServiceWorkerVersion::INSTALLED);
202 version_->set_has_fetch_handler(true); 203 version_->set_has_fetch_handler(true);
203 registration_->SetWaitingVersion(version_); 204 registration_->SetWaitingVersion(version_);
204 context()->storage()->StoreRegistration( 205 context()->storage()->StoreRegistration(
205 registration_.get(), 206 registration_.get(),
206 version_.get(), 207 version_.get(),
207 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 208 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
208 base::RunLoop().RunUntilIdle(); 209 base::RunLoop().RunUntilIdle();
209 210
210 // Conduct a main resource load. 211 // Conduct a main resource load.
211 ServiceWorkerRequestTestResources test_resources( 212 ServiceWorkerRequestTestResources test_resources(
212 this, GURL("http://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME); 213 this, GURL("https://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME);
213 ServiceWorkerURLRequestJob* sw_job = test_resources.MaybeCreateJob(); 214 ServiceWorkerURLRequestJob* sw_job = test_resources.MaybeCreateJob();
214 215
215 EXPECT_FALSE(sw_job->ShouldFallbackToNetwork()); 216 EXPECT_FALSE(sw_job->ShouldFallbackToNetwork());
216 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker()); 217 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
217 EXPECT_FALSE(version_->HasControllee()); 218 EXPECT_FALSE(version_->HasControllee());
218 219
219 base::RunLoop().RunUntilIdle(); 220 base::RunLoop().RunUntilIdle();
220 221
221 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, 222 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED,
222 version_->status()); 223 version_->status());
223 EXPECT_FALSE(sw_job->ShouldFallbackToNetwork()); 224 EXPECT_FALSE(sw_job->ShouldFallbackToNetwork());
224 EXPECT_TRUE(sw_job->ShouldForwardToServiceWorker()); 225 EXPECT_TRUE(sw_job->ShouldForwardToServiceWorker());
225 EXPECT_TRUE(version_->HasControllee()); 226 EXPECT_TRUE(version_->HasControllee());
226 227
227 // Navigations should trigger an update too. 228 // Navigations should trigger an update too.
228 test_resources.ResetHandler(); 229 test_resources.ResetHandler();
229 EXPECT_TRUE(version_->update_timer_.IsRunning()); 230 EXPECT_TRUE(version_->update_timer_.IsRunning());
230 } 231 }
231 232
232 // Test that an installing registration is associated with a provider host. 233 // Test that an installing registration is associated with a provider host.
233 TEST_F(ServiceWorkerControlleeRequestHandlerTest, InstallingRegistration) { 234 TEST_F(ServiceWorkerControlleeRequestHandlerTest, InstallingRegistration) {
234 // Create an installing registration. 235 // Create an installing registration.
235 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 236 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
236 version_->set_has_fetch_handler(true); 237 version_->set_has_fetch_handler(true);
237 registration_->SetInstallingVersion(version_); 238 registration_->SetInstallingVersion(version_);
238 context()->storage()->NotifyInstallingRegistration(registration_.get()); 239 context()->storage()->NotifyInstallingRegistration(registration_.get());
239 240
240 // Conduct a main resource load. 241 // Conduct a main resource load.
241 ServiceWorkerRequestTestResources test_resources( 242 ServiceWorkerRequestTestResources test_resources(
242 this, GURL("http://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME); 243 this, GURL("https://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME);
243 ServiceWorkerURLRequestJob* job = test_resources.MaybeCreateJob(); 244 ServiceWorkerURLRequestJob* job = test_resources.MaybeCreateJob();
244 245
245 base::RunLoop().RunUntilIdle(); 246 base::RunLoop().RunUntilIdle();
246 247
247 // The handler should have fallen back to network and destroyed the job. The 248 // The handler should have fallen back to network and destroyed the job. The
248 // registration should be associated with the provider host, although it is 249 // registration should be associated with the provider host, although it is
249 // not controlled since there is no active version. 250 // not controlled since there is no active version.
250 EXPECT_FALSE(job); 251 EXPECT_FALSE(job);
251 EXPECT_EQ(registration_.get(), provider_host_->associated_registration()); 252 EXPECT_EQ(registration_.get(), provider_host_->associated_registration());
252 EXPECT_EQ(version_.get(), provider_host_->installing_version()); 253 EXPECT_EQ(version_.get(), provider_host_->installing_version());
(...skipping 11 matching lines...) Expand all
264 context()->storage()->StoreRegistration( 265 context()->storage()->StoreRegistration(
265 registration_.get(), 266 registration_.get(),
266 version_.get(), 267 version_.get(),
267 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 268 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
268 base::RunLoop().RunUntilIdle(); 269 base::RunLoop().RunUntilIdle();
269 version_ = NULL; 270 version_ = NULL;
270 registration_ = NULL; 271 registration_ = NULL;
271 272
272 // Conduct a main resource load. 273 // Conduct a main resource load.
273 ServiceWorkerRequestTestResources test_resources( 274 ServiceWorkerRequestTestResources test_resources(
274 this, GURL("http://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME); 275 this, GURL("https://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME);
275 ServiceWorkerURLRequestJob* sw_job = test_resources.MaybeCreateJob(); 276 ServiceWorkerURLRequestJob* sw_job = test_resources.MaybeCreateJob();
276 277
277 EXPECT_FALSE(sw_job->ShouldFallbackToNetwork()); 278 EXPECT_FALSE(sw_job->ShouldFallbackToNetwork());
278 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker()); 279 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
279 280
280 // Shouldn't crash if the ProviderHost is deleted prior to completion of 281 // Shouldn't crash if the ProviderHost is deleted prior to completion of
281 // the database lookup. 282 // the database lookup.
282 context()->RemoveProviderHost(helper_->mock_render_process_id(), 283 context()->RemoveProviderHost(helper_->mock_render_process_id(),
283 kMockProviderId); 284 kMockProviderId);
284 EXPECT_FALSE(provider_host_.get()); 285 EXPECT_FALSE(provider_host_.get());
285 base::RunLoop().RunUntilIdle(); 286 base::RunLoop().RunUntilIdle();
286 EXPECT_TRUE(sw_job->ShouldFallbackToNetwork()); 287 EXPECT_TRUE(sw_job->ShouldFallbackToNetwork());
287 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker()); 288 EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
288 } 289 }
289 290
290 TEST_F(ServiceWorkerControlleeRequestHandlerTest, FallbackWithNoFetchHandler) { 291 TEST_F(ServiceWorkerControlleeRequestHandlerTest, FallbackWithNoFetchHandler) {
291 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 292 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
292 version_->set_has_fetch_handler(false); 293 version_->set_has_fetch_handler(false);
293 registration_->SetActiveVersion(version_); 294 registration_->SetActiveVersion(version_);
294 context()->storage()->StoreRegistration( 295 context()->storage()->StoreRegistration(
295 registration_.get(), version_.get(), 296 registration_.get(), version_.get(),
296 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 297 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
297 base::RunLoop().RunUntilIdle(); 298 base::RunLoop().RunUntilIdle();
298 299
299 ServiceWorkerRequestTestResources main_test_resources( 300 ServiceWorkerRequestTestResources main_test_resources(
300 this, GURL("http://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME); 301 this, GURL("https://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME);
301 ServiceWorkerURLRequestJob* main_job = main_test_resources.MaybeCreateJob(); 302 ServiceWorkerURLRequestJob* main_job = main_test_resources.MaybeCreateJob();
302 303
303 EXPECT_FALSE(main_job->ShouldFallbackToNetwork()); 304 EXPECT_FALSE(main_job->ShouldFallbackToNetwork());
304 EXPECT_FALSE(main_job->ShouldForwardToServiceWorker()); 305 EXPECT_FALSE(main_job->ShouldForwardToServiceWorker());
305 EXPECT_FALSE(version_->HasControllee()); 306 EXPECT_FALSE(version_->HasControllee());
306 307
307 base::RunLoop().RunUntilIdle(); 308 base::RunLoop().RunUntilIdle();
308 309
309 EXPECT_TRUE(main_job->ShouldFallbackToNetwork()); 310 EXPECT_TRUE(main_job->ShouldFallbackToNetwork());
310 EXPECT_FALSE(main_job->ShouldForwardToServiceWorker()); 311 EXPECT_FALSE(main_job->ShouldForwardToServiceWorker());
311 EXPECT_TRUE(version_->HasControllee()); 312 EXPECT_TRUE(version_->HasControllee());
312 EXPECT_EQ(version_, provider_host_->controlling_version()); 313 EXPECT_EQ(version_, provider_host_->controlling_version());
313 314
314 ServiceWorkerRequestTestResources sub_test_resources( 315 ServiceWorkerRequestTestResources sub_test_resources(
315 this, GURL("http://host/scope/doc/subresource"), RESOURCE_TYPE_IMAGE); 316 this, GURL("https://host/scope/doc/subresource"), RESOURCE_TYPE_IMAGE);
316 ServiceWorkerURLRequestJob* sub_job = sub_test_resources.MaybeCreateJob(); 317 ServiceWorkerURLRequestJob* sub_job = sub_test_resources.MaybeCreateJob();
317 318
318 // This job shouldn't be created because this worker doesn't have fetch 319 // This job shouldn't be created because this worker doesn't have fetch
319 // handler. 320 // handler.
320 EXPECT_EQ(nullptr, sub_job); 321 EXPECT_EQ(nullptr, sub_job);
321 } 322 }
322 323
323 } // namespace content 324 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698