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/core/precache_fetcher.h" | 5 #include "components/precache/core/precache_fetcher.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <cstring> | 9 #include <cstring> |
10 #include <memory> | 10 #include <memory> |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 | 232 |
233 net::FakeURLFetcher* fetcher = nullptr; | 233 net::FakeURLFetcher* fetcher = nullptr; |
234 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) | 234 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) |
235 .WillOnce(factory_.RespondWith("", &fetcher)); | 235 .WillOnce(factory_.RespondWith("", &fetcher)); |
236 EXPECT_CALL(*this, | 236 EXPECT_CALL(*this, |
237 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, | 237 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, |
238 NotNull()))); | 238 NotNull()))); |
239 | 239 |
240 PrecacheFetcher::Fetcher precache_fetcher( | 240 PrecacheFetcher::Fetcher precache_fetcher( |
241 request_context_.get(), url, url.host(), callback_, | 241 request_context_.get(), url, url.host(), callback_, |
242 false /* is_resource_request */, SIZE_MAX); | 242 false /* is_resource_request */, SIZE_MAX, false /* revalidation_only */); |
243 | 243 |
244 base::RunLoop().RunUntilIdle(); | 244 base::RunLoop().RunUntilIdle(); |
245 | 245 |
246 ASSERT_NE(nullptr, fetcher); | 246 ASSERT_NE(nullptr, fetcher); |
247 EXPECT_EQ(kNoTracking, fetcher->GetLoadFlags()); | 247 EXPECT_EQ(kNoTracking, fetcher->GetLoadFlags()); |
248 } | 248 } |
249 | 249 |
250 TEST_F(PrecacheFetcherFetcherTest, ResourceNotInCache) { | 250 TEST_F(PrecacheFetcherFetcherTest, ResourceNotInCache) { |
251 GURL url(kGoodResourceURL); | 251 GURL url(kGoodResourceURL); |
252 | 252 |
253 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; | 253 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; |
254 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) | 254 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) |
255 .WillOnce(factory_.RespondWith("", CacheMiss, &fetcher1)) | 255 .WillOnce(factory_.RespondWith("", CacheMiss, &fetcher1)) |
256 .WillOnce(factory_.RespondWith("", &fetcher2)); | 256 .WillOnce(factory_.RespondWith("", &fetcher2)); |
257 EXPECT_CALL(*this, | 257 EXPECT_CALL(*this, |
258 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, | 258 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, |
259 NotNull()))) | 259 NotNull()))); |
260 .Times(1); | |
261 | 260 |
262 PrecacheFetcher::Fetcher precache_fetcher( | 261 PrecacheFetcher::Fetcher precache_fetcher( |
263 request_context_.get(), url, url.host(), callback_, | 262 request_context_.get(), url, url.host(), callback_, |
264 true /* is_resource_request */, SIZE_MAX); | 263 true /* is_resource_request */, SIZE_MAX, false /* revalidation_only */); |
265 | 264 |
266 base::RunLoop().RunUntilIdle(); | 265 base::RunLoop().RunUntilIdle(); |
267 | 266 |
268 ASSERT_NE(nullptr, fetcher1); | 267 ASSERT_NE(nullptr, fetcher1); |
269 EXPECT_EQ( | 268 EXPECT_EQ( |
270 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, | 269 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, |
271 fetcher1->GetLoadFlags()); | 270 fetcher1->GetLoadFlags()); |
272 ASSERT_NE(nullptr, fetcher2); | 271 ASSERT_NE(nullptr, fetcher2); |
273 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); | 272 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); |
274 } | 273 } |
275 | 274 |
276 TEST_F(PrecacheFetcherFetcherTest, ResourceHasValidators) { | 275 TEST_F(PrecacheFetcherFetcherTest, ResourceHasValidators) { |
277 GURL url(kGoodResourceURL); | 276 GURL url(kGoodResourceURL); |
278 | 277 |
279 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; | 278 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; |
280 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) | 279 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) |
281 .WillOnce(factory_.RespondWith("", HasETag, &fetcher1)) | 280 .WillOnce(factory_.RespondWith("", HasETag, &fetcher1)) |
282 .WillOnce(factory_.RespondWith("", &fetcher2)); | 281 .WillOnce(factory_.RespondWith("", &fetcher2)); |
283 EXPECT_CALL(*this, | 282 EXPECT_CALL(*this, |
284 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, | 283 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, |
285 NotNull()))); | 284 NotNull()))); |
286 | 285 |
287 PrecacheFetcher::Fetcher precache_fetcher( | 286 PrecacheFetcher::Fetcher precache_fetcher( |
288 request_context_.get(), url, url.host(), callback_, | 287 request_context_.get(), url, url.host(), callback_, |
289 true /* is_resource_request */, SIZE_MAX); | 288 true /* is_resource_request */, SIZE_MAX, false /* revalidation_only */); |
290 | 289 |
291 base::RunLoop().RunUntilIdle(); | 290 base::RunLoop().RunUntilIdle(); |
292 | 291 |
293 ASSERT_NE(nullptr, fetcher1); | 292 ASSERT_NE(nullptr, fetcher1); |
294 EXPECT_EQ( | 293 EXPECT_EQ( |
295 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, | 294 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, |
296 fetcher1->GetLoadFlags()); | 295 fetcher1->GetLoadFlags()); |
297 ASSERT_NE(nullptr, fetcher2); | 296 ASSERT_NE(nullptr, fetcher2); |
298 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); | 297 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); |
299 } | 298 } |
300 | 299 |
301 TEST_F(PrecacheFetcherFetcherTest, ResourceHasNoValidators) { | 300 TEST_F(PrecacheFetcherFetcherTest, ResourceHasNoValidators) { |
302 GURL url(kGoodResourceURL); | 301 GURL url(kGoodResourceURL); |
303 | 302 |
304 net::FakeURLFetcher* fetcher; | 303 net::FakeURLFetcher* fetcher = nullptr; |
305 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) | 304 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) |
306 .WillOnce(factory_.RespondWith("", &fetcher)); | 305 .WillOnce(factory_.RespondWith("", &fetcher)); |
307 EXPECT_CALL(*this, | 306 EXPECT_CALL(*this, |
| 307 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, |
| 308 nullptr))); // It never reached the network. |
| 309 |
| 310 PrecacheFetcher::Fetcher precache_fetcher( |
| 311 request_context_.get(), url, url.host(), callback_, |
| 312 true /* is_resource_request */, SIZE_MAX, false /* revalidation_only */); |
| 313 |
| 314 base::RunLoop().RunUntilIdle(); |
| 315 |
| 316 EXPECT_EQ( |
| 317 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, |
| 318 fetcher->GetLoadFlags()); |
| 319 } |
| 320 |
| 321 TEST_F(PrecacheFetcherFetcherTest, RevalidationOnlyResourceNotInCache) { |
| 322 GURL url(kGoodResourceURL); |
| 323 |
| 324 net::FakeURLFetcher* fetcher = nullptr; |
| 325 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) |
| 326 .WillOnce(factory_.RespondWith("", CacheMiss, &fetcher)); |
| 327 EXPECT_CALL(*this, |
| 328 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, |
| 329 nullptr))); // It never reached the network. |
| 330 |
| 331 PrecacheFetcher::Fetcher precache_fetcher( |
| 332 request_context_.get(), url, url.host(), callback_, |
| 333 true /* is_resource_request */, SIZE_MAX, true /* revalidation_only */); |
| 334 |
| 335 base::RunLoop().RunUntilIdle(); |
| 336 |
| 337 ASSERT_NE(nullptr, fetcher); |
| 338 EXPECT_EQ( |
| 339 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, |
| 340 fetcher->GetLoadFlags()); |
| 341 } |
| 342 |
| 343 TEST_F(PrecacheFetcherFetcherTest, RevalidationOnlyResourceHasValidators) { |
| 344 GURL url(kGoodResourceURL); |
| 345 |
| 346 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; |
| 347 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) |
| 348 .WillOnce(factory_.RespondWith("", HasETag, &fetcher1)) |
| 349 .WillOnce(factory_.RespondWith("", &fetcher2)); |
| 350 EXPECT_CALL(*this, |
| 351 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, |
| 352 NotNull()))); |
| 353 |
| 354 PrecacheFetcher::Fetcher precache_fetcher( |
| 355 request_context_.get(), url, url.host(), callback_, |
| 356 true /* is_resource_request */, SIZE_MAX, true /* revalidation_only */); |
| 357 |
| 358 base::RunLoop().RunUntilIdle(); |
| 359 |
| 360 ASSERT_NE(nullptr, fetcher1); |
| 361 EXPECT_EQ( |
| 362 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, |
| 363 fetcher1->GetLoadFlags()); |
| 364 ASSERT_NE(nullptr, fetcher2); |
| 365 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); |
| 366 } |
| 367 |
| 368 TEST_F(PrecacheFetcherFetcherTest, RevalidationOnlyResourceHasNoValidators) { |
| 369 GURL url(kGoodResourceURL); |
| 370 |
| 371 net::FakeURLFetcher* fetcher = nullptr; |
| 372 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) |
| 373 .WillOnce(factory_.RespondWith("", &fetcher)); |
| 374 EXPECT_CALL(*this, |
308 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, | 375 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, |
309 nullptr))); // It never reached the network. | 376 nullptr))); // It never reached the network. |
310 | 377 |
311 PrecacheFetcher::Fetcher precache_fetcher( | 378 PrecacheFetcher::Fetcher precache_fetcher( |
312 request_context_.get(), url, url.host(), callback_, | 379 request_context_.get(), url, url.host(), callback_, |
313 true /* is_resource_request */, SIZE_MAX); | 380 true /* is_resource_request */, SIZE_MAX, true /* revalidation_only */); |
314 | 381 |
315 base::RunLoop().RunUntilIdle(); | 382 base::RunLoop().RunUntilIdle(); |
316 | 383 |
317 EXPECT_EQ( | 384 EXPECT_EQ( |
318 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, | 385 net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION | kNoTracking, |
319 fetcher->GetLoadFlags()); | 386 fetcher->GetLoadFlags()); |
320 } | 387 } |
321 | 388 |
322 TEST_F(PrecacheFetcherFetcherTest, ResourceTooBig) { | 389 TEST_F(PrecacheFetcherFetcherTest, ResourceTooBig) { |
323 GURL url(kGoodResourceURL); | 390 GURL url(kGoodResourceURL); |
324 | 391 |
325 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) | 392 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) |
326 // Cache request will fail, so that a network request is made. Only | 393 // Cache request will fail, so that a network request is made. Only |
327 // network requests are byte-capped. | 394 // network requests are byte-capped. |
328 .WillOnce(factory_.RespondWith("", CacheMiss, nullptr)) | 395 .WillOnce(factory_.RespondWith("", CacheMiss, nullptr)) |
329 .WillOnce(factory_.RespondWith(std::string(100, '.'), nullptr)); | 396 .WillOnce(factory_.RespondWith(std::string(100, '.'), nullptr)); |
330 | 397 |
331 // The callback should be called even though the download was cancelled, so | 398 // The callback should be called even though the download was cancelled, so |
332 // that the next download can start. The network_url_fetcher within should be | 399 // that the next download can start. The network_url_fetcher within should be |
333 // null, to signify that either the network was never reached (which will be | 400 // null, to signify that either the network was never reached (which will be |
334 // flagged as an error due to the expectation above) or it was requested but | 401 // flagged as an error due to the expectation above) or it was requested but |
335 // cancelled (which is the desired behavior). | 402 // cancelled (which is the desired behavior). |
336 EXPECT_CALL(*this, | 403 EXPECT_CALL(*this, |
337 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, | 404 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, |
338 nullptr))); | 405 nullptr))); |
339 | 406 |
340 PrecacheFetcher::Fetcher precache_fetcher( | 407 PrecacheFetcher::Fetcher precache_fetcher( |
341 request_context_.get(), url, url.host(), callback_, | 408 request_context_.get(), url, url.host(), callback_, |
342 true /* is_resource_request */, 99 /* max_bytes */); | 409 true /* is_resource_request */, 99 /* max_bytes */, |
| 410 false /* revalidation_only */); |
343 | 411 |
344 base::RunLoop().RunUntilIdle(); | 412 base::RunLoop().RunUntilIdle(); |
345 } | 413 } |
346 | 414 |
347 class PrecacheFetcherTest : public testing::Test { | 415 class PrecacheFetcherTest : public testing::Test { |
348 public: | 416 public: |
349 PrecacheFetcherTest() | 417 PrecacheFetcherTest() |
350 : task_runner_(base::ThreadTaskRunnerHandle::Get()), | 418 : task_runner_(base::ThreadTaskRunnerHandle::Get()), |
351 request_context_(new net::TestURLRequestContextGetter( | 419 request_context_(new net::TestURLRequestContextGetter( |
352 base::ThreadTaskRunnerHandle::Get())), | 420 base::ThreadTaskRunnerHandle::Get())), |
(...skipping 1484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1837 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 1905 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
1838 | 1906 |
1839 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 1907 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
1840 | 1908 |
1841 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2); | 1909 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2); |
1842 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2); | 1910 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2); |
1843 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2); | 1911 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2); |
1844 } | 1912 } |
1845 | 1913 |
1846 } // namespace precache | 1914 } // namespace precache |
OLD | NEW |