| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/loader/resource_scheduler.h" | 5 #include "content/browser/loader/resource_scheduler.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_vector.h" | 7 #include "base/memory/scoped_vector.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/timer/mock_timer.h" | 10 #include "base/timer/mock_timer.h" |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 EXPECT_TRUE(low2->started()); | 297 EXPECT_TRUE(low2->started()); |
| 298 } | 298 } |
| 299 | 299 |
| 300 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInserted) { | 300 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInserted) { |
| 301 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 301 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 302 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); | 302 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 303 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); | 303 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 304 EXPECT_TRUE(high->started()); | 304 EXPECT_TRUE(high->started()); |
| 305 EXPECT_TRUE(low->started()); | 305 EXPECT_TRUE(low->started()); |
| 306 EXPECT_FALSE(low2->started()); | 306 EXPECT_FALSE(low2->started()); |
| 307 high.reset(); |
| 308 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 309 EXPECT_TRUE(low2->started()); |
| 310 } |
| 311 |
| 312 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilCriticalComplete) { |
| 313 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 314 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 315 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 316 EXPECT_TRUE(high->started()); |
| 317 EXPECT_TRUE(low->started()); |
| 318 EXPECT_FALSE(low2->started()); |
| 307 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 319 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 320 EXPECT_FALSE(low2->started()); |
| 321 high.reset(); |
| 308 EXPECT_TRUE(low2->started()); | 322 EXPECT_TRUE(low2->started()); |
| 309 } | 323 } |
| 310 | 324 |
| 311 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInsertedExceptSpdy) { | 325 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInsertedExceptSpdy) { |
| 312 http_server_properties_.SetSupportsSpdy( | 326 http_server_properties_.SetSupportsSpdy( |
| 313 net::HostPortPair("spdyhost", 443), true); | 327 net::HostPortPair("spdyhost", 443), true); |
| 314 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 328 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 315 scoped_ptr<TestRequest> low_spdy( | 329 scoped_ptr<TestRequest> low_spdy( |
| 316 NewRequest("https://spdyhost/low", net::LOWEST)); | 330 NewRequest("https://spdyhost/low", net::LOWEST)); |
| 317 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); | 331 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 318 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); | 332 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 319 EXPECT_TRUE(high->started()); | 333 EXPECT_TRUE(high->started()); |
| 320 EXPECT_TRUE(low_spdy->started()); | 334 EXPECT_TRUE(low_spdy->started()); |
| 321 EXPECT_TRUE(low->started()); | 335 EXPECT_TRUE(low->started()); |
| 322 EXPECT_FALSE(low2->started()); | 336 EXPECT_FALSE(low2->started()); |
| 323 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 337 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 338 high.reset(); |
| 324 EXPECT_TRUE(low2->started()); | 339 EXPECT_TRUE(low2->started()); |
| 325 } | 340 } |
| 326 | 341 |
| 327 TEST_F(ResourceSchedulerTest, NavigationResetsState) { | 342 TEST_F(ResourceSchedulerTest, NavigationResetsState) { |
| 328 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 343 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 329 scheduler_.OnNavigate(kChildId, kRouteId); | 344 scheduler_.OnNavigate(kChildId, kRouteId); |
| 330 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 345 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 331 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); | 346 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 332 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); | 347 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 333 EXPECT_TRUE(high->started()); | 348 EXPECT_TRUE(high->started()); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 EXPECT_FALSE(idle->started()); | 469 EXPECT_FALSE(idle->started()); |
| 455 | 470 |
| 456 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. | 471 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. |
| 457 ScopedVector<TestRequest> lows; | 472 ScopedVector<TestRequest> lows; |
| 458 for (int i = 0; i < kMaxNumDelayableRequestsPerClient - 1; ++i) { | 473 for (int i = 0; i < kMaxNumDelayableRequestsPerClient - 1; ++i) { |
| 459 string url = "http://host/low" + base::IntToString(i); | 474 string url = "http://host/low" + base::IntToString(i); |
| 460 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); | 475 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); |
| 461 } | 476 } |
| 462 | 477 |
| 463 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 478 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 479 high.reset(); |
| 480 |
| 464 EXPECT_TRUE(request->started()); | 481 EXPECT_TRUE(request->started()); |
| 465 EXPECT_FALSE(idle->started()); | 482 EXPECT_FALSE(idle->started()); |
| 466 } | 483 } |
| 467 | 484 |
| 468 TEST_F(ResourceSchedulerTest, LowerPriority) { | 485 TEST_F(ResourceSchedulerTest, LowerPriority) { |
| 469 // Dummies to enforce scheduling. | 486 // Dummies to enforce scheduling. |
| 470 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 487 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 471 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); | 488 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 472 | 489 |
| 473 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); | 490 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); |
| 474 scoped_ptr<TestRequest> idle(NewRequest("http://host/idle", net::IDLE)); | 491 scoped_ptr<TestRequest> idle(NewRequest("http://host/idle", net::IDLE)); |
| 475 EXPECT_FALSE(request->started()); | 492 EXPECT_FALSE(request->started()); |
| 476 EXPECT_FALSE(idle->started()); | 493 EXPECT_FALSE(idle->started()); |
| 477 | 494 |
| 478 ChangeRequestPriority(request.get(), net::IDLE); | 495 ChangeRequestPriority(request.get(), net::IDLE); |
| 479 EXPECT_FALSE(request->started()); | 496 EXPECT_FALSE(request->started()); |
| 480 EXPECT_FALSE(idle->started()); | 497 EXPECT_FALSE(idle->started()); |
| 481 | 498 |
| 482 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. | 499 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. |
| 483 // 2 fewer filler requests: 1 for the "low" dummy at the start, and 1 for the | 500 // 2 fewer filler requests: 1 for the "low" dummy at the start, and 1 for the |
| 484 // one at the end, which will be tested. | 501 // one at the end, which will be tested. |
| 485 const int kNumFillerRequests = kMaxNumDelayableRequestsPerClient - 2; | 502 const int kNumFillerRequests = kMaxNumDelayableRequestsPerClient - 2; |
| 486 ScopedVector<TestRequest> lows; | 503 ScopedVector<TestRequest> lows; |
| 487 for (int i = 0; i < kNumFillerRequests; ++i) { | 504 for (int i = 0; i < kNumFillerRequests; ++i) { |
| 488 string url = "http://host" + base::IntToString(i) + "/low"; | 505 string url = "http://host" + base::IntToString(i) + "/low"; |
| 489 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); | 506 lows.push_back(NewRequest(url.c_str(), net::LOWEST)); |
| 490 } | 507 } |
| 491 | 508 |
| 492 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 509 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 510 high.reset(); |
| 511 |
| 493 EXPECT_FALSE(request->started()); | 512 EXPECT_FALSE(request->started()); |
| 494 EXPECT_TRUE(idle->started()); | 513 EXPECT_TRUE(idle->started()); |
| 495 } | 514 } |
| 496 | 515 |
| 497 TEST_F(ResourceSchedulerTest, ReprioritizedRequestGoesToBackOfQueue) { | 516 TEST_F(ResourceSchedulerTest, ReprioritizedRequestGoesToBackOfQueue) { |
| 498 // Dummies to enforce scheduling. | 517 // Dummies to enforce scheduling. |
| 499 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 518 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 500 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); | 519 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 501 | 520 |
| 502 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); | 521 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::LOWEST)); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 lows.push_back(NewRequest(url.c_str(), net::IDLE)); | 555 lows.push_back(NewRequest(url.c_str(), net::IDLE)); |
| 537 } | 556 } |
| 538 | 557 |
| 539 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::IDLE)); | 558 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::IDLE)); |
| 540 EXPECT_FALSE(request->started()); | 559 EXPECT_FALSE(request->started()); |
| 541 | 560 |
| 542 ChangeRequestPriority(request.get(), net::IDLE, 1); | 561 ChangeRequestPriority(request.get(), net::IDLE, 1); |
| 543 EXPECT_FALSE(request->started()); | 562 EXPECT_FALSE(request->started()); |
| 544 | 563 |
| 545 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 564 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
| 565 high.reset(); |
| 546 EXPECT_TRUE(request->started()); | 566 EXPECT_TRUE(request->started()); |
| 547 } | 567 } |
| 548 | 568 |
| 549 TEST_F(ResourceSchedulerTest, NonHTTPSchedulesImmediately) { | 569 TEST_F(ResourceSchedulerTest, NonHTTPSchedulesImmediately) { |
| 550 // Dummies to enforce scheduling. | 570 // Dummies to enforce scheduling. |
| 551 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 571 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 552 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); | 572 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| 553 | 573 |
| 554 scoped_ptr<TestRequest> request( | 574 scoped_ptr<TestRequest> request( |
| 555 NewRequest("chrome-extension://req", net::LOWEST)); | 575 NewRequest("chrome-extension://req", net::LOWEST)); |
| (...skipping 1537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2093 FireCoalescingTimer(); | 2113 FireCoalescingTimer(); |
| 2094 | 2114 |
| 2095 EXPECT_TRUE(high->started()); | 2115 EXPECT_TRUE(high->started()); |
| 2096 EXPECT_TRUE(high2->started()); | 2116 EXPECT_TRUE(high2->started()); |
| 2097 EXPECT_TRUE(low->started()); | 2117 EXPECT_TRUE(low->started()); |
| 2098 } | 2118 } |
| 2099 | 2119 |
| 2100 } // unnamed namespace | 2120 } // unnamed namespace |
| 2101 | 2121 |
| 2102 } // namespace content | 2122 } // namespace content |
| OLD | NEW |