Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(731)

Unified Diff: net/http/http_cache_transaction.cc

Issue 154243006: Add GetExpirationTimes() to HttpResponseHeader. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move a function body Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/http/http_cache_transaction.cc
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc
index 23295ad154c6babc791d99404ff253305bcbd089..20af67e0fbe72d50f45c831a0d651aedb5f75854 100644
--- a/net/http/http_cache_transaction.cc
+++ b/net/http/http_cache_transaction.cc
@@ -1960,10 +1960,10 @@ int HttpCache::Transaction::BeginCacheValidation() {
ValidationType required_validation = RequiresValidation();
- bool skip_validation = (required_validation == VALIDATION_NONE);
+ bool skip_validation = (required_validation == ValidationType::NONE);
if ((effective_load_flags_ & LOAD_SUPPORT_ASYNC_REVALIDATION) &&
- required_validation == VALIDATION_ASYNCHRONOUS) {
+ required_validation == ValidationType::ASYNCHRONOUS) {
DCHECK_EQ(request_->method, "GET");
skip_validation = true;
response_.async_revalidation_required = true;
@@ -2096,7 +2096,7 @@ int HttpCache::Transaction::BeginExternallyConditionalizedRequest() {
EXTERNALLY_CONDITIONALIZED_CACHE_USABLE;
if (mode_ == NONE)
type = EXTERNALLY_CONDITIONALIZED_MISMATCHED_VALIDATORS;
- else if (RequiresValidation() != VALIDATION_NONE)
+ else if (RequiresValidation() != ValidationType::NONE)
type = EXTERNALLY_CONDITIONALIZED_CACHE_REQUIRES_VALIDATION;
// TODO(ricea): Add CACHE_USABLE_STALE once stale-while-revalidate CL landed.
@@ -2149,7 +2149,8 @@ int HttpCache::Transaction::RestartNetworkRequestWithAuth(
return rv;
}
-ValidationType HttpCache::Transaction::RequiresValidation() {
+HttpCache::Transaction::ValidationType
+HttpCache::Transaction::RequiresValidation() {
// TODO(darin): need to do more work here:
// - make sure we have a matching request method
// - watch out for cached responses that depend on authentication
@@ -2158,40 +2159,41 @@ ValidationType HttpCache::Transaction::RequiresValidation() {
!response_.vary_data.MatchesRequest(*request_,
*response_.headers.get())) {
vary_mismatch_ = true;
- return VALIDATION_SYNCHRONOUS;
+ return ValidationType::SYNCHRONOUS;
}
if (effective_load_flags_ & LOAD_PREFERRING_CACHE)
- return VALIDATION_NONE;
+ return ValidationType::NONE;
+
+ HttpResponseHeaders::ExpirationTimes expiration_times =
+ response_.headers->GetExpirationTimes(response_.request_time,
+ response_.response_time);
+ base::Time now = cache_->clock_->Now();
if (response_.unused_since_prefetch &&
!(effective_load_flags_ & LOAD_PREFETCH) &&
- response_.headers->GetCurrentAge(
- response_.request_time, response_.response_time,
- cache_->clock_->Now()) < TimeDelta::FromMinutes(kPrefetchReuseMins)) {
+ now - expiration_times.corrected_response_time <
+ TimeDelta::FromMinutes(kPrefetchReuseMins)) {
// The first use of a resource after prefetch within a short window skips
// validation.
- return VALIDATION_NONE;
+ return ValidationType::NONE;
}
if (effective_load_flags_ & LOAD_VALIDATE_CACHE)
- return VALIDATION_SYNCHRONOUS;
+ return ValidationType::SYNCHRONOUS;
if (request_->method == "PUT" || request_->method == "DELETE")
- return VALIDATION_SYNCHRONOUS;
-
- ValidationType validation_required_by_headers =
- response_.headers->RequiresValidation(response_.request_time,
- response_.response_time,
- cache_->clock_->Now());
+ return ValidationType::SYNCHRONOUS;
- if (validation_required_by_headers == VALIDATION_ASYNCHRONOUS) {
- // Asynchronous revalidation is only supported for GET methods.
- if (request_->method != "GET")
- return VALIDATION_SYNCHRONOUS;
- }
+ if (now < expiration_times.GetExpirationTime())
+ return ValidationType::NONE;
+ if (now > expiration_times.GetAsyncExpirationTime())
+ return ValidationType::SYNCHRONOUS;
- return validation_required_by_headers;
+ // Asynchronous revalidation is only supported for GET methods.
+ if (request_->method != "GET")
+ return ValidationType::SYNCHRONOUS;
+ return ValidationType::ASYNCHRONOUS;
}
bool HttpCache::Transaction::ConditionalizeRequest() {
@@ -2241,19 +2243,18 @@ bool HttpCache::Transaction::ConditionalizeRequest() {
if (!use_if_range) {
// stale-while-revalidate is not useful when we only have a partial response
// cached, so don't set the header in that case.
- HttpResponseHeaders::FreshnessLifetimes lifetimes =
- response_.headers->GetFreshnessLifetimes(response_.response_time);
- if (lifetimes.staleness > TimeDelta()) {
- TimeDelta current_age = response_.headers->GetCurrentAge(
- response_.request_time, response_.response_time,
- cache_->clock_->Now());
-
+ HttpResponseHeaders::ExpirationTimes expirations =
+ response_.headers->GetExpirationTimes(response_.request_time,
+ response_.response_time);
+ if (!expirations.staleness_lifetime.is_zero()) {
+ TimeDelta current_age =
+ cache_->clock_->Now() - expirations.corrected_response_time;
custom_request_->extra_headers.SetHeader(
kFreshnessHeader,
base::StringPrintf("max-age=%" PRId64
",stale-while-revalidate=%" PRId64 ",age=%" PRId64,
- lifetimes.freshness.InSeconds(),
- lifetimes.staleness.InSeconds(),
+ expirations.freshness_lifetime.InSeconds(),
+ expirations.staleness_lifetime.InSeconds(),
current_age.InSeconds()));
}
}

Powered by Google App Engine
This is Rietveld 408576698