| Index: content/browser/loader/resource_dispatcher_host_unittest.cc
|
| diff --git a/content/browser/loader/resource_dispatcher_host_unittest.cc b/content/browser/loader/resource_dispatcher_host_unittest.cc
|
| index ef90e30b286979409944d0724153bf784152fdfc..7a09cee3700404f4dfd6140cf760d845eb1ed7e2 100644
|
| --- a/content/browser/loader/resource_dispatcher_host_unittest.cc
|
| +++ b/content/browser/loader/resource_dispatcher_host_unittest.cc
|
| @@ -946,6 +946,11 @@ class ResourceDispatcherHostTest : public testing::Test,
|
|
|
| void MakeWebContentsAssociatedTestRequest(int request_id, const GURL& url);
|
|
|
| + // Generates a request with the given priority.
|
| + void MakeTestRequestWithPriority(int render_view_id,
|
| + int request_id,
|
| + net::RequestPriority priority);
|
| +
|
| void CancelRequest(int request_id);
|
| void RendererCancelRequest(int request_id) {
|
| ResourceMessageFilter* old_filter = SetFilter(filter_.get());
|
| @@ -1072,6 +1077,17 @@ void ResourceDispatcherHostTest::MakeWebContentsAssociatedTestRequest(
|
| KickOffRequest();
|
| }
|
|
|
| +void ResourceDispatcherHostTest::MakeTestRequestWithPriority(
|
| + int render_view_id,
|
| + int request_id,
|
| + net::RequestPriority priority) {
|
| + ResourceHostMsg_Request request = CreateResourceRequest(
|
| + "GET", RESOURCE_TYPE_SUB_RESOURCE, GURL("http://example.com/priority"));
|
| + request.priority = priority;
|
| + ResourceHostMsg_RequestResource msg(render_view_id, request_id, request);
|
| + host_.OnMessageReceived(msg, filter_.get());
|
| +}
|
| +
|
| void ResourceDispatcherHostTest::CancelRequest(int request_id) {
|
| host_.CancelRequest(filter_->child_id(), request_id);
|
| }
|
| @@ -3329,6 +3345,44 @@ TEST_F(ResourceDispatcherHostTest, TransferRequestRedirected) {
|
| web_contents_observer_->resource_request_redirect_count());
|
| }
|
|
|
| +// Confirm that DidChangePriority messages are respected.
|
| +TEST_F(ResourceDispatcherHostTest, DidChangePriority) {
|
| + // ResourceScheduler only throttles http and https requests.
|
| + HandleScheme("http");
|
| +
|
| + // Needed to enable scheduling for this child.
|
| + host_.OnRenderViewHostCreated(filter_->child_id(), // child_id
|
| + 0, // route_id
|
| + true, // is_visible
|
| + false); // is_audible
|
| +
|
| + // Prevent any of these requests from completing.
|
| + job_factory_->SetDelayedCompleteJobGeneration(true);
|
| + SetResponse("HTTP/1.1 200 OK\n\n", "<title>Dummy body</title>");
|
| +
|
| + // Only one idle priority request will run while a high-priority request
|
| + // exists.
|
| + MakeTestRequestWithPriority(0, 1, net::HIGHEST);
|
| + MakeTestRequestWithPriority(0, 2, net::IDLE);
|
| + MakeTestRequestWithPriority(0, 3, net::IDLE);
|
| +
|
| + KickOffRequest();
|
| +
|
| + EXPECT_EQ(2, job_factory_->url_request_jobs_created_count());
|
| +
|
| + // Increase the priority of the second idle priority request. It was
|
| + // scheduled later, so it is not currently running.
|
| + ResourceHostMsg_DidChangePriority priority_msg(3, net::MAXIMUM_PRIORITY, 0);
|
| + host_.OnMessageReceived(priority_msg, filter_.get());
|
| + base::MessageLoop::current()->RunUntilIdle();
|
| +
|
| + EXPECT_EQ(3, job_factory_->url_request_jobs_created_count());
|
| +
|
| + // Cleanup.
|
| + host_.OnRenderViewHostDeleted(filter_->child_id(), // child_id
|
| + 0); // route_id
|
| +}
|
| +
|
| net::URLRequestJob* TestURLRequestJobFactory::MaybeCreateJobWithProtocolHandler(
|
| const std::string& scheme,
|
| net::URLRequest* request,
|
|
|