| Index: third_party/WebKit/Source/core/fetch/FetchUtils.cpp
|
| diff --git a/third_party/WebKit/Source/core/fetch/FetchUtils.cpp b/third_party/WebKit/Source/core/fetch/FetchUtils.cpp
|
| deleted file mode 100644
|
| index 223e0c848d63b9b914fb7d8baa8bb71a5b958e3d..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/core/fetch/FetchUtils.cpp
|
| +++ /dev/null
|
| @@ -1,207 +0,0 @@
|
| -// Copyright 2014 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 "core/fetch/FetchUtils.h"
|
| -
|
| -#include "platform/HTTPNames.h"
|
| -#include "platform/network/HTTPHeaderMap.h"
|
| -#include "platform/network/HTTPParsers.h"
|
| -#include "wtf/HashSet.h"
|
| -#include "wtf/Threading.h"
|
| -#include "wtf/text/AtomicString.h"
|
| -#include "wtf/text/WTFString.h"
|
| -
|
| -namespace blink {
|
| -
|
| -namespace {
|
| -
|
| -bool isHTTPWhitespace(UChar chr) {
|
| - return chr == ' ' || chr == '\n' || chr == '\t' || chr == '\r';
|
| -}
|
| -
|
| -class ForbiddenHeaderNames {
|
| - WTF_MAKE_NONCOPYABLE(ForbiddenHeaderNames);
|
| - USING_FAST_MALLOC(ForbiddenHeaderNames);
|
| -
|
| - public:
|
| - bool has(const String& name) const {
|
| - return m_fixedNames.contains(name) ||
|
| - name.startsWith(m_proxyHeaderPrefix, TextCaseASCIIInsensitive) ||
|
| - name.startsWith(m_secHeaderPrefix, TextCaseASCIIInsensitive);
|
| - }
|
| -
|
| - static const ForbiddenHeaderNames& get();
|
| -
|
| - private:
|
| - ForbiddenHeaderNames();
|
| -
|
| - String m_proxyHeaderPrefix;
|
| - String m_secHeaderPrefix;
|
| - HashSet<String, CaseFoldingHash> m_fixedNames;
|
| -};
|
| -
|
| -ForbiddenHeaderNames::ForbiddenHeaderNames()
|
| - : m_proxyHeaderPrefix("proxy-"), m_secHeaderPrefix("sec-") {
|
| - m_fixedNames = {
|
| - "accept-charset",
|
| - "accept-encoding",
|
| - "access-control-request-headers",
|
| - "access-control-request-method",
|
| - "connection",
|
| - "content-length",
|
| - "cookie",
|
| - "cookie2",
|
| - "date",
|
| - "dnt",
|
| - "expect",
|
| - "host",
|
| - "keep-alive",
|
| - "origin",
|
| - "referer",
|
| - "te",
|
| - "trailer",
|
| - "transfer-encoding",
|
| - "upgrade",
|
| - "user-agent",
|
| - "via",
|
| - };
|
| -}
|
| -
|
| -const ForbiddenHeaderNames& ForbiddenHeaderNames::get() {
|
| - DEFINE_THREAD_SAFE_STATIC_LOCAL(const ForbiddenHeaderNames, instance,
|
| - new ForbiddenHeaderNames);
|
| - return instance;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -bool FetchUtils::isSimpleMethod(const String& method) {
|
| - // http://fetch.spec.whatwg.org/#simple-method
|
| - // "A simple method is a method that is `GET`, `HEAD`, or `POST`."
|
| - return method == "GET" || method == "HEAD" || method == "POST";
|
| -}
|
| -
|
| -bool FetchUtils::isSimpleHeader(const AtomicString& name,
|
| - const AtomicString& value) {
|
| - // http://fetch.spec.whatwg.org/#simple-header
|
| - // "A simple header is a header whose name is either one of `Accept`,
|
| - // `Accept-Language`, and `Content-Language`, or whose name is
|
| - // `Content-Type` and value, once parsed, is one of
|
| - // `application/x-www-form-urlencoded`, `multipart/form-data`, and
|
| - // `text/plain`."
|
| - // Treat 'Save-Data' as a simple header, since it is added by Chrome when
|
| - // Data Saver feature is enabled.
|
| - // Treat inspector header as a simple header, since it is added by blink when
|
| - // inspector is open.
|
| -
|
| - if (equalIgnoringCase(name, "accept") ||
|
| - equalIgnoringCase(name, "accept-language") ||
|
| - equalIgnoringCase(name, "content-language") ||
|
| - equalIgnoringCase(
|
| - name, HTTPNames::X_DevTools_Emulate_Network_Conditions_Client_Id) ||
|
| - equalIgnoringCase(name, "save-data"))
|
| - return true;
|
| -
|
| - if (equalIgnoringCase(name, "content-type"))
|
| - return isSimpleContentType(value);
|
| -
|
| - return false;
|
| -}
|
| -
|
| -bool FetchUtils::isSimpleContentType(const AtomicString& mediaType) {
|
| - AtomicString mimeType = extractMIMETypeFromMediaType(mediaType);
|
| - return equalIgnoringCase(mimeType, "application/x-www-form-urlencoded") ||
|
| - equalIgnoringCase(mimeType, "multipart/form-data") ||
|
| - equalIgnoringCase(mimeType, "text/plain");
|
| -}
|
| -
|
| -bool FetchUtils::isSimpleRequest(const String& method,
|
| - const HTTPHeaderMap& headerMap) {
|
| - if (!isSimpleMethod(method))
|
| - return false;
|
| -
|
| - for (const auto& header : headerMap) {
|
| - // Preflight is required for MIME types that can not be sent via form
|
| - // submission.
|
| - if (!isSimpleHeader(header.key, header.value))
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool FetchUtils::isForbiddenMethod(const String& method) {
|
| - // http://fetch.spec.whatwg.org/#forbidden-method
|
| - // "A forbidden method is a method that is a byte case-insensitive match"
|
| - // for one of `CONNECT`, `TRACE`, and `TRACK`."
|
| - return equalIgnoringCase(method, "TRACE") ||
|
| - equalIgnoringCase(method, "TRACK") ||
|
| - equalIgnoringCase(method, "CONNECT");
|
| -}
|
| -
|
| -bool FetchUtils::isForbiddenHeaderName(const String& name) {
|
| - // http://fetch.spec.whatwg.org/#forbidden-header-name
|
| - // "A forbidden header name is a header names that is one of:
|
| - // `Accept-Charset`, `Accept-Encoding`, `Access-Control-Request-Headers`,
|
| - // `Access-Control-Request-Method`, `Connection`,
|
| - // `Content-Length, Cookie`, `Cookie2`, `Date`, `DNT`, `Expect`, `Host`,
|
| - // `Keep-Alive`, `Origin`, `Referer`, `TE`, `Trailer`,
|
| - // `Transfer-Encoding`, `Upgrade`, `User-Agent`, `Via`
|
| - // or starts with `Proxy-` or `Sec-` (including when it is just `Proxy-` or
|
| - // `Sec-`)."
|
| -
|
| - return ForbiddenHeaderNames::get().has(name);
|
| -}
|
| -
|
| -bool FetchUtils::isForbiddenResponseHeaderName(const String& name) {
|
| - // http://fetch.spec.whatwg.org/#forbidden-response-header-name
|
| - // "A forbidden response header name is a header name that is one of:
|
| - // `Set-Cookie`, `Set-Cookie2`"
|
| -
|
| - return equalIgnoringCase(name, "set-cookie") ||
|
| - equalIgnoringCase(name, "set-cookie2");
|
| -}
|
| -
|
| -bool FetchUtils::isSimpleOrForbiddenRequest(const String& method,
|
| - const HTTPHeaderMap& headerMap) {
|
| - if (!isSimpleMethod(method))
|
| - return false;
|
| -
|
| - for (const auto& header : headerMap) {
|
| - if (!isSimpleHeader(header.key, header.value) &&
|
| - !isForbiddenHeaderName(header.key))
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -AtomicString FetchUtils::normalizeMethod(const AtomicString& method) {
|
| - // https://fetch.spec.whatwg.org/#concept-method-normalize
|
| -
|
| - // We place GET and POST first because they are more commonly used than
|
| - // others.
|
| - const char* const methods[] = {
|
| - "GET", "POST", "DELETE", "HEAD", "OPTIONS", "PUT",
|
| - };
|
| -
|
| - for (const auto& known : methods) {
|
| - if (equalIgnoringCase(method, known)) {
|
| - // Don't bother allocating a new string if it's already all
|
| - // uppercase.
|
| - return method == known ? method : known;
|
| - }
|
| - }
|
| - return method;
|
| -}
|
| -
|
| -String FetchUtils::normalizeHeaderValue(const String& value) {
|
| - // https://fetch.spec.whatwg.org/#concept-header-value-normalize
|
| - // Strip leading and trailing whitespace from header value.
|
| - // HTTP whitespace bytes are 0x09, 0x0A, 0x0D, and 0x20.
|
| -
|
| - return value.stripWhiteSpace(isHTTPWhitespace);
|
| -}
|
| -
|
| -} // namespace blink
|
|
|