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 "content/browser/browser_thread_impl.h" | 10 #include "content/browser/browser_thread_impl.h" |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 TestRequest* request = new TestRequest(throttle.Pass(), url_request.Pass()); | 182 TestRequest* request = new TestRequest(throttle.Pass(), url_request.Pass()); |
183 request->Start(); | 183 request->Start(); |
184 return request; | 184 return request; |
185 } | 185 } |
186 | 186 |
187 TestRequest* NewRequest(const char* url, net::RequestPriority priority) { | 187 TestRequest* NewRequest(const char* url, net::RequestPriority priority) { |
188 return NewRequestWithRoute(url, priority, kRouteId); | 188 return NewRequestWithRoute(url, priority, kRouteId); |
189 } | 189 } |
190 | 190 |
191 void ChangeRequestPriority(TestRequest* request, | 191 void ChangeRequestPriority(TestRequest* request, |
192 net::RequestPriority new_priority, | 192 net::RequestPriority new_priority) { |
193 int intra_priority = 0) { | |
194 scoped_refptr<FakeResourceMessageFilter> filter( | 193 scoped_refptr<FakeResourceMessageFilter> filter( |
195 new FakeResourceMessageFilter(kChildId)); | 194 new FakeResourceMessageFilter(kChildId)); |
196 const ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( | 195 const ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( |
197 request->url_request()); | 196 request->url_request()); |
198 const GlobalRequestID& id = info->GetGlobalRequestID(); | 197 const GlobalRequestID& id = info->GetGlobalRequestID(); |
199 ResourceHostMsg_DidChangePriority msg(id.request_id, new_priority, | 198 ResourceHostMsg_DidChangePriority msg(id.request_id, new_priority); |
200 intra_priority); | |
201 bool ok = false; | 199 bool ok = false; |
202 rdh_.OnMessageReceived(msg, filter.get(), &ok); | 200 rdh_.OnMessageReceived(msg, filter.get(), &ok); |
203 EXPECT_TRUE(ok); | 201 EXPECT_TRUE(ok); |
204 } | 202 } |
205 | 203 |
206 int next_request_id_; | 204 int next_request_id_; |
207 base::MessageLoopForIO message_loop_; | 205 base::MessageLoopForIO message_loop_; |
208 BrowserThreadImpl ui_thread_; | 206 BrowserThreadImpl ui_thread_; |
209 BrowserThreadImpl io_thread_; | 207 BrowserThreadImpl io_thread_; |
210 ResourceDispatcherHostImpl rdh_; | 208 ResourceDispatcherHostImpl rdh_; |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 | 447 |
450 ChangeRequestPriority(request.get(), net::LOWEST); | 448 ChangeRequestPriority(request.get(), net::LOWEST); |
451 EXPECT_FALSE(request->started()); | 449 EXPECT_FALSE(request->started()); |
452 EXPECT_FALSE(idle->started()); | 450 EXPECT_FALSE(idle->started()); |
453 | 451 |
454 scheduler_.OnWillInsertBody(kChildId, kRouteId); | 452 scheduler_.OnWillInsertBody(kChildId, kRouteId); |
455 EXPECT_FALSE(request->started()); | 453 EXPECT_FALSE(request->started()); |
456 EXPECT_FALSE(idle->started()); | 454 EXPECT_FALSE(idle->started()); |
457 } | 455 } |
458 | 456 |
459 TEST_F(ResourceSchedulerTest, HigherIntraPriorityGoesToFrontOfQueue) { | |
460 // Dummies to enforce scheduling. | |
461 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | |
462 scoped_ptr<TestRequest> low(NewRequest("http://host/high", net::LOWEST)); | |
463 | |
464 const int kMaxNumDelayableRequestsPerClient = 10; // Should match the .cc. | |
465 ScopedVector<TestRequest> lows; | |
466 for (int i = 0; i < kMaxNumDelayableRequestsPerClient; ++i) { | |
467 string url = "http://host/low" + base::IntToString(i); | |
468 lows.push_back(NewRequest(url.c_str(), net::IDLE)); | |
469 } | |
470 | |
471 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::IDLE)); | |
472 EXPECT_FALSE(request->started()); | |
473 | |
474 ChangeRequestPriority(request.get(), net::IDLE, 1); | |
475 EXPECT_FALSE(request->started()); | |
476 | |
477 scheduler_.OnWillInsertBody(kChildId, kRouteId); | |
478 EXPECT_TRUE(request->started()); | |
479 } | |
480 | |
481 TEST_F(ResourceSchedulerTest, NonHTTPSchedulesImmediately) { | 457 TEST_F(ResourceSchedulerTest, NonHTTPSchedulesImmediately) { |
482 // Dummies to enforce scheduling. | 458 // Dummies to enforce scheduling. |
483 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 459 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
484 scoped_ptr<TestRequest> low(NewRequest("http://host/high", net::LOWEST)); | 460 scoped_ptr<TestRequest> low(NewRequest("http://host/high", net::LOWEST)); |
485 | 461 |
486 scoped_ptr<TestRequest> request( | 462 scoped_ptr<TestRequest> request( |
487 NewRequest("chrome-extension://req", net::LOWEST)); | 463 NewRequest("chrome-extension://req", net::LOWEST)); |
488 EXPECT_TRUE(request->started()); | 464 EXPECT_TRUE(request->started()); |
489 } | 465 } |
490 | 466 |
491 TEST_F(ResourceSchedulerTest, SpdyProxySchedulesImmediately) { | 467 TEST_F(ResourceSchedulerTest, SpdyProxySchedulesImmediately) { |
492 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 468 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
493 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); | 469 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
494 | 470 |
495 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::IDLE)); | 471 scoped_ptr<TestRequest> request(NewRequest("http://host/req", net::IDLE)); |
496 EXPECT_FALSE(request->started()); | 472 EXPECT_FALSE(request->started()); |
497 | 473 |
498 scheduler_.OnReceivedSpdyProxiedHttpResponse(kChildId, kRouteId); | 474 scheduler_.OnReceivedSpdyProxiedHttpResponse(kChildId, kRouteId); |
499 EXPECT_TRUE(request->started()); | 475 EXPECT_TRUE(request->started()); |
500 | 476 |
501 scoped_ptr<TestRequest> after(NewRequest("http://host/after", net::IDLE)); | 477 scoped_ptr<TestRequest> after(NewRequest("http://host/after", net::IDLE)); |
502 EXPECT_TRUE(after->started()); | 478 EXPECT_TRUE(after->started()); |
503 } | 479 } |
504 | 480 |
505 } // unnamed namespace | 481 } // unnamed namespace |
506 | 482 |
507 } // namespace content | 483 } // namespace content |
OLD | NEW |