Revert 90354 - Revert 90352 - Move Referer header to extra_headers field

Reapply http://codereview.chromium.org/6995064 after fixing the chrome_frame_net_tests.


BUG=no
TEST=no


Review URL: http://codereview.chromium.org/7230009

[email protected]
Review URL: http://codereview.chromium.org/7236031

[email protected]
Review URL: http://codereview.chromium.org/7264017

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90548 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index 8b06a3b..d7a65e2 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -695,13 +695,6 @@
     request_headers_.SetHeader(HttpRequestHeaders::kConnection, "keep-alive");
   }
 
-  // Our consumer should have made sure that this is a safe referrer.  See for
-  // instance WebCore::FrameLoader::HideReferrer.
-  if (request_->referrer.is_valid()) {
-    request_headers_.SetHeader(HttpRequestHeaders::kReferer,
-                               request_->referrer.spec());
-  }
-
   // Add a content length header?
   if (request_body_.get()) {
     if (request_body_->is_chunked()) {
@@ -736,20 +729,7 @@
     auth_controllers_[HttpAuth::AUTH_SERVER]->AddAuthorizationHeader(
         &request_headers_);
 
-  // Headers that will be stripped from request_->extra_headers to prevent,
-  // e.g., plugins from overriding headers that are controlled using other
-  // means. Otherwise a plugin could set a referrer although sending the
-  // referrer is inhibited.
-  // TODO(jochen): check whether also other headers should be stripped.
-  static const char* const kExtraHeadersToBeStripped[] = {
-    "Referer"
-  };
-
-  HttpRequestHeaders stripped_extra_headers;
-  stripped_extra_headers.CopyFrom(request_->extra_headers);
-  for (size_t i = 0; i < arraysize(kExtraHeadersToBeStripped); ++i)
-    stripped_extra_headers.RemoveHeader(kExtraHeadersToBeStripped[i]);
-  request_headers_.MergeFrom(stripped_extra_headers);
+  request_headers_.MergeFrom(request_->extra_headers);
 }
 
 int HttpNetworkTransaction::DoBuildRequest() {
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index 45b3d79..65d699eb8 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -4910,7 +4910,8 @@
   request.method = "GET";
   request.url = GURL("http://www.google.com/");
   request.load_flags = 0;
-  request.referrer = GURL("http://the.previous.site.com/");
+  request.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
+                                  "http://the.previous.site.com/");
 
   SessionDependencies session_deps;
   scoped_ptr<HttpTransaction> trans(
@@ -5187,6 +5188,7 @@
     MockWrite("GET / HTTP/1.1\r\n"
               "Host: www.google.com\r\n"
               "Connection: keep-alive\r\n"
+              "referer: www.foo.com\r\n"
               "hEllo: Kitty\r\n"
               "FoO: bar\r\n\r\n"),
   };
@@ -5757,8 +5759,9 @@
   // Issue a request, containing an HTTP referrer.
   HttpRequestInfo request;
   request.method = "GET";
-  request.referrer = referrer;
   request.url = GURL("http://www.google.com/");
+  request.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
+                                  referrer.spec());
 
   SessionDependencies session_deps;
   scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(
diff --git a/net/http/http_request_info.h b/net/http/http_request_info.h
index 96c47c0..c368685 100644
--- a/net/http/http_request_info.h
+++ b/net/http/http_request_info.h
@@ -33,9 +33,6 @@
   // The requested URL.
   GURL url;
 
-  // The referring URL (if any).
-  GURL referrer;
-
   // The method to use (GET, POST, etc.).
   std::string method;
 
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc
index a155609c..52dfa9f 100644
--- a/net/http/http_stream_factory_impl_job.cc
+++ b/net/http/http_stream_factory_impl_job.cc
@@ -606,7 +606,6 @@
   if (IsPreconnecting()) {
     return ClientSocketPoolManager::PreconnectSocketsForHttpRequest(
         origin_url_,
-        request_info_.referrer,
         request_info_.extra_headers,
         request_info_.load_flags,
         request_info_.priority,
@@ -621,7 +620,6 @@
   } else {
     return ClientSocketPoolManager::InitSocketHandleForHttpRequest(
         origin_url_,
-        request_info_.referrer,
         request_info_.extra_headers,
         request_info_.load_flags,
         request_info_.priority,
diff --git a/net/http/http_vary_data.cc b/net/http/http_vary_data.cc
index f5c7514..09aab9d 100644
--- a/net/http/http_vary_data.cc
+++ b/net/http/http_vary_data.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
 
@@ -97,10 +97,6 @@
 std::string HttpVaryData::GetRequestValue(
     const HttpRequestInfo& request_info,
     const std::string& request_header) {
-  // Some special cases:
-  if (!base::strcasecmp(request_header.c_str(), HttpRequestHeaders::kReferer))
-    return request_info.referrer.spec();
-
   // 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.