Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(405)

Side by Side Diff: content/browser/loader/resource_scheduler_unittest.cc

Issue 11270027: Add a ResourceScheduler to ResourceDispatcherHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix typo Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/browser/loader/resource_scheduler.h"
6
7 #include "base/message_loop.h"
8 #include "content/browser/loader/resource_handler.h"
9 #include "content/browser/loader/resource_loader.h"
10 #include "content/browser/loader/resource_loader_delegate.h"
11 #include "content/browser/loader/resource_request_info_impl.h"
12 #include "content/public/browser/global_request_id.h"
13 #include "net/url_request/url_request.h"
14 #include "net/url_request/url_request_test_util.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace content {
18
19 namespace {
20
21 class TestRequestFactory;
22
23 const int kChildId = 30;
24 const int kRouteId = 75;
25
26 class TestRequest : public ResourceScheduler::Loadable {
27 public:
28 TestRequest(scoped_ptr<net::URLRequest> url_request)
29 : started_(false),
30 url_request_(url_request.Pass()) {}
31
32 bool started() const { return started_; }
33
34 private:
35 virtual void StartRequest() OVERRIDE { started_ = true; }
36 virtual net::URLRequest* url_request() OVERRIDE { return url_request_.get(); }
37
38 bool started_;
39 scoped_ptr<net::URLRequest> url_request_;
40 };
41
42 class ResourceSchedulerTest : public testing::Test {
43 protected:
44 ResourceSchedulerTest()
45 : message_loop_(MessageLoop::TYPE_IO) {
46 scheduler_.OnCreate(kChildId, kRouteId);
47 }
48
49 virtual ~ResourceSchedulerTest() {
50 scheduler_.OnDestroy(kChildId, kRouteId);
51 }
52
53 TestRequest* NewRequest(const char* url, net::RequestPriority priority) {
54 scoped_ptr<net::URLRequest> url_request(
55 context_.CreateRequest(GURL(url), NULL));
56 url_request->set_priority(priority);
57 return new TestRequest(url_request.Pass());
58 }
59
60 MessageLoop message_loop_;
61 ResourceScheduler scheduler_;
62 net::TestURLRequestContext context_;
63 };
64
65 TEST_F(ResourceSchedulerTest, OneIsolatedLowRequest) {
66 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOW));
67 scoped_ptr<ResourceScheduler::LoadHandle> handle(scheduler_.ScheduleLoad(
68 kChildId, kRouteId, request.get()));
69 EXPECT_TRUE(request->started());
70 }
71
72 TEST_F(ResourceSchedulerTest, LowBlocksUntilIdle) {
73 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
74 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOW));
75 scoped_ptr<ResourceScheduler::LoadHandle> high_handle(scheduler_.ScheduleLoad(
76 kChildId, kRouteId, high.get()));
77 scoped_ptr<ResourceScheduler::LoadHandle> low_handle(scheduler_.ScheduleLoad(
78 kChildId, kRouteId, low.get()));
79 EXPECT_TRUE(high->started());
80 EXPECT_FALSE(low->started());
81 high_handle.reset();
82 EXPECT_TRUE(low->started());
83 }
84
85 TEST_F(ResourceSchedulerTest, LowBlocksUntilPaint) {
86 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
87 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOW));
88 scoped_ptr<ResourceScheduler::LoadHandle> high_handle(scheduler_.ScheduleLoad(
89 kChildId, kRouteId, high.get()));
90 scoped_ptr<ResourceScheduler::LoadHandle> low_handle(scheduler_.ScheduleLoad(
91 kChildId, kRouteId, low.get()));
92 EXPECT_TRUE(high->started());
93 EXPECT_FALSE(low->started());
94 scheduler_.OnPaint(kChildId, kRouteId);
95 EXPECT_TRUE(low->started());
96 }
97
98 TEST_F(ResourceSchedulerTest, NavigationResetsPaintState) {
99 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
100 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOW));
101 scheduler_.OnPaint(kChildId, kRouteId);
102 scheduler_.OnNavigate(kChildId, kRouteId);
103 scoped_ptr<ResourceScheduler::LoadHandle> high_handle(scheduler_.ScheduleLoad(
104 kChildId, kRouteId, high.get()));
105 scoped_ptr<ResourceScheduler::LoadHandle> low_handle(scheduler_.ScheduleLoad(
106 kChildId, kRouteId, low.get()));
107 EXPECT_TRUE(high->started());
108 EXPECT_FALSE(low->started());
109 }
110
111 TEST_F(ResourceSchedulerTest, BackgroundRequestStartsImmediately) {
112 const int route_id = 0; // Indicates a background request.
113 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOW));
114 scoped_ptr<ResourceScheduler::LoadHandle> handle(scheduler_.ScheduleLoad(
115 kChildId, route_id, request.get()));
116 EXPECT_TRUE(request->started());
117 }
118
119 TEST_F(ResourceSchedulerTest, DestroyTabBeforeCancelingLoad) {
120 const int new_route_id = kRouteId +1;
121 scheduler_.OnCreate(kChildId, new_route_id);
122 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOW));
123 scoped_ptr<ResourceScheduler::LoadHandle> handle(scheduler_.ScheduleLoad(
124 kChildId, new_route_id, request.get()));
125 scheduler_.OnDestroy(kChildId, new_route_id);
126 // Note that new_route_id is destroyed before handle goes out of scope.
127 }
128
129 } // unnamed namespace
130
131 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698