Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: chrome/browser/prerender/prerender_unittest.cc

Issue 145073009: Revert of Add <link rel=next> support to prerender. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/prerender/prerender_message_filter.cc ('k') | chrome/chrome_common.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <map> 5 #include <map>
6 #include <utility> 6 #include <utility>
7 7
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/memory/scoped_vector.h" 10 #include "base/memory/scoped_vector.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/metrics/field_trial.h" 12 #include "base/metrics/field_trial.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "base/time/time.h" 14 #include "base/time/time.h"
15 #include "chrome/browser/prerender/prerender_contents.h" 15 #include "chrome/browser/prerender/prerender_contents.h"
16 #include "chrome/browser/prerender/prerender_handle.h" 16 #include "chrome/browser/prerender/prerender_handle.h"
17 #include "chrome/browser/prerender/prerender_link_manager.h" 17 #include "chrome/browser/prerender/prerender_link_manager.h"
18 #include "chrome/browser/prerender/prerender_manager.h" 18 #include "chrome/browser/prerender/prerender_manager.h"
19 #include "chrome/browser/prerender/prerender_origin.h" 19 #include "chrome/browser/prerender/prerender_origin.h"
20 #include "chrome/common/chrome_switches.h" 20 #include "chrome/common/chrome_switches.h"
21 #include "chrome/common/prerender_types.h"
22 #include "chrome/test/base/testing_browser_process.h" 21 #include "chrome/test/base/testing_browser_process.h"
23 #include "chrome/test/base/testing_profile.h" 22 #include "chrome/test/base/testing_profile.h"
24 #include "content/public/browser/render_view_host.h" 23 #include "content/public/browser/render_view_host.h"
25 #include "content/public/test/test_browser_thread.h" 24 #include "content/public/test/test_browser_thread.h"
26 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
27 #include "ui/gfx/size.h" 26 #include "ui/gfx/size.h"
28 #include "url/gurl.h" 27 #include "url/gurl.h"
29 28
30 using base::Time; 29 using base::Time;
31 using base::TimeDelta; 30 using base::TimeDelta;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 int route_id_; 77 int route_id_;
79 78
80 UnitTestPrerenderManager* test_prerender_manager_; 79 UnitTestPrerenderManager* test_prerender_manager_;
81 FinalStatus expected_final_status_; 80 FinalStatus expected_final_status_;
82 }; 81 };
83 82
84 int DummyPrerenderContents::g_next_route_id_ = 0; 83 int DummyPrerenderContents::g_next_route_id_ = 0;
85 84
86 const gfx::Size kSize(640, 480); 85 const gfx::Size kSize(640, 480);
87 86
88 const uint32 kDefaultRelTypes = PrerenderRelTypePrerender;
89
90 } // namespace 87 } // namespace
91 88
92 class UnitTestPrerenderManager : public PrerenderManager { 89 class UnitTestPrerenderManager : public PrerenderManager {
93 public: 90 public:
94 using PrerenderManager::kMinTimeBetweenPrerendersMs; 91 using PrerenderManager::kMinTimeBetweenPrerendersMs;
95 using PrerenderManager::kNavigationRecordWindowMs; 92 using PrerenderManager::kNavigationRecordWindowMs;
96 93
97 explicit UnitTestPrerenderManager(Profile* profile, 94 explicit UnitTestPrerenderManager(Profile* profile,
98 PrerenderTracker* prerender_tracker) 95 PrerenderTracker* prerender_tracker)
99 : PrerenderManager(profile, prerender_tracker), 96 : PrerenderManager(profile, prerender_tracker),
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 PrerenderLinkManager::LinkPrerender* prerender = 369 PrerenderLinkManager::LinkPrerender* prerender =
373 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId( 370 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId(
374 child_id, prerender_id); 371 child_id, prerender_id);
375 return prerender != NULL; 372 return prerender != NULL;
376 } 373 }
377 374
378 // Shorthand to add a simple prerender with a reasonable source. Returns 375 // Shorthand to add a simple prerender with a reasonable source. Returns
379 // true iff the prerender has been added to the PrerenderManager by the 376 // true iff the prerender has been added to the PrerenderManager by the
380 // PrerenderLinkManager and the PrerenderManager returned a handle. 377 // PrerenderLinkManager and the PrerenderManager returned a handle.
381 bool AddSimplePrerender(const GURL& url) { 378 bool AddSimplePrerender(const GURL& url) {
382 prerender_link_manager()->OnAddPrerender( 379 prerender_link_manager()->OnAddPrerender(kDefaultChildId,
383 kDefaultChildId, GetNextPrerenderID(), url, kDefaultRelTypes, 380 GetNextPrerenderID(),
384 content::Referrer(), kSize, kDefaultRenderViewRouteId); 381 url, content::Referrer(),
382 kSize, kDefaultRenderViewRouteId);
385 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id()); 383 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id());
386 } 384 }
387 385
388 private: 386 private:
389 PrerenderTracker* prerender_tracker() { 387 PrerenderTracker* prerender_tracker() {
390 return g_browser_process->prerender_tracker(); 388 return g_browser_process->prerender_tracker();
391 } 389 }
392 390
393 // Needed to pass PrerenderManager's DCHECKs. 391 // Needed to pass PrerenderManager's DCHECKs.
394 TestingProfile profile_; 392 TestingProfile profile_;
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 712
715 GURL pending_url("http://news.google.com/"); 713 GURL pending_url("http://news.google.com/");
716 714
717 // Schedule a pending prerender launched from the prerender. 715 // Schedule a pending prerender launched from the prerender.
718 DummyPrerenderContents* pending_prerender_contents = 716 DummyPrerenderContents* pending_prerender_contents =
719 prerender_manager()->CreateNextPrerenderContents( 717 prerender_manager()->CreateNextPrerenderContents(
720 pending_url, 718 pending_url,
721 ORIGIN_GWS_PRERENDER, 719 ORIGIN_GWS_PRERENDER,
722 FINAL_STATUS_USED); 720 FINAL_STATUS_USED);
723 prerender_link_manager()->OnAddPrerender( 721 prerender_link_manager()->OnAddPrerender(
724 child_id, GetNextPrerenderID(), pending_url, kDefaultRelTypes, 722 child_id, GetNextPrerenderID(), pending_url,
725 Referrer(url, blink::WebReferrerPolicyDefault), 723 Referrer(url, blink::WebReferrerPolicyDefault),
726 kSize, route_id); 724 kSize, route_id);
727 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id())); 725 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
728 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started()); 726 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started());
729 727
730 // Use the referring prerender. 728 // Use the referring prerender.
731 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 729 EXPECT_TRUE(prerender_contents->prerendering_has_started());
732 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 730 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
733 731
734 // The pending prerender should start now. 732 // The pending prerender should start now.
(...skipping 20 matching lines...) Expand all
755 // to start. 753 // to start.
756 GURL pending_url("ftp://news.google.com/"); 754 GURL pending_url("ftp://news.google.com/");
757 755
758 // Schedule a pending prerender launched from the prerender. 756 // Schedule a pending prerender launched from the prerender.
759 DummyPrerenderContents* pending_prerender_contents = 757 DummyPrerenderContents* pending_prerender_contents =
760 prerender_manager()->CreateNextPrerenderContents( 758 prerender_manager()->CreateNextPrerenderContents(
761 pending_url, 759 pending_url,
762 ORIGIN_GWS_PRERENDER, 760 ORIGIN_GWS_PRERENDER,
763 FINAL_STATUS_UNSUPPORTED_SCHEME); 761 FINAL_STATUS_UNSUPPORTED_SCHEME);
764 prerender_link_manager()->OnAddPrerender( 762 prerender_link_manager()->OnAddPrerender(
765 child_id, GetNextPrerenderID(), pending_url, kDefaultRelTypes, 763 child_id, GetNextPrerenderID(), pending_url,
766 Referrer(url, blink::WebReferrerPolicyDefault), 764 Referrer(url, blink::WebReferrerPolicyDefault),
767 kSize, route_id); 765 kSize, route_id);
768 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id())); 766 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
769 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started()); 767 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started());
770 768
771 // Use the referring prerender. 769 // Use the referring prerender.
772 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 770 EXPECT_TRUE(prerender_contents->prerendering_has_started());
773 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 771 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
774 772
775 // The pending prerender still doesn't start. 773 // The pending prerender still doesn't start.
(...skipping 11 matching lines...) Expand all
787 785
788 int child_id; 786 int child_id;
789 int route_id; 787 int route_id;
790 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); 788 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
791 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); 789 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
792 790
793 GURL pending_url("http://news.google.com/"); 791 GURL pending_url("http://news.google.com/");
794 792
795 // Schedule a pending prerender launched from the prerender. 793 // Schedule a pending prerender launched from the prerender.
796 prerender_link_manager()->OnAddPrerender( 794 prerender_link_manager()->OnAddPrerender(
797 child_id, GetNextPrerenderID(), pending_url, kDefaultRelTypes, 795 child_id, GetNextPrerenderID(), pending_url,
798 Referrer(url, blink::WebReferrerPolicyDefault), 796 Referrer(url, blink::WebReferrerPolicyDefault),
799 kSize, route_id); 797 kSize, route_id);
800 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id())); 798 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
801 799
802 // Cancel the pending prerender. 800 // Cancel the pending prerender.
803 prerender_link_manager()->OnCancelPrerender(child_id, last_prerender_id()); 801 prerender_link_manager()->OnCancelPrerender(child_id, last_prerender_id());
804 802
805 // Use the referring prerender. 803 // Use the referring prerender.
806 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 804 EXPECT_TRUE(prerender_contents->prerendering_has_started());
807 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 805 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
(...skipping 18 matching lines...) Expand all
826 } 824 }
827 825
828 // Tests that prerendering is cancelled when the source render view does not 826 // Tests that prerendering is cancelled when the source render view does not
829 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be 827 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be
830 // triggered. 828 // triggered.
831 TEST_F(PrerenderTest, SourceRenderViewClosed) { 829 TEST_F(PrerenderTest, SourceRenderViewClosed) {
832 GURL url("http://www.google.com/"); 830 GURL url("http://www.google.com/");
833 prerender_manager()->CreateNextPrerenderContents( 831 prerender_manager()->CreateNextPrerenderContents(
834 url, 832 url,
835 FINAL_STATUS_MANAGER_SHUTDOWN); 833 FINAL_STATUS_MANAGER_SHUTDOWN);
836 prerender_link_manager()->OnAddPrerender( 834 prerender_link_manager()->OnAddPrerender(100, GetNextPrerenderID(), url,
837 100, GetNextPrerenderID(), url, kDefaultRelTypes, Referrer(), kSize, 200); 835 Referrer(), kSize, 200);
838 EXPECT_FALSE(LauncherHasRunningPrerender(100, last_prerender_id())); 836 EXPECT_FALSE(LauncherHasRunningPrerender(100, last_prerender_id()));
839 } 837 }
840 838
841 // Tests that prerendering doesn't launch rel=next prerenders without the field
842 // trial.
843 TEST_F(PrerenderTest, NoRelNextByDefault) {
844 GURL url("http://www.google.com/");
845 prerender_manager()->CreateNextPrerenderContents(
846 url, FINAL_STATUS_MANAGER_SHUTDOWN);
847 DummyPrerenderContents* null = NULL;
848
849 prerender_link_manager()->OnAddPrerender(
850 kDefaultChildId, GetNextPrerenderID(), url, PrerenderRelTypeNext,
851 Referrer(), kSize, kDefaultRenderViewRouteId);
852 EXPECT_EQ(null, prerender_manager()->FindEntry(url));
853 }
854
855 // Tests that prerendering does launch rel=next prerenders with the field trial.
856 TEST_F(PrerenderTest, RelNextByFieldTrial) {
857 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("PrerenderRelNextTrial",
858 "Yes"));
859 GURL url("http://www.google.com/");
860 DummyPrerenderContents* prerender_contents =
861 prerender_manager()->CreateNextPrerenderContents(
862 url, FINAL_STATUS_MANAGER_SHUTDOWN);
863
864 prerender_link_manager()->OnAddPrerender(
865 kDefaultChildId, GetNextPrerenderID(), url, PrerenderRelTypeNext,
866 Referrer(), kSize, kDefaultRenderViewRouteId);
867 EXPECT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
868 }
869
870 // Tests that prerendering is cancelled when we launch a second prerender of 839 // Tests that prerendering is cancelled when we launch a second prerender of
871 // the same target within a short time interval. 840 // the same target within a short time interval.
872 TEST_F(PrerenderTest, RecentlyVisited) { 841 TEST_F(PrerenderTest, RecentlyVisited) {
873 GURL url("http://www.google.com/"); 842 GURL url("http://www.google.com/");
874 843
875 prerender_manager()->RecordNavigation(url); 844 prerender_manager()->RecordNavigation(url);
876 845
877 DummyPrerenderContents* prerender_contents = 846 DummyPrerenderContents* prerender_contents =
878 prerender_manager()->CreateNextPrerenderContents( 847 prerender_manager()->CreateNextPrerenderContents(
879 url, FINAL_STATUS_RECENTLY_VISITED); 848 url, FINAL_STATUS_RECENTLY_VISITED);
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
1415 first_url, FINAL_STATUS_TIMED_OUT); 1384 first_url, FINAL_STATUS_TIMED_OUT);
1416 EXPECT_TRUE(AddSimplePrerender(first_url)); 1385 EXPECT_TRUE(AddSimplePrerender(first_url));
1417 const int first_prerender_id = last_prerender_id(); 1386 const int first_prerender_id = last_prerender_id();
1418 1387
1419 int child_id; 1388 int child_id;
1420 int route_id; 1389 int route_id;
1421 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); 1390 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
1422 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); 1391 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
1423 1392
1424 GURL pending_url("http://www.neverlaunched.com"); 1393 GURL pending_url("http://www.neverlaunched.com");
1425 prerender_link_manager()->OnAddPrerender( 1394 prerender_link_manager()->OnAddPrerender(child_id,
1426 child_id, GetNextPrerenderID(), pending_url, kDefaultRelTypes, 1395 GetNextPrerenderID(),
1427 content::Referrer(), kSize, route_id); 1396 pending_url, content::Referrer(),
1397 kSize, route_id);
1428 const int second_prerender_id = last_prerender_id(); 1398 const int second_prerender_id = last_prerender_id();
1429 1399
1430 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1400 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
1431 1401
1432 DummyPrerenderContents* null = NULL; 1402 DummyPrerenderContents* null = NULL;
1433 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); 1403 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url));
1434 EXPECT_EQ(null, prerender_manager()->FindEntry(pending_url)); 1404 EXPECT_EQ(null, prerender_manager()->FindEntry(pending_url));
1435 1405
1436 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, 1406 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId,
1437 first_prerender_id); 1407 first_prerender_id);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1554 CHECK(prerender_handle.get()); 1524 CHECK(prerender_handle.get());
1555 EXPECT_TRUE(prerender_handle->IsPrerendering()); 1525 EXPECT_TRUE(prerender_handle->IsPrerendering());
1556 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 1526 EXPECT_TRUE(prerender_contents->prerendering_has_started());
1557 EXPECT_EQ(prerender_contents, prerender_handle->contents()); 1527 EXPECT_EQ(prerender_contents, prerender_handle->contents());
1558 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); 1528 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin());
1559 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 1529 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
1560 EXPECT_FALSE(prerender_handle->IsPrerendering()); 1530 EXPECT_FALSE(prerender_handle->IsPrerendering());
1561 } 1531 }
1562 1532
1563 } // namespace prerender 1533 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_message_filter.cc ('k') | chrome/chrome_common.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698