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

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

Issue 6625066: Add pending preloads indexed by routing id. Start preloading once we navigate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fetch/merge Created 9 years, 9 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
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/time.h" 5 #include "base/time.h"
6 #include "chrome/browser/prerender/prerender_contents.h" 6 #include "chrome/browser/prerender/prerender_contents.h"
7 #include "chrome/browser/prerender/prerender_manager.h" 7 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "content/browser/browser_thread.h" 8 #include "content/browser/browser_thread.h"
9 #include "content/browser/renderer_host/render_view_host.h"
10 #include "content/browser/renderer_host/render_process_host.h"
9 #include "googleurl/src/gurl.h" 11 #include "googleurl/src/gurl.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 13
12 namespace prerender { 14 namespace prerender {
13 15
14 namespace { 16 namespace {
15 17
16 class DummyPrerenderContents : public PrerenderContents { 18 class DummyPrerenderContents : public PrerenderContents {
17 public: 19 public:
18 DummyPrerenderContents(PrerenderManager* prerender_manager, 20 DummyPrerenderContents(PrerenderManager* prerender_manager,
(...skipping 15 matching lines...) Expand all
34 } 36 }
35 37
36 virtual ~DummyPrerenderContents() { 38 virtual ~DummyPrerenderContents() {
37 EXPECT_EQ(expected_final_status_, final_status()); 39 EXPECT_EQ(expected_final_status_, final_status());
38 } 40 }
39 41
40 virtual void StartPrerendering() OVERRIDE { 42 virtual void StartPrerendering() OVERRIDE {
41 has_started_ = true; 43 has_started_ = true;
42 } 44 }
43 45
46 virtual bool child_id(int* child_id) const OVERRIDE {
47 *child_id = 0;
48 return true;
49 }
50
51 virtual bool route_id(int* route_id) const OVERRIDE {
52 *route_id = 0;
53 return true;
54 }
55
44 bool has_started() const { return has_started_; } 56 bool has_started() const { return has_started_; }
45 57
46 private: 58 private:
47 bool has_started_; 59 bool has_started_;
48 FinalStatus expected_final_status_; 60 FinalStatus expected_final_status_;
49 }; 61 };
50 62
51 class TestPrerenderManager : public PrerenderManager { 63 class TestPrerenderManager : public PrerenderManager {
52 public: 64 public:
53 TestPrerenderManager() 65 TestPrerenderManager()
54 : PrerenderManager(NULL), 66 : PrerenderManager(NULL),
55 time_(base::Time::Now()), 67 time_(base::Time::Now()),
56 next_pc_(NULL) { 68 next_pc_(NULL) {
57 } 69 }
58 70
59 void AdvanceTime(base::TimeDelta delta) { 71 void AdvanceTime(base::TimeDelta delta) {
60 time_ += delta; 72 time_ += delta;
61 } 73 }
62 74
63 void SetNextPrerenderContents(PrerenderContents* pc) { 75 void SetNextPrerenderContents(PrerenderContents* pc) {
64 next_pc_.reset(pc); 76 next_pc_.reset(pc);
65 } 77 }
66 78
67 // Shorthand to add a simple preload with no aliases. 79 // Shorthand to add a simple preload with no aliases.
68 bool AddSimplePreload(const GURL& url) { 80 bool AddSimplePreload(const GURL& url) {
69 return AddPreload(url, std::vector<GURL>(), GURL()); 81 return AddPreload(url, std::vector<GURL>(), GURL());
70 } 82 }
71 83
84 bool IsPendingEntry(const GURL& url) {
85 return (PrerenderManager::FindPendingEntry(url) != NULL);
86 }
87
72 PrerenderContents* next_pc() { return next_pc_.get(); } 88 PrerenderContents* next_pc() { return next_pc_.get(); }
73 89
74 protected: 90 protected:
75 virtual ~TestPrerenderManager() { 91 virtual ~TestPrerenderManager() {
76 if (next_pc()) { 92 if (next_pc()) {
77 next_pc()->set_final_status( 93 next_pc()->set_final_status(
78 FINAL_STATUS_MANAGER_SHUTDOWN); 94 FINAL_STATUS_MANAGER_SHUTDOWN);
79 } 95 }
80 } 96 }
81 97
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 281 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL()));
266 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); 282 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url));
267 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1)); 283 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1));
268 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2)); 284 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2));
269 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 285 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
270 286
271 pc->set_final_status(FINAL_STATUS_USED); 287 pc->set_final_status(FINAL_STATUS_USED);
272 delete pc; 288 delete pc;
273 } 289 }
274 290
275 } // naemspace prerender 291 TEST_F(PrerenderManagerTest, PendingPreloadTest) {
292 GURL url("http://www.google.com/");
293 DummyPrerenderContents* pc =
294 new DummyPrerenderContents(prerender_manager_.get(),
295 url,
296 FINAL_STATUS_USED);
297 prerender_manager_->SetNextPrerenderContents(pc);
298 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
299
300 int child_id;
301 int route_id;
302 ASSERT_TRUE(pc->child_id(&child_id));
303 ASSERT_TRUE(pc->route_id(&route_id));
304
305 GURL pending_url("http://news.google.com/");
306
307 prerender_manager_->AddPendingPreload(std::make_pair(child_id, route_id),
308 pending_url,
309 std::vector<GURL>(),
310 url);
311
312 EXPECT_TRUE(prerender_manager_->IsPendingEntry(pending_url));
313 EXPECT_TRUE(pc->has_started());
314 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
315 pc->set_final_status(FINAL_STATUS_USED);
316
317 delete pc;
318 }
319
320 TEST_F(PrerenderManagerTest, PendingPreloadSkippedTest) {
321 GURL url("http://www.google.com/");
322 DummyPrerenderContents* pc =
323 new DummyPrerenderContents(prerender_manager_.get(),
324 url,
325 FINAL_STATUS_TIMED_OUT);
326 prerender_manager_->SetNextPrerenderContents(pc);
327
328 int child_id;
329 int route_id;
330 ASSERT_TRUE(pc->child_id(&child_id));
331 ASSERT_TRUE(pc->route_id(&route_id));
332
333 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
334 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age()
335 + base::TimeDelta::FromSeconds(1));
336 // GetEntry will cull old entries which should now include pc.
337 ASSERT_EQ(NULL, prerender_manager_->GetEntry(url));
338
339 GURL pending_url("http://news.google.com/");
340
341 prerender_manager_->AddPendingPreload(std::make_pair(child_id, route_id),
342 pending_url,
343 std::vector<GURL>(),
344 url);
345 EXPECT_FALSE(prerender_manager_->IsPendingEntry(pending_url));
346 }
347
348 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698