Only LOAD_VALIDATE_CACHE for validated resources.
commit7953387c1fbfea0beba6d8cada15ebca367b1029
authortwifkak <twifkak@chromium.org>
Sat, 22 Aug 2015 12:10:51 +0000 (22 05:10 -0700)
committerCommit bot <commit-bot@chromium.org>
Sat, 22 Aug 2015 12:12:10 +0000 (22 12:12 +0000)
treee165fd2a23864c9d6a89a50f3267baf9a5517cd2
parentfa99ffd4a5dd7af65d71b94bbf4b6ca19f05bac3
Only LOAD_VALIDATE_CACHE for validated resources.

When fetching an URL with LOAD_VALIDATE_CACHE, if the URL is in the
cache but does not have validation headers (e.g. ETag, Last-Modified),
it will be refetched in its entirety. We don't want that.

Instead, for resource fetches, we fetch the URL first with
LOAD_ONLY_FROM_CACHE, and then confirm that either it is missing or it
has strong validators before re-requesting the URL with
LOAD_VALIDATE_CACHE.

For config and manifest fetches, we fetch the URL normally (without the
LOAD_VALIDATE_CACHE flag), as we don't benefit from revalidation.

In order to effect the above, this change introduces a small state
machine, controlled by the FetchStage enum.

In order to test the above, this change introduces a custom URLFetcherFactory.
This is because FakeURLFetcherFactory lacks a way to fake more than one
response for the same URL.

For test, each of the requests need to be customized in a different way.
Because the URLFetcherFactory API doesn't create an URLFetcher until the URL is
requested, this requires passing around a lambda specifying how to modify it at
create time.

BUG=309216

Review URL: https://codereview.chromium.org/1289683004

Cr-Commit-Position: refs/heads/master@{#344978}
components/precache/core/DEPS
components/precache/core/precache_fetcher.cc
components/precache/core/precache_fetcher.h
components/precache/core/precache_fetcher_unittest.cc