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

Unified Diff: content/child/web_url_request_util.cc

Issue 559613002: PlzNavigate: Implement RequestNavigation on the renderer side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@commit-navigation-renderer
Patch Set: Created 6 years, 2 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: content/child/web_url_request_util.cc
diff --git a/content/child/web_url_request_util.cc b/content/child/web_url_request_util.cc
index 64ea18d65c2d013336e392efa8bd13f1615a2b7a..11c1b01bc6321c5fb107c834b52aebd1aedbc83d 100644
--- a/content/child/web_url_request_util.cc
+++ b/content/child/web_url_request_util.cc
@@ -5,12 +5,60 @@
#include "content/child/web_url_request_util.h"
#include "base/logging.h"
+#include "base/strings/string_util.h"
+#include "net/base/load_flags.h"
+#include "third_party/WebKit/public/platform/WebHTTPHeaderVisitor.h"
+#include "third_party/WebKit/public/platform/WebString.h"
#include "third_party/WebKit/public/platform/WebURLRequest.h"
using blink::WebURLRequest;
+using blink::WebString;
namespace content {
+namespace {
+
+class HeaderFlattener : public blink::WebHTTPHeaderVisitor {
+ public:
+ HeaderFlattener() : has_accept_header_(false) {}
+
+ virtual void visitHeader(const WebString& name, const WebString& value) {
+ // Headers are latin1.
+ const std::string& name_latin1 = name.latin1();
+ const std::string& value_latin1 = value.latin1();
+
+ // Skip over referrer headers found in the header map because we already
+ // pulled it out as a separate parameter.
+ if (LowerCaseEqualsASCII(name_latin1, "referer"))
+ return;
+
+ if (LowerCaseEqualsASCII(name_latin1, "accept"))
+ has_accept_header_ = true;
+
+ if (!buffer_.empty())
+ buffer_.append("\r\n");
+ buffer_.append(name_latin1 + ": " + value_latin1);
+ }
+
+ const std::string& GetBuffer() {
+ // In some cases, WebKit doesn't add an Accept header, but not having the
+ // header confuses some web servers. See bug 808613.
+ if (!has_accept_header_) {
+ if (!buffer_.empty())
+ buffer_.append("\r\n");
+ buffer_.append("Accept: */*");
+ has_accept_header_ = true;
+ }
+ return buffer_;
+ }
+
+ private:
+ std::string buffer_;
+ bool has_accept_header_;
+};
+
+} // namespace
+
ResourceType WebURLRequestToResourceType(const WebURLRequest& request) {
WebURLRequest::RequestContext requestContext = request.requestContext();
if (request.frameType() != WebURLRequest::FrameTypeNone) {
@@ -120,4 +168,53 @@ ResourceType WebURLRequestToResourceType(const WebURLRequest& request) {
}
}
+std::string GetWebURLRequestHeaders(const blink::WebURLRequest& request) {
+ HeaderFlattener flattener;
+ request.visitHTTPHeaderFields(&flattener);
+ return flattener.GetBuffer();
+}
+
+int GetLoadFlagsForWebURLRequest(const blink::WebURLRequest& request) {
+ int load_flags = net::LOAD_NORMAL;
+ GURL url = request.url();
+ switch (request.cachePolicy()) {
+ case WebURLRequest::ReloadIgnoringCacheData:
+ // Required by LayoutTests/http/tests/misc/refresh-headers.php
+ load_flags |= net::LOAD_VALIDATE_CACHE;
+ break;
+ case WebURLRequest::ReloadBypassingCache:
+ load_flags |= net::LOAD_BYPASS_CACHE;
+ break;
+ case WebURLRequest::ReturnCacheDataElseLoad:
+ load_flags |= net::LOAD_PREFERRING_CACHE;
+ break;
+ case WebURLRequest::ReturnCacheDataDontLoad:
+ load_flags |= net::LOAD_ONLY_FROM_CACHE;
+ break;
+ case WebURLRequest::UseProtocolCachePolicy:
+ break;
+ default:
+ NOTREACHED();
+ }
+
+ if (request.reportUploadProgress())
+ load_flags |= net::LOAD_ENABLE_UPLOAD_PROGRESS;
+ if (request.reportRawHeaders())
+ load_flags |= net::LOAD_REPORT_RAW_HEADERS;
+
+ if (!request.allowStoredCredentials()) {
+ load_flags |= net::LOAD_DO_NOT_SAVE_COOKIES;
+ load_flags |= net::LOAD_DO_NOT_SEND_COOKIES;
+ }
+
+ if (!request.allowStoredCredentials())
+ load_flags |= net::LOAD_DO_NOT_SEND_AUTH_DATA;
+
+ if (request.requestContext() == WebURLRequest::RequestContextXMLHttpRequest &&
+ (url.has_username() || url.has_password())) {
+ load_flags |= net::LOAD_DO_NOT_PROMPT_FOR_LOGIN;
+ }
+ return load_flags;
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698