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

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

Issue 11348357: Add observer interface to PrerenderContents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remediate to review 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <set> 5 #include <set>
6 #include <utility>
6 7
7 #include "base/logging.h" 8 #include "base/logging.h"
8 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "chrome/browser/prerender/prerender_contents.h"
9 #include "chrome/browser/prerender/prerender_manager.h" 11 #include "chrome/browser/prerender/prerender_manager.h"
10 #include "chrome/browser/prerender/prerender_tracker.h" 12 #include "chrome/browser/prerender/prerender_tracker.h"
11 #include "chrome/test/base/testing_browser_process.h" 13 #include "chrome/test/base/testing_browser_process.h"
12 #include "content/public/test/test_browser_thread.h" 14 #include "content/public/test/test_browser_thread.h"
13 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
14 16
15 using content::BrowserThread; 17 using content::BrowserThread;
16 18
17 namespace prerender { 19 namespace prerender {
18 20
19 namespace { 21 namespace {
20 22
23 class TestPrerenderContents : public PrerenderContents {
24 public:
25 TestPrerenderContents(PrerenderManager* prerender_manager,
26 int child_id, int route_id)
27 : PrerenderContents(prerender_manager, static_cast<Profile*>(NULL),
28 GURL(), content::Referrer(), ORIGIN_NONE,
29 PrerenderManager::kNoExperiment),
30 child_id_(child_id),
31 route_id_(route_id) {
32 }
33
34 ~TestPrerenderContents() {
35 if (final_status() == FINAL_STATUS_MAX)
36 set_final_status(FINAL_STATUS_USED);
37 }
38
39 virtual bool GetChildId(int* child_id) const OVERRIDE {
40 *child_id = child_id_;
41 return true;
42 }
43
44 virtual bool GetRouteId(int* route_id) const OVERRIDE {
45 *route_id = route_id_;
46 return true;
47 }
48
49 void Start() {
50 prerender_manager()->prerender_tracker()->AddPrerenderContents(this);
51 prerendering_has_started_ = true;
52 NotifyPrerenderStart();
53 }
54
55 void Cancel() {
56 Destroy(FINAL_STATUS_CANCELLED);
57 }
58
59 void Use() {
60 set_final_status(FINAL_STATUS_USED);
61 }
62
63 private:
64 int child_id_;
65 int route_id_;
66 };
67
21 class TestPrerenderManager : public PrerenderManager { 68 class TestPrerenderManager : public PrerenderManager {
22 public: 69 public:
23 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) : 70 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) :
24 PrerenderManager(NULL, prerender_tracker) { 71 PrerenderManager(NULL, prerender_tracker) {
25 mutable_config().rate_limit_enabled = false; 72 mutable_config().rate_limit_enabled = false;
26 } 73 }
27 74
28 virtual void DestroyPrerenderForRenderView( 75 virtual void DestroyPrerenderForRenderView(
29 int process_id, int view_id, FinalStatus final_status) OVERRIDE { 76 int process_id, int view_id, FinalStatus final_status) OVERRIDE {
30 cancelled_id_pairs_.insert(std::make_pair(process_id, view_id)); 77 cancelled_id_pairs_.insert(std::make_pair(process_id, view_id));
31 } 78 }
32 79
33 bool WasPrerenderCancelled(int child_id, int route_id) { 80 bool WasPrerenderCancelled(int child_id, int route_id) {
34 std::pair<int, int> child_route_id_pair(child_id, route_id); 81 std::pair<int, int> child_route_id_pair(child_id, route_id);
35 return cancelled_id_pairs_.count(child_route_id_pair) != 0; 82 return cancelled_id_pairs_.count(child_route_id_pair) != 0;
36 } 83 }
37 84
85 // We never allocate our PrerenderContents in PrerenderManager, so we don't
86 // ever want the default pending delete behaviour.
87 virtual void MoveEntryToPendingDelete(PrerenderContents* entry,
88 FinalStatus final_status) {
mmenke 2012/12/04 18:59:16 nit: OVERRIDE
mmenke 2012/12/04 18:59:16 This should appear adjacent to DestroyPrerenderFor
gavinp 2012/12/04 22:26:07 Done.
89 }
90
38 // Set of all the RenderViews that have been cancelled. 91 // Set of all the RenderViews that have been cancelled.
39 std::set<std::pair<int, int> > cancelled_id_pairs_; 92 std::set<std::pair<int, int> > cancelled_id_pairs_;
40 }; 93 };
41 94
42 } // namespace 95 } // namespace
43 96
44 class PrerenderTrackerTest : public testing::Test { 97 class PrerenderTrackerTest : public testing::Test {
45 public: 98 public:
99 const int kDefaultChildId = 0;
100 const int kDefaultRouteId = 0;
101
46 PrerenderTrackerTest() : 102 PrerenderTrackerTest() :
47 ui_thread_(BrowserThread::UI, &message_loop_), 103 ui_thread_(BrowserThread::UI, &message_loop_),
48 io_thread_(BrowserThread::IO, &message_loop_), 104 io_thread_(BrowserThread::IO, &message_loop_),
49 prerender_manager_(new TestPrerenderManager(prerender_tracker())) { 105 prerender_manager_(prerender_tracker()),
50 } 106 test_contents_(&prerender_manager_, kDefaultChildId, kDefaultRouteId) {
51
52 TestPrerenderManager* prerender_manager() {
53 return prerender_manager_.get();
54 } 107 }
55 108
56 PrerenderTracker* prerender_tracker() { 109 PrerenderTracker* prerender_tracker() {
57 return g_browser_process->prerender_tracker(); 110 return g_browser_process->prerender_tracker();
58 } 111 }
59 112
113 TestPrerenderManager* prerender_manager() {
114 return &prerender_manager_;
115 }
116
117 TestPrerenderContents* test_contents() {
118 return &test_contents_;
119 }
120
60 int GetCurrentStatus(int child_id, int route_id) { 121 int GetCurrentStatus(int child_id, int route_id) {
61 FinalStatus final_status; 122 FinalStatus final_status;
62 if (!prerender_tracker()->GetFinalStatus(child_id, route_id, 123 if (!prerender_tracker()->GetFinalStatus(child_id, route_id,
63 &final_status)) { 124 &final_status)) {
64 return -1; 125 return -1;
65 } 126 }
66 return final_status; 127 return final_status;
67 } 128 }
68 129
69 // Runs any tasks queued on either thread. 130 // Runs any tasks queued on either thread.
70 void RunEvents() { 131 void RunEvents() {
71 message_loop_.RunUntilIdle(); 132 message_loop_.RunUntilIdle();
72 } 133 }
73 134
74 private: 135 private:
75 MessageLoop message_loop_; 136 MessageLoop message_loop_;
76 content::TestBrowserThread ui_thread_; 137 content::TestBrowserThread ui_thread_;
77 content::TestBrowserThread io_thread_; 138 content::TestBrowserThread io_thread_;
78 139
79 scoped_ptr<TestPrerenderManager> prerender_manager_; 140 TestPrerenderManager prerender_manager_;
141 TestPrerenderContents test_contents_;
80 }; 142 };
81 143
82 // Check that a non-existant RenderView is handled correctly. 144 // Check that a non-existant RenderView is handled correctly.
83 TEST_F(PrerenderTrackerTest, PrerenderTrackerNull) { 145 TEST_F(PrerenderTrackerTest, PrerenderTrackerNull) {
84 FinalStatus final_status; 146 EXPECT_FALSE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId));
85 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); 147 EXPECT_FALSE(prerender_tracker()->TryCancel(
86 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 148 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
87 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( 149 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread(
88 0, 0, FINAL_STATUS_HTTPS)); 150 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
89 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 151 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(
90 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); 152 kDefaultChildId, kDefaultRouteId));
91 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); 153 FinalStatus final_status;
154 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(
155 kDefaultChildId, kDefaultRouteId, &final_status));
156 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(
157 kDefaultChildId, kDefaultRouteId));
92 } 158 }
93 159
94 // Check that a page that is used is handled correctly. 160 // Check that a page that is used is handled correctly.
95 TEST_F(PrerenderTrackerTest, PrerenderTrackerUsed) { 161 TEST_F(PrerenderTrackerTest, PrerenderTrackerUsed) {
96 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); 162 test_contents()->Start();
97 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); 163
98 164 EXPECT_EQ(FINAL_STATUS_MAX,
99 // This calls AddPrerenderOnIOThreadTask(). 165 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
100 RunEvents(); 166
101 167 // This calls AddPrerenderOnIOThreadTask().
102 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 168 RunEvents();
103 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); 169
170 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(
171 kDefaultChildId, kDefaultRouteId));
172 EXPECT_EQ(FINAL_STATUS_MAX,
173 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
104 174
105 // Display the prerendered RenderView. 175 // Display the prerendered RenderView.
106 EXPECT_TRUE(prerender_tracker()->TryUse(0, 0)); 176 EXPECT_TRUE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId));
107 177
108 // Make sure the page can't be destroyed or claim it was destroyed after 178 // Make sure the page can't be destroyed or claim it was destroyed after
109 // it's been used. 179 // it's been used.
110 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 180 EXPECT_FALSE(prerender_tracker()->TryCancel(
181 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
111 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( 182 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread(
112 0, 0, FINAL_STATUS_TIMED_OUT)); 183 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
113 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); 184 EXPECT_EQ(FINAL_STATUS_USED,
185 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
114 186
115 // This would call DestroyPrerenderForChildRouteIdPair(), if the prerender 187 // This would call DestroyPrerenderForChildRouteIdPair(), if the prerender
116 // were cancelled. 188 // were cancelled.
117 RunEvents(); 189 RunEvents();
118 190
119 // These functions should all behave as before. 191 // These functions should all behave as before.
120 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 192 EXPECT_FALSE(prerender_tracker()->TryCancel(
193 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
121 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( 194 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread(
122 0, 0, FINAL_STATUS_TIMED_OUT)); 195 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
123 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); 196 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(
124 197 kDefaultChildId, kDefaultRouteId));
125 // This calls DestroyPrerenderForChildRouteIdPair(). 198
126 prerender_tracker()->OnPrerenderingFinished(0, 0); 199 // This calls DestroyPrerenderForChildRouteIdPair().
127 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 200 test_contents()->Use();
128 201 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(
129 // This calls RemovePrerenderOnIOThreadTask(). 202 kDefaultChildId, kDefaultRouteId));
130 RunEvents(); 203
131 204 // This calls RemovePrerenderOnIOThreadTask().
132 FinalStatus final_status; 205 RunEvents();
133 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); 206
134 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 207 FinalStatus final_status;
135 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 208 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(
136 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); 209 kDefaultChildId, kDefaultRouteId, &final_status));
210 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(
211 kDefaultChildId, kDefaultRouteId));
212 EXPECT_FALSE(prerender_tracker()->TryCancel(
213 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
214 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(
215 kDefaultChildId, kDefaultRouteId));
137 } 216 }
138 217
139 // Check that a prerendered page cancelled by TryCancel() is handled correctly. 218 // Check that a prerendered page cancelled by TryCancel() is handled correctly.
140 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelled) { 219 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelled) {
141 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); 220 test_contents()->Start();
142 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); 221 EXPECT_EQ(FINAL_STATUS_MAX,
222 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
143 223
144 // This calls AddPrerenderOnIOThreadTask(). 224 // This calls AddPrerenderOnIOThreadTask().
145 RunEvents(); 225 RunEvents();
146 226
147 // Cancel the prerender. 227 // Cancel the prerender.
148 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 228 EXPECT_TRUE(prerender_tracker()->TryCancel(
149 229 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
150 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); 230
151 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); 231 EXPECT_FALSE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId));
152 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( 232 EXPECT_TRUE(prerender_tracker()->TryCancel(
153 0, 0, FINAL_STATUS_TIMED_OUT)); 233 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
154 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); 234 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread(
155 235 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
156 // This calls DestroyPrerenderForChildRouteIdPair(). 236 EXPECT_EQ(FINAL_STATUS_CANCELLED,
157 RunEvents(); 237 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
158 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); 238
239 // This calls DestroyPrerenderForChildRouteIdPair().
240 RunEvents();
241 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(
242 kDefaultChildId, kDefaultRouteId));
159 243
160 // These should all work until the prerendering RenderViewHost is destroyed. 244 // These should all work until the prerendering RenderViewHost is destroyed.
161 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); 245 EXPECT_TRUE(prerender_tracker()->TryCancel(
162 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( 246 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
163 0, 0, FINAL_STATUS_TIMED_OUT)); 247 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread(
164 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); 248 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
165 249 EXPECT_EQ(FINAL_STATUS_CANCELLED,
166 prerender_tracker()->OnPrerenderingFinished(0, 0); 250 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
167 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 251
168 252 test_contents()->Cancel();
169 // This calls RemovePrerenderOnIOThreadTask(). 253 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(
170 RunEvents(); 254 kDefaultChildId, kDefaultRouteId));
171 255
172 FinalStatus final_status; 256 // This calls RemovePrerenderOnIOThreadTask().
173 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); 257 RunEvents();
174 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 258
259 FinalStatus final_status;
260 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(
261 kDefaultChildId, kDefaultRouteId, &final_status));
262 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(
263 kDefaultChildId, kDefaultRouteId));
175 } 264 }
176 265
177 // Check that a prerendered page cancelled on the IO thread by 266 // Check that a prerendered page cancelled on the IO thread by
178 // TryCancelOnIOThread() is handled correctly. 267 // TryCancelOnIOThread() is handled correctly.
179 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledOnIO) { 268 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledOnIO) {
180 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); 269 test_contents()->Start();
181 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); 270 EXPECT_EQ(FINAL_STATUS_MAX,
271 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
182 272
183 // This calls AddPrerenderOnIOThreadTask(). 273 // This calls AddPrerenderOnIOThreadTask().
184 RunEvents(); 274 RunEvents();
185 275
186 // Cancel the prerender. 276 // Cancel the prerender.
187 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( 277 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread(
188 0, 0, FINAL_STATUS_TIMED_OUT)); 278 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
189 279
190 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); 280 EXPECT_FALSE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId));
191 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 281 EXPECT_TRUE(prerender_tracker()->TryCancel(kDefaultChildId, kDefaultRouteId,
192 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( 282 FINAL_STATUS_CANCELLED));
193 0, 0, FINAL_STATUS_HTTPS)); 283 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread(
194 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); 284 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
195 285 EXPECT_EQ(FINAL_STATUS_TIMED_OUT,
196 // This calls DestroyPrerenderForChildRouteIdPair(). 286 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
197 RunEvents(); 287
198 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); 288 // This calls DestroyPrerenderForChildRouteIdPair().
289 RunEvents();
290 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(
291 kDefaultChildId, kDefaultRouteId));
199 292
200 // These should all work until the prerendering RenderViewHost is destroyed. 293 // These should all work until the prerendering RenderViewHost is destroyed.
201 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 294 EXPECT_TRUE(prerender_tracker()->TryCancel(
202 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( 295 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
203 0, 0, FINAL_STATUS_HTTPS)); 296 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread(
204 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); 297 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
205 298 EXPECT_EQ(FINAL_STATUS_TIMED_OUT,
206 prerender_tracker()->OnPrerenderingFinished(0, 0); 299 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
207 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 300
208 301 test_contents()->Cancel();
209 // This calls RemovePrerenderOnIOThreadTask(). 302 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(
210 RunEvents(); 303 kDefaultChildId, kDefaultRouteId));
211 304
212 FinalStatus final_status; 305 // This calls RemovePrerenderOnIOThreadTask().
213 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); 306 RunEvents();
214 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 307
308 FinalStatus final_status;
309 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(
310 kDefaultChildId, kDefaultRouteId, &final_status));
311 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(
312 kDefaultChildId, kDefaultRouteId));
215 } 313 }
216 314
217 // Check that a prerendered page cancelled before it reaches the IO thread is 315 // Check that a prerendered page cancelled before it reaches the IO thread is
218 // handled correctly. 316 // handled correctly.
219 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledFast) { 317 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledFast) {
220 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); 318 test_contents()->Start();
319
221 // Cancel the prerender. 320 // Cancel the prerender.
222 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 321 EXPECT_TRUE(prerender_tracker()->TryCancel(
223 322 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
224 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); 323
225 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); 324 EXPECT_FALSE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId));
325 EXPECT_TRUE(prerender_tracker()->TryCancel(
326 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
226 327
227 // This calls AddPrerenderOnIOThreadTask() and 328 // This calls AddPrerenderOnIOThreadTask() and
228 // DestroyPrerenderForChildRouteIdPair(). 329 // DestroyPrerenderForChildRouteIdPair().
229 RunEvents(); 330 RunEvents();
230 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); 331 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(
231 332 kDefaultChildId, kDefaultRouteId));
232 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( 333
233 0, 0, FINAL_STATUS_TIMED_OUT)); 334 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread(
234 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); 335 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
235 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); 336 EXPECT_TRUE(prerender_tracker()->TryCancel(
236 337 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT));
237 prerender_tracker()->OnPrerenderingFinished(0, 0); 338 EXPECT_EQ(FINAL_STATUS_CANCELLED, GetCurrentStatus(
238 339 kDefaultChildId, kDefaultRouteId));
239 // This calls RemovePrerenderOnIOThreadTask(). 340
240 RunEvents(); 341 test_contents()->Cancel();
241 342
242 FinalStatus final_status; 343 // This calls RemovePrerenderOnIOThreadTask().
243 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); 344 RunEvents();
244 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 345
346 FinalStatus final_status;
347 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(
348 kDefaultChildId, kDefaultRouteId, &final_status));
349 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(
350 kDefaultChildId, kDefaultRouteId));
245 } 351 }
246 352
247 // Check that handling two pages at once works. 353 // Check that handling two pages at once works.
248 TEST_F(PrerenderTrackerTest, PrerenderTrackerMultiple) { 354 TEST_F(PrerenderTrackerTest, PrerenderTrackerMultiple) {
249 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); 355 test_contents()->Start();
250 356
251 // This calls AddPrerenderOnIOThreadTask(). 357 // This calls AddPrerenderOnIOThreadTask().
252 RunEvents(); 358 RunEvents();
253 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 359 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(
360 kDefaultChildId, kDefaultRouteId));
254 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(1, 2)); 361 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(1, 2));
255 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2)); 362 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2));
mmenke 2012/12/04 18:59:16 Should use kDefaultChildId + 1, etc. here.
gavinp 2012/12/04 22:26:07 Done.
256 EXPECT_FALSE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_HTTPS)); 363 EXPECT_FALSE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_CANCELLED));
257 364
258 // Start second prerender. 365 // Start second prerender.
259 prerender_tracker()->OnPrerenderingStarted(1, 2, prerender_manager()); 366 TestPrerenderContents second_test_contents(prerender_manager(),
260 // This calls AddPrerenderOnIOThreadTask(). 367 kDefaultChildId + 1,
261 RunEvents(); 368 kDefaultRouteId + 1);
mmenke 2012/12/04 18:59:16 Suggest making one of these different (Or, alterna
gavinp 2012/12/04 22:26:07 Done.
262 369
263 // Use (0, 0). 370 second_test_contents.Start();
264 EXPECT_TRUE(prerender_tracker()->TryUse(0, 0)); 371 // This calls AddPrerenderOnIOThreadTask().
265 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); 372 RunEvents();
266 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(1, 2)); 373
267 374 // Use (kDefaultChildId, kDefaultRouteId).
268 // Cancel (1, 2). 375 EXPECT_TRUE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId));
269 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( 376 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(
270 1, 2, FINAL_STATUS_HTTPS)); 377 kDefaultChildId, kDefaultRouteId));
271 378 EXPECT_EQ(FINAL_STATUS_MAX,
272 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); 379 GetCurrentStatus(kDefaultChildId + 1, kDefaultRouteId + 1));
273 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); 380
274 381 // Cancel (kDefaultChildId + 1, kDefaultRouteId + 1).
275 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2)); 382 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread(
276 EXPECT_TRUE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_HTTPS)); 383 kDefaultChildId + 1, kDefaultRouteId + 1, FINAL_STATUS_CANCELLED));
277 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(1, 2)); 384
278 385 EXPECT_FALSE(prerender_tracker()->TryCancel(
279 // This calls DestroyPrerenderForChildRouteIdPair(). 386 kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED));
280 RunEvents(); 387 EXPECT_EQ(FINAL_STATUS_USED,
281 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); 388 GetCurrentStatus(kDefaultChildId, kDefaultRouteId));
282 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(1, 2)); 389
283 390 EXPECT_FALSE(prerender_tracker()->TryUse(
284 prerender_tracker()->OnPrerenderingFinished(0, 0); 391 kDefaultChildId + 1, kDefaultRouteId + 1));
285 prerender_tracker()->OnPrerenderingFinished(1, 2); 392 EXPECT_TRUE(prerender_tracker()->TryCancel(
286 393 kDefaultChildId + 1, kDefaultRouteId + 1, FINAL_STATUS_CANCELLED));
287 // This calls RemovePrerenderOnIOThreadTask(). 394 EXPECT_EQ(FINAL_STATUS_CANCELLED,
288 RunEvents(); 395 GetCurrentStatus(kDefaultChildId + 1, kDefaultRouteId + 1));
289 396
290 FinalStatus final_status; 397 // This calls DestroyPrerenderForChildRouteIdPair().
291 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); 398 RunEvents();
292 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); 399 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(kDefaultChildId,
293 400 kDefaultRouteId));
294 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(1, 2, &final_status)); 401 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(kDefaultChildId + 1,
295 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(1, 2)); 402 kDefaultRouteId + 1));
403
404 test_contents()->Cancel();
405 second_test_contents.Cancel();
406
407 // This calls RemovePrerenderOnIOThreadTask().
408 RunEvents();
409
410 FinalStatus final_status;
411 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(
412 kDefaultChildId, kDefaultRouteId, &final_status));
413 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(
414 kDefaultChildId, kDefaultRouteId));
415
416 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(
417 kDefaultChildId + 1, kDefaultRouteId + 1, &final_status));
418 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(
419 kDefaultChildId + 1, kDefaultRouteId + 1));
296 } 420 }
297 421
298 } // namespace prerender 422 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698