| 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 <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/prefs/pref_service.h" |
| 13 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
| 14 #include "base/time/time.h" | 15 #include "base/time/time.h" |
| 16 #include "chrome/browser/net/prediction_options.h" |
| 15 #include "chrome/browser/prerender/prerender_contents.h" | 17 #include "chrome/browser/prerender/prerender_contents.h" |
| 16 #include "chrome/browser/prerender/prerender_handle.h" | 18 #include "chrome/browser/prerender/prerender_handle.h" |
| 17 #include "chrome/browser/prerender/prerender_link_manager.h" | 19 #include "chrome/browser/prerender/prerender_link_manager.h" |
| 18 #include "chrome/browser/prerender/prerender_manager.h" | 20 #include "chrome/browser/prerender/prerender_manager.h" |
| 19 #include "chrome/browser/prerender/prerender_origin.h" | 21 #include "chrome/browser/prerender/prerender_origin.h" |
| 20 #include "chrome/common/chrome_switches.h" | 22 #include "chrome/common/chrome_switches.h" |
| 23 #include "chrome/common/pref_names.h" |
| 21 #include "chrome/common/prerender_types.h" | 24 #include "chrome/common/prerender_types.h" |
| 22 #include "chrome/test/base/testing_browser_process.h" | 25 #include "chrome/test/base/testing_browser_process.h" |
| 23 #include "chrome/test/base/testing_profile.h" | 26 #include "chrome/test/base/testing_profile.h" |
| 24 #include "content/public/browser/render_view_host.h" | 27 #include "content/public/browser/render_view_host.h" |
| 25 #include "content/public/test/test_browser_thread.h" | 28 #include "content/public/test/test_browser_thread.h" |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 27 #include "ui/gfx/size.h" | 30 #include "ui/gfx/size.h" |
| 28 #include "url/gurl.h" | 31 #include "url/gurl.h" |
| 29 | 32 |
| 30 using base::Time; | 33 using base::Time; |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 // Shorthand to add a simple prerender with a reasonable source. Returns | 389 // Shorthand to add a simple prerender with a reasonable source. Returns |
| 387 // true iff the prerender has been added to the PrerenderManager by the | 390 // true iff the prerender has been added to the PrerenderManager by the |
| 388 // PrerenderLinkManager and the PrerenderManager returned a handle. | 391 // PrerenderLinkManager and the PrerenderManager returned a handle. |
| 389 bool AddSimplePrerender(const GURL& url) { | 392 bool AddSimplePrerender(const GURL& url) { |
| 390 prerender_link_manager()->OnAddPrerender( | 393 prerender_link_manager()->OnAddPrerender( |
| 391 kDefaultChildId, GetNextPrerenderID(), url, kDefaultRelTypes, | 394 kDefaultChildId, GetNextPrerenderID(), url, kDefaultRelTypes, |
| 392 content::Referrer(), kSize, kDefaultRenderViewRouteId); | 395 content::Referrer(), kSize, kDefaultRenderViewRouteId); |
| 393 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id()); | 396 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id()); |
| 394 } | 397 } |
| 395 | 398 |
| 399 void DisablePrerender() { |
| 400 profile_.GetPrefs()->SetInteger( |
| 401 prefs::kNetworkPredictionOptions, |
| 402 chrome_browser_net::NETWORK_PREDICTION_NEVER); |
| 403 } |
| 404 |
| 396 private: | 405 private: |
| 397 PrerenderTracker* prerender_tracker() { | 406 PrerenderTracker* prerender_tracker() { |
| 398 return g_browser_process->prerender_tracker(); | 407 return g_browser_process->prerender_tracker(); |
| 399 } | 408 } |
| 400 | 409 |
| 401 // Needed to pass PrerenderManager's DCHECKs. | 410 // Needed to pass PrerenderManager's DCHECKs. |
| 402 TestingProfile profile_; | 411 TestingProfile profile_; |
| 403 base::MessageLoop message_loop_; | 412 base::MessageLoop message_loop_; |
| 404 content::TestBrowserThread ui_thread_; | 413 content::TestBrowserThread ui_thread_; |
| 405 scoped_ptr<UnitTestPrerenderManager> prerender_manager_; | 414 scoped_ptr<UnitTestPrerenderManager> prerender_manager_; |
| (...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1023 prerender_manager()->CreateNextPrerenderContents( | 1032 prerender_manager()->CreateNextPrerenderContents( |
| 1024 url, FINAL_STATUS_CANCELLED); | 1033 url, FINAL_STATUS_CANCELLED); |
| 1025 EXPECT_TRUE(AddSimplePrerender(url)); | 1034 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1026 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1035 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1027 prerender_manager()->CancelAllPrerenders(); | 1036 prerender_manager()->CancelAllPrerenders(); |
| 1028 const DummyPrerenderContents* null = NULL; | 1037 const DummyPrerenderContents* null = NULL; |
| 1029 EXPECT_EQ(null, prerender_manager()->FindEntry(url)); | 1038 EXPECT_EQ(null, prerender_manager()->FindEntry(url)); |
| 1030 } | 1039 } |
| 1031 | 1040 |
| 1032 TEST_F(PrerenderTest, OmniboxNotAllowedWhenDisabled) { | 1041 TEST_F(PrerenderTest, OmniboxNotAllowedWhenDisabled) { |
| 1033 prerender_manager()->set_enabled(false); | 1042 DisablePrerender(); |
| 1034 EXPECT_FALSE(prerender_manager()->AddPrerenderFromOmnibox( | 1043 EXPECT_FALSE(prerender_manager()->AddPrerenderFromOmnibox( |
| 1035 GURL("http://www.example.com"), NULL, gfx::Size())); | 1044 GURL("http://www.example.com"), NULL, gfx::Size())); |
| 1036 } | 1045 } |
| 1037 | 1046 |
| 1038 TEST_F(PrerenderTest, LinkRelNotAllowedWhenDisabled) { | 1047 TEST_F(PrerenderTest, LinkRelNotAllowedWhenDisabled) { |
| 1039 prerender_manager()->set_enabled(false); | 1048 DisablePrerender(); |
| 1040 EXPECT_FALSE(AddSimplePrerender( | 1049 EXPECT_FALSE(AddSimplePrerender( |
| 1041 GURL("http://www.example.com"))); | 1050 GURL("http://www.example.com"))); |
| 1042 } | 1051 } |
| 1043 | 1052 |
| 1044 TEST_F(PrerenderTest, LinkManagerCancel) { | 1053 TEST_F(PrerenderTest, LinkManagerCancel) { |
| 1045 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1054 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1046 GURL url("http://www.myexample.com"); | 1055 GURL url("http://www.myexample.com"); |
| 1047 DummyPrerenderContents* prerender_contents = | 1056 DummyPrerenderContents* prerender_contents = |
| 1048 prerender_manager()->CreateNextPrerenderContents( | 1057 prerender_manager()->CreateNextPrerenderContents( |
| 1049 url, FINAL_STATUS_CANCELLED); | 1058 url, FINAL_STATUS_CANCELLED); |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1537 prerender_manager()->AdvanceTimeTicks(wait_for_first_prerender_to_expire); | 1546 prerender_manager()->AdvanceTimeTicks(wait_for_first_prerender_to_expire); |
| 1538 EXPECT_EQ(null, prerender_manager()->FindEntry(first_url)); | 1547 EXPECT_EQ(null, prerender_manager()->FindEntry(first_url)); |
| 1539 EXPECT_EQ(second_prerender_contents, | 1548 EXPECT_EQ(second_prerender_contents, |
| 1540 prerender_manager()->FindAndUseEntry(second_url)); | 1549 prerender_manager()->FindAndUseEntry(second_url)); |
| 1541 } | 1550 } |
| 1542 | 1551 |
| 1543 TEST_F(PrerenderTest, InstantSearchNotAllowedWhenDisabled) { | 1552 TEST_F(PrerenderTest, InstantSearchNotAllowedWhenDisabled) { |
| 1544 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1553 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1545 "EmbeddedSearch", | 1554 "EmbeddedSearch", |
| 1546 "Group82 espv:8 use_cacheable_ntp:1 prefetch_results:1")); | 1555 "Group82 espv:8 use_cacheable_ntp:1 prefetch_results:1")); |
| 1547 prerender_manager()->set_enabled(false); | 1556 DisablePrerender(); |
| 1548 EXPECT_FALSE(prerender_manager()->AddPrerenderForInstant( | 1557 EXPECT_FALSE(prerender_manager()->AddPrerenderForInstant( |
| 1549 GURL("http://www.example.com/instant_search"), NULL, gfx::Size())); | 1558 GURL("http://www.example.com/instant_search"), NULL, gfx::Size())); |
| 1550 } | 1559 } |
| 1551 | 1560 |
| 1552 TEST_F(PrerenderTest, PrerenderContentsForInstantSearch) { | 1561 TEST_F(PrerenderTest, PrerenderContentsForInstantSearch) { |
| 1553 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1562 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1554 "EmbeddedSearch", | 1563 "EmbeddedSearch", |
| 1555 "Group82 espv:8 use_cacheable_ntp:1 prefetch_results:1")); | 1564 "Group82 espv:8 use_cacheable_ntp:1 prefetch_results:1")); |
| 1556 GURL url("http://www.example.com/instant_search"); | 1565 GURL url("http://www.example.com/instant_search"); |
| 1557 DummyPrerenderContents* prerender_contents = | 1566 DummyPrerenderContents* prerender_contents = |
| 1558 prerender_manager()->CreateNextPrerenderContents(url, ORIGIN_INSTANT, | 1567 prerender_manager()->CreateNextPrerenderContents(url, ORIGIN_INSTANT, |
| 1559 FINAL_STATUS_USED); | 1568 FINAL_STATUS_USED); |
| 1560 scoped_ptr<PrerenderHandle> prerender_handle( | 1569 scoped_ptr<PrerenderHandle> prerender_handle( |
| 1561 prerender_manager()->AddPrerenderForInstant(url, NULL, kSize)); | 1570 prerender_manager()->AddPrerenderForInstant(url, NULL, kSize)); |
| 1562 CHECK(prerender_handle.get()); | 1571 CHECK(prerender_handle.get()); |
| 1563 EXPECT_TRUE(prerender_handle->IsPrerendering()); | 1572 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1564 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1573 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1565 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1574 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1566 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); | 1575 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); |
| 1567 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 1576 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
| 1568 EXPECT_FALSE(prerender_handle->IsPrerendering()); | 1577 EXPECT_FALSE(prerender_handle->IsPrerendering()); |
| 1569 } | 1578 } |
| 1570 | 1579 |
| 1571 } // namespace prerender | 1580 } // namespace prerender |
| OLD | NEW |