| 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 |