| Index: media/blink/cache_util.cc
|
| diff --git a/media/blink/cache_util.cc b/media/blink/cache_util.cc
|
| index 3b1c82a2d9c924e4e5eae35300c8cb7f4d30e036..6dfad1e5f292c9f3fb32e40a742b7a48d0ddabd2 100644
|
| --- a/media/blink/cache_util.cc
|
| +++ b/media/blink/cache_util.cc
|
| @@ -84,4 +84,39 @@ uint32 GetReasonsForUncacheability(const WebURLResponse& response) {
|
| return reasons;
|
| }
|
|
|
| +base::TimeTicks GetMemoryCacheValidUntil(const WebURLResponse& response) {
|
| + std::string cache_control_header =
|
| + base::ToLowerASCII(response.httpHeaderField("cache-control").utf8());
|
| + if (cache_control_header.find("no-cache") != std::string::npos)
|
| + return base::TimeTicks::Now();
|
| + if (cache_control_header.find("must-revalidate") != std::string::npos)
|
| + return base::TimeTicks::Now();
|
| +
|
| + // Max cache timeout ~= 1 month.
|
| + base::TimeDelta ret = base::TimeDelta::FromDays(30);
|
| +
|
| + const char kMaxAgePrefix[] = "max-age=";
|
| + const size_t kMaxAgePrefixLen = arraysize(kMaxAgePrefix) - 1;
|
| + if (cache_control_header.substr(0, kMaxAgePrefixLen) == kMaxAgePrefix) {
|
| + int64 max_age_seconds;
|
| + base::StringToInt64(
|
| + base::StringPiece(cache_control_header.begin() + kMaxAgePrefixLen,
|
| + cache_control_header.end()),
|
| + &max_age_seconds);
|
| +
|
| + ret = std::min(ret, TimeDelta::FromSeconds(max_age_seconds));
|
| + }
|
| +
|
| + Time date;
|
| + Time expires;
|
| + if (Time::FromString(response.httpHeaderField("Date").utf8().data(), &date) &&
|
| + Time::FromString(response.httpHeaderField("Expires").utf8().data(),
|
| + &expires) &&
|
| + date > Time() && expires > Time()) {
|
| + ret = std::min(ret, expires - date);
|
| + }
|
| +
|
| + return base::TimeTicks::Now() + ret;
|
| +}
|
| +
|
| } // namespace media
|
|
|