OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/memory/scoped_vector.h" | 5 #include "base/memory/scoped_vector.h" |
6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
7 #include "base/time.h" | 7 #include "base/time.h" |
8 #include "chrome/browser/prerender/prerender_contents.h" | 8 #include "chrome/browser/prerender/prerender_contents.h" |
9 #include "chrome/browser/prerender/prerender_manager.h" | 9 #include "chrome/browser/prerender/prerender_manager.h" |
10 #include "chrome/browser/prerender/prerender_origin.h" | 10 #include "chrome/browser/prerender/prerender_origin.h" |
11 #include "chrome/test/base/testing_browser_process.h" | 11 #include "chrome/test/base/testing_browser_process.h" |
12 #include "content/browser/renderer_host/render_view_host.h" | 12 #include "content/browser/renderer_host/render_view_host.h" |
13 #include "content/test/test_browser_thread.h" | 13 #include "content/test/test_browser_thread.h" |
14 #include "googleurl/src/gurl.h" | 14 #include "googleurl/src/gurl.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 | 16 |
17 using content::BrowserThread; | 17 using content::BrowserThread; |
18 | 18 |
19 namespace prerender { | 19 namespace prerender { |
20 | 20 |
21 namespace { | 21 namespace { |
22 | 22 |
23 class DummyPrerenderContents : public PrerenderContents { | 23 class DummyPrerenderContents : public PrerenderContents { |
24 public: | 24 public: |
25 DummyPrerenderContents(PrerenderManager* prerender_manager, | 25 DummyPrerenderContents(PrerenderManager* prerender_manager, |
26 PrerenderTracker* prerender_tracker, | 26 PrerenderTracker* prerender_tracker, |
27 const GURL& url, | 27 const GURL& url, |
28 FinalStatus expected_final_status) | 28 FinalStatus expected_final_status) |
29 : PrerenderContents(prerender_manager, prerender_tracker, | 29 : PrerenderContents(prerender_manager, prerender_tracker, |
30 NULL, url, GURL(), ORIGIN_LINK_REL_PRERENDER, | 30 NULL, url, content::Referrer(), |
| 31 ORIGIN_LINK_REL_PRERENDER, |
31 PrerenderManager::kNoExperiment), | 32 PrerenderManager::kNoExperiment), |
32 has_started_(false), | 33 has_started_(false), |
33 expected_final_status_(expected_final_status) { | 34 expected_final_status_(expected_final_status) { |
34 } | 35 } |
35 | 36 |
36 virtual ~DummyPrerenderContents() { | 37 virtual ~DummyPrerenderContents() { |
37 EXPECT_EQ(expected_final_status_, final_status()); | 38 EXPECT_EQ(expected_final_status_, final_status()); |
38 } | 39 } |
39 | 40 |
40 virtual void StartPrerendering( | 41 virtual void StartPrerendering( |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); | 122 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); |
122 } | 123 } |
123 SetNextPrerenderContents(prerender_contents); | 124 SetNextPrerenderContents(prerender_contents); |
124 return prerender_contents; | 125 return prerender_contents; |
125 } | 126 } |
126 | 127 |
127 // Shorthand to add a simple preload with a reasonable source. | 128 // Shorthand to add a simple preload with a reasonable source. |
128 bool AddSimplePrerender(const GURL& url) { | 129 bool AddSimplePrerender(const GURL& url) { |
129 return AddPrerenderFromLinkRelPrerender(-1, -1, | 130 return AddPrerenderFromLinkRelPrerender(-1, -1, |
130 url, | 131 url, |
131 GURL()); | 132 content::Referrer()); |
132 } | 133 } |
133 | 134 |
134 void set_rate_limit_enabled(bool enabled) { | 135 void set_rate_limit_enabled(bool enabled) { |
135 mutable_config().rate_limit_enabled = enabled; | 136 mutable_config().rate_limit_enabled = enabled; |
136 } | 137 } |
137 | 138 |
138 PrerenderContents* next_prerender_contents() { | 139 PrerenderContents* next_prerender_contents() { |
139 return next_prerender_contents_.get(); | 140 return next_prerender_contents_.get(); |
140 } | 141 } |
141 | 142 |
142 private: | 143 private: |
143 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) { | 144 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) { |
144 DCHECK(!next_prerender_contents_.get()); | 145 DCHECK(!next_prerender_contents_.get()); |
145 next_prerender_contents_.reset(prerender_contents); | 146 next_prerender_contents_.reset(prerender_contents); |
146 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED) | 147 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED) |
147 used_prerender_contents_.push_back(prerender_contents); | 148 used_prerender_contents_.push_back(prerender_contents); |
148 } | 149 } |
149 | 150 |
150 virtual base::Time GetCurrentTime() const OVERRIDE { | 151 virtual base::Time GetCurrentTime() const OVERRIDE { |
151 return time_; | 152 return time_; |
152 } | 153 } |
153 | 154 |
154 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE { | 155 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE { |
155 return time_ticks_; | 156 return time_ticks_; |
156 } | 157 } |
157 | 158 |
158 virtual PrerenderContents* CreatePrerenderContents( | 159 virtual PrerenderContents* CreatePrerenderContents( |
159 const GURL& url, | 160 const GURL& url, |
160 const GURL& referrer, | 161 const content::Referrer& referrer, |
161 Origin origin, | 162 Origin origin, |
162 uint8 experiment_id) OVERRIDE { | 163 uint8 experiment_id) OVERRIDE { |
163 DCHECK(next_prerender_contents_.get()); | 164 DCHECK(next_prerender_contents_.get()); |
164 return next_prerender_contents_.release(); | 165 return next_prerender_contents_.release(); |
165 } | 166 } |
166 | 167 |
167 base::Time time_; | 168 base::Time time_; |
168 base::TimeTicks time_ticks_; | 169 base::TimeTicks time_ticks_; |
169 scoped_ptr<PrerenderContents> next_prerender_contents_; | 170 scoped_ptr<PrerenderContents> next_prerender_contents_; |
170 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, | 171 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 | 431 |
431 int child_id; | 432 int child_id; |
432 int route_id; | 433 int route_id; |
433 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); | 434 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); |
434 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); | 435 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); |
435 | 436 |
436 GURL pending_url("http://news.google.com/"); | 437 GURL pending_url("http://news.google.com/"); |
437 | 438 |
438 EXPECT_TRUE(prerender_manager()->AddPrerenderFromLinkRelPrerender( | 439 EXPECT_TRUE(prerender_manager()->AddPrerenderFromLinkRelPrerender( |
439 child_id, route_id, | 440 child_id, route_id, |
440 pending_url, url)); | 441 pending_url, content::Referrer(url, WebKit::WebReferrerPolicyDefault))); |
441 | 442 |
442 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url)); | 443 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url)); |
443 EXPECT_TRUE(prerender_contents->has_started()); | 444 EXPECT_TRUE(prerender_contents->has_started()); |
444 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 445 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
445 } | 446 } |
446 | 447 |
447 // Tests that a PrerenderManager created for a browser session in the control | 448 // Tests that a PrerenderManager created for a browser session in the control |
448 // group will not be able to override FINAL_STATUS_CONTROL_GROUP. | 449 // group will not be able to override FINAL_STATUS_CONTROL_GROUP. |
449 TEST_F(PrerenderManagerTest, ControlGroup) { | 450 TEST_F(PrerenderManagerTest, ControlGroup) { |
450 RestorePrerenderMode restore_prerender_mode; | 451 RestorePrerenderMode restore_prerender_mode; |
(...skipping 10 matching lines...) Expand all Loading... |
461 | 462 |
462 // Tests that prerendering is cancelled when the source render view does not | 463 // Tests that prerendering is cancelled when the source render view does not |
463 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be | 464 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be |
464 // triggered. | 465 // triggered. |
465 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) { | 466 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) { |
466 GURL url("http://www.google.com/"); | 467 GURL url("http://www.google.com/"); |
467 prerender_manager()->CreateNextPrerenderContents( | 468 prerender_manager()->CreateNextPrerenderContents( |
468 url, | 469 url, |
469 FINAL_STATUS_MANAGER_SHUTDOWN); | 470 FINAL_STATUS_MANAGER_SHUTDOWN); |
470 EXPECT_FALSE(prerender_manager()->AddPrerenderFromLinkRelPrerender( | 471 EXPECT_FALSE(prerender_manager()->AddPrerenderFromLinkRelPrerender( |
471 100, 100, url, GURL())); | 472 100, 100, url, content::Referrer())); |
472 } | 473 } |
473 | 474 |
474 // Tests that the prerender manager ignores fragment references when matching | 475 // Tests that the prerender manager ignores fragment references when matching |
475 // prerender URLs in the case the fragment is not in the prerender URL. | 476 // prerender URLs in the case the fragment is not in the prerender URL. |
476 TEST_F(PrerenderManagerTest, PageMatchesFragmentTest) { | 477 TEST_F(PrerenderManagerTest, PageMatchesFragmentTest) { |
477 GURL url("http://www.google.com/"); | 478 GURL url("http://www.google.com/"); |
478 GURL fragment_url("http://www.google.com/#test"); | 479 GURL fragment_url("http://www.google.com/#test"); |
479 | 480 |
480 DummyPrerenderContents* prerender_contents = | 481 DummyPrerenderContents* prerender_contents = |
481 prerender_manager()->CreateNextPrerenderContents(url, | 482 prerender_manager()->CreateNextPrerenderContents(url, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 url, | 523 url, |
523 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); | 524 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); |
524 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); | 525 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
525 EXPECT_TRUE(prerender_contents->has_started()); | 526 EXPECT_TRUE(prerender_contents->has_started()); |
526 prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS); | 527 prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS); |
527 DummyPrerenderContents* null = NULL; | 528 DummyPrerenderContents* null = NULL; |
528 EXPECT_EQ(null, prerender_manager()->GetEntry(url)); | 529 EXPECT_EQ(null, prerender_manager()->GetEntry(url)); |
529 } | 530 } |
530 | 531 |
531 } // namespace prerender | 532 } // namespace prerender |
OLD | NEW |