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

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

Issue 11270027: Add a ResourceScheduler to ResourceDispatcherHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 "base/message_loop.h"
6 #include "content/browser/renderer_host/resource_loader.h"
7 #include "content/browser/renderer_host/resource_scheduler.h"
8 #include "content/public/browser/global_request_id.h"
9 #include "net/url_request/url_request.h"
10 #include "net/url_request/url_request_test_util.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace content {
14
15 namespace {
16
17 class TestResourceLoaderFactory;
18
19 class TestResourceLoader : public ResourceLoader {
20 public:
21 virtual ~TestResourceLoader() {}
22
23 virtual void StartRequest() {
24 started_ = true;
25 }
26 virtual net::URLRequest* request() { return request_.get(); }
27
28 int id() { return id_; }
29 bool started() { return started_; }
30
31 protected:
32 friend class TestResourceLoaderFactory;
33
34 TestResourceLoader(int request_id,
35 const char* url,
36 net::RequestPriority priority,
37 net::URLRequestContext* context)
38 : id_(request_id),
39 request_(new net::URLRequest(GURL(url), NULL, context, NULL)),
40 started_(false) {
41 request_->set_priority(priority);
42 }
43
44 private:
45 int id_;
46 scoped_ptr<net::URLRequest> request_;
47 bool started_;
48 };
49
50 class TestResourceLoaderFactory {
51 public:
52 TestResourceLoaderFactory()
53 : next_request_id_(100) {
54 }
55
56 TestResourceLoader* NewLoader(const char* url,
57 net::RequestPriority priority) {
58 return new TestResourceLoader(
59 ++next_request_id_, url, priority, &context_);
60 }
61
62 private:
63 int next_request_id_;
64 TestURLRequestContext context_;
65 };
66
67 const int kChildId = 30;
68 const int kRouteId = 75;
69
70 } // unnamed namespace
71
72 class ResourceSchedulerTest : public testing::Test {
73 protected:
74 ResourceSchedulerTest()
75 : message_loop_(MessageLoop::TYPE_IO) {
76 scheduler_.OnCreate(kChildId, kRouteId);
77 }
78
79 virtual ~ResourceSchedulerTest() {
80 scheduler_.OnDestroy(kChildId, kRouteId);
81 }
82
83 MessageLoop message_loop_;
84 ResourceScheduler scheduler_;
85 TestResourceLoaderFactory factory_;
86 };
87
88 TEST_F(ResourceSchedulerTest, OneIsolatedRequest) {
89 scoped_ptr<TestResourceLoader> loader(
90 factory_.NewLoader("http://host/1", net::LOW));
91 scheduler_.ScheduleLoad(kChildId, kRouteId, loader->id(), loader.get());
92 EXPECT_TRUE(loader->started());
93 scheduler_.RemoveLoad(kChildId, kRouteId, loader->id());
94 }
95
96 TEST_F(ResourceSchedulerTest, LowBlocksUntilIdle) {
97 scoped_ptr<TestResourceLoader> high(
98 factory_.NewLoader("http://host/high", net::HIGHEST));
99 scoped_ptr<TestResourceLoader> low(
100 factory_.NewLoader("http://host/low", net::LOW));
101
102 scheduler_.ScheduleLoad(kChildId, kRouteId, high->id(), high.get());
103 scheduler_.ScheduleLoad(kChildId, kRouteId, low->id(), low.get());
104 EXPECT_TRUE(high->started());
105 EXPECT_FALSE(low->started());
106 scheduler_.RemoveLoad(kChildId, kRouteId, high->id());
107 EXPECT_TRUE(low->started());
108 scheduler_.RemoveLoad(kChildId, kRouteId, low->id());
109 }
110
111 TEST_F(ResourceSchedulerTest, LowBlocksUntilPaint) {
112 scoped_ptr<TestResourceLoader> high(
113 factory_.NewLoader("http://host/high", net::HIGHEST));
114 scoped_ptr<TestResourceLoader> low(
115 factory_.NewLoader("http://host/low", net::LOW));
116
117 scheduler_.ScheduleLoad(kChildId, kRouteId, high->id(), high.get());
118 scheduler_.ScheduleLoad(kChildId, kRouteId, low->id(), low.get());
119 EXPECT_TRUE(high->started());
120 EXPECT_FALSE(low->started());
121 scheduler_.OnPaint(kChildId, kRouteId);
122 EXPECT_TRUE(low->started());
123 scheduler_.RemoveLoad(kChildId, kRouteId, high->id());
124 scheduler_.RemoveLoad(kChildId, kRouteId, low->id());
125 }
126
127 TEST_F(ResourceSchedulerTest, NavigationResetsPaintState) {
128 scoped_ptr<TestResourceLoader> high(
129 factory_.NewLoader("http://host/high", net::HIGHEST));
130 scoped_ptr<TestResourceLoader> low(
131 factory_.NewLoader("http://host/low", net::LOW));
132
133 scheduler_.OnPaint(kChildId, kRouteId);
134 scheduler_.OnNavigate(kChildId, kRouteId);
135 scheduler_.ScheduleLoad(kChildId, kRouteId, high->id(), high.get());
136 scheduler_.ScheduleLoad(kChildId, kRouteId, low->id(), low.get());
137 EXPECT_TRUE(high->started());
138 EXPECT_FALSE(low->started());
139 scheduler_.RemoveLoad(kChildId, kRouteId, high->id());
140 scheduler_.RemoveLoad(kChildId, kRouteId, low->id());
141 }
142
143 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698