| 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 |