OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/precache/content/precache_manager.h" | 5 #include "components/precache/content/precache_manager.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <memory> | 10 #include <memory> |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 : factory_(nullptr, | 153 : factory_(nullptr, |
154 base::Bind(&TestURLFetcherCallback::CreateURLFetcher, | 154 base::Bind(&TestURLFetcherCallback::CreateURLFetcher, |
155 base::Unretained(&url_callback_))) {} | 155 base::Unretained(&url_callback_))) {} |
156 | 156 |
157 ~PrecacheManagerTest() { | 157 ~PrecacheManagerTest() { |
158 // precache_manager_'s constructor releases a PrecacheDatabase and deletes | 158 // precache_manager_'s constructor releases a PrecacheDatabase and deletes |
159 // it on the DB thread. PrecacheDatabase already has a pending Init call | 159 // it on the DB thread. PrecacheDatabase already has a pending Init call |
160 // which will assert in debug builds because the directory passed to it is | 160 // which will assert in debug builds because the directory passed to it is |
161 // deleted. So manually ensure that the task is run before browser_context_ | 161 // deleted. So manually ensure that the task is run before browser_context_ |
162 // is destructed. | 162 // is destructed. |
163 base::MessageLoop::current()->RunUntilIdle(); | 163 base::RunLoop().RunUntilIdle(); |
164 } | 164 } |
165 | 165 |
166 protected: | 166 protected: |
167 void SetUp() override { | 167 void SetUp() override { |
168 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 168 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
169 switches::kPrecacheConfigSettingsURL, kConfigURL); | 169 switches::kPrecacheConfigSettingsURL, kConfigURL); |
170 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 170 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
171 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix); | 171 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix); |
172 std::unique_ptr<PrecacheDatabase> precache_database( | 172 std::unique_ptr<PrecacheDatabase> precache_database( |
173 new PrecacheDatabase()); | 173 new PrecacheDatabase()); |
174 precache_database_ = precache_database.get(); | 174 precache_database_ = precache_database.get(); |
175 | 175 |
176 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir()); | 176 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir()); |
177 base::FilePath db_path = scoped_temp_dir_.path().Append( | 177 base::FilePath db_path = scoped_temp_dir_.path().Append( |
178 base::FilePath(FILE_PATH_LITERAL("precache_database"))); | 178 base::FilePath(FILE_PATH_LITERAL("precache_database"))); |
179 | 179 |
180 // Make the fetch of the precache configuration settings fail. Precaching | 180 // Make the fetch of the precache configuration settings fail. Precaching |
181 // should still complete normally in this case. | 181 // should still complete normally in this case. |
182 factory_.SetFakeResponse(GURL(kConfigURL), "", | 182 factory_.SetFakeResponse(GURL(kConfigURL), "", |
183 net::HTTP_INTERNAL_SERVER_ERROR, | 183 net::HTTP_INTERNAL_SERVER_ERROR, |
184 net::URLRequestStatus::FAILED); | 184 net::URLRequestStatus::FAILED); |
185 precache_manager_.reset( | 185 precache_manager_.reset( |
186 new PrecacheManagerUnderTest( | 186 new PrecacheManagerUnderTest( |
187 &browser_context_, nullptr /* sync_service */, | 187 &browser_context_, nullptr /* sync_service */, |
188 &history_service_, db_path, std::move(precache_database))); | 188 &history_service_, db_path, std::move(precache_database))); |
189 base::MessageLoop::current()->RunUntilIdle(); | 189 base::RunLoop().RunUntilIdle(); |
190 } | 190 } |
191 | 191 |
192 // Must be declared first so that it is destroyed last. | 192 // Must be declared first so that it is destroyed last. |
193 content::TestBrowserThreadBundle test_browser_thread_bundle_; | 193 content::TestBrowserThreadBundle test_browser_thread_bundle_; |
194 base::ScopedTempDir scoped_temp_dir_; | 194 base::ScopedTempDir scoped_temp_dir_; |
195 PrecacheDatabase* precache_database_; | 195 PrecacheDatabase* precache_database_; |
196 content::TestBrowserContext browser_context_; | 196 content::TestBrowserContext browser_context_; |
197 std::unique_ptr<PrecacheManagerUnderTest> precache_manager_; | 197 std::unique_ptr<PrecacheManagerUnderTest> precache_manager_; |
198 TestURLFetcherCallback url_callback_; | 198 TestURLFetcherCallback url_callback_; |
199 net::FakeURLFetcherFactory factory_; | 199 net::FakeURLFetcherFactory factory_; |
200 TestPrecacheCompletionCallback precache_callback_; | 200 TestPrecacheCompletionCallback precache_callback_; |
201 testing::NiceMock<MockHistoryService> history_service_; | 201 testing::NiceMock<MockHistoryService> history_service_; |
202 base::HistogramTester histograms_; | 202 base::HistogramTester histograms_; |
203 }; | 203 }; |
204 | 204 |
205 TEST_F(PrecacheManagerTest, StartAndFinishPrecaching) { | 205 TEST_F(PrecacheManagerTest, StartAndFinishPrecaching) { |
206 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 206 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
207 | 207 |
208 MockHistoryService::TopHostsCallback top_hosts_callback; | 208 MockHistoryService::TopHostsCallback top_hosts_callback; |
209 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) | 209 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) |
210 .WillOnce(SaveArg<1>(&top_hosts_callback)); | 210 .WillOnce(SaveArg<1>(&top_hosts_callback)); |
211 | 211 |
212 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, | 212 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
213 net::URLRequestStatus::SUCCESS); | 213 net::URLRequestStatus::SUCCESS); |
214 | 214 |
215 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); | 215 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); |
216 base::MessageLoop::current()->RunUntilIdle(); | 216 base::RunLoop().RunUntilIdle(); |
217 EXPECT_TRUE(precache_manager_->IsPrecaching()); | 217 EXPECT_TRUE(precache_manager_->IsPrecaching()); |
218 | 218 |
219 top_hosts_callback.Run( | 219 top_hosts_callback.Run( |
220 history::TopHostsList(1, std::make_pair("good-manifest.com", 1))); | 220 history::TopHostsList(1, std::make_pair("good-manifest.com", 1))); |
221 base::MessageLoop::current()->RunUntilIdle(); // For PrecacheFetcher. | 221 base::RunLoop().RunUntilIdle(); // For PrecacheFetcher. |
222 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 222 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
223 EXPECT_TRUE(precache_callback_.was_on_done_called()); | 223 EXPECT_TRUE(precache_callback_.was_on_done_called()); |
224 | 224 |
225 std::multiset<GURL> expected_requested_urls; | 225 std::multiset<GURL> expected_requested_urls; |
226 expected_requested_urls.insert(GURL(kConfigURL)); | 226 expected_requested_urls.insert(GURL(kConfigURL)); |
227 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 227 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
228 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 228 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
229 } | 229 } |
230 | 230 |
231 TEST_F(PrecacheManagerTest, StartAndFinishPrecachingWithUnfinishedHosts) { | 231 TEST_F(PrecacheManagerTest, StartAndFinishPrecachingWithUnfinishedHosts) { |
232 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 232 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
233 new PrecacheUnfinishedWork()); | 233 new PrecacheUnfinishedWork()); |
234 unfinished_work->add_top_host()->set_hostname("evil-manifest.com"); | 234 unfinished_work->add_top_host()->set_hostname("evil-manifest.com"); |
235 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); | 235 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); |
236 precache_database_->SaveUnfinishedWork(std::move(unfinished_work)); | 236 precache_database_->SaveUnfinishedWork(std::move(unfinished_work)); |
237 | 237 |
238 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 238 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
239 | 239 |
240 factory_.SetFakeResponse( | 240 factory_.SetFakeResponse( |
241 GURL(kEvilManifestURL), "", | 241 GURL(kEvilManifestURL), "", |
242 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 242 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
243 | 243 |
244 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); | 244 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); |
245 EXPECT_TRUE(precache_manager_->IsPrecaching()); | 245 EXPECT_TRUE(precache_manager_->IsPrecaching()); |
246 | 246 |
247 base::MessageLoop::current()->RunUntilIdle(); // For PrecacheFetcher. | 247 base::RunLoop().RunUntilIdle(); // For PrecacheFetcher. |
248 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 248 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
249 EXPECT_TRUE(precache_callback_.was_on_done_called()); | 249 EXPECT_TRUE(precache_callback_.was_on_done_called()); |
250 | 250 |
251 std::multiset<GURL> expected_requested_urls; | 251 std::multiset<GURL> expected_requested_urls; |
252 expected_requested_urls.insert(GURL(kConfigURL)); | 252 expected_requested_urls.insert(GURL(kConfigURL)); |
253 expected_requested_urls.insert(GURL(kEvilManifestURL)); | 253 expected_requested_urls.insert(GURL(kEvilManifestURL)); |
254 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 254 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
255 } | 255 } |
256 | 256 |
257 TEST_F(PrecacheManagerTest, | 257 TEST_F(PrecacheManagerTest, |
258 StartAndCancelPrecachingBeforeUnfinishedWorkRetrieved) { | 258 StartAndCancelPrecachingBeforeUnfinishedWorkRetrieved) { |
259 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 259 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
260 | 260 |
261 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); | 261 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); |
262 EXPECT_TRUE(precache_manager_->IsPrecaching()); | 262 EXPECT_TRUE(precache_manager_->IsPrecaching()); |
263 precache_manager_->CancelPrecaching(); | 263 precache_manager_->CancelPrecaching(); |
264 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 264 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
265 | 265 |
266 base::MessageLoop::current()->RunUntilIdle(); | 266 base::RunLoop().RunUntilIdle(); |
267 EXPECT_FALSE(precache_callback_.was_on_done_called()); | 267 EXPECT_FALSE(precache_callback_.was_on_done_called()); |
268 } | 268 } |
269 | 269 |
270 TEST_F(PrecacheManagerTest, StartAndCancelPrecachingBeforeTopHostsCompleted) { | 270 TEST_F(PrecacheManagerTest, StartAndCancelPrecachingBeforeTopHostsCompleted) { |
271 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 271 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
272 | 272 |
273 MockHistoryService::TopHostsCallback top_hosts_callback; | 273 MockHistoryService::TopHostsCallback top_hosts_callback; |
274 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) | 274 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) |
275 .WillOnce(SaveArg<1>(&top_hosts_callback)); | 275 .WillOnce(SaveArg<1>(&top_hosts_callback)); |
276 | 276 |
277 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); | 277 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); |
278 EXPECT_TRUE(precache_manager_->IsPrecaching()); | 278 EXPECT_TRUE(precache_manager_->IsPrecaching()); |
279 | 279 |
280 precache_manager_->CancelPrecaching(); | 280 precache_manager_->CancelPrecaching(); |
281 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 281 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
282 base::MessageLoop::current()->RunUntilIdle(); | 282 base::RunLoop().RunUntilIdle(); |
283 | 283 |
284 top_hosts_callback.Run( | 284 top_hosts_callback.Run( |
285 history::TopHostsList(1, std::make_pair("starting-url.com", 1))); | 285 history::TopHostsList(1, std::make_pair("starting-url.com", 1))); |
286 base::MessageLoop::current()->RunUntilIdle(); | 286 base::RunLoop().RunUntilIdle(); |
287 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 287 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
288 EXPECT_FALSE(precache_callback_.was_on_done_called()); | 288 EXPECT_FALSE(precache_callback_.was_on_done_called()); |
289 } | 289 } |
290 | 290 |
291 TEST_F(PrecacheManagerTest, StartAndCancelPrecachingBeforeURLsReceived) { | 291 TEST_F(PrecacheManagerTest, StartAndCancelPrecachingBeforeURLsReceived) { |
292 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 292 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
293 | 293 |
294 MockHistoryService::TopHostsCallback top_hosts_callback; | 294 MockHistoryService::TopHostsCallback top_hosts_callback; |
295 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) | 295 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) |
296 .WillOnce(SaveArg<1>(&top_hosts_callback)); | 296 .WillOnce(SaveArg<1>(&top_hosts_callback)); |
297 | 297 |
298 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); | 298 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); |
299 EXPECT_TRUE(precache_manager_->IsPrecaching()); | 299 EXPECT_TRUE(precache_manager_->IsPrecaching()); |
300 | 300 |
301 precache_manager_->CancelPrecaching(); | 301 precache_manager_->CancelPrecaching(); |
302 base::MessageLoop::current()->RunUntilIdle(); | 302 base::RunLoop().RunUntilIdle(); |
303 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 303 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
304 top_hosts_callback.Run( | 304 top_hosts_callback.Run( |
305 history::TopHostsList(1, std::make_pair("starting-url.com", 1))); | 305 history::TopHostsList(1, std::make_pair("starting-url.com", 1))); |
306 base::MessageLoop::current()->RunUntilIdle(); // For PrecacheFetcher. | 306 base::RunLoop().RunUntilIdle(); // For PrecacheFetcher. |
307 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 307 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
308 EXPECT_FALSE(precache_callback_.was_on_done_called()); | 308 EXPECT_FALSE(precache_callback_.was_on_done_called()); |
309 EXPECT_TRUE(url_callback_.requested_urls().empty()); | 309 EXPECT_TRUE(url_callback_.requested_urls().empty()); |
310 } | 310 } |
311 | 311 |
312 TEST_F(PrecacheManagerTest, StartAndCancelPrecachingAfterURLsReceived) { | 312 TEST_F(PrecacheManagerTest, StartAndCancelPrecachingAfterURLsReceived) { |
313 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 313 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
314 | 314 |
315 PrecacheManifest good_manifest; | 315 PrecacheManifest good_manifest; |
316 good_manifest.add_resource()->set_url("http://good-resource.com"); | 316 good_manifest.add_resource()->set_url("http://good-resource.com"); |
317 | 317 |
318 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) | 318 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) |
319 .WillOnce(ReturnHosts( | 319 .WillOnce(ReturnHosts( |
320 history::TopHostsList(1, std::make_pair("starting-url.com", 1)))); | 320 history::TopHostsList(1, std::make_pair("starting-url.com", 1)))); |
321 | 321 |
322 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); | 322 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); |
323 | 323 |
324 EXPECT_TRUE(precache_manager_->IsPrecaching()); | 324 EXPECT_TRUE(precache_manager_->IsPrecaching()); |
325 // Run a task to get unfinished work, and to get hosts. | 325 // Run a task to get unfinished work, and to get hosts. |
326 for (int i = 0; i < 2; ++i) { | 326 for (int i = 0; i < 2; ++i) { |
327 base::RunLoop run_loop; | 327 base::RunLoop run_loop; |
328 base::MessageLoop::current()->PostTask(FROM_HERE, run_loop.QuitClosure()); | 328 base::MessageLoop::current()->PostTask(FROM_HERE, run_loop.QuitClosure()); |
329 run_loop.Run(); | 329 run_loop.Run(); |
330 } | 330 } |
331 //base::MessageLoop::current()->RunUntilIdle(); | 331 // base::RunLoop().RunUntilIdle(); |
332 precache_manager_->CancelPrecaching(); | 332 precache_manager_->CancelPrecaching(); |
333 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 333 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
334 | 334 |
335 base::MessageLoop::current()->RunUntilIdle(); // For PrecacheFetcher. | 335 base::RunLoop().RunUntilIdle(); // For PrecacheFetcher. |
336 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 336 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
337 EXPECT_FALSE(precache_callback_.was_on_done_called()); | 337 EXPECT_FALSE(precache_callback_.was_on_done_called()); |
338 | 338 |
339 std::multiset<GURL> expected_requested_urls; | 339 std::multiset<GURL> expected_requested_urls; |
340 expected_requested_urls.insert(GURL(kConfigURL)); | 340 expected_requested_urls.insert(GURL(kConfigURL)); |
341 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 341 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
342 } | 342 } |
343 | 343 |
344 TEST_F(PrecacheManagerTest, RecordStatsForFetchWithSizeZero) { | 344 TEST_F(PrecacheManagerTest, RecordStatsForFetchWithSizeZero) { |
345 // Fetches with size 0 should be ignored. | 345 // Fetches with size 0 should be ignored. |
346 precache_manager_->RecordStatsForFetch(GURL("http://url.com"), GURL(), | 346 precache_manager_->RecordStatsForFetch(GURL("http://url.com"), GURL(), |
347 base::TimeDelta(), base::Time(), 0, | 347 base::TimeDelta(), base::Time(), 0, |
348 false); | 348 false); |
349 base::MessageLoop::current()->RunUntilIdle(); | 349 base::RunLoop().RunUntilIdle(); |
350 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), IsEmpty()); | 350 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), IsEmpty()); |
351 } | 351 } |
352 | 352 |
353 TEST_F(PrecacheManagerTest, RecordStatsForFetchWithNonHTTP) { | 353 TEST_F(PrecacheManagerTest, RecordStatsForFetchWithNonHTTP) { |
354 // Fetches for URLs with schemes other than HTTP or HTTPS should be ignored. | 354 // Fetches for URLs with schemes other than HTTP or HTTPS should be ignored. |
355 precache_manager_->RecordStatsForFetch(GURL("ftp://ftp.com"), GURL(), | 355 precache_manager_->RecordStatsForFetch(GURL("ftp://ftp.com"), GURL(), |
356 base::TimeDelta(), base::Time(), 1000, | 356 base::TimeDelta(), base::Time(), 1000, |
357 false); | 357 false); |
358 base::MessageLoop::current()->RunUntilIdle(); | 358 base::RunLoop().RunUntilIdle(); |
359 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), IsEmpty()); | 359 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), IsEmpty()); |
360 } | 360 } |
361 | 361 |
362 TEST_F(PrecacheManagerTest, RecordStatsForFetchWithEmptyURL) { | 362 TEST_F(PrecacheManagerTest, RecordStatsForFetchWithEmptyURL) { |
363 // Fetches for empty URLs should be ignored. | 363 // Fetches for empty URLs should be ignored. |
364 precache_manager_->RecordStatsForFetch(GURL(), GURL(), base::TimeDelta(), | 364 precache_manager_->RecordStatsForFetch(GURL(), GURL(), base::TimeDelta(), |
365 base::Time(), 1000, false); | 365 base::Time(), 1000, false); |
366 base::MessageLoop::current()->RunUntilIdle(); | 366 base::RunLoop().RunUntilIdle(); |
367 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), IsEmpty()); | 367 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), IsEmpty()); |
368 } | 368 } |
369 | 369 |
370 TEST_F(PrecacheManagerTest, RecordStatsForFetchDuringPrecaching) { | 370 TEST_F(PrecacheManagerTest, RecordStatsForFetchDuringPrecaching) { |
371 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) | 371 EXPECT_CALL(history_service_, TopHosts(NumTopHosts(), _)) |
372 .WillOnce(ReturnHosts(history::TopHostsList())); | 372 .WillOnce(ReturnHosts(history::TopHostsList())); |
373 | 373 |
374 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); | 374 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); |
375 | 375 |
376 EXPECT_TRUE(precache_manager_->IsPrecaching()); | 376 EXPECT_TRUE(precache_manager_->IsPrecaching()); |
377 precache_manager_->RecordStatsForFetch(GURL("http://url.com"), GURL(), | 377 precache_manager_->RecordStatsForFetch(GURL("http://url.com"), GURL(), |
378 base::TimeDelta(), base::Time(), 1000, | 378 base::TimeDelta(), base::Time(), 1000, |
379 false); | 379 false); |
380 base::MessageLoop::current()->RunUntilIdle(); | 380 base::RunLoop().RunUntilIdle(); |
381 precache_manager_->CancelPrecaching(); | 381 precache_manager_->CancelPrecaching(); |
382 | 382 |
383 // For PrecacheFetcher and RecordURLPrecached. | 383 // For PrecacheFetcher and RecordURLPrecached. |
384 base::MessageLoop::current()->RunUntilIdle(); | 384 base::RunLoop().RunUntilIdle(); |
385 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), | 385 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), |
386 ElementsAre(Pair("Precache.DownloadedPrecacheMotivated", 1), | 386 ElementsAre(Pair("Precache.DownloadedPrecacheMotivated", 1), |
387 Pair("Precache.Fetch.PercentCompleted", 1), | 387 Pair("Precache.Fetch.PercentCompleted", 1), |
388 Pair("Precache.Fetch.ResponseBytes.Network", 1), | 388 Pair("Precache.Fetch.ResponseBytes.Network", 1), |
389 Pair("Precache.Fetch.ResponseBytes.Total", 1), | 389 Pair("Precache.Fetch.ResponseBytes.Total", 1), |
390 Pair("Precache.Fetch.TimeToComplete", 1), | 390 Pair("Precache.Fetch.TimeToComplete", 1), |
391 Pair("Precache.Latency.Prefetch", 1))); | 391 Pair("Precache.Latency.Prefetch", 1))); |
392 } | 392 } |
393 | 393 |
394 TEST_F(PrecacheManagerTest, RecordStatsForFetchHTTP) { | 394 TEST_F(PrecacheManagerTest, RecordStatsForFetchHTTP) { |
395 precache_manager_->RecordStatsForFetch(GURL("http://http-url.com"), GURL(), | 395 precache_manager_->RecordStatsForFetch(GURL("http://http-url.com"), GURL(), |
396 base::TimeDelta(), base::Time(), 1000, | 396 base::TimeDelta(), base::Time(), 1000, |
397 false); | 397 false); |
398 base::MessageLoop::current()->RunUntilIdle(); | 398 base::RunLoop().RunUntilIdle(); |
399 | 399 |
400 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), | 400 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), |
401 ElementsAre(Pair("Precache.DownloadedNonPrecache", 1), | 401 ElementsAre(Pair("Precache.DownloadedNonPrecache", 1), |
402 Pair("Precache.Latency.NonPrefetch", 1), | 402 Pair("Precache.Latency.NonPrefetch", 1), |
403 Pair("Precache.Latency.NonPrefetch.NonTopHosts", 1))); | 403 Pair("Precache.Latency.NonPrefetch.NonTopHosts", 1))); |
404 } | 404 } |
405 | 405 |
406 TEST_F(PrecacheManagerTest, RecordStatsForFetchHTTPS) { | 406 TEST_F(PrecacheManagerTest, RecordStatsForFetchHTTPS) { |
407 precache_manager_->RecordStatsForFetch(GURL("https://https-url.com"), GURL(), | 407 precache_manager_->RecordStatsForFetch(GURL("https://https-url.com"), GURL(), |
408 base::TimeDelta(), base::Time(), 1000, | 408 base::TimeDelta(), base::Time(), 1000, |
409 false); | 409 false); |
410 base::MessageLoop::current()->RunUntilIdle(); | 410 base::RunLoop().RunUntilIdle(); |
411 | 411 |
412 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), | 412 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), |
413 ElementsAre(Pair("Precache.DownloadedNonPrecache", 1), | 413 ElementsAre(Pair("Precache.DownloadedNonPrecache", 1), |
414 Pair("Precache.Latency.NonPrefetch", 1), | 414 Pair("Precache.Latency.NonPrefetch", 1), |
415 Pair("Precache.Latency.NonPrefetch.NonTopHosts", 1))); | 415 Pair("Precache.Latency.NonPrefetch.NonTopHosts", 1))); |
416 } | 416 } |
417 | 417 |
418 TEST_F(PrecacheManagerTest, RecordStatsForFetchInTopHosts) { | 418 TEST_F(PrecacheManagerTest, RecordStatsForFetchInTopHosts) { |
419 EXPECT_CALL(history_service_, | 419 EXPECT_CALL(history_service_, |
420 HostRankIfAvailable(GURL("http://referrer.com"), _)) | 420 HostRankIfAvailable(GURL("http://referrer.com"), _)) |
421 .WillOnce(Invoke( | 421 .WillOnce(Invoke( |
422 [](const GURL& url, const base::Callback<void(int)>& callback) { | 422 [](const GURL& url, const base::Callback<void(int)>& callback) { |
423 callback.Run(0); | 423 callback.Run(0); |
424 })); | 424 })); |
425 precache_manager_->RecordStatsForFetch( | 425 precache_manager_->RecordStatsForFetch( |
426 GURL("http://http-url.com"), GURL("http://referrer.com"), | 426 GURL("http://http-url.com"), GURL("http://referrer.com"), |
427 base::TimeDelta(), base::Time(), 1000, false); | 427 base::TimeDelta(), base::Time(), 1000, false); |
428 base::MessageLoop::current()->RunUntilIdle(); | 428 base::RunLoop().RunUntilIdle(); |
429 | 429 |
430 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), | 430 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), |
431 ElementsAre(Pair("Precache.DownloadedNonPrecache", 1), | 431 ElementsAre(Pair("Precache.DownloadedNonPrecache", 1), |
432 Pair("Precache.Latency.NonPrefetch", 1), | 432 Pair("Precache.Latency.NonPrefetch", 1), |
433 Pair("Precache.Latency.NonPrefetch.TopHosts", 1))); | 433 Pair("Precache.Latency.NonPrefetch.TopHosts", 1))); |
434 } | 434 } |
435 | 435 |
436 TEST_F(PrecacheManagerTest, DeleteExpiredPrecacheHistory) { | 436 TEST_F(PrecacheManagerTest, DeleteExpiredPrecacheHistory) { |
437 // TODO(twifkak): Split this into multiple tests. | 437 // TODO(twifkak): Split this into multiple tests. |
438 base::HistogramTester::CountsMap expected_histogram_count_map; | 438 base::HistogramTester::CountsMap expected_histogram_count_map; |
(...skipping 16 matching lines...) Expand all Loading... |
455 kCurrentTime - base::TimeDelta::FromDays(59), 1000, false); | 455 kCurrentTime - base::TimeDelta::FromDays(59), 1000, false); |
456 precache_manager_->RecordStatsForFetch( | 456 precache_manager_->RecordStatsForFetch( |
457 GURL("http://yesterday-fetch.com"), GURL(), base::TimeDelta(), | 457 GURL("http://yesterday-fetch.com"), GURL(), base::TimeDelta(), |
458 kCurrentTime - base::TimeDelta::FromDays(1), 1000, false); | 458 kCurrentTime - base::TimeDelta::FromDays(1), 1000, false); |
459 expected_histogram_count_map["Precache.DownloadedPrecacheMotivated"] += 3; | 459 expected_histogram_count_map["Precache.DownloadedPrecacheMotivated"] += 3; |
460 expected_histogram_count_map["Precache.Fetch.PercentCompleted"]++; | 460 expected_histogram_count_map["Precache.Fetch.PercentCompleted"]++; |
461 expected_histogram_count_map["Precache.Fetch.ResponseBytes.Network"]++; | 461 expected_histogram_count_map["Precache.Fetch.ResponseBytes.Network"]++; |
462 expected_histogram_count_map["Precache.Fetch.ResponseBytes.Total"]++; | 462 expected_histogram_count_map["Precache.Fetch.ResponseBytes.Total"]++; |
463 expected_histogram_count_map["Precache.Fetch.TimeToComplete"]++; | 463 expected_histogram_count_map["Precache.Fetch.TimeToComplete"]++; |
464 expected_histogram_count_map["Precache.Latency.Prefetch"] += 3; | 464 expected_histogram_count_map["Precache.Latency.Prefetch"] += 3; |
465 base::MessageLoop::current()->RunUntilIdle(); | 465 base::RunLoop().RunUntilIdle(); |
466 | 466 |
467 precache_manager_->CancelPrecaching(); | 467 precache_manager_->CancelPrecaching(); |
468 base::MessageLoop::current()->RunUntilIdle(); | 468 base::RunLoop().RunUntilIdle(); |
469 | 469 |
470 // Disable pause-resume. | 470 // Disable pause-resume. |
471 precache_database_->DeleteUnfinishedWork(); | 471 precache_database_->DeleteUnfinishedWork(); |
472 base::MessageLoop::current()->RunUntilIdle(); | 472 base::RunLoop().RunUntilIdle(); |
473 | 473 |
474 // For PrecacheFetcher and RecordURLPrecached. | 474 // For PrecacheFetcher and RecordURLPrecached. |
475 base::MessageLoop::current()->RunUntilIdle(); | 475 base::RunLoop().RunUntilIdle(); |
476 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), | 476 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), |
477 ContainerEq(expected_histogram_count_map)); | 477 ContainerEq(expected_histogram_count_map)); |
478 | 478 |
479 // The expired precache will be deleted during precaching this time. | 479 // The expired precache will be deleted during precaching this time. |
480 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); | 480 precache_manager_->StartPrecaching(precache_callback_.GetCallback()); |
481 EXPECT_TRUE(precache_manager_->IsPrecaching()); | 481 EXPECT_TRUE(precache_manager_->IsPrecaching()); |
482 base::MessageLoop::current()->RunUntilIdle(); | 482 base::RunLoop().RunUntilIdle(); |
483 | 483 |
484 // The precache fetcher runs until done, which records these histograms, | 484 // The precache fetcher runs until done, which records these histograms, |
485 // and then cancels precaching, which records these histograms again. | 485 // and then cancels precaching, which records these histograms again. |
486 // In practice | 486 // In practice |
487 expected_histogram_count_map["Precache.Fetch.PercentCompleted"]++; | 487 expected_histogram_count_map["Precache.Fetch.PercentCompleted"]++; |
488 expected_histogram_count_map["Precache.Fetch.ResponseBytes.Network"]++; | 488 expected_histogram_count_map["Precache.Fetch.ResponseBytes.Network"]++; |
489 expected_histogram_count_map["Precache.Fetch.ResponseBytes.Total"]++; | 489 expected_histogram_count_map["Precache.Fetch.ResponseBytes.Total"]++; |
490 // For PrecacheFetcher and RecordURLPrecached. | 490 // For PrecacheFetcher and RecordURLPrecached. |
491 base::MessageLoop::current()->RunUntilIdle(); | 491 base::RunLoop().RunUntilIdle(); |
492 EXPECT_FALSE(precache_manager_->IsPrecaching()); | 492 EXPECT_FALSE(precache_manager_->IsPrecaching()); |
493 | 493 |
494 // A fetch for the same URL as the expired precache was served from the cache, | 494 // A fetch for the same URL as the expired precache was served from the cache, |
495 // but it isn't reported as saved bytes because it had expired in the precache | 495 // but it isn't reported as saved bytes because it had expired in the precache |
496 // history. | 496 // history. |
497 precache_manager_->RecordStatsForFetch(GURL("http://old-fetch.com"), GURL(), | 497 precache_manager_->RecordStatsForFetch(GURL("http://old-fetch.com"), GURL(), |
498 base::TimeDelta(), kCurrentTime, 1000, | 498 base::TimeDelta(), kCurrentTime, 1000, |
499 true); | 499 true); |
500 expected_histogram_count_map["Precache.Fetch.TimeToComplete"]++; | 500 expected_histogram_count_map["Precache.Fetch.TimeToComplete"]++; |
501 expected_histogram_count_map["Precache.Latency.NonPrefetch"]++; | 501 expected_histogram_count_map["Precache.Latency.NonPrefetch"]++; |
502 expected_histogram_count_map["Precache.Latency.NonPrefetch.NonTopHosts"]++; | 502 expected_histogram_count_map["Precache.Latency.NonPrefetch.NonTopHosts"]++; |
503 | 503 |
504 base::MessageLoop::current()->RunUntilIdle(); | 504 base::RunLoop().RunUntilIdle(); |
505 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), | 505 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), |
506 ContainerEq(expected_histogram_count_map)); | 506 ContainerEq(expected_histogram_count_map)); |
507 | 507 |
508 // The other precaches should not have expired, so the following fetches from | 508 // The other precaches should not have expired, so the following fetches from |
509 // the cache should count as saved bytes. | 509 // the cache should count as saved bytes. |
510 precache_manager_->RecordStatsForFetch(GURL("http://recent-fetch.com"), GURL()
, | 510 precache_manager_->RecordStatsForFetch(GURL("http://recent-fetch.com"), GURL()
, |
511 base::TimeDelta(), kCurrentTime, 1000, | 511 base::TimeDelta(), kCurrentTime, 1000, |
512 true); | 512 true); |
513 precache_manager_->RecordStatsForFetch(GURL("http://yesterday-fetch.com"), | 513 precache_manager_->RecordStatsForFetch(GURL("http://yesterday-fetch.com"), |
514 GURL(), base::TimeDelta(), kCurrentTime, | 514 GURL(), base::TimeDelta(), kCurrentTime, |
515 1000, true); | 515 1000, true); |
516 expected_histogram_count_map["Precache.Latency.NonPrefetch"] += 2; | 516 expected_histogram_count_map["Precache.Latency.NonPrefetch"] += 2; |
517 expected_histogram_count_map["Precache.Latency.NonPrefetch.NonTopHosts"] += 2; | 517 expected_histogram_count_map["Precache.Latency.NonPrefetch.NonTopHosts"] += 2; |
518 expected_histogram_count_map["Precache.Saved"] += 2; | 518 expected_histogram_count_map["Precache.Saved"] += 2; |
519 | 519 |
520 base::MessageLoop::current()->RunUntilIdle(); | 520 base::RunLoop().RunUntilIdle(); |
521 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), | 521 EXPECT_THAT(histograms_.GetTotalCountsForPrefix("Precache."), |
522 ContainerEq(expected_histogram_count_map)); | 522 ContainerEq(expected_histogram_count_map)); |
523 } | 523 } |
524 | 524 |
525 } // namespace | 525 } // namespace |
526 | 526 |
527 } // namespace precache | 527 } // namespace precache |
OLD | NEW |