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

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

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