| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 #include "chrome/common/pref_names.h" | 27 #include "chrome/common/pref_names.h" |
| 28 #include "chrome/common/prerender_types.h" | 28 #include "chrome/common/prerender_types.h" |
| 29 #include "chrome/test/base/testing_browser_process.h" | 29 #include "chrome/test/base/testing_browser_process.h" |
| 30 #include "chrome/test/base/testing_profile.h" | 30 #include "chrome/test/base/testing_profile.h" |
| 31 #include "components/content_settings/core/common/pref_names.h" | 31 #include "components/content_settings/core/common/pref_names.h" |
| 32 #include "components/prefs/pref_service.h" | 32 #include "components/prefs/pref_service.h" |
| 33 #include "content/public/browser/render_view_host.h" | 33 #include "content/public/browser/render_view_host.h" |
| 34 #include "content/public/test/test_browser_thread.h" | 34 #include "content/public/test/test_browser_thread.h" |
| 35 #include "net/base/network_change_notifier.h" | 35 #include "net/base/network_change_notifier.h" |
| 36 #include "testing/gtest/include/gtest/gtest.h" | 36 #include "testing/gtest/include/gtest/gtest.h" |
| 37 #include "ui/gfx/geometry/rect.h" |
| 37 #include "ui/gfx/geometry/size.h" | 38 #include "ui/gfx/geometry/size.h" |
| 38 #include "url/gurl.h" | 39 #include "url/gurl.h" |
| 39 | 40 |
| 40 using base::Time; | 41 using base::Time; |
| 41 using base::TimeDelta; | 42 using base::TimeDelta; |
| 42 using base::TimeTicks; | 43 using base::TimeTicks; |
| 43 using content::BrowserThread; | 44 using content::BrowserThread; |
| 44 using content::Referrer; | 45 using content::Referrer; |
| 45 | 46 |
| 46 namespace prerender { | 47 namespace prerender { |
| 47 | 48 |
| 48 class UnitTestPrerenderManager; | 49 class UnitTestPrerenderManager; |
| 49 | 50 |
| 50 namespace { | 51 namespace { |
| 51 | 52 |
| 52 class DummyPrerenderContents : public PrerenderContents { | 53 class DummyPrerenderContents : public PrerenderContents { |
| 53 public: | 54 public: |
| 54 DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager, | 55 DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager, |
| 55 const GURL& url, | 56 const GURL& url, |
| 56 Origin origin, | 57 Origin origin, |
| 57 FinalStatus expected_final_status); | 58 FinalStatus expected_final_status); |
| 58 | 59 |
| 59 ~DummyPrerenderContents() override; | 60 ~DummyPrerenderContents() override; |
| 60 | 61 |
| 61 void StartPrerendering( | 62 void StartPrerendering( |
| 62 const gfx::Size& size, | 63 const gfx::Rect& bounds, |
| 63 content::SessionStorageNamespace* session_storage_namespace) override; | 64 content::SessionStorageNamespace* session_storage_namespace) override; |
| 64 | 65 |
| 65 bool GetChildId(int* child_id) const override { | 66 bool GetChildId(int* child_id) const override { |
| 66 // Having a default child_id of -1 forces pending prerenders not to fail | 67 // Having a default child_id of -1 forces pending prerenders not to fail |
| 67 // on session storage and cross domain checking. | 68 // on session storage and cross domain checking. |
| 68 *child_id = -1; | 69 *child_id = -1; |
| 69 return true; | 70 return true; |
| 70 } | 71 } |
| 71 | 72 |
| 72 bool GetRouteId(int* route_id) const override { | 73 bool GetRouteId(int* route_id) const override { |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 route_id_(g_next_route_id_++), | 285 route_id_(g_next_route_id_++), |
| 285 test_prerender_manager_(test_prerender_manager), | 286 test_prerender_manager_(test_prerender_manager), |
| 286 expected_final_status_(expected_final_status) {} | 287 expected_final_status_(expected_final_status) {} |
| 287 | 288 |
| 288 DummyPrerenderContents::~DummyPrerenderContents() { | 289 DummyPrerenderContents::~DummyPrerenderContents() { |
| 289 EXPECT_EQ(expected_final_status_, final_status()); | 290 EXPECT_EQ(expected_final_status_, final_status()); |
| 290 test_prerender_manager_->DummyPrerenderContentsDestroyed(-1, route_id_); | 291 test_prerender_manager_->DummyPrerenderContentsDestroyed(-1, route_id_); |
| 291 } | 292 } |
| 292 | 293 |
| 293 void DummyPrerenderContents::StartPrerendering( | 294 void DummyPrerenderContents::StartPrerendering( |
| 294 const gfx::Size& size, | 295 const gfx::Rect& bounds, |
| 295 content::SessionStorageNamespace* session_storage_namespace) { | 296 content::SessionStorageNamespace* session_storage_namespace) { |
| 296 // In the base PrerenderContents implementation, StartPrerendering will | 297 // In the base PrerenderContents implementation, StartPrerendering will |
| 297 // be called even when the PrerenderManager is part of the control group, | 298 // be called even when the PrerenderManager is part of the control group, |
| 298 // but it will early exit before actually creating a new RenderView if | 299 // but it will early exit before actually creating a new RenderView if |
| 299 // |is_control_group| is true; | 300 // |is_control_group| is true; |
| 300 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); | 301 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); |
| 301 if (!test_prerender_manager_->IsControlGroup()) { | 302 if (!test_prerender_manager_->IsControlGroup()) { |
| 302 prerendering_has_started_ = true; | 303 prerendering_has_started_ = true; |
| 303 test_prerender_manager_->DummyPrerenderContentsStarted(-1, route_id_, this); | 304 test_prerender_manager_->DummyPrerenderContentsStarted(-1, route_id_, this); |
| 304 NotifyPrerenderStart(); | 305 NotifyPrerenderStart(); |
| (...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1091 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( | 1092 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( |
| 1092 net::NetworkChangeNotifier::GetConnectionType())); | 1093 net::NetworkChangeNotifier::GetConnectionType())); |
| 1093 GURL url("http://www.google.com/"); | 1094 GURL url("http://www.google.com/"); |
| 1094 DummyPrerenderContents* prerender_contents = | 1095 DummyPrerenderContents* prerender_contents = |
| 1095 prerender_manager()->CreateNextPrerenderContents( | 1096 prerender_manager()->CreateNextPrerenderContents( |
| 1096 url, | 1097 url, |
| 1097 ORIGIN_EXTERNAL_REQUEST, | 1098 ORIGIN_EXTERNAL_REQUEST, |
| 1098 FINAL_STATUS_MANAGER_SHUTDOWN); | 1099 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1099 std::unique_ptr<PrerenderHandle> prerender_handle( | 1100 std::unique_ptr<PrerenderHandle> prerender_handle( |
| 1100 prerender_manager()->AddPrerenderFromExternalRequest( | 1101 prerender_manager()->AddPrerenderFromExternalRequest( |
| 1101 url, content::Referrer(), nullptr, kSize)); | 1102 url, content::Referrer(), nullptr, gfx::Rect(kSize))); |
| 1102 EXPECT_FALSE(prerender_handle); | 1103 EXPECT_FALSE(prerender_handle); |
| 1103 EXPECT_FALSE(prerender_contents->prerendering_has_started()); | 1104 EXPECT_FALSE(prerender_contents->prerendering_has_started()); |
| 1104 } | 1105 } |
| 1105 | 1106 |
| 1106 TEST_F(PrerenderTest, PrerenderAllowedForOfflineAndForcedCellular) { | 1107 TEST_F(PrerenderTest, PrerenderAllowedForOfflineAndForcedCellular) { |
| 1107 const Origin origins[] = { | 1108 const Origin origins[] = { |
| 1108 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, | 1109 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, |
| 1109 ORIGIN_OFFLINE, | 1110 ORIGIN_OFFLINE, |
| 1110 }; | 1111 }; |
| 1111 | 1112 |
| 1112 EnablePrerender(); | 1113 EnablePrerender(); |
| 1113 std::unique_ptr<net::NetworkChangeNotifier> mock( | 1114 std::unique_ptr<net::NetworkChangeNotifier> mock( |
| 1114 new MockNetworkChangeNotifier4G); | 1115 new MockNetworkChangeNotifier4G); |
| 1115 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( | 1116 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( |
| 1116 net::NetworkChangeNotifier::GetConnectionType())); | 1117 net::NetworkChangeNotifier::GetConnectionType())); |
| 1117 GURL url("http://www.google.com/"); | 1118 GURL url("http://www.google.com/"); |
| 1118 for (const Origin& origin : origins) { | 1119 for (const Origin& origin : origins) { |
| 1119 DummyPrerenderContents* prerender_contents = nullptr; | 1120 DummyPrerenderContents* prerender_contents = nullptr; |
| 1120 std::unique_ptr<PrerenderHandle> prerender_handle; | 1121 std::unique_ptr<PrerenderHandle> prerender_handle; |
| 1121 if (origin == ORIGIN_OFFLINE) { | 1122 if (origin == ORIGIN_OFFLINE) { |
| 1122 prerender_contents = prerender_manager()->CreateNextPrerenderContents( | 1123 prerender_contents = prerender_manager()->CreateNextPrerenderContents( |
| 1123 url, origin, FINAL_STATUS_MANAGER_SHUTDOWN); | 1124 url, origin, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1124 prerender_handle = | 1125 prerender_handle = |
| 1125 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); | 1126 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); |
| 1126 } else { | 1127 } else { |
| 1127 prerender_contents = prerender_manager()->CreateNextPrerenderContents( | 1128 prerender_contents = prerender_manager()->CreateNextPrerenderContents( |
| 1128 url, origin, FINAL_STATUS_USED); | 1129 url, origin, FINAL_STATUS_USED); |
| 1129 prerender_handle = | 1130 prerender_handle = |
| 1130 prerender_manager()->AddPrerenderOnCellularFromExternalRequest( | 1131 prerender_manager()->AddPrerenderOnCellularFromExternalRequest( |
| 1131 url, content::Referrer(), nullptr, kSize); | 1132 url, content::Referrer(), nullptr, gfx::Rect(kSize)); |
| 1132 } | 1133 } |
| 1133 EXPECT_TRUE(prerender_handle); | 1134 EXPECT_TRUE(prerender_handle); |
| 1134 EXPECT_TRUE(prerender_handle->IsPrerendering()); | 1135 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1135 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1136 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1136 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1137 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1137 EXPECT_EQ(origin, prerender_handle->contents()->origin()); | 1138 EXPECT_EQ(origin, prerender_handle->contents()->origin()); |
| 1138 if (origin != ORIGIN_OFFLINE) { | 1139 if (origin != ORIGIN_OFFLINE) { |
| 1139 std::unique_ptr<PrerenderContents> entry = | 1140 std::unique_ptr<PrerenderContents> entry = |
| 1140 prerender_manager()->FindAndUseEntry(url); | 1141 prerender_manager()->FindAndUseEntry(url); |
| 1141 ASSERT_EQ(prerender_contents, entry.get()); | 1142 ASSERT_EQ(prerender_contents, entry.get()); |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1660 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1661 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1661 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1662 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1662 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); | 1663 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); |
| 1663 std::unique_ptr<PrerenderContents> entry = | 1664 std::unique_ptr<PrerenderContents> entry = |
| 1664 prerender_manager()->FindAndUseEntry(url); | 1665 prerender_manager()->FindAndUseEntry(url); |
| 1665 ASSERT_EQ(prerender_contents, entry.get()); | 1666 ASSERT_EQ(prerender_contents, entry.get()); |
| 1666 EXPECT_FALSE(prerender_handle->IsPrerendering()); | 1667 EXPECT_FALSE(prerender_handle->IsPrerendering()); |
| 1667 } | 1668 } |
| 1668 | 1669 |
| 1669 } // namespace prerender | 1670 } // namespace prerender |
| OLD | NEW |