| OLD | NEW |
| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/memory/scoped_vector.h" | 6 #include "base/memory/scoped_vector.h" |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/time.h" | 8 #include "base/time.h" |
| 9 #include "chrome/browser/prerender/prerender_contents.h" | 9 #include "chrome/browser/prerender/prerender_contents.h" |
| 10 #include "chrome/browser/prerender/prerender_handle.h" |
| 10 #include "chrome/browser/prerender/prerender_link_manager.h" | 11 #include "chrome/browser/prerender/prerender_link_manager.h" |
| 11 #include "chrome/browser/prerender/prerender_manager.h" | 12 #include "chrome/browser/prerender/prerender_manager.h" |
| 12 #include "chrome/browser/prerender/prerender_origin.h" | 13 #include "chrome/browser/prerender/prerender_origin.h" |
| 13 #include "chrome/common/chrome_switches.h" | 14 #include "chrome/common/chrome_switches.h" |
| 14 #include "chrome/test/base/testing_browser_process.h" | 15 #include "chrome/test/base/testing_browser_process.h" |
| 15 #include "chrome/test/base/testing_profile.h" | 16 #include "chrome/test/base/testing_profile.h" |
| 16 #include "content/public/browser/render_view_host.h" | 17 #include "content/public/browser/render_view_host.h" |
| 17 #include "content/public/test/test_browser_thread.h" | 18 #include "content/public/test/test_browser_thread.h" |
| 18 #include "googleurl/src/gurl.h" | 19 #include "googleurl/src/gurl.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 45 | 46 |
| 46 virtual void StartPrerendering( | 47 virtual void StartPrerendering( |
| 47 int ALLOW_UNUSED creator_child_id, | 48 int ALLOW_UNUSED creator_child_id, |
| 48 const gfx::Size& ALLOW_UNUSED size, | 49 const gfx::Size& ALLOW_UNUSED size, |
| 49 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, | 50 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, |
| 50 bool is_control_group) OVERRIDE { | 51 bool is_control_group) OVERRIDE { |
| 51 // In the base PrerenderContents implementation, StartPrerendering will | 52 // In the base PrerenderContents implementation, StartPrerendering will |
| 52 // be called even when the PrerenderManager is part of the control group, | 53 // be called even when the PrerenderManager is part of the control group, |
| 53 // but it will early exit before actually creating a new RenderView if | 54 // but it will early exit before actually creating a new RenderView if |
| 54 // |is_control_group| is true; | 55 // |is_control_group| is true; |
| 55 if (!is_control_group) | 56 if (!is_control_group) { |
| 56 prerendering_has_started_ = true; | 57 prerendering_has_started_ = true; |
| 58 } |
| 59 load_start_time_ = base::TimeTicks::Now(); |
| 57 } | 60 } |
| 58 | 61 |
| 59 virtual bool GetChildId(int* child_id) const OVERRIDE { | 62 virtual bool GetChildId(int* child_id) const OVERRIDE { |
| 60 *child_id = 0; | 63 *child_id = 0; |
| 61 return true; | 64 return true; |
| 62 } | 65 } |
| 63 | 66 |
| 64 virtual bool GetRouteId(int* route_id) const OVERRIDE { | 67 virtual bool GetRouteId(int* route_id) const OVERRIDE { |
| 65 *route_id = 0; | 68 *route_id = 0; |
| 66 return true; | 69 return true; |
| 67 } | 70 } |
| 68 | 71 |
| 69 FinalStatus expected_final_status() const { return expected_final_status_; } | 72 FinalStatus expected_final_status() const { return expected_final_status_; } |
| 70 | 73 |
| 71 bool prerendering_has_been_cancelled() const { | 74 bool prerendering_has_been_cancelled() const { |
| 72 return PrerenderContents::prerendering_has_been_cancelled(); | 75 return PrerenderContents::prerendering_has_been_cancelled(); |
| 73 } | 76 } |
| 74 | 77 |
| 75 private: | 78 private: |
| 76 FinalStatus expected_final_status_; | 79 FinalStatus expected_final_status_; |
| 77 }; | 80 }; |
| 78 | 81 |
| 79 class TestPrerenderManager : public PrerenderManager { | 82 class TestPrerenderManager : public PrerenderManager { |
| 80 public: | 83 public: |
| 84 using PrerenderManager::FindEntry; |
| 85 |
| 81 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) | 86 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) |
| 82 : PrerenderManager(&profile_, prerender_tracker), | 87 : PrerenderManager(&profile_, prerender_tracker), |
| 83 time_(base::Time::Now()), | 88 time_(base::Time::Now()), |
| 84 time_ticks_(base::TimeTicks::Now()), | 89 time_ticks_(base::TimeTicks::Now()), |
| 85 next_prerender_contents_(NULL), | 90 next_prerender_contents_(NULL), |
| 86 prerender_tracker_(prerender_tracker) { | 91 prerender_tracker_(prerender_tracker) { |
| 87 set_rate_limit_enabled(false); | 92 set_rate_limit_enabled(false); |
| 88 } | 93 } |
| 89 | 94 |
| 90 virtual ~TestPrerenderManager() { | 95 virtual ~TestPrerenderManager() { |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 FINAL_STATUS_USED); | 487 FINAL_STATUS_USED); |
| 483 EXPECT_TRUE(AddSimplePrerender(url)); | 488 EXPECT_TRUE(AddSimplePrerender(url)); |
| 484 | 489 |
| 485 int child_id; | 490 int child_id; |
| 486 int route_id; | 491 int route_id; |
| 487 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); | 492 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); |
| 488 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); | 493 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); |
| 489 | 494 |
| 490 GURL pending_url("http://news.google.com/"); | 495 GURL pending_url("http://news.google.com/"); |
| 491 | 496 |
| 492 EXPECT_TRUE(prerender_manager()->AddPrerenderFromLinkRelPrerender( | 497 base::WeakPtr<PrerenderHandle> prerender_handle = |
| 493 child_id, route_id, | 498 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
| 494 pending_url, Referrer(url, WebKit::WebReferrerPolicyDefault), | 499 child_id, route_id, pending_url, |
| 495 gfx::Size())); | 500 Referrer(url, WebKit::WebReferrerPolicyDefault), gfx::Size()); |
| 496 | 501 EXPECT_TRUE(prerender_handle); |
| 497 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url)); | 502 EXPECT_TRUE(prerender_handle && prerender_handle->IsPending()); |
| 498 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 503 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 499 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 504 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
| 500 } | 505 } |
| 501 | 506 |
| 502 // Tests that a PrerenderManager created for a browser session in the control | 507 // Tests that a PrerenderManager created for a browser session in the control |
| 503 // group works as expected. | 508 // group works as expected. |
| 504 TEST_F(PrerenderTest, ControlGroup) { | 509 TEST_F(PrerenderTest, ControlGroup) { |
| 505 RestorePrerenderMode restore_prerender_mode; | 510 RestorePrerenderMode restore_prerender_mode; |
| 506 PrerenderManager::SetMode( | 511 PrerenderManager::SetMode( |
| 507 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 512 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 663 DummyPrerenderContents* prerender_contents = | 668 DummyPrerenderContents* prerender_contents = |
| 664 prerender_manager()->CreateNextPrerenderContents( | 669 prerender_manager()->CreateNextPrerenderContents( |
| 665 url, FINAL_STATUS_CANCELLED); | 670 url, FINAL_STATUS_CANCELLED); |
| 666 EXPECT_TRUE(AddSimplePrerender(url)); | 671 EXPECT_TRUE(AddSimplePrerender(url)); |
| 667 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 672 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 668 prerender_manager()->CancelAllPrerenders(); | 673 prerender_manager()->CancelAllPrerenders(); |
| 669 const DummyPrerenderContents* null = NULL; | 674 const DummyPrerenderContents* null = NULL; |
| 670 EXPECT_EQ(null, prerender_manager()->FindEntry(url)); | 675 EXPECT_EQ(null, prerender_manager()->FindEntry(url)); |
| 671 } | 676 } |
| 672 | 677 |
| 673 // Make sure canceling for omnibox works as expected. | |
| 674 TEST_F(PrerenderTest, CancelOmniboxRemovesOmniboxTest) { | |
| 675 // Check canceling removes the Omnibox url. | |
| 676 GURL url("http://www.google.com/"); | |
| 677 DummyPrerenderContents* prerender_contents = | |
| 678 prerender_manager()->CreateNextPrerenderContents( | |
| 679 url, ORIGIN_OMNIBOX, FINAL_STATUS_CANCELLED); | |
| 680 EXPECT_TRUE(prerender_manager()->AddPrerenderFromOmnibox(url, NULL)); | |
| 681 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | |
| 682 prerender_manager()->CancelOmniboxPrerenders(); | |
| 683 const DummyPrerenderContents* null = NULL; | |
| 684 EXPECT_EQ(null, prerender_manager()->FindEntry(url)); | |
| 685 } | |
| 686 | |
| 687 TEST_F(PrerenderTest, CancelOmniboxDoesNotRemoveLinkTest) { | |
| 688 GURL url("http://www.google.com/"); | |
| 689 DummyPrerenderContents* prerender_contents = | |
| 690 prerender_manager()->CreateNextPrerenderContents( | |
| 691 url, ORIGIN_LINK_REL_PRERENDER, FINAL_STATUS_MANAGER_SHUTDOWN); | |
| 692 EXPECT_TRUE(AddSimplePrerender(url)); | |
| 693 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | |
| 694 prerender_manager()->CancelOmniboxPrerenders(); | |
| 695 const DummyPrerenderContents* null = NULL; | |
| 696 EXPECT_NE(null, prerender_manager()->FindEntry(url)); | |
| 697 } | |
| 698 | |
| 699 TEST_F(PrerenderTest, OmniboxNotAllowedWhenDisabled) { | 678 TEST_F(PrerenderTest, OmniboxNotAllowedWhenDisabled) { |
| 700 prerender_manager()->set_enabled(false); | 679 prerender_manager()->set_enabled(false); |
| 701 EXPECT_FALSE(prerender_manager()->AddPrerenderFromOmnibox( | 680 EXPECT_FALSE(prerender_manager()->AddPrerenderFromOmnibox( |
| 702 GURL("http://www.example.com"), NULL)); | 681 GURL("http://www.example.com"), NULL)); |
| 703 } | 682 } |
| 704 | 683 |
| 705 TEST_F(PrerenderTest, LinkRelNotAllowedWhenDisabled) { | 684 TEST_F(PrerenderTest, LinkRelNotAllowedWhenDisabled) { |
| 706 prerender_manager()->set_enabled(false); | 685 prerender_manager()->set_enabled(false); |
| 707 EXPECT_FALSE(AddSimplePrerender( | 686 EXPECT_FALSE(AddSimplePrerender( |
| 708 GURL("http://www.example.com"))); | 687 GURL("http://www.example.com"))); |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 985 DummyPrerenderContents* second_prerender_contents = | 964 DummyPrerenderContents* second_prerender_contents = |
| 986 prerender_manager()->CreateNextPrerenderContents( | 965 prerender_manager()->CreateNextPrerenderContents( |
| 987 url, FINAL_STATUS_USED); | 966 url, FINAL_STATUS_USED); |
| 988 EXPECT_TRUE(AddSimplePrerender(url)); | 967 EXPECT_TRUE(AddSimplePrerender(url)); |
| 989 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 968 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
| 990 ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url)); | 969 ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url)); |
| 991 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 970 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 992 } | 971 } |
| 993 | 972 |
| 994 } // namespace prerender | 973 } // namespace prerender |
| OLD | NEW |