OLD | NEW |
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/appcache/appcache_request_handler.h" | 5 #include "content/browser/appcache/appcache_request_handler.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <stack> | 9 #include <stack> |
10 #include <string> | 10 #include <string> |
11 #include <utility> | 11 #include <utility> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "base/bind.h" | 14 #include "base/bind.h" |
15 #include "base/bind_helpers.h" | 15 #include "base/bind_helpers.h" |
16 #include "base/callback.h" | 16 #include "base/callback.h" |
17 #include "base/location.h" | 17 #include "base/location.h" |
18 #include "base/macros.h" | 18 #include "base/macros.h" |
19 #include "base/memory/ptr_util.h" | 19 #include "base/memory/ptr_util.h" |
20 #include "base/memory/weak_ptr.h" | 20 #include "base/memory/weak_ptr.h" |
21 #include "base/single_thread_task_runner.h" | 21 #include "base/single_thread_task_runner.h" |
22 #include "base/strings/stringprintf.h" | 22 #include "base/strings/stringprintf.h" |
23 #include "base/synchronization/waitable_event.h" | 23 #include "base/synchronization/waitable_event.h" |
24 #include "base/threading/thread.h" | 24 #include "base/threading/thread.h" |
25 #include "base/threading/thread_task_runner_handle.h" | 25 #include "base/threading/thread_task_runner_handle.h" |
26 #include "content/browser/appcache/appcache.h" | 26 #include "content/browser/appcache/appcache.h" |
27 #include "content/browser/appcache/appcache_backend_impl.h" | 27 #include "content/browser/appcache/appcache_backend_impl.h" |
| 28 #include "content/browser/appcache/appcache_url_request.h" |
28 #include "content/browser/appcache/appcache_url_request_job.h" | 29 #include "content/browser/appcache/appcache_url_request_job.h" |
29 #include "content/browser/appcache/mock_appcache_policy.h" | 30 #include "content/browser/appcache/mock_appcache_policy.h" |
30 #include "content/browser/appcache/mock_appcache_service.h" | 31 #include "content/browser/appcache/mock_appcache_service.h" |
31 #include "net/base/net_errors.h" | 32 #include "net/base/net_errors.h" |
32 #include "net/base/request_priority.h" | 33 #include "net/base/request_priority.h" |
33 #include "net/http/http_response_headers.h" | 34 #include "net/http/http_response_headers.h" |
34 #include "net/http/http_util.h" | 35 #include "net/http/http_util.h" |
35 #include "net/url_request/url_request.h" | 36 #include "net/url_request/url_request.h" |
36 #include "net/url_request/url_request_context.h" | 37 #include "net/url_request/url_request_context.h" |
37 #include "net/url_request/url_request_error_job.h" | 38 #include "net/url_request/url_request_error_job.h" |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 | 265 |
265 // MainResource_Miss -------------------------------------------------- | 266 // MainResource_Miss -------------------------------------------------- |
266 | 267 |
267 void MainResource_Miss() { | 268 void MainResource_Miss() { |
268 PushNextTask( | 269 PushNextTask( |
269 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Miss, | 270 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Miss, |
270 base::Unretained(this))); | 271 base::Unretained(this))); |
271 | 272 |
272 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 273 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
273 net::DEFAULT_PRIORITY, &delegate_); | 274 net::DEFAULT_PRIORITY, &delegate_); |
274 handler_ = host_->CreateRequestHandler(request_.get(), | 275 handler_ = |
275 RESOURCE_TYPE_MAIN_FRAME, false); | 276 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 277 RESOURCE_TYPE_MAIN_FRAME, false); |
276 EXPECT_TRUE(handler_.get()); | 278 EXPECT_TRUE(handler_.get()); |
277 | 279 |
278 job_.reset(handler_->MaybeLoadResource( | 280 job_.reset( |
279 request_.get(), request_->context()->network_delegate())); | 281 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
280 EXPECT_TRUE(job_.get()); | 282 EXPECT_TRUE(job_.get()); |
281 EXPECT_TRUE(job_->is_waiting()); | 283 EXPECT_TRUE(job_->is_waiting()); |
282 | 284 |
283 // We have to wait for completion of storage->FindResponseForMainRequest. | 285 // We have to wait for completion of storage->FindResponseForMainRequest. |
284 ScheduleNextTask(); | 286 ScheduleNextTask(); |
285 } | 287 } |
286 | 288 |
287 void Verify_MainResource_Miss() { | 289 void Verify_MainResource_Miss() { |
288 EXPECT_FALSE(job_->is_waiting()); | 290 EXPECT_FALSE(job_->is_waiting()); |
289 EXPECT_TRUE(job_->is_delivering_network_response()); | 291 EXPECT_TRUE(job_->is_delivering_network_response()); |
290 | 292 |
291 int64_t cache_id = kAppCacheNoCacheId; | 293 int64_t cache_id = kAppCacheNoCacheId; |
292 GURL manifest_url; | 294 GURL manifest_url; |
293 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); | 295 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); |
294 EXPECT_EQ(kAppCacheNoCacheId, cache_id); | 296 EXPECT_EQ(kAppCacheNoCacheId, cache_id); |
295 EXPECT_EQ(GURL(), manifest_url); | 297 EXPECT_EQ(GURL(), manifest_url); |
296 EXPECT_EQ(0, handler_->found_group_id_); | 298 EXPECT_EQ(0, handler_->found_group_id_); |
297 | 299 |
298 std::unique_ptr<AppCacheURLRequestJob> fallback_job( | 300 std::unique_ptr<AppCacheURLRequestJob> fallback_job( |
299 handler_->MaybeLoadFallbackForRedirect( | 301 handler_->MaybeLoadFallbackForRedirect( |
300 request_.get(), request_->context()->network_delegate(), | 302 request_->context()->network_delegate(), |
301 GURL("http://blah/redirect"))); | 303 GURL("http://blah/redirect"))); |
302 EXPECT_FALSE(fallback_job); | 304 EXPECT_FALSE(fallback_job); |
303 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( | 305 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( |
304 request_.get(), request_->context()->network_delegate())); | 306 request_->context()->network_delegate())); |
305 EXPECT_FALSE(fallback_job); | 307 EXPECT_FALSE(fallback_job); |
306 | 308 |
307 EXPECT_TRUE(host_->preferred_manifest_url().is_empty()); | 309 EXPECT_TRUE(host_->preferred_manifest_url().is_empty()); |
308 | 310 |
309 TestFinished(); | 311 TestFinished(); |
310 } | 312 } |
311 | 313 |
312 // MainResource_Hit -------------------------------------------------- | 314 // MainResource_Hit -------------------------------------------------- |
313 | 315 |
314 void MainResource_Hit() { | 316 void MainResource_Hit() { |
315 PushNextTask( | 317 PushNextTask( |
316 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Hit, | 318 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Hit, |
317 base::Unretained(this))); | 319 base::Unretained(this))); |
318 | 320 |
319 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 321 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
320 net::DEFAULT_PRIORITY, &delegate_); | 322 net::DEFAULT_PRIORITY, &delegate_); |
321 handler_ = host_->CreateRequestHandler(request_.get(), | 323 handler_ = |
322 RESOURCE_TYPE_MAIN_FRAME, false); | 324 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 325 RESOURCE_TYPE_MAIN_FRAME, false); |
323 EXPECT_TRUE(handler_.get()); | 326 EXPECT_TRUE(handler_.get()); |
324 | 327 |
325 mock_storage()->SimulateFindMainResource( | 328 mock_storage()->SimulateFindMainResource( |
326 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 329 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
327 GURL(), AppCacheEntry(), | 330 GURL(), AppCacheEntry(), |
328 1, 2, GURL("http://blah/manifest/")); | 331 1, 2, GURL("http://blah/manifest/")); |
329 | 332 |
330 job_.reset(handler_->MaybeLoadResource( | 333 job_.reset( |
331 request_.get(), request_->context()->network_delegate())); | 334 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
332 EXPECT_TRUE(job_.get()); | 335 EXPECT_TRUE(job_.get()); |
333 EXPECT_TRUE(job_->is_waiting()); | 336 EXPECT_TRUE(job_->is_waiting()); |
334 | 337 |
335 // We have to wait for completion of storage->FindResponseForMainRequest. | 338 // We have to wait for completion of storage->FindResponseForMainRequest. |
336 ScheduleNextTask(); | 339 ScheduleNextTask(); |
337 } | 340 } |
338 | 341 |
339 void Verify_MainResource_Hit() { | 342 void Verify_MainResource_Hit() { |
340 EXPECT_FALSE(job_->is_waiting()); | 343 EXPECT_FALSE(job_->is_waiting()); |
341 EXPECT_TRUE(job_->is_delivering_appcache_response()); | 344 EXPECT_TRUE(job_->is_delivering_appcache_response()); |
342 | 345 |
343 int64_t cache_id = kAppCacheNoCacheId; | 346 int64_t cache_id = kAppCacheNoCacheId; |
344 GURL manifest_url; | 347 GURL manifest_url; |
345 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); | 348 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); |
346 EXPECT_EQ(1, cache_id); | 349 EXPECT_EQ(1, cache_id); |
347 EXPECT_EQ(GURL("http://blah/manifest/"), manifest_url); | 350 EXPECT_EQ(GURL("http://blah/manifest/"), manifest_url); |
348 EXPECT_EQ(2, handler_->found_group_id_); | 351 EXPECT_EQ(2, handler_->found_group_id_); |
349 | 352 |
350 std::unique_ptr<AppCacheURLRequestJob> fallback_job( | 353 std::unique_ptr<AppCacheURLRequestJob> fallback_job( |
351 handler_->MaybeLoadFallbackForResponse( | 354 handler_->MaybeLoadFallbackForResponse( |
352 request_.get(), request_->context()->network_delegate())); | 355 request_->context()->network_delegate())); |
353 EXPECT_FALSE(fallback_job); | 356 EXPECT_FALSE(fallback_job); |
354 | 357 |
355 EXPECT_EQ(GURL("http://blah/manifest/"), | 358 EXPECT_EQ(GURL("http://blah/manifest/"), |
356 host_->preferred_manifest_url()); | 359 host_->preferred_manifest_url()); |
357 | 360 |
358 TestFinished(); | 361 TestFinished(); |
359 } | 362 } |
360 | 363 |
361 // MainResource_Fallback -------------------------------------------------- | 364 // MainResource_Fallback -------------------------------------------------- |
362 | 365 |
363 void MainResource_Fallback() { | 366 void MainResource_Fallback() { |
364 PushNextTask( | 367 PushNextTask( |
365 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Fallback, | 368 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Fallback, |
366 base::Unretained(this))); | 369 base::Unretained(this))); |
367 | 370 |
368 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 371 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
369 net::DEFAULT_PRIORITY, &delegate_); | 372 net::DEFAULT_PRIORITY, &delegate_); |
370 handler_ = host_->CreateRequestHandler(request_.get(), | 373 handler_ = |
371 RESOURCE_TYPE_MAIN_FRAME, false); | 374 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 375 RESOURCE_TYPE_MAIN_FRAME, false); |
372 EXPECT_TRUE(handler_.get()); | 376 EXPECT_TRUE(handler_.get()); |
373 | 377 |
374 mock_storage()->SimulateFindMainResource( | 378 mock_storage()->SimulateFindMainResource( |
375 AppCacheEntry(), | 379 AppCacheEntry(), |
376 GURL("http://blah/fallbackurl"), | 380 GURL("http://blah/fallbackurl"), |
377 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 381 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
378 1, 2, GURL("http://blah/manifest/")); | 382 1, 2, GURL("http://blah/manifest/")); |
379 | 383 |
380 job_.reset(handler_->MaybeLoadResource( | 384 job_.reset( |
381 request_.get(), request_->context()->network_delegate())); | 385 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
382 EXPECT_TRUE(job_.get()); | 386 EXPECT_TRUE(job_.get()); |
383 EXPECT_TRUE(job_->is_waiting()); | 387 EXPECT_TRUE(job_->is_waiting()); |
384 | 388 |
385 // We have to wait for completion of storage->FindResponseForMainRequest. | 389 // We have to wait for completion of storage->FindResponseForMainRequest. |
386 ScheduleNextTask(); | 390 ScheduleNextTask(); |
387 } | 391 } |
388 | 392 |
389 void SimulateResponseCode(int response_code) { | 393 void SimulateResponseCode(int response_code) { |
390 net::HttpResponseInfo info; | 394 net::HttpResponseInfo info; |
391 std::string headers = | 395 std::string headers = |
(...skipping 19 matching lines...) Expand all Loading... |
411 EXPECT_FALSE(job_->is_waiting()); | 415 EXPECT_FALSE(job_->is_waiting()); |
412 EXPECT_TRUE(job_->is_delivering_network_response()); | 416 EXPECT_TRUE(job_->is_delivering_network_response()); |
413 | 417 |
414 // The handler expects to the job to tell it that the request is going to | 418 // The handler expects to the job to tell it that the request is going to |
415 // be restarted before it sees the next request. | 419 // be restarted before it sees the next request. |
416 handler_->OnPrepareToRestart(); | 420 handler_->OnPrepareToRestart(); |
417 | 421 |
418 // When the request is restarted, the existing job is dropped so a | 422 // When the request is restarted, the existing job is dropped so a |
419 // real network job gets created. We expect NULL here which will cause | 423 // real network job gets created. We expect NULL here which will cause |
420 // the net library to create a real job. | 424 // the net library to create a real job. |
421 job_.reset(handler_->MaybeLoadResource( | 425 job_.reset( |
422 request_.get(), request_->context()->network_delegate())); | 426 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
423 EXPECT_FALSE(job_.get()); | 427 EXPECT_FALSE(job_.get()); |
424 | 428 |
425 // Simulate an http error of the real network job. | 429 // Simulate an http error of the real network job. |
426 SimulateResponseCode(500); | 430 SimulateResponseCode(500); |
427 | 431 |
428 job_.reset(handler_->MaybeLoadFallbackForResponse( | 432 job_.reset(handler_->MaybeLoadFallbackForResponse( |
429 request_.get(), request_->context()->network_delegate())); | 433 request_->context()->network_delegate())); |
430 EXPECT_TRUE(job_.get()); | 434 EXPECT_TRUE(job_.get()); |
431 EXPECT_TRUE(job_->is_delivering_appcache_response()); | 435 EXPECT_TRUE(job_->is_delivering_appcache_response()); |
432 | 436 |
433 int64_t cache_id = kAppCacheNoCacheId; | 437 int64_t cache_id = kAppCacheNoCacheId; |
434 GURL manifest_url; | 438 GURL manifest_url; |
435 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); | 439 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); |
436 EXPECT_EQ(1, cache_id); | 440 EXPECT_EQ(1, cache_id); |
437 EXPECT_EQ(GURL("http://blah/manifest/"), manifest_url); | 441 EXPECT_EQ(GURL("http://blah/manifest/"), manifest_url); |
438 EXPECT_TRUE(host_->main_resource_was_namespace_entry_); | 442 EXPECT_TRUE(host_->main_resource_was_namespace_entry_); |
439 EXPECT_EQ(GURL("http://blah/fallbackurl"), host_->namespace_entry_url_); | 443 EXPECT_EQ(GURL("http://blah/fallbackurl"), host_->namespace_entry_url_); |
440 | 444 |
441 EXPECT_EQ(GURL("http://blah/manifest/"), | 445 EXPECT_EQ(GURL("http://blah/manifest/"), |
442 host_->preferred_manifest_url()); | 446 host_->preferred_manifest_url()); |
443 | 447 |
444 TestFinished(); | 448 TestFinished(); |
445 } | 449 } |
446 | 450 |
447 // MainResource_FallbackOverride -------------------------------------------- | 451 // MainResource_FallbackOverride -------------------------------------------- |
448 | 452 |
449 void MainResource_FallbackOverride() { | 453 void MainResource_FallbackOverride() { |
450 PushNextTask(base::Bind( | 454 PushNextTask(base::Bind( |
451 &AppCacheRequestHandlerTest::Verify_MainResource_FallbackOverride, | 455 &AppCacheRequestHandlerTest::Verify_MainResource_FallbackOverride, |
452 base::Unretained(this))); | 456 base::Unretained(this))); |
453 | 457 |
454 request_ = | 458 request_ = |
455 empty_context_->CreateRequest(GURL("http://blah/fallback-override"), | 459 empty_context_->CreateRequest(GURL("http://blah/fallback-override"), |
456 net::DEFAULT_PRIORITY, &delegate_); | 460 net::DEFAULT_PRIORITY, &delegate_); |
457 handler_ = host_->CreateRequestHandler(request_.get(), | 461 handler_ = |
458 RESOURCE_TYPE_MAIN_FRAME, false); | 462 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 463 RESOURCE_TYPE_MAIN_FRAME, false); |
459 EXPECT_TRUE(handler_.get()); | 464 EXPECT_TRUE(handler_.get()); |
460 | 465 |
461 mock_storage()->SimulateFindMainResource( | 466 mock_storage()->SimulateFindMainResource( |
462 AppCacheEntry(), | 467 AppCacheEntry(), |
463 GURL("http://blah/fallbackurl"), | 468 GURL("http://blah/fallbackurl"), |
464 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 469 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
465 1, 2, GURL("http://blah/manifest/")); | 470 1, 2, GURL("http://blah/manifest/")); |
466 | 471 |
467 job_.reset(handler_->MaybeLoadResource( | 472 job_.reset( |
468 request_.get(), request_->context()->network_delegate())); | 473 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
469 EXPECT_TRUE(job_.get()); | 474 EXPECT_TRUE(job_.get()); |
470 EXPECT_TRUE(job_->is_waiting()); | 475 EXPECT_TRUE(job_->is_waiting()); |
471 | 476 |
472 // We have to wait for completion of storage->FindResponseForMainRequest. | 477 // We have to wait for completion of storage->FindResponseForMainRequest. |
473 ScheduleNextTask(); | 478 ScheduleNextTask(); |
474 } | 479 } |
475 | 480 |
476 void Verify_MainResource_FallbackOverride() { | 481 void Verify_MainResource_FallbackOverride() { |
477 EXPECT_FALSE(job_->is_waiting()); | 482 EXPECT_FALSE(job_->is_waiting()); |
478 EXPECT_TRUE(job_->is_delivering_network_response()); | 483 EXPECT_TRUE(job_->is_delivering_network_response()); |
479 | 484 |
480 // The handler expects to the job to tell it that the request is going to | 485 // The handler expects to the job to tell it that the request is going to |
481 // be restarted before it sees the next request. | 486 // be restarted before it sees the next request. |
482 handler_->OnPrepareToRestart(); | 487 handler_->OnPrepareToRestart(); |
483 | 488 |
484 // When the request is restarted, the existing job is dropped so a | 489 // When the request is restarted, the existing job is dropped so a |
485 // real network job gets created. We expect NULL here which will cause | 490 // real network job gets created. We expect NULL here which will cause |
486 // the net library to create a real job. | 491 // the net library to create a real job. |
487 job_.reset(handler_->MaybeLoadResource( | 492 job_.reset( |
488 request_.get(), request_->context()->network_delegate())); | 493 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
489 EXPECT_FALSE(job_.get()); | 494 EXPECT_FALSE(job_.get()); |
490 | 495 |
491 // Simulate an http error of the real network job, but with custom | 496 // Simulate an http error of the real network job, but with custom |
492 // headers that override the fallback behavior. | 497 // headers that override the fallback behavior. |
493 const char kOverrideHeaders[] = | 498 const char kOverrideHeaders[] = |
494 "HTTP/1.1 404 BOO HOO\0" | 499 "HTTP/1.1 404 BOO HOO\0" |
495 "x-chromium-appcache-fallback-override: disallow-fallback\0" | 500 "x-chromium-appcache-fallback-override: disallow-fallback\0" |
496 "\0"; | 501 "\0"; |
497 net::HttpResponseInfo info; | 502 net::HttpResponseInfo info; |
498 info.headers = new net::HttpResponseHeaders( | 503 info.headers = new net::HttpResponseHeaders( |
499 std::string(kOverrideHeaders, arraysize(kOverrideHeaders))); | 504 std::string(kOverrideHeaders, arraysize(kOverrideHeaders))); |
500 SimulateResponseInfo(info); | 505 SimulateResponseInfo(info); |
501 | 506 |
502 job_.reset(handler_->MaybeLoadFallbackForResponse( | 507 job_.reset(handler_->MaybeLoadFallbackForResponse( |
503 request_.get(), request_->context()->network_delegate())); | 508 request_->context()->network_delegate())); |
504 EXPECT_FALSE(job_.get()); | 509 EXPECT_FALSE(job_.get()); |
505 | 510 |
506 // GetExtraResponseInfo should return no information. | 511 // GetExtraResponseInfo should return no information. |
507 int64_t cache_id = kAppCacheNoCacheId; | 512 int64_t cache_id = kAppCacheNoCacheId; |
508 GURL manifest_url; | 513 GURL manifest_url; |
509 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); | 514 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); |
510 EXPECT_EQ(kAppCacheNoCacheId, cache_id); | 515 EXPECT_EQ(kAppCacheNoCacheId, cache_id); |
511 EXPECT_TRUE(manifest_url.is_empty()); | 516 EXPECT_TRUE(manifest_url.is_empty()); |
512 | 517 |
513 TestFinished(); | 518 TestFinished(); |
514 } | 519 } |
515 | 520 |
516 // SubResource_Miss_WithNoCacheSelected ---------------------------------- | 521 // SubResource_Miss_WithNoCacheSelected ---------------------------------- |
517 | 522 |
518 void SubResource_Miss_WithNoCacheSelected() { | 523 void SubResource_Miss_WithNoCacheSelected() { |
519 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 524 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
520 net::DEFAULT_PRIORITY, &delegate_); | 525 net::DEFAULT_PRIORITY, &delegate_); |
521 handler_ = host_->CreateRequestHandler(request_.get(), | 526 handler_ = |
522 RESOURCE_TYPE_SUB_RESOURCE, false); | 527 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 528 RESOURCE_TYPE_SUB_RESOURCE, false); |
523 | 529 |
524 // We avoid creating handler when possible, sub-resource requests are not | 530 // We avoid creating handler when possible, sub-resource requests are not |
525 // subject to retrieval from an appcache when there's no associated cache. | 531 // subject to retrieval from an appcache when there's no associated cache. |
526 EXPECT_FALSE(handler_.get()); | 532 EXPECT_FALSE(handler_.get()); |
527 | 533 |
528 TestFinished(); | 534 TestFinished(); |
529 } | 535 } |
530 | 536 |
531 // SubResource_Miss_WithCacheSelected ---------------------------------- | 537 // SubResource_Miss_WithCacheSelected ---------------------------------- |
532 | 538 |
533 void SubResource_Miss_WithCacheSelected() { | 539 void SubResource_Miss_WithCacheSelected() { |
534 // A sub-resource load where the resource is not in an appcache, or | 540 // A sub-resource load where the resource is not in an appcache, or |
535 // in a network or fallback namespace, should result in a failed request. | 541 // in a network or fallback namespace, should result in a failed request. |
536 host_->AssociateCompleteCache(MakeNewCache()); | 542 host_->AssociateCompleteCache(MakeNewCache()); |
537 | 543 |
538 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 544 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
539 net::DEFAULT_PRIORITY, &delegate_); | 545 net::DEFAULT_PRIORITY, &delegate_); |
540 handler_ = host_->CreateRequestHandler(request_.get(), | 546 handler_ = |
541 RESOURCE_TYPE_SUB_RESOURCE, false); | 547 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 548 RESOURCE_TYPE_SUB_RESOURCE, false); |
542 EXPECT_TRUE(handler_.get()); | 549 EXPECT_TRUE(handler_.get()); |
543 | 550 |
544 job_.reset(handler_->MaybeLoadResource( | 551 job_.reset( |
545 request_.get(), request_->context()->network_delegate())); | 552 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
546 EXPECT_TRUE(job_.get()); | 553 EXPECT_TRUE(job_.get()); |
547 EXPECT_TRUE(job_->is_delivering_error_response()); | 554 EXPECT_TRUE(job_->is_delivering_error_response()); |
548 | 555 |
549 std::unique_ptr<AppCacheURLRequestJob> fallback_job( | 556 std::unique_ptr<AppCacheURLRequestJob> fallback_job( |
550 handler_->MaybeLoadFallbackForRedirect( | 557 handler_->MaybeLoadFallbackForRedirect( |
551 request_.get(), request_->context()->network_delegate(), | 558 request_->context()->network_delegate(), |
552 GURL("http://blah/redirect"))); | 559 GURL("http://blah/redirect"))); |
553 EXPECT_FALSE(fallback_job); | 560 EXPECT_FALSE(fallback_job); |
554 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( | 561 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( |
555 request_.get(), request_->context()->network_delegate())); | 562 request_->context()->network_delegate())); |
556 EXPECT_FALSE(fallback_job); | 563 EXPECT_FALSE(fallback_job); |
557 | 564 |
558 TestFinished(); | 565 TestFinished(); |
559 } | 566 } |
560 | 567 |
561 // SubResource_Miss_WithWaitForCacheSelection ----------------------------- | 568 // SubResource_Miss_WithWaitForCacheSelection ----------------------------- |
562 | 569 |
563 void SubResource_Miss_WithWaitForCacheSelection() { | 570 void SubResource_Miss_WithWaitForCacheSelection() { |
564 // Precondition, the host is waiting on cache selection. | 571 // Precondition, the host is waiting on cache selection. |
565 scoped_refptr<AppCache> cache(MakeNewCache()); | 572 scoped_refptr<AppCache> cache(MakeNewCache()); |
566 host_->pending_selected_cache_id_ = cache->cache_id(); | 573 host_->pending_selected_cache_id_ = cache->cache_id(); |
567 host_->set_preferred_manifest_url(cache->owning_group()->manifest_url()); | 574 host_->set_preferred_manifest_url(cache->owning_group()->manifest_url()); |
568 | 575 |
569 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 576 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
570 net::DEFAULT_PRIORITY, &delegate_); | 577 net::DEFAULT_PRIORITY, &delegate_); |
571 handler_ = host_->CreateRequestHandler(request_.get(), | 578 handler_ = |
572 RESOURCE_TYPE_SUB_RESOURCE, false); | 579 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 580 RESOURCE_TYPE_SUB_RESOURCE, false); |
573 EXPECT_TRUE(handler_.get()); | 581 EXPECT_TRUE(handler_.get()); |
574 job_.reset(handler_->MaybeLoadResource( | 582 job_.reset( |
575 request_.get(), request_->context()->network_delegate())); | 583 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
576 EXPECT_TRUE(job_.get()); | 584 EXPECT_TRUE(job_.get()); |
577 EXPECT_TRUE(job_->is_waiting()); | 585 EXPECT_TRUE(job_->is_waiting()); |
578 | 586 |
579 host_->FinishCacheSelection(cache.get(), NULL); | 587 host_->FinishCacheSelection(cache.get(), NULL); |
580 EXPECT_FALSE(job_->is_waiting()); | 588 EXPECT_FALSE(job_->is_waiting()); |
581 EXPECT_TRUE(job_->is_delivering_error_response()); | 589 EXPECT_TRUE(job_->is_delivering_error_response()); |
582 | 590 |
583 std::unique_ptr<AppCacheURLRequestJob> fallback_job( | 591 std::unique_ptr<AppCacheURLRequestJob> fallback_job( |
584 handler_->MaybeLoadFallbackForRedirect( | 592 handler_->MaybeLoadFallbackForRedirect( |
585 request_.get(), request_->context()->network_delegate(), | 593 request_->context()->network_delegate(), |
586 GURL("http://blah/redirect"))); | 594 GURL("http://blah/redirect"))); |
587 EXPECT_FALSE(fallback_job); | 595 EXPECT_FALSE(fallback_job); |
588 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( | 596 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( |
589 request_.get(), request_->context()->network_delegate())); | 597 request_->context()->network_delegate())); |
590 EXPECT_FALSE(fallback_job); | 598 EXPECT_FALSE(fallback_job); |
591 | 599 |
592 TestFinished(); | 600 TestFinished(); |
593 } | 601 } |
594 | 602 |
595 // SubResource_Hit ----------------------------- | 603 // SubResource_Hit ----------------------------- |
596 | 604 |
597 void SubResource_Hit() { | 605 void SubResource_Hit() { |
598 host_->AssociateCompleteCache(MakeNewCache()); | 606 host_->AssociateCompleteCache(MakeNewCache()); |
599 | 607 |
600 mock_storage()->SimulateFindSubResource( | 608 mock_storage()->SimulateFindSubResource( |
601 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); | 609 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); |
602 | 610 |
603 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 611 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
604 net::DEFAULT_PRIORITY, &delegate_); | 612 net::DEFAULT_PRIORITY, &delegate_); |
605 handler_ = host_->CreateRequestHandler(request_.get(), | 613 handler_ = |
606 RESOURCE_TYPE_SUB_RESOURCE, false); | 614 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 615 RESOURCE_TYPE_SUB_RESOURCE, false); |
607 EXPECT_TRUE(handler_.get()); | 616 EXPECT_TRUE(handler_.get()); |
608 job_.reset(handler_->MaybeLoadResource( | 617 job_.reset( |
609 request_.get(), request_->context()->network_delegate())); | 618 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
610 EXPECT_TRUE(job_.get()); | 619 EXPECT_TRUE(job_.get()); |
611 EXPECT_TRUE(job_->is_delivering_appcache_response()); | 620 EXPECT_TRUE(job_->is_delivering_appcache_response()); |
612 | 621 |
613 std::unique_ptr<AppCacheURLRequestJob> fallback_job( | 622 std::unique_ptr<AppCacheURLRequestJob> fallback_job( |
614 handler_->MaybeLoadFallbackForRedirect( | 623 handler_->MaybeLoadFallbackForRedirect( |
615 request_.get(), request_->context()->network_delegate(), | 624 request_->context()->network_delegate(), |
616 GURL("http://blah/redirect"))); | 625 GURL("http://blah/redirect"))); |
617 EXPECT_FALSE(fallback_job); | 626 EXPECT_FALSE(fallback_job); |
618 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( | 627 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( |
619 request_.get(), request_->context()->network_delegate())); | 628 request_->context()->network_delegate())); |
620 EXPECT_FALSE(fallback_job); | 629 EXPECT_FALSE(fallback_job); |
621 | 630 |
622 TestFinished(); | 631 TestFinished(); |
623 } | 632 } |
624 | 633 |
625 // SubResource_RedirectFallback ----------------------------- | 634 // SubResource_RedirectFallback ----------------------------- |
626 | 635 |
627 void SubResource_RedirectFallback() { | 636 void SubResource_RedirectFallback() { |
628 // Redirects to resources in the a different origin are subject to | 637 // Redirects to resources in the a different origin are subject to |
629 // fallback namespaces. | 638 // fallback namespaces. |
630 host_->AssociateCompleteCache(MakeNewCache()); | 639 host_->AssociateCompleteCache(MakeNewCache()); |
631 | 640 |
632 mock_storage()->SimulateFindSubResource( | 641 mock_storage()->SimulateFindSubResource( |
633 AppCacheEntry(), AppCacheEntry(AppCacheEntry::EXPLICIT, 1), false); | 642 AppCacheEntry(), AppCacheEntry(AppCacheEntry::EXPLICIT, 1), false); |
634 | 643 |
635 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 644 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
636 net::DEFAULT_PRIORITY, &delegate_); | 645 net::DEFAULT_PRIORITY, &delegate_); |
637 handler_ = host_->CreateRequestHandler(request_.get(), | 646 handler_ = |
638 RESOURCE_TYPE_SUB_RESOURCE, false); | 647 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 648 RESOURCE_TYPE_SUB_RESOURCE, false); |
639 EXPECT_TRUE(handler_.get()); | 649 EXPECT_TRUE(handler_.get()); |
640 job_.reset(handler_->MaybeLoadResource( | 650 job_.reset( |
641 request_.get(), request_->context()->network_delegate())); | 651 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
642 EXPECT_FALSE(job_.get()); | 652 EXPECT_FALSE(job_.get()); |
643 | 653 |
644 job_.reset(handler_->MaybeLoadFallbackForRedirect( | 654 job_.reset(handler_->MaybeLoadFallbackForRedirect( |
645 request_.get(), request_->context()->network_delegate(), | 655 request_->context()->network_delegate(), |
646 GURL("http://not_blah/redirect"))); | 656 GURL("http://not_blah/redirect"))); |
647 EXPECT_TRUE(job_.get()); | 657 EXPECT_TRUE(job_.get()); |
648 EXPECT_TRUE(job_->is_delivering_appcache_response()); | 658 EXPECT_TRUE(job_->is_delivering_appcache_response()); |
649 | 659 |
650 std::unique_ptr<AppCacheURLRequestJob> fallback_job( | 660 std::unique_ptr<AppCacheURLRequestJob> fallback_job( |
651 handler_->MaybeLoadFallbackForResponse( | 661 handler_->MaybeLoadFallbackForResponse( |
652 request_.get(), request_->context()->network_delegate())); | 662 request_->context()->network_delegate())); |
653 EXPECT_FALSE(fallback_job); | 663 EXPECT_FALSE(fallback_job); |
654 | 664 |
655 TestFinished(); | 665 TestFinished(); |
656 } | 666 } |
657 | 667 |
658 // SubResource_NoRedirectFallback ----------------------------- | 668 // SubResource_NoRedirectFallback ----------------------------- |
659 | 669 |
660 void SubResource_NoRedirectFallback() { | 670 void SubResource_NoRedirectFallback() { |
661 // Redirects to resources in the same-origin are not subject to | 671 // Redirects to resources in the same-origin are not subject to |
662 // fallback namespaces. | 672 // fallback namespaces. |
663 host_->AssociateCompleteCache(MakeNewCache()); | 673 host_->AssociateCompleteCache(MakeNewCache()); |
664 | 674 |
665 mock_storage()->SimulateFindSubResource( | 675 mock_storage()->SimulateFindSubResource( |
666 AppCacheEntry(), AppCacheEntry(AppCacheEntry::EXPLICIT, 1), false); | 676 AppCacheEntry(), AppCacheEntry(AppCacheEntry::EXPLICIT, 1), false); |
667 | 677 |
668 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 678 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
669 net::DEFAULT_PRIORITY, &delegate_); | 679 net::DEFAULT_PRIORITY, &delegate_); |
670 handler_ = host_->CreateRequestHandler(request_.get(), | 680 handler_ = |
671 RESOURCE_TYPE_SUB_RESOURCE, false); | 681 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 682 RESOURCE_TYPE_SUB_RESOURCE, false); |
672 EXPECT_TRUE(handler_.get()); | 683 EXPECT_TRUE(handler_.get()); |
673 job_.reset(handler_->MaybeLoadResource( | 684 job_.reset( |
674 request_.get(), request_->context()->network_delegate())); | 685 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
675 EXPECT_FALSE(job_.get()); | 686 EXPECT_FALSE(job_.get()); |
676 | 687 |
677 std::unique_ptr<AppCacheURLRequestJob> fallback_job( | 688 std::unique_ptr<AppCacheURLRequestJob> fallback_job( |
678 handler_->MaybeLoadFallbackForRedirect( | 689 handler_->MaybeLoadFallbackForRedirect( |
679 request_.get(), request_->context()->network_delegate(), | 690 request_->context()->network_delegate(), |
680 GURL("http://blah/redirect"))); | 691 GURL("http://blah/redirect"))); |
681 EXPECT_FALSE(fallback_job); | 692 EXPECT_FALSE(fallback_job); |
682 | 693 |
683 SimulateResponseCode(200); | 694 SimulateResponseCode(200); |
684 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( | 695 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( |
685 request_.get(), request_->context()->network_delegate())); | 696 request_->context()->network_delegate())); |
686 EXPECT_FALSE(fallback_job); | 697 EXPECT_FALSE(fallback_job); |
687 | 698 |
688 TestFinished(); | 699 TestFinished(); |
689 } | 700 } |
690 | 701 |
691 // SubResource_Network ----------------------------- | 702 // SubResource_Network ----------------------------- |
692 | 703 |
693 void SubResource_Network() { | 704 void SubResource_Network() { |
694 // A sub-resource load where the resource is in a network namespace, | 705 // A sub-resource load where the resource is in a network namespace, |
695 // should result in the system using a 'real' job to do the network | 706 // should result in the system using a 'real' job to do the network |
696 // retrieval. | 707 // retrieval. |
697 host_->AssociateCompleteCache(MakeNewCache()); | 708 host_->AssociateCompleteCache(MakeNewCache()); |
698 | 709 |
699 mock_storage()->SimulateFindSubResource( | 710 mock_storage()->SimulateFindSubResource( |
700 AppCacheEntry(), AppCacheEntry(), true); | 711 AppCacheEntry(), AppCacheEntry(), true); |
701 | 712 |
702 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 713 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
703 net::DEFAULT_PRIORITY, &delegate_); | 714 net::DEFAULT_PRIORITY, &delegate_); |
704 handler_ = host_->CreateRequestHandler(request_.get(), | 715 handler_ = |
705 RESOURCE_TYPE_SUB_RESOURCE, false); | 716 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 717 RESOURCE_TYPE_SUB_RESOURCE, false); |
706 EXPECT_TRUE(handler_.get()); | 718 EXPECT_TRUE(handler_.get()); |
707 job_.reset(handler_->MaybeLoadResource( | 719 job_.reset( |
708 request_.get(), request_->context()->network_delegate())); | 720 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
709 EXPECT_FALSE(job_.get()); | 721 EXPECT_FALSE(job_.get()); |
710 | 722 |
711 std::unique_ptr<AppCacheURLRequestJob> fallback_job( | 723 std::unique_ptr<AppCacheURLRequestJob> fallback_job( |
712 handler_->MaybeLoadFallbackForRedirect( | 724 handler_->MaybeLoadFallbackForRedirect( |
713 request_.get(), request_->context()->network_delegate(), | 725 request_->context()->network_delegate(), |
714 GURL("http://blah/redirect"))); | 726 GURL("http://blah/redirect"))); |
715 EXPECT_FALSE(fallback_job); | 727 EXPECT_FALSE(fallback_job); |
716 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( | 728 fallback_job.reset(handler_->MaybeLoadFallbackForResponse( |
717 request_.get(), request_->context()->network_delegate())); | 729 request_->context()->network_delegate())); |
718 EXPECT_FALSE(fallback_job); | 730 EXPECT_FALSE(fallback_job); |
719 | 731 |
720 TestFinished(); | 732 TestFinished(); |
721 } | 733 } |
722 | 734 |
723 // DestroyedHost ----------------------------- | 735 // DestroyedHost ----------------------------- |
724 | 736 |
725 void DestroyedHost() { | 737 void DestroyedHost() { |
726 host_->AssociateCompleteCache(MakeNewCache()); | 738 host_->AssociateCompleteCache(MakeNewCache()); |
727 | 739 |
728 mock_storage()->SimulateFindSubResource( | 740 mock_storage()->SimulateFindSubResource( |
729 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); | 741 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); |
730 | 742 |
731 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 743 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
732 net::DEFAULT_PRIORITY, &delegate_); | 744 net::DEFAULT_PRIORITY, &delegate_); |
733 handler_ = host_->CreateRequestHandler(request_.get(), | 745 handler_ = |
734 RESOURCE_TYPE_SUB_RESOURCE, false); | 746 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 747 RESOURCE_TYPE_SUB_RESOURCE, false); |
735 EXPECT_TRUE(handler_.get()); | 748 EXPECT_TRUE(handler_.get()); |
736 | 749 |
737 backend_impl_->UnregisterHost(1); | 750 backend_impl_->UnregisterHost(1); |
738 host_ = NULL; | 751 host_ = NULL; |
739 | 752 |
740 EXPECT_FALSE(handler_->MaybeLoadResource( | 753 EXPECT_FALSE( |
741 request_.get(), request_->context()->network_delegate())); | 754 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
742 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( | 755 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( |
743 request_.get(), | |
744 request_->context()->network_delegate(), | 756 request_->context()->network_delegate(), |
745 GURL("http://blah/redirect"))); | 757 GURL("http://blah/redirect"))); |
746 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 758 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( |
747 request_.get(), request_->context()->network_delegate())); | 759 request_->context()->network_delegate())); |
748 | 760 |
749 TestFinished(); | 761 TestFinished(); |
750 } | 762 } |
751 | 763 |
752 // DestroyedHostWithWaitingJob ----------------------------- | 764 // DestroyedHostWithWaitingJob ----------------------------- |
753 | 765 |
754 void DestroyedHostWithWaitingJob() { | 766 void DestroyedHostWithWaitingJob() { |
755 // Precondition, the host is waiting on cache selection. | 767 // Precondition, the host is waiting on cache selection. |
756 host_->pending_selected_cache_id_ = 1; | 768 host_->pending_selected_cache_id_ = 1; |
757 | 769 |
758 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 770 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
759 net::DEFAULT_PRIORITY, &delegate_); | 771 net::DEFAULT_PRIORITY, &delegate_); |
760 handler_ = host_->CreateRequestHandler(request_.get(), | 772 handler_ = |
761 RESOURCE_TYPE_SUB_RESOURCE, false); | 773 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 774 RESOURCE_TYPE_SUB_RESOURCE, false); |
762 EXPECT_TRUE(handler_.get()); | 775 EXPECT_TRUE(handler_.get()); |
763 | 776 |
764 job_.reset(handler_->MaybeLoadResource( | 777 job_.reset( |
765 request_.get(), request_->context()->network_delegate())); | 778 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
766 EXPECT_TRUE(job_.get()); | 779 EXPECT_TRUE(job_.get()); |
767 EXPECT_TRUE(job_->is_waiting()); | 780 EXPECT_TRUE(job_->is_waiting()); |
768 | 781 |
769 backend_impl_->UnregisterHost(1); | 782 backend_impl_->UnregisterHost(1); |
770 host_ = NULL; | 783 host_ = NULL; |
771 EXPECT_TRUE(job_->has_been_killed()); | 784 EXPECT_TRUE(job_->has_been_killed()); |
772 | 785 |
773 EXPECT_FALSE(handler_->MaybeLoadResource( | 786 EXPECT_FALSE( |
774 request_.get(), request_->context()->network_delegate())); | 787 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
775 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( | 788 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( |
776 request_.get(), | |
777 request_->context()->network_delegate(), | 789 request_->context()->network_delegate(), |
778 GURL("http://blah/redirect"))); | 790 GURL("http://blah/redirect"))); |
779 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 791 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( |
780 request_.get(), request_->context()->network_delegate())); | 792 request_->context()->network_delegate())); |
781 | 793 |
782 TestFinished(); | 794 TestFinished(); |
783 } | 795 } |
784 | 796 |
785 // DestroyedService ----------------------------- | 797 // DestroyedService ----------------------------- |
786 | 798 |
787 void DestroyedService() { | 799 void DestroyedService() { |
788 host_->AssociateCompleteCache(MakeNewCache()); | 800 host_->AssociateCompleteCache(MakeNewCache()); |
789 | 801 |
790 mock_storage()->SimulateFindSubResource( | 802 mock_storage()->SimulateFindSubResource( |
791 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); | 803 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); |
792 | 804 |
793 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 805 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
794 net::DEFAULT_PRIORITY, &delegate_); | 806 net::DEFAULT_PRIORITY, &delegate_); |
795 handler_ = host_->CreateRequestHandler(request_.get(), | 807 handler_ = |
796 RESOURCE_TYPE_SUB_RESOURCE, false); | 808 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 809 RESOURCE_TYPE_SUB_RESOURCE, false); |
797 EXPECT_TRUE(handler_.get()); | 810 EXPECT_TRUE(handler_.get()); |
798 job_.reset(handler_->MaybeLoadResource( | 811 job_.reset( |
799 request_.get(), request_->context()->network_delegate())); | 812 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
800 EXPECT_TRUE(job_.get()); | 813 EXPECT_TRUE(job_.get()); |
801 | 814 |
802 backend_impl_.reset(); | 815 backend_impl_.reset(); |
803 mock_frontend_.reset(); | 816 mock_frontend_.reset(); |
804 mock_service_.reset(); | 817 mock_service_.reset(); |
805 mock_policy_.reset(); | 818 mock_policy_.reset(); |
806 host_ = NULL; | 819 host_ = NULL; |
807 | 820 |
808 EXPECT_TRUE(job_->has_been_killed()); | 821 EXPECT_TRUE(job_->has_been_killed()); |
809 EXPECT_FALSE(handler_->MaybeLoadResource( | 822 EXPECT_FALSE( |
810 request_.get(), request_->context()->network_delegate())); | 823 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
811 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( | 824 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( |
812 request_.get(), | |
813 request_->context()->network_delegate(), | 825 request_->context()->network_delegate(), |
814 GURL("http://blah/redirect"))); | 826 GURL("http://blah/redirect"))); |
815 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 827 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( |
816 request_.get(), request_->context()->network_delegate())); | 828 request_->context()->network_delegate())); |
817 | 829 |
818 TestFinished(); | 830 TestFinished(); |
819 } | 831 } |
820 | 832 |
821 void DestroyedServiceWithCrossSiteNav() { | 833 void DestroyedServiceWithCrossSiteNav() { |
822 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 834 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
823 net::DEFAULT_PRIORITY, &delegate_); | 835 net::DEFAULT_PRIORITY, &delegate_); |
824 handler_ = host_->CreateRequestHandler(request_.get(), | 836 handler_ = |
825 RESOURCE_TYPE_MAIN_FRAME, false); | 837 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 838 RESOURCE_TYPE_MAIN_FRAME, false); |
826 EXPECT_TRUE(handler_.get()); | 839 EXPECT_TRUE(handler_.get()); |
827 handler_->PrepareForCrossSiteTransfer(backend_impl_->process_id()); | 840 handler_->PrepareForCrossSiteTransfer(backend_impl_->process_id()); |
828 EXPECT_TRUE(handler_->host_for_cross_site_transfer_.get()); | 841 EXPECT_TRUE(handler_->host_for_cross_site_transfer_.get()); |
829 | 842 |
830 backend_impl_.reset(); | 843 backend_impl_.reset(); |
831 mock_frontend_.reset(); | 844 mock_frontend_.reset(); |
832 mock_service_.reset(); | 845 mock_service_.reset(); |
833 mock_policy_.reset(); | 846 mock_policy_.reset(); |
834 host_ = NULL; | 847 host_ = NULL; |
835 | 848 |
836 EXPECT_FALSE(handler_->host_for_cross_site_transfer_.get()); | 849 EXPECT_FALSE(handler_->host_for_cross_site_transfer_.get()); |
837 EXPECT_FALSE(handler_->MaybeLoadResource( | 850 EXPECT_FALSE( |
838 request_.get(), request_->context()->network_delegate())); | 851 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
839 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( | 852 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( |
840 request_.get(), | |
841 request_->context()->network_delegate(), | 853 request_->context()->network_delegate(), |
842 GURL("http://blah/redirect"))); | 854 GURL("http://blah/redirect"))); |
843 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 855 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( |
844 request_.get(), request_->context()->network_delegate())); | 856 request_->context()->network_delegate())); |
845 | 857 |
846 TestFinished(); | 858 TestFinished(); |
847 } | 859 } |
848 | 860 |
849 // UnsupportedScheme ----------------------------- | 861 // UnsupportedScheme ----------------------------- |
850 | 862 |
851 void UnsupportedScheme() { | 863 void UnsupportedScheme() { |
852 // Precondition, the host is waiting on cache selection. | 864 // Precondition, the host is waiting on cache selection. |
853 host_->pending_selected_cache_id_ = 1; | 865 host_->pending_selected_cache_id_ = 1; |
854 | 866 |
855 request_ = empty_context_->CreateRequest(GURL("ftp://blah/"), | 867 request_ = empty_context_->CreateRequest(GURL("ftp://blah/"), |
856 net::DEFAULT_PRIORITY, &delegate_); | 868 net::DEFAULT_PRIORITY, &delegate_); |
857 handler_ = host_->CreateRequestHandler(request_.get(), | 869 handler_ = |
858 RESOURCE_TYPE_SUB_RESOURCE, false); | 870 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 871 RESOURCE_TYPE_SUB_RESOURCE, false); |
859 EXPECT_TRUE(handler_.get()); // we could redirect to http (conceivably) | 872 EXPECT_TRUE(handler_.get()); // we could redirect to http (conceivably) |
860 | 873 |
861 EXPECT_FALSE(handler_->MaybeLoadResource( | 874 EXPECT_FALSE( |
862 request_.get(), request_->context()->network_delegate())); | 875 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
863 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( | 876 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( |
864 request_.get(), | |
865 request_->context()->network_delegate(), | 877 request_->context()->network_delegate(), |
866 GURL("ftp://blah/redirect"))); | 878 GURL("ftp://blah/redirect"))); |
867 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 879 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( |
868 request_.get(), request_->context()->network_delegate())); | 880 request_->context()->network_delegate())); |
869 | 881 |
870 TestFinished(); | 882 TestFinished(); |
871 } | 883 } |
872 | 884 |
873 // CanceledRequest ----------------------------- | 885 // CanceledRequest ----------------------------- |
874 | 886 |
875 void CanceledRequest() { | 887 void CanceledRequest() { |
876 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 888 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
877 net::DEFAULT_PRIORITY, &delegate_); | 889 net::DEFAULT_PRIORITY, &delegate_); |
878 handler_ = host_->CreateRequestHandler(request_.get(), | 890 handler_ = |
879 RESOURCE_TYPE_MAIN_FRAME, false); | 891 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 892 RESOURCE_TYPE_MAIN_FRAME, false); |
880 EXPECT_TRUE(handler_.get()); | 893 EXPECT_TRUE(handler_.get()); |
881 | 894 |
882 job_.reset(handler_->MaybeLoadResource( | 895 job_.reset( |
883 request_.get(), request_->context()->network_delegate())); | 896 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
884 EXPECT_TRUE(job_.get()); | 897 EXPECT_TRUE(job_.get()); |
885 EXPECT_TRUE(job_->is_waiting()); | 898 EXPECT_TRUE(job_->is_waiting()); |
886 EXPECT_FALSE(job_->has_been_started()); | 899 EXPECT_FALSE(job_->has_been_started()); |
887 | 900 |
888 base::WeakPtr<AppCacheURLRequestJob> weak_job = job_->GetWeakPtr(); | 901 base::WeakPtr<AppCacheURLRequestJob> weak_job = job_->GetWeakPtr(); |
889 | 902 |
890 job_factory_->SetJob(std::move(job_)); | 903 job_factory_->SetJob(std::move(job_)); |
891 request_->Start(); | 904 request_->Start(); |
892 ASSERT_TRUE(weak_job); | 905 ASSERT_TRUE(weak_job); |
893 EXPECT_TRUE(weak_job->has_been_started()); | 906 EXPECT_TRUE(weak_job->has_been_started()); |
894 | 907 |
895 request_->Cancel(); | 908 request_->Cancel(); |
896 ASSERT_FALSE(weak_job); | 909 ASSERT_FALSE(weak_job); |
897 | 910 |
898 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 911 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( |
899 request_.get(), request_->context()->network_delegate())); | 912 request_->context()->network_delegate())); |
900 | 913 |
901 TestFinished(); | 914 TestFinished(); |
902 } | 915 } |
903 | 916 |
904 // WorkerRequest ----------------------------- | 917 // WorkerRequest ----------------------------- |
905 | 918 |
906 void WorkerRequest() { | 919 void WorkerRequest() { |
907 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( | 920 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( |
908 RESOURCE_TYPE_MAIN_FRAME)); | 921 RESOURCE_TYPE_MAIN_FRAME)); |
909 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( | 922 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( |
910 RESOURCE_TYPE_SUB_FRAME)); | 923 RESOURCE_TYPE_SUB_FRAME)); |
911 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( | 924 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( |
912 RESOURCE_TYPE_SHARED_WORKER)); | 925 RESOURCE_TYPE_SHARED_WORKER)); |
913 EXPECT_FALSE(AppCacheRequestHandler::IsMainResourceType( | 926 EXPECT_FALSE(AppCacheRequestHandler::IsMainResourceType( |
914 RESOURCE_TYPE_WORKER)); | 927 RESOURCE_TYPE_WORKER)); |
915 | 928 |
916 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 929 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
917 net::DEFAULT_PRIORITY, &delegate_); | 930 net::DEFAULT_PRIORITY, &delegate_); |
918 | 931 |
919 const int kParentHostId = host_->host_id(); | 932 const int kParentHostId = host_->host_id(); |
920 const int kWorkerHostId = 2; | 933 const int kWorkerHostId = 2; |
921 const int kAbandonedWorkerHostId = 3; | 934 const int kAbandonedWorkerHostId = 3; |
922 const int kNonExsitingHostId = 700; | 935 const int kNonExsitingHostId = 700; |
923 | 936 |
924 backend_impl_->RegisterHost(kWorkerHostId); | 937 backend_impl_->RegisterHost(kWorkerHostId); |
925 AppCacheHost* worker_host = backend_impl_->GetHost(kWorkerHostId); | 938 AppCacheHost* worker_host = backend_impl_->GetHost(kWorkerHostId); |
926 worker_host->SelectCacheForWorker(kParentHostId, kMockProcessId); | 939 worker_host->SelectCacheForWorker(kParentHostId, kMockProcessId); |
927 handler_ = worker_host->CreateRequestHandler( | 940 handler_ = worker_host->CreateRequestHandler( |
928 request_.get(), RESOURCE_TYPE_SHARED_WORKER, false); | 941 AppCacheURLRequest::Create(request_.get()), RESOURCE_TYPE_SHARED_WORKER, |
| 942 false); |
929 EXPECT_TRUE(handler_.get()); | 943 EXPECT_TRUE(handler_.get()); |
930 // Verify that the handler is associated with the parent host. | 944 // Verify that the handler is associated with the parent host. |
931 EXPECT_EQ(host_, handler_->host_); | 945 EXPECT_EQ(host_, handler_->host_); |
932 | 946 |
933 // Create a new worker host, but associate it with a parent host that | 947 // Create a new worker host, but associate it with a parent host that |
934 // does not exists to simulate the host having been torn down. | 948 // does not exists to simulate the host having been torn down. |
935 backend_impl_->UnregisterHost(kWorkerHostId); | 949 backend_impl_->UnregisterHost(kWorkerHostId); |
936 backend_impl_->RegisterHost(kAbandonedWorkerHostId); | 950 backend_impl_->RegisterHost(kAbandonedWorkerHostId); |
937 worker_host = backend_impl_->GetHost(kAbandonedWorkerHostId); | 951 worker_host = backend_impl_->GetHost(kAbandonedWorkerHostId); |
938 EXPECT_EQ(NULL, backend_impl_->GetHost(kNonExsitingHostId)); | 952 EXPECT_EQ(NULL, backend_impl_->GetHost(kNonExsitingHostId)); |
939 worker_host->SelectCacheForWorker(kNonExsitingHostId, kMockProcessId); | 953 worker_host->SelectCacheForWorker(kNonExsitingHostId, kMockProcessId); |
940 handler_ = worker_host->CreateRequestHandler( | 954 handler_ = worker_host->CreateRequestHandler( |
941 request_.get(), RESOURCE_TYPE_SHARED_WORKER, false); | 955 AppCacheURLRequest::Create(request_.get()), RESOURCE_TYPE_SHARED_WORKER, |
| 956 false); |
942 EXPECT_FALSE(handler_.get()); | 957 EXPECT_FALSE(handler_.get()); |
943 | 958 |
944 TestFinished(); | 959 TestFinished(); |
945 } | 960 } |
946 | 961 |
947 // MainResource_Blocked -------------------------------------------------- | 962 // MainResource_Blocked -------------------------------------------------- |
948 | 963 |
949 void MainResource_Blocked() { | 964 void MainResource_Blocked() { |
950 PushNextTask( | 965 PushNextTask( |
951 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Blocked, | 966 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Blocked, |
952 base::Unretained(this))); | 967 base::Unretained(this))); |
953 | 968 |
954 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 969 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
955 net::DEFAULT_PRIORITY, &delegate_); | 970 net::DEFAULT_PRIORITY, &delegate_); |
956 handler_ = host_->CreateRequestHandler(request_.get(), | 971 handler_ = |
957 RESOURCE_TYPE_MAIN_FRAME, false); | 972 host_->CreateRequestHandler(AppCacheURLRequest::Create(request_.get()), |
| 973 RESOURCE_TYPE_MAIN_FRAME, false); |
958 EXPECT_TRUE(handler_.get()); | 974 EXPECT_TRUE(handler_.get()); |
959 | 975 |
960 mock_policy_->can_load_return_value_ = false; | 976 mock_policy_->can_load_return_value_ = false; |
961 mock_storage()->SimulateFindMainResource( | 977 mock_storage()->SimulateFindMainResource( |
962 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 978 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
963 GURL(), AppCacheEntry(), | 979 GURL(), AppCacheEntry(), |
964 1, 2, GURL("http://blah/manifest/")); | 980 1, 2, GURL("http://blah/manifest/")); |
965 | 981 |
966 job_.reset(handler_->MaybeLoadResource( | 982 job_.reset( |
967 request_.get(), request_->context()->network_delegate())); | 983 handler_->MaybeLoadResource(request_->context()->network_delegate())); |
968 EXPECT_TRUE(job_.get()); | 984 EXPECT_TRUE(job_.get()); |
969 EXPECT_TRUE(job_->is_waiting()); | 985 EXPECT_TRUE(job_->is_waiting()); |
970 | 986 |
971 // We have to wait for completion of storage->FindResponseForMainRequest. | 987 // We have to wait for completion of storage->FindResponseForMainRequest. |
972 ScheduleNextTask(); | 988 ScheduleNextTask(); |
973 } | 989 } |
974 | 990 |
975 void Verify_MainResource_Blocked() { | 991 void Verify_MainResource_Blocked() { |
976 EXPECT_FALSE(job_->is_waiting()); | 992 EXPECT_FALSE(job_->is_waiting()); |
977 EXPECT_FALSE(job_->is_delivering_appcache_response()); | 993 EXPECT_FALSE(job_->is_delivering_appcache_response()); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1102 | 1118 |
1103 TEST_F(AppCacheRequestHandlerTest, WorkerRequest) { | 1119 TEST_F(AppCacheRequestHandlerTest, WorkerRequest) { |
1104 RunTestOnIOThread(&AppCacheRequestHandlerTest::WorkerRequest); | 1120 RunTestOnIOThread(&AppCacheRequestHandlerTest::WorkerRequest); |
1105 } | 1121 } |
1106 | 1122 |
1107 TEST_F(AppCacheRequestHandlerTest, MainResource_Blocked) { | 1123 TEST_F(AppCacheRequestHandlerTest, MainResource_Blocked) { |
1108 RunTestOnIOThread(&AppCacheRequestHandlerTest::MainResource_Blocked); | 1124 RunTestOnIOThread(&AppCacheRequestHandlerTest::MainResource_Blocked); |
1109 } | 1125 } |
1110 | 1126 |
1111 } // namespace content | 1127 } // namespace content |
OLD | NEW |