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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
104 std::unique_ptr<ServiceWorkerProviderHost> host = | 104 std::unique_ptr<ServiceWorkerProviderHost> host = |
105 CreateProviderHostForServiceWorkerContext( | 105 CreateProviderHostForServiceWorkerContext( |
106 render_process_id(), kMockProviderId, | 106 render_process_id(), kMockProviderId, |
107 true /* is_parent_frame_secure */, context()->AsWeakPtr()); | 107 true /* is_parent_frame_secure */, context()->AsWeakPtr()); |
108 provider_host_ = host->AsWeakPtr(); | 108 provider_host_ = host->AsWeakPtr(); |
109 EXPECT_FALSE( | 109 EXPECT_FALSE( |
110 context()->GetProviderHost(host->process_id(), host->provider_id())); | 110 context()->GetProviderHost(host->process_id(), host->provider_id())); |
111 context()->AddProviderHost(std::move(host)); | 111 context()->AddProviderHost(std::move(host)); |
112 | 112 |
113 scoped_refptr<ServiceWorkerRegistration> registration = | 113 scoped_refptr<ServiceWorkerRegistration> registration = |
114 new ServiceWorkerRegistration(GURL("https://host/scope"), 1L, | 114 new ServiceWorkerRegistration(GURL("https://host/scope"), |
115 false /* use_cache* */, 1L, | |
nhiroki
2017/03/28 06:49:51
There is an extra * ("use_cache*")
yuryu
2017/07/20 10:15:12
Acknowledged.
| |
115 context()->AsWeakPtr()); | 116 context()->AsWeakPtr()); |
116 scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion( | 117 scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion( |
117 registration.get(), GURL("https://host/script.js"), 1L, | 118 registration.get(), GURL("https://host/script.js"), 1L, |
118 context()->AsWeakPtr()); | 119 context()->AsWeakPtr()); |
119 | 120 |
120 provider_host_->running_hosted_version_ = version; | 121 provider_host_->running_hosted_version_ = version; |
121 } | 122 } |
122 | 123 |
123 std::unique_ptr<net::URLRequest> CreateRequest(const GURL& request_url, | 124 std::unique_ptr<net::URLRequest> CreateRequest(const GURL& request_url, |
124 ResourceType resource_type) { | 125 ResourceType resource_type) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
174 ProcessLinkHeaderForRequest( | 175 ProcessLinkHeaderForRequest( |
175 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), | 176 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), |
176 "<../foo.js>; rel=serviceworker", context_wrapper()); | 177 "<../foo.js>; rel=serviceworker", context_wrapper()); |
177 base::RunLoop().RunUntilIdle(); | 178 base::RunLoop().RunUntilIdle(); |
178 | 179 |
179 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 180 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
180 ASSERT_EQ(1u, registrations.size()); | 181 ASSERT_EQ(1u, registrations.size()); |
181 EXPECT_EQ(GURL("https://example.com/foo/"), registrations[0].pattern); | 182 EXPECT_EQ(GURL("https://example.com/foo/"), registrations[0].pattern); |
182 EXPECT_EQ(GURL("https://example.com/foo/foo.js"), | 183 EXPECT_EQ(GURL("https://example.com/foo/foo.js"), |
183 registrations[0].active_version.script_url); | 184 registrations[0].active_version.script_url); |
185 EXPECT_FALSE(registrations[0].use_cache); | |
184 } | 186 } |
185 | 187 |
186 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeWithFragment) { | 188 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeWithFragment) { |
187 CreateDocumentProviderHost(); | 189 CreateDocumentProviderHost(); |
188 ProcessLinkHeaderForRequest( | 190 ProcessLinkHeaderForRequest( |
189 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), | 191 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), |
190 "<../bar.js>; rel=serviceworker; scope=\"scope#ref\"", context_wrapper()); | 192 "<../bar.js>; rel=serviceworker; scope=\"scope#ref\"", context_wrapper()); |
191 base::RunLoop().RunUntilIdle(); | 193 base::RunLoop().RunUntilIdle(); |
192 | 194 |
193 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 195 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
194 ASSERT_EQ(1u, registrations.size()); | 196 ASSERT_EQ(1u, registrations.size()); |
195 EXPECT_EQ(GURL("https://example.com/foo/bar/scope"), | 197 EXPECT_EQ(GURL("https://example.com/foo/bar/scope"), |
196 registrations[0].pattern); | 198 registrations[0].pattern); |
197 EXPECT_EQ(GURL("https://example.com/foo/bar.js"), | 199 EXPECT_EQ(GURL("https://example.com/foo/bar.js"), |
198 registrations[0].active_version.script_url); | 200 registrations[0].active_version.script_url); |
201 EXPECT_FALSE(registrations[0].use_cache); | |
199 } | 202 } |
200 | 203 |
201 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeAbsoluteUrl) { | 204 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeAbsoluteUrl) { |
202 CreateDocumentProviderHost(); | 205 CreateDocumentProviderHost(); |
203 ProcessLinkHeaderForRequest( | 206 ProcessLinkHeaderForRequest( |
204 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), | 207 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), |
205 "<bar.js>; rel=serviceworker; " | 208 "<bar.js>; rel=serviceworker; " |
206 "scope=\"https://example.com:443/foo/bar/scope\"", | 209 "scope=\"https://example.com:443/foo/bar/scope\"", |
207 context_wrapper()); | 210 context_wrapper()); |
208 base::RunLoop().RunUntilIdle(); | 211 base::RunLoop().RunUntilIdle(); |
209 | 212 |
210 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 213 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
211 ASSERT_EQ(1u, registrations.size()); | 214 ASSERT_EQ(1u, registrations.size()); |
212 EXPECT_EQ(GURL("https://example.com/foo/bar/scope"), | 215 EXPECT_EQ(GURL("https://example.com/foo/bar/scope"), |
213 registrations[0].pattern); | 216 registrations[0].pattern); |
214 EXPECT_EQ(GURL("https://example.com/foo/bar/bar.js"), | 217 EXPECT_EQ(GURL("https://example.com/foo/bar/bar.js"), |
215 registrations[0].active_version.script_url); | 218 registrations[0].active_version.script_url); |
219 EXPECT_FALSE(registrations[0].use_cache); | |
216 } | 220 } |
217 | 221 |
218 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeDifferentOrigin) { | 222 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeDifferentOrigin) { |
219 CreateDocumentProviderHost(); | 223 CreateDocumentProviderHost(); |
220 ProcessLinkHeaderForRequest( | 224 ProcessLinkHeaderForRequest( |
221 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), | 225 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), |
222 "<bar.js>; rel=serviceworker; scope=\"https://google.com/scope\"", | 226 "<bar.js>; rel=serviceworker; scope=\"https://google.com/scope\"", |
223 context_wrapper()); | 227 context_wrapper()); |
224 base::RunLoop().RunUntilIdle(); | 228 base::RunLoop().RunUntilIdle(); |
225 | 229 |
(...skipping 30 matching lines...) Expand all Loading... | |
256 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), | 260 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), |
257 "<https://example.com/bar.js>; rel=serviceworker; scope=foo", | 261 "<https://example.com/bar.js>; rel=serviceworker; scope=foo", |
258 context_wrapper()); | 262 context_wrapper()); |
259 base::RunLoop().RunUntilIdle(); | 263 base::RunLoop().RunUntilIdle(); |
260 | 264 |
261 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 265 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
262 ASSERT_EQ(1u, registrations.size()); | 266 ASSERT_EQ(1u, registrations.size()); |
263 EXPECT_EQ(GURL("https://example.com/foobar/foo"), registrations[0].pattern); | 267 EXPECT_EQ(GURL("https://example.com/foobar/foo"), registrations[0].pattern); |
264 EXPECT_EQ(GURL("https://example.com/bar.js"), | 268 EXPECT_EQ(GURL("https://example.com/bar.js"), |
265 registrations[0].active_version.script_url); | 269 registrations[0].active_version.script_url); |
270 EXPECT_FALSE(registrations[0].use_cache); | |
266 } | 271 } |
267 | 272 |
268 TEST_F(LinkHeaderServiceWorkerTest, | 273 TEST_F(LinkHeaderServiceWorkerTest, |
269 InstallServiceWorker_ScriptDifferentOrigin) { | 274 InstallServiceWorker_ScriptDifferentOrigin) { |
270 CreateDocumentProviderHost(); | 275 CreateDocumentProviderHost(); |
271 ProcessLinkHeaderForRequest( | 276 ProcessLinkHeaderForRequest( |
272 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), | 277 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), |
273 "<https://google.com/bar.js>; rel=serviceworker; scope=foo", | 278 "<https://google.com/bar.js>; rel=serviceworker; scope=foo", |
274 context_wrapper()); | 279 context_wrapper()); |
275 base::RunLoop().RunUntilIdle(); | 280 base::RunLoop().RunUntilIdle(); |
276 | 281 |
277 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 282 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
278 ASSERT_EQ(0u, registrations.size()); | 283 ASSERT_EQ(0u, registrations.size()); |
279 } | 284 } |
280 | 285 |
286 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_UseCache) { | |
287 CreateDocumentProviderHost(); | |
288 ProcessLinkHeaderForRequest( | |
289 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), | |
290 "<../foo.js>; rel=serviceworker; usecache", context_wrapper()); | |
291 base::RunLoop().RunUntilIdle(); | |
292 | |
293 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | |
294 ASSERT_EQ(1u, registrations.size()); | |
295 EXPECT_EQ(GURL("https://example.com/foo/"), registrations[0].pattern); | |
296 EXPECT_EQ(GURL("https://example.com/foo/foo.js"), | |
297 registrations[0].active_version.script_url); | |
298 EXPECT_TRUE(registrations[0].use_cache); | |
299 } | |
300 | |
281 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_MultipleWorkers) { | 301 TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_MultipleWorkers) { |
282 CreateDocumentProviderHost(); | 302 CreateDocumentProviderHost(); |
283 ProcessLinkHeaderForRequest( | 303 ProcessLinkHeaderForRequest( |
284 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), | 304 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), |
285 "<bar.js>; rel=serviceworker; scope=foo, <baz.js>; " | 305 "<bar.js>; rel=serviceworker; scope=foo, <baz.js>; " |
286 "rel=serviceworker; scope=scope", | 306 "rel=serviceworker; scope=scope; usecache", |
287 context_wrapper()); | 307 context_wrapper()); |
288 base::RunLoop().RunUntilIdle(); | 308 base::RunLoop().RunUntilIdle(); |
289 | 309 |
290 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 310 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
291 ASSERT_EQ(2u, registrations.size()); | 311 ASSERT_EQ(2u, registrations.size()); |
292 EXPECT_EQ(GURL("https://example.com/foobar/foo"), registrations[0].pattern); | 312 EXPECT_EQ(GURL("https://example.com/foobar/foo"), registrations[0].pattern); |
293 EXPECT_EQ(GURL("https://example.com/foobar/bar.js"), | 313 EXPECT_EQ(GURL("https://example.com/foobar/bar.js"), |
294 registrations[0].active_version.script_url); | 314 registrations[0].active_version.script_url); |
315 EXPECT_FALSE(registrations[0].use_cache); | |
295 EXPECT_EQ(GURL("https://example.com/foobar/scope"), registrations[1].pattern); | 316 EXPECT_EQ(GURL("https://example.com/foobar/scope"), registrations[1].pattern); |
296 EXPECT_EQ(GURL("https://example.com/foobar/baz.js"), | 317 EXPECT_EQ(GURL("https://example.com/foobar/baz.js"), |
297 registrations[1].active_version.script_url); | 318 registrations[1].active_version.script_url); |
319 EXPECT_TRUE(registrations[1].use_cache); | |
298 } | 320 } |
299 | 321 |
300 TEST_F(LinkHeaderServiceWorkerTest, | 322 TEST_F(LinkHeaderServiceWorkerTest, |
301 InstallServiceWorker_ValidAndInvalidValues) { | 323 InstallServiceWorker_ValidAndInvalidValues) { |
302 CreateDocumentProviderHost(); | 324 CreateDocumentProviderHost(); |
303 ProcessLinkHeaderForRequest( | 325 ProcessLinkHeaderForRequest( |
304 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), | 326 CreateSubresourceRequest(GURL("https://example.com/foobar/")).get(), |
305 "<https://google.com/bar.js>; rel=serviceworker; scope=foo, <baz.js>; " | 327 "<https://google.com/bar.js>; rel=serviceworker; scope=foo, <baz.js>; " |
306 "rel=serviceworker; scope=scope", | 328 "rel=serviceworker; scope=scope", |
307 context_wrapper()); | 329 context_wrapper()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
340 | 362 |
341 ProcessLinkHeaderForRequest(request.get(), "<../foo.js>; rel=serviceworker", | 363 ProcessLinkHeaderForRequest(request.get(), "<../foo.js>; rel=serviceworker", |
342 context_wrapper()); | 364 context_wrapper()); |
343 base::RunLoop().RunUntilIdle(); | 365 base::RunLoop().RunUntilIdle(); |
344 | 366 |
345 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 367 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
346 ASSERT_EQ(1u, registrations.size()); | 368 ASSERT_EQ(1u, registrations.size()); |
347 EXPECT_EQ(GURL("https://example.com/foo/"), registrations[0].pattern); | 369 EXPECT_EQ(GURL("https://example.com/foo/"), registrations[0].pattern); |
348 EXPECT_EQ(GURL("https://example.com/foo/foo.js"), | 370 EXPECT_EQ(GURL("https://example.com/foo/foo.js"), |
349 registrations[0].active_version.script_url); | 371 registrations[0].active_version.script_url); |
372 EXPECT_FALSE(registrations[0].use_cache); | |
350 } | 373 } |
351 | 374 |
352 TEST_F(LinkHeaderServiceWorkerTest, | 375 TEST_F(LinkHeaderServiceWorkerTest, |
353 InstallServiceWorker_NavigationToInsecureContext) { | 376 InstallServiceWorker_NavigationToInsecureContext) { |
354 CreateDocumentProviderHost(); | 377 CreateDocumentProviderHost(); |
355 provider_host()->SetDocumentUrl(GURL("http://example.com/foo/bar/")); | 378 provider_host()->SetDocumentUrl(GURL("http://example.com/foo/bar/")); |
356 ProcessLinkHeaderForRequest(CreateRequest(GURL("http://example.com/foo/bar/"), | 379 ProcessLinkHeaderForRequest(CreateRequest(GURL("http://example.com/foo/bar/"), |
357 RESOURCE_TYPE_MAIN_FRAME) | 380 RESOURCE_TYPE_MAIN_FRAME) |
358 .get(), | 381 .get(), |
359 "<../foo.js>; rel=serviceworker", | 382 "<../foo.js>; rel=serviceworker", |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
404 ProcessLinkHeaderForRequest( | 427 ProcessLinkHeaderForRequest( |
405 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), | 428 CreateSubresourceRequest(GURL("https://example.com/foo/bar/")).get(), |
406 "<../foo.js>; rel=serviceworker", context_wrapper()); | 429 "<../foo.js>; rel=serviceworker", context_wrapper()); |
407 base::RunLoop().RunUntilIdle(); | 430 base::RunLoop().RunUntilIdle(); |
408 | 431 |
409 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); | 432 std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations(); |
410 ASSERT_EQ(1u, registrations.size()); | 433 ASSERT_EQ(1u, registrations.size()); |
411 } | 434 } |
412 | 435 |
413 } // namespace content | 436 } // namespace content |
OLD | NEW |