| 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 |