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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 FindIteratorForPrerenderContents(prerender_data->contents()); | 141 FindIteratorForPrerenderContents(prerender_data->contents()); |
142 CHECK(to_erase != active_prerenders_.end()); | 142 CHECK(to_erase != active_prerenders_.end()); |
143 std::unique_ptr<PrerenderContents> prerender_contents = | 143 std::unique_ptr<PrerenderContents> prerender_contents = |
144 prerender_data->ReleaseContents(); | 144 prerender_data->ReleaseContents(); |
145 active_prerenders_.erase(to_erase); | 145 active_prerenders_.erase(to_erase); |
146 | 146 |
147 prerender_contents->PrepareForUse(); | 147 prerender_contents->PrepareForUse(); |
148 return prerender_contents; | 148 return prerender_contents; |
149 } | 149 } |
150 | 150 |
| 151 bool SetTime(const std::string& time_string) { |
| 152 return base::Time::FromString(time_string.c_str(), &time_); |
| 153 } |
| 154 |
151 void AdvanceTime(TimeDelta delta) { | 155 void AdvanceTime(TimeDelta delta) { |
152 time_ += delta; | 156 time_ += delta; |
153 } | 157 } |
154 | 158 |
155 void AdvanceTimeTicks(TimeDelta delta) { | 159 void AdvanceTimeTicks(TimeDelta delta) { |
156 time_ticks_ += delta; | 160 time_ticks_ += delta; |
157 } | 161 } |
158 | 162 |
159 DummyPrerenderContents* CreateNextPrerenderContents( | 163 DummyPrerenderContents* CreateNextPrerenderContents( |
160 const GURL& url, | 164 const GURL& url, |
(...skipping 936 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1097 url, | 1101 url, |
1098 ORIGIN_EXTERNAL_REQUEST, | 1102 ORIGIN_EXTERNAL_REQUEST, |
1099 FINAL_STATUS_MANAGER_SHUTDOWN); | 1103 FINAL_STATUS_MANAGER_SHUTDOWN); |
1100 std::unique_ptr<PrerenderHandle> prerender_handle( | 1104 std::unique_ptr<PrerenderHandle> prerender_handle( |
1101 prerender_manager()->AddPrerenderFromExternalRequest( | 1105 prerender_manager()->AddPrerenderFromExternalRequest( |
1102 url, content::Referrer(), nullptr, gfx::Rect(kSize))); | 1106 url, content::Referrer(), nullptr, gfx::Rect(kSize))); |
1103 EXPECT_FALSE(prerender_handle); | 1107 EXPECT_FALSE(prerender_handle); |
1104 EXPECT_FALSE(prerender_contents->prerendering_has_started()); | 1108 EXPECT_FALSE(prerender_contents->prerendering_has_started()); |
1105 } | 1109 } |
1106 | 1110 |
| 1111 // Checks that the "PrerenderSilence experiment does not disable offline |
| 1112 // prerendering. |
| 1113 TEST_F(PrerenderTest, PrerenderSilenceAllowsOffline) { |
| 1114 // Set the time to 30 seconds before the experiment expires. |
| 1115 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1116 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:01:00Z")); |
| 1117 ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:00:30Z")); |
| 1118 GURL url("http://www.google.com/"); |
| 1119 DummyPrerenderContents* prerender_contents = |
| 1120 prerender_manager()->CreateNextPrerenderContents( |
| 1121 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1122 std::unique_ptr<PrerenderHandle> prerender_handle = |
| 1123 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); |
| 1124 EXPECT_TRUE(prerender_handle); |
| 1125 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1126 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1127 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1128 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); |
| 1129 } |
| 1130 |
| 1131 // Checks that the "PrerenderSilence" experiment disables prerendering. |
| 1132 TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { |
| 1133 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1134 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| 1135 GURL url("http://www.google.com/"); |
| 1136 const Origin origins[] = { |
| 1137 ORIGIN_GWS_PRERENDER, |
| 1138 ORIGIN_OMNIBOX, |
| 1139 ORIGIN_NONE, |
| 1140 ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN, |
| 1141 ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN, |
| 1142 ORIGIN_EXTERNAL_REQUEST, |
| 1143 ORIGIN_INSTANT, |
| 1144 ORIGIN_LINK_REL_NEXT, |
| 1145 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, |
| 1146 }; |
| 1147 ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:01:00Z")); |
| 1148 for (const Origin& origin : origins) { |
| 1149 std::unique_ptr<PrerenderHandle> prerender_handle( |
| 1150 prerender_manager()->AddPrerender(origin, url, content::Referrer(), |
| 1151 gfx::Rect(kSize), nullptr)); |
| 1152 EXPECT_FALSE(prerender_handle); |
| 1153 } |
| 1154 } |
| 1155 |
| 1156 // Checks that prerendering is enabled after expiration of the |
| 1157 // "PrerenderSilence" experiment. |
| 1158 TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { |
| 1159 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1160 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| 1161 GURL url("http://www.google.com/"); |
| 1162 ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:01:00Z")); |
| 1163 prerender_manager()->AdvanceTime(TimeDelta::FromSeconds(60)); |
| 1164 DummyPrerenderContents* prerender_contents = |
| 1165 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_USED); |
| 1166 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1167 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1168 std::unique_ptr<PrerenderContents> entry = |
| 1169 prerender_manager()->FindAndUseEntry(url); |
| 1170 ASSERT_EQ(prerender_contents, entry.get()); |
| 1171 } |
| 1172 |
1107 TEST_F(PrerenderTest, PrerenderAllowedForOfflineAndForcedCellular) { | 1173 TEST_F(PrerenderTest, PrerenderAllowedForOfflineAndForcedCellular) { |
1108 const Origin origins[] = { | 1174 const Origin origins[] = { |
1109 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, | 1175 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, |
1110 ORIGIN_OFFLINE, | 1176 ORIGIN_OFFLINE, |
1111 }; | 1177 }; |
1112 | 1178 |
1113 EnablePrerender(); | 1179 EnablePrerender(); |
1114 std::unique_ptr<net::NetworkChangeNotifier> mock( | 1180 std::unique_ptr<net::NetworkChangeNotifier> mock( |
1115 new MockNetworkChangeNotifier4G); | 1181 new MockNetworkChangeNotifier4G); |
1116 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( | 1182 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( |
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1661 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1727 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
1662 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1728 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
1663 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); | 1729 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); |
1664 std::unique_ptr<PrerenderContents> entry = | 1730 std::unique_ptr<PrerenderContents> entry = |
1665 prerender_manager()->FindAndUseEntry(url); | 1731 prerender_manager()->FindAndUseEntry(url); |
1666 ASSERT_EQ(prerender_contents, entry.get()); | 1732 ASSERT_EQ(prerender_contents, entry.get()); |
1667 EXPECT_FALSE(prerender_handle->IsPrerendering()); | 1733 EXPECT_FALSE(prerender_handle->IsPrerendering()); |
1668 } | 1734 } |
1669 | 1735 |
1670 } // namespace prerender | 1736 } // namespace prerender |
OLD | NEW |