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

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: Use ResourceThrottle 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/public/browser/resource_controller.h"
9 #include "content/public/browser/resource_throttle.h"
10 #include "net/url_request/url_request.h"
11 #include "net/url_request/url_request_test_util.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace content {
15
16 namespace {
17
18 class TestRequestFactory;
19
20 const int kChildId = 30;
21 const int kRouteId = 75;
22
23 class TestRequest : public ResourceController {
24 public:
25 TestRequest(scoped_ptr<ResourceThrottle> throttle,
26 scoped_ptr<net::URLRequest> url_request)
27 : started_(false),
28 throttle_(throttle.Pass()),
29 url_request_(url_request.Pass()) {
30 throttle_->set_controller_for_testing(this);
31 }
32
33 bool started() const { return started_; }
34
35 void Start() {
36 bool deferred = false;
37 throttle_->WillStartRequest(&deferred);
38 started_ = !deferred;
39 }
40
41 private:
42 // ResourceController interface:
43 virtual void Cancel() OVERRIDE {}
44 virtual void CancelAndIgnore() OVERRIDE {}
45 virtual void CancelWithError(int error_code) OVERRIDE {}
46 virtual void Resume() OVERRIDE { started_ = true; }
47
48 bool started_;
49 scoped_ptr<ResourceThrottle> throttle_;
50 scoped_ptr<net::URLRequest> url_request_;
51 };
52
53 class ResourceSchedulerTest : public testing::Test {
54 protected:
55 ResourceSchedulerTest()
56 : message_loop_(MessageLoop::TYPE_IO) {
57 scheduler_.OnCreate(kChildId, kRouteId);
58 }
59
60 virtual ~ResourceSchedulerTest() {
61 scheduler_.OnDestroy(kChildId, kRouteId);
62 }
63
64 TestRequest* NewRequest(const char* url, net::RequestPriority priority,
65 int route_id = kRouteId) {
66 scoped_ptr<net::URLRequest> url_request(
67 context_.CreateRequest(GURL(url), NULL));
68 url_request->set_priority(priority);
69 scoped_ptr<ResourceThrottle> throttle(scheduler_.ScheduleRequest(
70 kChildId, route_id, *url_request.get()));
71 TestRequest* request = new TestRequest(throttle.Pass(), url_request.Pass());
72 request->Start();
73 return request;
74 }
75
76 MessageLoop message_loop_;
77 ResourceScheduler scheduler_;
78 net::TestURLRequestContext context_;
79 };
80
81 TEST_F(ResourceSchedulerTest, OneIsolatedLowRequest) {
82 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOW));
83 EXPECT_TRUE(request->started());
84 }
85
86 TEST_F(ResourceSchedulerTest, LowBlocksUntilIdle) {
87 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
88 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOW));
89 EXPECT_TRUE(high->started());
90 EXPECT_FALSE(low->started());
91 high.reset();
92 EXPECT_TRUE(low->started());
93 }
94
95 TEST_F(ResourceSchedulerTest, LowBlocksUntilPaint) {
96 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
97 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOW));
98 EXPECT_TRUE(high->started());
99 EXPECT_FALSE(low->started());
100 scheduler_.OnPaint(kChildId, kRouteId);
101 EXPECT_TRUE(low->started());
102 }
103
104 TEST_F(ResourceSchedulerTest, NavigationResetsPaintState) {
105 scheduler_.OnPaint(kChildId, kRouteId);
106 scheduler_.OnNavigate(kChildId, kRouteId);
107 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
108 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOW));
109 EXPECT_TRUE(high->started());
110 EXPECT_FALSE(low->started());
111 }
112
113 TEST_F(ResourceSchedulerTest, BackgroundRequestStartsImmediately) {
114 const int route_id = 0; // Indicates a background request.
115 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOW,
116 route_id));
117 EXPECT_TRUE(request->started());
118 }
119
120 TEST_F(ResourceSchedulerTest, DestroyTabBeforeCancelingLoad) {
121 const int new_route_id = kRouteId + 1;
122 scheduler_.OnCreate(kChildId, new_route_id);
123 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOW,
124 new_route_id));
125 scheduler_.OnDestroy(kChildId, new_route_id);
126 // Note that |new_route_id| is destroyed before |request| goes out of scope.
127 }
128
129 } // unnamed namespace
130
131 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698