| Index: net/http/http_vary_data.cc
|
| diff --git a/net/http/http_vary_data.cc b/net/http/http_vary_data.cc
|
| deleted file mode 100644
|
| index f2f853cb066e288edd8918c7f4b0065f828b6d12..0000000000000000000000000000000000000000
|
| --- a/net/http/http_vary_data.cc
|
| +++ /dev/null
|
| @@ -1,126 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "net/http/http_vary_data.h"
|
| -
|
| -#include <stdlib.h>
|
| -
|
| -#include "base/pickle.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "net/http/http_request_headers.h"
|
| -#include "net/http/http_request_info.h"
|
| -#include "net/http/http_response_headers.h"
|
| -#include "net/http/http_util.h"
|
| -
|
| -namespace net {
|
| -
|
| -HttpVaryData::HttpVaryData() : is_valid_(false) {
|
| -}
|
| -
|
| -bool HttpVaryData::Init(const HttpRequestInfo& request_info,
|
| - const HttpResponseHeaders& response_headers) {
|
| - base::MD5Context ctx;
|
| - base::MD5Init(&ctx);
|
| -
|
| - is_valid_ = false;
|
| - bool processed_header = false;
|
| -
|
| - // Feed the MD5 context in the order of the Vary header enumeration. If the
|
| - // Vary header repeats a header name, then that's OK.
|
| - //
|
| - // If the Vary header contains '*' then we should not construct any vary data
|
| - // since it is all usurped by a '*'. See section 13.6 of RFC 2616.
|
| - //
|
| - void* iter = NULL;
|
| - std::string name = "vary", request_header;
|
| - while (response_headers.EnumerateHeader(&iter, name, &request_header)) {
|
| - if (request_header == "*")
|
| - return false;
|
| - AddField(request_info, request_header, &ctx);
|
| - processed_header = true;
|
| - }
|
| -
|
| - // Add an implicit 'Vary: cookie' header to any redirect to avoid redirect
|
| - // loops which may result from redirects that are incorrectly marked as
|
| - // cachable by the server. Unfortunately, other browsers do not cache
|
| - // redirects that result from requests containing a cookie header. We are
|
| - // treading on untested waters here, so we want to be extra careful to make
|
| - // sure we do not end up with a redirect loop served from cache.
|
| - //
|
| - // If there is an explicit 'Vary: cookie' header, then we will just end up
|
| - // digesting the cookie header twice. Not a problem.
|
| - //
|
| - std::string location;
|
| - if (response_headers.IsRedirect(&location)) {
|
| - AddField(request_info, "cookie", &ctx);
|
| - processed_header = true;
|
| - }
|
| -
|
| - if (!processed_header)
|
| - return false;
|
| -
|
| - base::MD5Final(&request_digest_, &ctx);
|
| - return is_valid_ = true;
|
| -}
|
| -
|
| -bool HttpVaryData::InitFromPickle(PickleIterator* iter) {
|
| - is_valid_ = false;
|
| - const char* data;
|
| - if (iter->ReadBytes(&data, sizeof(request_digest_))) {
|
| - memcpy(&request_digest_, data, sizeof(request_digest_));
|
| - return is_valid_ = true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -void HttpVaryData::Persist(Pickle* pickle) const {
|
| - DCHECK(is_valid());
|
| - pickle->WriteBytes(&request_digest_, sizeof(request_digest_));
|
| -}
|
| -
|
| -bool HttpVaryData::MatchesRequest(
|
| - const HttpRequestInfo& request_info,
|
| - const HttpResponseHeaders& cached_response_headers) const {
|
| - HttpVaryData new_vary_data;
|
| - if (!new_vary_data.Init(request_info, cached_response_headers)) {
|
| - // This shouldn't happen provided the same response headers passed here
|
| - // were also used when initializing |this|.
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| - return memcmp(&new_vary_data.request_digest_, &request_digest_,
|
| - sizeof(request_digest_)) == 0;
|
| -}
|
| -
|
| -// static
|
| -std::string HttpVaryData::GetRequestValue(
|
| - const HttpRequestInfo& request_info,
|
| - const std::string& request_header) {
|
| - // Unfortunately, we do not have access to all of the request headers at this
|
| - // point. Most notably, we do not have access to an Authorization header if
|
| - // one will be added to the request.
|
| -
|
| - std::string result;
|
| - if (request_info.extra_headers.GetHeader(request_header, &result))
|
| - return result;
|
| -
|
| - return std::string();
|
| -}
|
| -
|
| -// static
|
| -void HttpVaryData::AddField(const HttpRequestInfo& request_info,
|
| - const std::string& request_header,
|
| - base::MD5Context* ctx) {
|
| - std::string request_value = GetRequestValue(request_info, request_header);
|
| -
|
| - // Append a character that cannot appear in the request header line so that we
|
| - // protect against case where the concatenation of two request headers could
|
| - // look the same for a variety of values for the individual request headers.
|
| - // For example, "foo: 12\nbar: 3" looks like "foo: 1\nbar: 23" otherwise.
|
| - request_value.append(1, '\n');
|
| -
|
| - base::MD5Update(ctx, request_value);
|
| -}
|
| -
|
| -} // namespace net
|
|
|