PRBool nsHttpResponseHead::ExpiresInPast() { PRUint32 expiresVal, dateVal; return NS_SUCCEEDED(GetExpiresValue(&expiresVal)) && NS_SUCCEEDED(GetDateValue(&dateVal)) && expiresVal < dateVal; }
bool nsHttpResponseHead::ExpiresInPast() const { uint32_t maxAgeVal, expiresVal, dateVal; // Bug #203271. Ensure max-age directive takes precedence over Expires if (NS_SUCCEEDED(GetMaxAgeValue(&maxAgeVal))) { return false; } return NS_SUCCEEDED(GetExpiresValue(&expiresVal)) && NS_SUCCEEDED(GetDateValue(&dateVal)) && expiresVal < dateVal; }
// From section 13.2.4 of RFC2616, we compute the freshness lifetime of a cached // response as follows: // // freshnessLifetime = max_age_value // <or> // freshnessLifetime = expires_value - date_value // <or> // freshnessLifetime = (date_value - last_modified_value) * 0.10 // <or> // freshnessLifetime = 0 // nsresult nsHttpResponseHead::ComputeFreshnessLifetime(uint32_t *result) const { *result = 0; // Try HTTP/1.1 style max-age directive... if (NS_SUCCEEDED(GetMaxAgeValue(result))) return NS_OK; *result = 0; uint32_t date = 0, date2 = 0; if (NS_FAILED(GetDateValue(&date))) date = NowInSeconds(); // synthesize a date header if none exists // Try HTTP/1.0 style expires header... if (NS_SUCCEEDED(GetExpiresValue(&date2))) { if (date2 > date) *result = date2 - date; // the Expires header can specify a date in the past. return NS_OK; } // Fallback on heuristic using last modified header... if (NS_SUCCEEDED(GetLastModifiedValue(&date2))) { LOG(("using last-modified to determine freshness-lifetime\n")); LOG(("last-modified = %u, date = %u\n", date2, date)); if (date2 <= date) { // this only makes sense if last-modified is actually in the past *result = (date - date2) / 10; return NS_OK; } } // These responses can be cached indefinitely. if ((mStatus == 300) || nsHttp::IsPermanentRedirect(mStatus)) { *result = uint32_t(-1); return NS_OK; } LOG(("nsHttpResponseHead::ComputeFreshnessLifetime [this = %x] " "Insufficient information to compute a non-zero freshness " "lifetime!\n", this)); return NS_OK; }