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

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: remove unstartable prerenders Created 7 years 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
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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/format_macros.h" 6 #include "base/format_macros.h"
7 #include "base/memory/scoped_vector.h" 7 #include "base/memory/scoped_vector.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "chrome/browser/prerender/prerender_contents.h" 12 #include "chrome/browser/prerender/prerender_contents.h"
13 #include "chrome/browser/prerender/prerender_handle.h" 13 #include "chrome/browser/prerender/prerender_handle.h"
14 #include "chrome/browser/prerender/prerender_link_manager.h" 14 #include "chrome/browser/prerender/prerender_link_manager.h"
15 #include "chrome/browser/prerender/prerender_manager.h" 15 #include "chrome/browser/prerender/prerender_manager.h"
16 #include "chrome/browser/prerender/prerender_origin.h" 16 #include "chrome/browser/prerender/prerender_origin.h"
17 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
18 #include "chrome/common/prerender_types.h"
18 #include "chrome/test/base/testing_browser_process.h" 19 #include "chrome/test/base/testing_browser_process.h"
19 #include "chrome/test/base/testing_profile.h" 20 #include "chrome/test/base/testing_profile.h"
20 #include "content/public/browser/render_view_host.h" 21 #include "content/public/browser/render_view_host.h"
21 #include "content/public/test/test_browser_thread.h" 22 #include "content/public/test/test_browser_thread.h"
22 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
23 #include "ui/gfx/size.h" 24 #include "ui/gfx/size.h"
24 #include "url/gurl.h" 25 #include "url/gurl.h"
25 26
26 using base::Time; 27 using base::Time;
27 using base::TimeDelta; 28 using base::TimeDelta;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 int route_id_; 77 int route_id_;
77 78
78 UnitTestPrerenderManager* test_prerender_manager_; 79 UnitTestPrerenderManager* test_prerender_manager_;
79 FinalStatus expected_final_status_; 80 FinalStatus expected_final_status_;
80 }; 81 };
81 82
82 int DummyPrerenderContents::g_next_route_id_ = 0; 83 int DummyPrerenderContents::g_next_route_id_ = 0;
83 84
84 const gfx::Size kSize(640, 480); 85 const gfx::Size kSize(640, 480);
85 86
87 const uint32 kDefaultRelTypes = PrerenderRelTypePrerender;
88
86 } // namespace 89 } // namespace
87 90
88 class UnitTestPrerenderManager : public PrerenderManager { 91 class UnitTestPrerenderManager : public PrerenderManager {
89 public: 92 public:
90 using PrerenderManager::kMinTimeBetweenPrerendersMs; 93 using PrerenderManager::kMinTimeBetweenPrerendersMs;
91 using PrerenderManager::kNavigationRecordWindowMs; 94 using PrerenderManager::kNavigationRecordWindowMs;
92 95
93 explicit UnitTestPrerenderManager(Profile* profile, 96 explicit UnitTestPrerenderManager(Profile* profile,
94 PrerenderTracker* prerender_tracker) 97 PrerenderTracker* prerender_tracker)
95 : PrerenderManager(profile, prerender_tracker), 98 : PrerenderManager(profile, prerender_tracker),
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 PrerenderLinkManager::LinkPrerender* prerender = 332 PrerenderLinkManager::LinkPrerender* prerender =
330 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId( 333 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId(
331 child_id, prerender_id); 334 child_id, prerender_id);
332 return prerender && prerender->handle; 335 return prerender && prerender->handle;
333 } 336 }
334 337
335 // Shorthand to add a simple prerender with a reasonable source. Returns 338 // Shorthand to add a simple prerender with a reasonable source. Returns
336 // true iff the prerender has been added to the PrerenderManager by the 339 // true iff the prerender has been added to the PrerenderManager by the
337 // PrerenderLinkManager and the PrerenderManager returned a handle. 340 // PrerenderLinkManager and the PrerenderManager returned a handle.
338 bool AddSimplePrerender(const GURL& url) { 341 bool AddSimplePrerender(const GURL& url) {
339 prerender_link_manager()->OnAddPrerender(kDefaultChildId, 342 prerender_link_manager()->OnAddPrerender(
340 GetNextPrerenderID(), 343 kDefaultChildId, GetNextPrerenderID(), url, kDefaultRelTypes,
341 url, content::Referrer(), 344 content::Referrer(), kSize, kDefaultRenderViewRouteId);
342 kSize, kDefaultRenderViewRouteId);
343 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id()); 345 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id());
344 } 346 }
345 347
346 private: 348 private:
347 PrerenderTracker* prerender_tracker() { 349 PrerenderTracker* prerender_tracker() {
348 return g_browser_process->prerender_tracker(); 350 return g_browser_process->prerender_tracker();
349 } 351 }
350 352
351 // Needed to pass PrerenderManager's DCHECKs. 353 // Needed to pass PrerenderManager's DCHECKs.
352 TestingProfile profile_; 354 TestingProfile profile_;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 if (concurrencies_to_test[i].max_link_concurrency > 589 if (concurrencies_to_test[i].max_link_concurrency >
588 effective_max_link_concurrency) { 590 effective_max_link_concurrency) {
589 // We should be able to launch more prerenders on this system, but not for 591 // We should be able to launch more prerenders on this system, but not for
590 // our current launcher. 592 // our current launcher.
591 int child_id; 593 int child_id;
592 int route_id; 594 int route_id;
593 ASSERT_TRUE(prerender_contentses.back()->GetChildId(&child_id)); 595 ASSERT_TRUE(prerender_contentses.back()->GetChildId(&child_id));
594 ASSERT_TRUE(prerender_contentses.back()->GetRouteId(&route_id)); 596 ASSERT_TRUE(prerender_contentses.back()->GetRouteId(&route_id));
595 597
596 GURL extra_url("http://google.com/extraurl"); 598 GURL extra_url("http://google.com/extraurl");
597 prerender_link_manager()->OnAddPrerender(child_id, 599 prerender_link_manager()->OnAddPrerender(
598 GetNextPrerenderID(), 600 child_id, GetNextPrerenderID(), extra_url, kDefaultRelTypes,
599 extra_url, content::Referrer(), 601 content::Referrer(), kSize, route_id);
600 kSize, route_id);
601 const int prerender_id = last_prerender_id(); 602 const int prerender_id = last_prerender_id();
602 EXPECT_TRUE(LauncherHasRunningPrerender(child_id, prerender_id)); 603 EXPECT_TRUE(LauncherHasRunningPrerender(child_id, prerender_id));
603 prerender_link_manager()->OnCancelPrerender(child_id, prerender_id); 604 prerender_link_manager()->OnCancelPrerender(child_id, prerender_id);
604 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, prerender_id)); 605 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, prerender_id));
605 } 606 }
606 607
607 DummyPrerenderContents* prerender_contents_to_delay = 608 DummyPrerenderContents* prerender_contents_to_delay =
608 prerender_manager()->CreateNextPrerenderContents(url_to_delay, 609 prerender_manager()->CreateNextPrerenderContents(url_to_delay,
609 FINAL_STATUS_USED); 610 FINAL_STATUS_USED);
610 EXPECT_FALSE(AddSimplePrerender(url_to_delay)); 611 EXPECT_FALSE(AddSimplePrerender(url_to_delay));
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 } 778 }
778 779
779 // Tests that prerendering is cancelled when the source render view does not 780 // Tests that prerendering is cancelled when the source render view does not
780 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be 781 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be
781 // triggered. 782 // triggered.
782 TEST_F(PrerenderTest, SourceRenderViewClosed) { 783 TEST_F(PrerenderTest, SourceRenderViewClosed) {
783 GURL url("http://www.google.com/"); 784 GURL url("http://www.google.com/");
784 prerender_manager()->CreateNextPrerenderContents( 785 prerender_manager()->CreateNextPrerenderContents(
785 url, 786 url,
786 FINAL_STATUS_MANAGER_SHUTDOWN); 787 FINAL_STATUS_MANAGER_SHUTDOWN);
787 prerender_link_manager()->OnAddPrerender(100, GetNextPrerenderID(), url, 788 prerender_link_manager()->OnAddPrerender(
788 Referrer(), kSize, 200); 789 100, GetNextPrerenderID(), url, kDefaultRelTypes, Referrer(), kSize, 200);
789 EXPECT_FALSE(LauncherHasRunningPrerender(100, last_prerender_id())); 790 EXPECT_FALSE(LauncherHasRunningPrerender(100, last_prerender_id()));
790 } 791 }
791 792
793 // Tests that prerendering doesn't launch rel=next prerenders without the field
794 // trial.
795 TEST_F(PrerenderTest, NoRelNextByDefault) {
796 GURL url("http://www.google.com/");
797 prerender_manager()->CreateNextPrerenderContents(
798 url, FINAL_STATUS_MANAGER_SHUTDOWN);
799 DummyPrerenderContents* null = NULL;
800
801 prerender_link_manager()->OnAddPrerender(
802 kDefaultChildId, GetNextPrerenderID(), url, PrerenderRelTypeNext,
803 Referrer(), kSize, kDefaultRenderViewRouteId);
804 EXPECT_EQ(null, prerender_manager()->FindEntry(url));
805 }
806
807 // Tests that prerendering does launch rel=next prerenders with the field trial.
808 TEST_F(PrerenderTest, RelNextByFieldTrial) {
809 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("PrerenderRelNextTrial",
810 "Yes"));
811 GURL url("http://www.google.com/");
812 DummyPrerenderContents* prerender_contents =
813 prerender_manager()->CreateNextPrerenderContents(
814 url, FINAL_STATUS_MANAGER_SHUTDOWN);
815
816 prerender_link_manager()->OnAddPrerender(
817 kDefaultChildId, GetNextPrerenderID(), url, PrerenderRelTypeNext,
818 Referrer(), kSize, kDefaultRenderViewRouteId);
819 EXPECT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
820 }
821
792 // Tests that prerendering is cancelled when we launch a second prerender of 822 // Tests that prerendering is cancelled when we launch a second prerender of
793 // the same target within a short time interval. 823 // the same target within a short time interval.
794 TEST_F(PrerenderTest, RecentlyVisited) { 824 TEST_F(PrerenderTest, RecentlyVisited) {
795 GURL url("http://www.google.com/"); 825 GURL url("http://www.google.com/");
796 826
797 prerender_manager()->RecordNavigation(url); 827 prerender_manager()->RecordNavigation(url);
798 828
799 DummyPrerenderContents* prerender_contents = 829 DummyPrerenderContents* prerender_contents =
800 prerender_manager()->CreateNextPrerenderContents( 830 prerender_manager()->CreateNextPrerenderContents(
801 url, FINAL_STATUS_RECENTLY_VISITED); 831 url, FINAL_STATUS_RECENTLY_VISITED);
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
1337 first_url, FINAL_STATUS_TIMED_OUT); 1367 first_url, FINAL_STATUS_TIMED_OUT);
1338 EXPECT_TRUE(AddSimplePrerender(first_url)); 1368 EXPECT_TRUE(AddSimplePrerender(first_url));
1339 const int first_prerender_id = last_prerender_id(); 1369 const int first_prerender_id = last_prerender_id();
1340 1370
1341 int child_id; 1371 int child_id;
1342 int route_id; 1372 int route_id;
1343 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); 1373 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
1344 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); 1374 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
1345 1375
1346 GURL pending_url("http://www.neverlaunched.com"); 1376 GURL pending_url("http://www.neverlaunched.com");
1347 prerender_link_manager()->OnAddPrerender(child_id, 1377 prerender_link_manager()->OnAddPrerender(
1348 GetNextPrerenderID(), 1378 child_id, GetNextPrerenderID(), pending_url, kDefaultRelTypes,
1349 pending_url, content::Referrer(), 1379 content::Referrer(), kSize, route_id);
1350 kSize, route_id);
1351 const int second_prerender_id = last_prerender_id(); 1380 const int second_prerender_id = last_prerender_id();
1352 1381
1353 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1382 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
1354 1383
1355 DummyPrerenderContents* null = NULL; 1384 DummyPrerenderContents* null = NULL;
1356 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); 1385 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url));
1357 EXPECT_EQ(null, prerender_manager()->FindEntry(pending_url)); 1386 EXPECT_EQ(null, prerender_manager()->FindEntry(pending_url));
1358 1387
1359 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, 1388 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId,
1360 first_prerender_id); 1389 first_prerender_id);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 CHECK(prerender_handle.get()); 1506 CHECK(prerender_handle.get());
1478 EXPECT_TRUE(prerender_handle->IsPrerendering()); 1507 EXPECT_TRUE(prerender_handle->IsPrerendering());
1479 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 1508 EXPECT_TRUE(prerender_contents->prerendering_has_started());
1480 EXPECT_EQ(prerender_contents, prerender_handle->contents()); 1509 EXPECT_EQ(prerender_contents, prerender_handle->contents());
1481 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); 1510 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin());
1482 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 1511 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
1483 EXPECT_FALSE(prerender_handle->IsPrerendering()); 1512 EXPECT_FALSE(prerender_handle->IsPrerendering());
1484 } 1513 }
1485 1514
1486 } // namespace prerender 1515 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698