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

Side by Side Diff: chrome/browser/prerender/prerender_render_view_tracker_unittest.cc

Issue 10386223: Renaming poorly named classes and adding missing unit tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Undo rename of Dispatcher Created 8 years, 7 months 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 <set>
6
7 #include "base/logging.h"
8 #include "base/message_loop.h"
9 #include "chrome/browser/prerender/prerender_manager.h"
10 #include "chrome/browser/prerender/prerender_render_view_tracker.h"
11 #include "chrome/test/base/testing_browser_process.h"
12 #include "content/test/test_browser_thread.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using content::BrowserThread;
16
17 namespace prerender {
18
19 namespace {
20
21 class TestPrerenderManager : public PrerenderManager {
22 public:
23 explicit TestPrerenderManager(
24 PrerenderRenderViewTracker* prerender_render_view_tracker)
25 : PrerenderManager(NULL, prerender_render_view_tracker) {
26 mutable_config().rate_limit_enabled = false;
27 }
28
29 virtual void DestroyPrerenderForRenderView(
30 int process_id, int view_id, FinalStatus final_status) OVERRIDE {
31 cancelled_id_pairs_.insert(std::make_pair(process_id, view_id));
32 }
33
34 bool WasPrerenderCancelled(int child_id, int route_id) {
35 std::pair<int, int> child_route_id_pair(child_id, route_id);
36 return cancelled_id_pairs_.count(child_route_id_pair) != 0;
37 }
38
39 // Set of all the RenderViews that have been cancelled.
40 std::set<std::pair<int, int> > cancelled_id_pairs_;
41 };
42
43 } // namespace
44
45 class PrerenderRenderViewTrackerTest : public testing::Test {
46 public:
47 PrerenderRenderViewTrackerTest() :
48 ui_thread_(BrowserThread::UI, &message_loop_),
49 io_thread_(BrowserThread::IO, &message_loop_),
50 prerender_manager_(
51 new TestPrerenderManager(prerender_render_view_tracker())) {
52 }
53
54 TestPrerenderManager* prerender_manager() {
55 return prerender_manager_.get();
56 }
57
58 PrerenderRenderViewTracker* prerender_render_view_tracker() {
59 return g_browser_process->prerender_render_view_tracker();
60 }
61
62 int GetCurrentStatus(int child_id, int route_id) {
63 FinalStatus final_status;
64 if (!prerender_render_view_tracker()->GetFinalStatus(child_id, route_id,
65 &final_status)) {
66 return -1;
67 }
68 return final_status;
69 }
70
71 // Runs any tasks queued on either thread.
72 void RunEvents() {
73 message_loop_.RunAllPending();
74 }
75
76 private:
77 MessageLoop message_loop_;
78 content::TestBrowserThread ui_thread_;
79 content::TestBrowserThread io_thread_;
80
81 scoped_ptr<TestPrerenderManager> prerender_manager_;
82 };
83
84 // Check that a non-existant RenderView is handled correctly.
85 TEST_F(PrerenderRenderViewTrackerTest, PrerenderRenderViewTrackerNull) {
86 FinalStatus final_status;
87 EXPECT_FALSE(prerender_render_view_tracker()->TryUse(0, 0));
88 EXPECT_FALSE(prerender_render_view_tracker()->TryCancel(
89 0, 0, FINAL_STATUS_HTTPS));
90 EXPECT_FALSE(prerender_render_view_tracker()->TryCancelOnIOThread(
91 0, 0, FINAL_STATUS_HTTPS));
92 EXPECT_FALSE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
93 EXPECT_FALSE(prerender_render_view_tracker()->GetFinalStatus(
94 0, 0, &final_status));
95 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0));
96 }
97
98 // Check that a page that is used is handled correctly.
99 TEST_F(PrerenderRenderViewTrackerTest, PrerenderRenderViewTrackerUsed) {
100 prerender_render_view_tracker()->OnPrerenderingStarted(
101 0, 0, prerender_manager());
102 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0));
103
104 // This calls AddPrerenderOnIOThreadTask().
105 RunEvents();
106
107 EXPECT_TRUE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
108 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0));
109
110 // Display the prerendered RenderView.
111 EXPECT_TRUE(prerender_render_view_tracker()->TryUse(0, 0));
112
113 // Make sure the page can't be destroyed or claim it was destroyed after
114 // it's been used.
115 EXPECT_FALSE(prerender_render_view_tracker()->TryCancel(
116 0, 0, FINAL_STATUS_HTTPS));
117 EXPECT_FALSE(prerender_render_view_tracker()->TryCancelOnIOThread(
118 0, 0, FINAL_STATUS_TIMED_OUT));
119 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0));
120
121 // This would call DestroyPrerenderForChildRouteIdPair(), if the prerender
122 // were cancelled.
123 RunEvents();
124
125 // These functions should all behave as before.
126 EXPECT_FALSE(prerender_render_view_tracker()->TryCancel(
127 0, 0, FINAL_STATUS_HTTPS));
128 EXPECT_FALSE(prerender_render_view_tracker()->TryCancelOnIOThread(
129 0, 0, FINAL_STATUS_TIMED_OUT));
130 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0));
131
132 // This calls DestroyPrerenderForChildRouteIdPair().
133 prerender_render_view_tracker()->OnPrerenderingFinished(0, 0);
134 EXPECT_TRUE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
135
136 // This calls RemovePrerenderOnIOThreadTask().
137 RunEvents();
138
139 FinalStatus final_status;
140 EXPECT_FALSE(prerender_render_view_tracker()->GetFinalStatus(
141 0, 0, &final_status));
142 EXPECT_FALSE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
143 EXPECT_FALSE(prerender_render_view_tracker()->TryCancel(
144 0, 0, FINAL_STATUS_HTTPS));
145 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0));
146 }
147
148 // Check that a prerendered page cancelled by TryCancel() is handled correctly.
149 TEST_F(PrerenderRenderViewTrackerTest, PrerenderRenderViewTrackerCancelled) {
150 prerender_render_view_tracker()->OnPrerenderingStarted(
151 0, 0, prerender_manager());
152 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0));
153
154 // This calls AddPrerenderOnIOThreadTask().
155 RunEvents();
156
157 // Cancel the prerender.
158 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
159 0, 0, FINAL_STATUS_HTTPS));
160
161 EXPECT_FALSE(prerender_render_view_tracker()->TryUse(0, 0));
162 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
163 0, 0, FINAL_STATUS_TIMED_OUT));
164 EXPECT_TRUE(prerender_render_view_tracker()->TryCancelOnIOThread(
165 0, 0, FINAL_STATUS_TIMED_OUT));
166 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0));
167
168 // This calls DestroyPrerenderForChildRouteIdPair().
169 RunEvents();
170 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0));
171
172 // These should all work until the prerendering RenderViewHost is destroyed.
173 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
174 0, 0, FINAL_STATUS_TIMED_OUT));
175 EXPECT_TRUE(prerender_render_view_tracker()->TryCancelOnIOThread(
176 0, 0, FINAL_STATUS_TIMED_OUT));
177 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0));
178
179 prerender_render_view_tracker()->OnPrerenderingFinished(0, 0);
180 EXPECT_TRUE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
181
182 // This calls RemovePrerenderOnIOThreadTask().
183 RunEvents();
184
185 FinalStatus final_status;
186 EXPECT_FALSE(prerender_render_view_tracker()->GetFinalStatus(
187 0, 0, &final_status));
188 EXPECT_FALSE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
189 }
190
191 // Check that a prerendered page cancelled on the IO thread by
192 // TryCancelOnIOThread() is handled correctly.
193 TEST_F(PrerenderRenderViewTrackerTest,
194 PrerenderRenderViewTrackerCancelledOnIO) {
195 prerender_render_view_tracker()->OnPrerenderingStarted(
196 0, 0, prerender_manager());
197 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0));
198
199 // This calls AddPrerenderOnIOThreadTask().
200 RunEvents();
201
202 // Cancel the prerender.
203 EXPECT_TRUE(prerender_render_view_tracker()->TryCancelOnIOThread(
204 0, 0, FINAL_STATUS_TIMED_OUT));
205
206 EXPECT_FALSE(prerender_render_view_tracker()->TryUse(0, 0));
207 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
208 0, 0, FINAL_STATUS_HTTPS));
209 EXPECT_TRUE(prerender_render_view_tracker()->TryCancelOnIOThread(
210 0, 0, FINAL_STATUS_HTTPS));
211 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0));
212
213 // This calls DestroyPrerenderForChildRouteIdPair().
214 RunEvents();
215 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0));
216
217 // These should all work until the prerendering RenderViewHost is destroyed.
218 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
219 0, 0, FINAL_STATUS_HTTPS));
220 EXPECT_TRUE(prerender_render_view_tracker()->TryCancelOnIOThread(
221 0, 0, FINAL_STATUS_HTTPS));
222 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0));
223
224 prerender_render_view_tracker()->OnPrerenderingFinished(0, 0);
225 EXPECT_TRUE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
226
227 // This calls RemovePrerenderOnIOThreadTask().
228 RunEvents();
229
230 FinalStatus final_status;
231 EXPECT_FALSE(prerender_render_view_tracker()->GetFinalStatus(
232 0, 0, &final_status));
233 EXPECT_FALSE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
234 }
235
236 // Check that a prerendered page cancelled before it reaches the IO thread is
237 // handled correctly.
238 TEST_F(PrerenderRenderViewTrackerTest,
239 PrerenderRenderViewTrackerCancelledFast) {
240 prerender_render_view_tracker()->OnPrerenderingStarted(
241 0, 0, prerender_manager());
242 // Cancel the prerender.
243 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
244 0, 0, FINAL_STATUS_HTTPS));
245
246 EXPECT_FALSE(prerender_render_view_tracker()->TryUse(0, 0));
247 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
248 0, 0, FINAL_STATUS_TIMED_OUT));
249
250 // This calls AddPrerenderOnIOThreadTask() and
251 // DestroyPrerenderForChildRouteIdPair().
252 RunEvents();
253 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0));
254
255 EXPECT_TRUE(prerender_render_view_tracker()->TryCancelOnIOThread(
256 0, 0, FINAL_STATUS_TIMED_OUT));
257 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
258 0, 0, FINAL_STATUS_TIMED_OUT));
259 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0));
260
261 prerender_render_view_tracker()->OnPrerenderingFinished(0, 0);
262
263 // This calls RemovePrerenderOnIOThreadTask().
264 RunEvents();
265
266 FinalStatus final_status;
267 EXPECT_FALSE(prerender_render_view_tracker()->GetFinalStatus(
268 0, 0, &final_status));
269 EXPECT_FALSE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
270 }
271
272 // Check that handling two pages at once works.
273 TEST_F(PrerenderRenderViewTrackerTest, PrerenderRenderViewTrackerMultiple) {
274 prerender_render_view_tracker()->OnPrerenderingStarted(
275 0, 0, prerender_manager());
276
277 // This calls AddPrerenderOnIOThreadTask().
278 RunEvents();
279 EXPECT_TRUE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
280 EXPECT_FALSE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(1, 2));
281 EXPECT_FALSE(prerender_render_view_tracker()->TryUse(1, 2));
282 EXPECT_FALSE(prerender_render_view_tracker()->TryCancel(
283 1, 2, FINAL_STATUS_HTTPS));
284
285 // Start second prerender.
286 prerender_render_view_tracker()->OnPrerenderingStarted(
287 1, 2, prerender_manager());
288 // This calls AddPrerenderOnIOThreadTask().
289 RunEvents();
290
291 // Use (0, 0).
292 EXPECT_TRUE(prerender_render_view_tracker()->TryUse(0, 0));
293 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0));
294 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(1, 2));
295
296 // Cancel (1, 2).
297 EXPECT_TRUE(prerender_render_view_tracker()->TryCancelOnIOThread(
298 1, 2, FINAL_STATUS_HTTPS));
299
300 EXPECT_FALSE(prerender_render_view_tracker()->TryCancel(
301 0, 0, FINAL_STATUS_HTTPS));
302 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0));
303
304 EXPECT_FALSE(prerender_render_view_tracker()->TryUse(1, 2));
305 EXPECT_TRUE(prerender_render_view_tracker()->TryCancel(
306 1, 2, FINAL_STATUS_HTTPS));
307 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(1, 2));
308
309 // This calls DestroyPrerenderForChildRouteIdPair().
310 RunEvents();
311 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0));
312 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(1, 2));
313
314 prerender_render_view_tracker()->OnPrerenderingFinished(0, 0);
315 prerender_render_view_tracker()->OnPrerenderingFinished(1, 2);
316
317 // This calls RemovePrerenderOnIOThreadTask().
318 RunEvents();
319
320 FinalStatus final_status;
321 EXPECT_FALSE(prerender_render_view_tracker()->GetFinalStatus(
322 0, 0, &final_status));
323 EXPECT_FALSE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(0, 0));
324
325 EXPECT_FALSE(prerender_render_view_tracker()->GetFinalStatus(
326 1, 2, &final_status));
327 EXPECT_FALSE(prerender_render_view_tracker()->IsPrerenderingOnIOThread(1, 2));
328 }
329
330 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_render_view_tracker.cc ('k') | chrome/browser/prerender/prerender_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698