| 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 | |
| 111 base::SimpleTestTickClock* OverridePrerenderManagerTimeTicks( | 100 base::SimpleTestTickClock* OverridePrerenderManagerTimeTicks( |
| 112 PrerenderManager* prerender_manager) { | 101 PrerenderManager* prerender_manager) { |
| 113 auto tick_clock = base::MakeUnique<base::SimpleTestTickClock>(); | 102 auto tick_clock = base::MakeUnique<base::SimpleTestTickClock>(); |
| 114 base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get(); | 103 base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get(); |
| 115 prerender_manager->SetTickClockForTesting(std::move(tick_clock)); | 104 prerender_manager->SetTickClockForTesting(std::move(tick_clock)); |
| 116 return tick_clock_ptr; | 105 return tick_clock_ptr; |
| 117 } | 106 } |
| 118 | 107 |
| 119 bool OverridePrerenderManagerTime(const char* utc_time, | 108 bool OverridePrerenderManagerTime(const char* utc_time, |
| 120 PrerenderManager* prerender_manager) { | 109 PrerenderManager* prerender_manager) { |
| (...skipping 1017 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1138 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); | 1127 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1139 std::unique_ptr<PrerenderHandle> prerender_handle = | 1128 std::unique_ptr<PrerenderHandle> prerender_handle = |
| 1140 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); | 1129 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); |
| 1141 EXPECT_TRUE(prerender_handle); | 1130 EXPECT_TRUE(prerender_handle); |
| 1142 EXPECT_TRUE(prerender_handle->IsPrerendering()); | 1131 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1143 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1132 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1144 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1133 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1145 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); | 1134 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); |
| 1146 } | 1135 } |
| 1147 | 1136 |
| 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 | |
| 1172 // Checks that the "PrerenderSilence" experiment disables prerendering. | 1137 // Checks that the "PrerenderSilence" experiment disables prerendering. |
| 1173 TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { | 1138 TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { |
| 1174 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1139 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1175 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); | 1140 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| 1176 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:00Z", | 1141 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:00Z", |
| 1177 prerender_manager())); | 1142 prerender_manager())); |
| 1178 for (const Origin& origin : g_prerender_silence_origins) { | 1143 const Origin 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) { |
| 1179 EXPECT_TRUE( | 1155 EXPECT_TRUE( |
| 1180 prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); | 1156 prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); |
| 1181 } | 1157 } |
| 1182 } | 1158 } |
| 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 | 1159 |
| 1201 // Checks that prerendering is enabled after expiration of the | 1160 // Checks that prerendering is enabled after expiration of the |
| 1202 // "PrerenderSilence" experiment. | 1161 // "PrerenderSilence" experiment. |
| 1203 TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { | 1162 TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { |
| 1204 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1163 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1205 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); | 1164 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| 1206 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:60Z", | 1165 ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:60Z", |
| 1207 prerender_manager())); | 1166 prerender_manager())); |
| 1208 GURL url("http://www.google.com/"); | 1167 GURL url("http://www.google.com/"); |
| 1209 DummyPrerenderContents* prerender_contents = | 1168 DummyPrerenderContents* prerender_contents = |
| (...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1805 prerender_contents->SetPrerenderMode(PREFETCH_ONLY); | 1764 prerender_contents->SetPrerenderMode(PREFETCH_ONLY); |
| 1806 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("GET")); | 1765 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("GET")); |
| 1807 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("HEAD")); | 1766 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("HEAD")); |
| 1808 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("OPTIONS")); | 1767 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("OPTIONS")); |
| 1809 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("POST")); | 1768 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("POST")); |
| 1810 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("TRACE")); | 1769 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("TRACE")); |
| 1811 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("WHATEVER")); | 1770 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("WHATEVER")); |
| 1812 } | 1771 } |
| 1813 | 1772 |
| 1814 } // namespace prerender | 1773 } // namespace prerender |
| OLD | NEW |