| 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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 UnitTestPrerenderManager* test_prerender_manager_; | 90 UnitTestPrerenderManager* test_prerender_manager_; |
| 91 FinalStatus expected_final_status_; | 91 FinalStatus expected_final_status_; |
| 92 }; | 92 }; |
| 93 | 93 |
| 94 int DummyPrerenderContents::g_next_route_id_ = 0; | 94 int DummyPrerenderContents::g_next_route_id_ = 0; |
| 95 | 95 |
| 96 const gfx::Size kSize(640, 480); | 96 const gfx::Size kSize(640, 480); |
| 97 | 97 |
| 98 const uint32_t kDefaultRelTypes = PrerenderRelTypePrerender; | 98 const uint32_t kDefaultRelTypes = PrerenderRelTypePrerender; |
| 99 | 99 |
| 100 const Origin g_prerender_silence_origins[] = { |
| 101 ORIGIN_GWS_PRERENDER, |
| 102 ORIGIN_OMNIBOX, |
| 103 ORIGIN_NONE, |
| 104 ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN, |
| 105 ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN, |
| 106 ORIGIN_EXTERNAL_REQUEST, |
| 107 ORIGIN_INSTANT, |
| 108 ORIGIN_LINK_REL_NEXT, |
| 109 }; |
| 110 |
| 100 base::SimpleTestTickClock* OverridePrerenderManagerTimeTicks( | 111 base::SimpleTestTickClock* OverridePrerenderManagerTimeTicks( |
| 101 PrerenderManager* prerender_manager) { | 112 PrerenderManager* prerender_manager) { |
| 102 auto tick_clock = base::MakeUnique<base::SimpleTestTickClock>(); | 113 auto tick_clock = base::MakeUnique<base::SimpleTestTickClock>(); |
| 103 base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get(); | 114 base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get(); |
| 104 prerender_manager->SetTickClockForTesting(std::move(tick_clock)); | 115 prerender_manager->SetTickClockForTesting(std::move(tick_clock)); |
| 105 return tick_clock_ptr; | 116 return tick_clock_ptr; |
| 106 } | 117 } |
| 107 | 118 |
| 108 bool OverridePrerenderManagerTime(const char* utc_time, | 119 bool OverridePrerenderManagerTime(const char* utc_time, |
| 109 PrerenderManager* prerender_manager) { | 120 PrerenderManager* prerender_manager) { |
| (...skipping 1017 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1127 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); | 1138 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1128 std::unique_ptr<PrerenderHandle> prerender_handle = | 1139 std::unique_ptr<PrerenderHandle> prerender_handle = |
| 1129 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); | 1140 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); |
| 1130 EXPECT_TRUE(prerender_handle); | 1141 EXPECT_TRUE(prerender_handle); |
| 1131 EXPECT_TRUE(prerender_handle->IsPrerendering()); | 1142 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1132 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1143 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1133 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1144 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1134 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); | 1145 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); |
| 1135 } | 1146 } |
| 1136 | 1147 |
| 1148 // Checks that the "PrerenderSilence experiment does not disable forced-cellular |
| 1149 // prerendering. |
| 1150 TEST_F(PrerenderTest, PrerenderSilenceAllowsForcedCellular) { |
| 1151 // Set the time to 30 seconds before the experiment expires. |
| 1152 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1153 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:01:00Z")); |
| 1154 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:00:30Z", |
| 1155 prerender_manager())); |
| 1156 GURL url("http://www.google.com/"); |
| 1157 DummyPrerenderContents* prerender_contents = |
| 1158 prerender_manager()->CreateNextPrerenderContents( |
| 1159 url, ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, |
| 1160 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1161 std::unique_ptr<PrerenderHandle> prerender_handle = |
| 1162 prerender_manager()->AddPrerenderOnCellularFromExternalRequest( |
| 1163 url, content::Referrer(), nullptr, gfx::Rect(kSize)); |
| 1164 EXPECT_TRUE(prerender_handle); |
| 1165 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1166 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1167 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1168 EXPECT_EQ(ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, |
| 1169 prerender_handle->contents()->origin()); |
| 1170 } |
| 1171 |
| 1137 // Checks that the "PrerenderSilence" experiment disables prerendering. | 1172 // Checks that the "PrerenderSilence" experiment disables prerendering. |
| 1138 TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { | 1173 TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { |
| 1139 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1174 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1140 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); | 1175 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| 1141 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:00Z", | 1176 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:00Z", |
| 1142 prerender_manager())); | 1177 prerender_manager())); |
| 1143 const Origin origins[] = { | 1178 for (const Origin& origin : g_prerender_silence_origins) { |
| 1144 ORIGIN_GWS_PRERENDER, | |
| 1145 ORIGIN_OMNIBOX, | |
| 1146 ORIGIN_NONE, | |
| 1147 ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN, | |
| 1148 ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN, | |
| 1149 ORIGIN_EXTERNAL_REQUEST, | |
| 1150 ORIGIN_INSTANT, | |
| 1151 ORIGIN_LINK_REL_NEXT, | |
| 1152 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, | |
| 1153 }; | |
| 1154 for (const Origin& origin : origins) { | |
| 1155 EXPECT_TRUE( | 1179 EXPECT_TRUE( |
| 1156 prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); | 1180 prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); |
| 1157 } | 1181 } |
| 1158 } | 1182 } |
| 1159 | 1183 |
| 1184 // Checks that the "PrerenderSilence" experiment disables prerendering even |
| 1185 // without the field trial, then expires. |
| 1186 TEST_F(PrerenderTest, PrerenderSilenceWithoutFieldTrial) { |
| 1187 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-14T08:00:01Z", |
| 1188 prerender_manager())); |
| 1189 for (const Origin& origin : g_prerender_silence_origins) { |
| 1190 EXPECT_TRUE( |
| 1191 prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); |
| 1192 } |
| 1193 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-15T08:00:00Z", |
| 1194 prerender_manager())); |
| 1195 for (const Origin& origin : g_prerender_silence_origins) { |
| 1196 EXPECT_FALSE( |
| 1197 prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); |
| 1198 } |
| 1199 } |
| 1200 |
| 1160 // Checks that prerendering is enabled after expiration of the | 1201 // Checks that prerendering is enabled after expiration of the |
| 1161 // "PrerenderSilence" experiment. | 1202 // "PrerenderSilence" experiment. |
| 1162 TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { | 1203 TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { |
| 1163 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1204 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1164 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); | 1205 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| 1165 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:60Z", | 1206 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:60Z", |
| 1166 prerender_manager())); | 1207 prerender_manager())); |
| 1167 GURL url("http://www.google.com/"); | 1208 GURL url("http://www.google.com/"); |
| 1168 DummyPrerenderContents* prerender_contents = | 1209 DummyPrerenderContents* prerender_contents = |
| 1169 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_USED); | 1210 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_USED); |
| (...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1764 prerender_contents->SetPrerenderMode(PREFETCH_ONLY); | 1805 prerender_contents->SetPrerenderMode(PREFETCH_ONLY); |
| 1765 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("GET")); | 1806 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("GET")); |
| 1766 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("HEAD")); | 1807 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("HEAD")); |
| 1767 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("OPTIONS")); | 1808 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("OPTIONS")); |
| 1768 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("POST")); | 1809 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("POST")); |
| 1769 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("TRACE")); | 1810 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("TRACE")); |
| 1770 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("WHATEVER")); | 1811 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("WHATEVER")); |
| 1771 } | 1812 } |
| 1772 | 1813 |
| 1773 } // namespace prerender | 1814 } // namespace prerender |
| OLD | NEW |