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 |