| 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/time.h" | 6 #include "base/time.h" |
| 7 #include "chrome/browser/prerender/prerender_contents.h" | 7 #include "chrome/browser/prerender/prerender_contents.h" |
| 8 #include "chrome/browser/prerender/prerender_manager.h" | 8 #include "chrome/browser/prerender/prerender_manager.h" |
| 9 #include "chrome/browser/prerender/prerender_origin.h" | 9 #include "chrome/browser/prerender/prerender_origin.h" |
| 10 #include "chrome/test/testing_browser_process.h" | 10 #include "chrome/test/testing_browser_process.h" |
| 11 #include "content/browser/browser_thread.h" | 11 #include "content/browser/browser_thread.h" |
| 12 #include "content/browser/renderer_host/render_view_host.h" | 12 #include "content/browser/renderer_host/render_view_host.h" |
| 13 #include "content/browser/renderer_host/render_process_host.h" | 13 #include "content/browser/renderer_host/render_process_host.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 namespace prerender { | 17 namespace prerender { |
| 18 | 18 |
| 19 namespace { | 19 namespace { |
| 20 | 20 |
| 21 class DummyPrerenderContents : public PrerenderContents { | 21 class DummyPrerenderContents : public PrerenderContents { |
| 22 public: | 22 public: |
| 23 DummyPrerenderContents(PrerenderManager* prerender_manager, | 23 DummyPrerenderContents(PrerenderManager* prerender_manager, |
| 24 PrerenderTracker* prerender_tracker, | 24 PrerenderTracker* prerender_tracker, |
| 25 const GURL& url, | 25 const GURL& url, |
| 26 FinalStatus expected_final_status) | 26 FinalStatus expected_final_status) |
| 27 : PrerenderContents(prerender_manager, prerender_tracker, NULL, url, | 27 : PrerenderContents(prerender_manager, prerender_tracker, NULL, url, |
| 28 GURL(), ORIGIN_LINK_REL_PRERENDER), | 28 GURL(), ORIGIN_LINK_REL_PRERENDER, |
| 29 PrerenderManager::kNoExperiment), |
| 29 has_started_(false), | 30 has_started_(false), |
| 30 expected_final_status_(expected_final_status) { | 31 expected_final_status_(expected_final_status) { |
| 31 } | 32 } |
| 32 | 33 |
| 33 virtual ~DummyPrerenderContents() { | 34 virtual ~DummyPrerenderContents() { |
| 34 EXPECT_EQ(expected_final_status_, final_status()); | 35 EXPECT_EQ(expected_final_status_, final_status()); |
| 35 } | 36 } |
| 36 | 37 |
| 37 virtual void StartPrerendering( | 38 virtual void StartPrerendering( |
| 38 const RenderViewHost* source_render_view_host) OVERRIDE { | 39 const RenderViewHost* source_render_view_host) OVERRIDE { |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 return time_; | 149 return time_; |
| 149 } | 150 } |
| 150 | 151 |
| 151 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE { | 152 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE { |
| 152 return time_ticks_; | 153 return time_ticks_; |
| 153 } | 154 } |
| 154 | 155 |
| 155 virtual PrerenderContents* CreatePrerenderContents( | 156 virtual PrerenderContents* CreatePrerenderContents( |
| 156 const GURL& url, | 157 const GURL& url, |
| 157 const GURL& referrer, | 158 const GURL& referrer, |
| 158 Origin origin) OVERRIDE { | 159 Origin origin, |
| 160 uint8 experiment_id) OVERRIDE { |
| 159 DCHECK(next_prerender_contents_.get()); | 161 DCHECK(next_prerender_contents_.get()); |
| 160 return next_prerender_contents_.release(); | 162 return next_prerender_contents_.release(); |
| 161 } | 163 } |
| 162 | 164 |
| 163 base::Time time_; | 165 base::Time time_; |
| 164 base::TimeTicks time_ticks_; | 166 base::TimeTicks time_ticks_; |
| 165 scoped_ptr<PrerenderContents> next_prerender_contents_; | 167 scoped_ptr<PrerenderContents> next_prerender_contents_; |
| 166 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, | 168 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, |
| 167 // tracked so they will be automatically deleted. | 169 // tracked so they will be automatically deleted. |
| 168 ScopedVector<PrerenderContents> used_prerender_contents_; | 170 ScopedVector<PrerenderContents> used_prerender_contents_; |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 | 429 |
| 428 EXPECT_TRUE(prerender_manager()->AddPrerenderFromLinkRelPrerender( | 430 EXPECT_TRUE(prerender_manager()->AddPrerenderFromLinkRelPrerender( |
| 429 child_id, route_id, | 431 child_id, route_id, |
| 430 pending_url, url)); | 432 pending_url, url)); |
| 431 | 433 |
| 432 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url)); | 434 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url)); |
| 433 EXPECT_TRUE(prerender_contents->has_started()); | 435 EXPECT_TRUE(prerender_contents->has_started()); |
| 434 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 436 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
| 435 } | 437 } |
| 436 | 438 |
| 437 // Ensure that extracting a urlencoded URL in the url= query string component | |
| 438 // works. | |
| 439 TEST_F(PrerenderManagerTest, ExtractURLInQueryStringTest) { | |
| 440 GURL result; | |
| 441 EXPECT_TRUE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( | |
| 442 GURL("http://www.google.com/url?sa=t&source=web&cd=1&ved=0CBcQFjAA&url=htt
p%3A%2F%2Fwww.abercrombie.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FStoreLocator%3
FcatalogId%3D%26storeId%3D10051%26langId%3D-1&rct=j&q=allinurl%3A%26&ei=KLyUTYGS
EdTWiAKUmLCdCQ&usg=AFQjCNF8nJ2MpBFfr1ijO39_f22bcKyccw&sig2=2ymyGpO0unJwU1d4kdCUj
Q"), | |
| 443 &result)); | |
| 444 ASSERT_EQ(GURL("http://www.abercrombie.com/webapp/wcs/stores/servlet/StoreLoca
tor?catalogId=&storeId=10051&langId=-1").spec(), result.spec()); | |
| 445 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( | |
| 446 GURL("http://www.google.com/url?sadf=test&blah=blahblahblah"), &result)); | |
| 447 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( | |
| 448 GURL("http://www.google.com/?url=INVALIDurlsAREsoMUCHfun.com"), &result)); | |
| 449 EXPECT_TRUE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( | |
| 450 GURL("http://www.google.com/?url=http://validURLSareGREAT.com"), | |
| 451 &result)); | |
| 452 ASSERT_EQ(GURL("http://validURLSareGREAT.com").spec(), result.spec()); | |
| 453 } | |
| 454 | |
| 455 // Tests that a PrerenderManager created for a browser session in the control | 439 // Tests that a PrerenderManager created for a browser session in the control |
| 456 // group will not be able to override FINAL_STATUS_CONTROL_GROUP. | 440 // group will not be able to override FINAL_STATUS_CONTROL_GROUP. |
| 457 TEST_F(PrerenderManagerTest, ControlGroup) { | 441 TEST_F(PrerenderManagerTest, ControlGroup) { |
| 458 RestorePrerenderMode restore_prerender_mode; | 442 RestorePrerenderMode restore_prerender_mode; |
| 459 PrerenderManager::SetMode( | 443 PrerenderManager::SetMode( |
| 460 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 444 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
| 461 GURL url("http://www.google.com/"); | 445 GURL url("http://www.google.com/"); |
| 462 DummyPrerenderContents* prerender_contents = | 446 DummyPrerenderContents* prerender_contents = |
| 463 prerender_manager()->CreateNextPrerenderContents( | 447 prerender_manager()->CreateNextPrerenderContents( |
| 464 url, | 448 url, |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 url, | 514 url, |
| 531 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); | 515 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); |
| 532 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); | 516 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 533 EXPECT_TRUE(prerender_contents->has_started()); | 517 EXPECT_TRUE(prerender_contents->has_started()); |
| 534 prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS); | 518 prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS); |
| 535 DummyPrerenderContents* null = NULL; | 519 DummyPrerenderContents* null = NULL; |
| 536 EXPECT_EQ(null, prerender_manager()->GetEntry(url)); | 520 EXPECT_EQ(null, prerender_manager()->GetEntry(url)); |
| 537 } | 521 } |
| 538 | 522 |
| 539 } // namespace prerender | 523 } // namespace prerender |
| OLD | NEW |