| Index: Source/modules/fetch/Headers.cpp
|
| diff --git a/Source/modules/fetch/Headers.cpp b/Source/modules/fetch/Headers.cpp
|
| index 4fa638b4248e2577deb746a1c373fe3ccb26f5dd..85d13f62e66fa47ec8c46789f3f12bd5a6ac0179 100644
|
| --- a/Source/modules/fetch/Headers.cpp
|
| +++ b/Source/modules/fetch/Headers.cpp
|
| @@ -106,35 +106,37 @@ void Headers::append(const String& name, const String& value, ExceptionState& ex
|
| {
|
| // "To append a name/value (|name|/|value|) pair to a Headers object
|
| // (|headers|), run these steps:"
|
| - // "1. If |name| is not a name or |value| is not a value, throw a
|
| + // "1. Normalize |value|."
|
| + String normalizedValue = FetchUtils::normalizeHeaderValue(value);
|
| + // "2. If |name| is not a name or |value| is not a value, throw a
|
| // TypeError."
|
| if (!FetchHeaderList::isValidHeaderName(name)) {
|
| exceptionState.throwTypeError("Invalid name");
|
| return;
|
| }
|
| - if (!FetchHeaderList::isValidHeaderValue(value)) {
|
| + if (!FetchHeaderList::isValidHeaderValueRFC7230(normalizedValue)) {
|
| exceptionState.throwTypeError("Invalid value");
|
| return;
|
| }
|
| - // "2. If guard is |request|, throw a TypeError."
|
| + // "3. If guard is |request|, throw a TypeError."
|
| if (m_guard == ImmutableGuard) {
|
| exceptionState.throwTypeError("Headers are immutable");
|
| return;
|
| }
|
| - // "3. Otherwise, if guard is |request| and |name| is a forbidden header
|
| + // "4. Otherwise, if guard is |request| and |name| is a forbidden header
|
| // name, return."
|
| if (m_guard == RequestGuard && FetchUtils::isForbiddenHeaderName(name))
|
| return;
|
| - // "4. Otherwise, if guard is |request-no-CORS| and |name|/|value| is not a
|
| + // "5. Otherwise, if guard is |request-no-CORS| and |name|/|value| is not a
|
| // simple header, return."
|
| - if (m_guard == RequestNoCORSGuard && !FetchUtils::isSimpleHeader(AtomicString(name), AtomicString(value)))
|
| + if (m_guard == RequestNoCORSGuard && !FetchUtils::isSimpleHeader(AtomicString(name), AtomicString(normalizedValue)))
|
| return;
|
| - // "5. Otherwise, if guard is |response| and |name| is a forbidden response
|
| + // "6. Otherwise, if guard is |response| and |name| is a forbidden response
|
| // header name, return."
|
| if (m_guard == ResponseGuard && FetchUtils::isForbiddenResponseHeaderName(name))
|
| return;
|
| - // "6. Append |name|/|value| to header list."
|
| - m_headerList->append(name, value);
|
| + // "7. Append |name|/|value| to header list."
|
| + m_headerList->append(name, normalizedValue);
|
| }
|
|
|
| void Headers::remove(const String& name, ExceptionState& exceptionState)
|
| @@ -212,35 +214,37 @@ bool Headers::has(const String& name, ExceptionState& exceptionState)
|
| void Headers::set(const String& name, const String& value, ExceptionState& exceptionState)
|
| {
|
| // "The set(|name|, |value|) method, when invoked, must run these steps:"
|
| - // "1. If |name| is not a name or |value| is not a value, throw a
|
| + // "1. Normalize |value|."
|
| + String normalizedValue = FetchUtils::normalizeHeaderValue(value);
|
| + // "2. If |name| is not a name or |value| is not a value, throw a
|
| // TypeError."
|
| if (!FetchHeaderList::isValidHeaderName(name)) {
|
| exceptionState.throwTypeError("Invalid name");
|
| return;
|
| }
|
| - if (!FetchHeaderList::isValidHeaderValue(value)) {
|
| + if (!FetchHeaderList::isValidHeaderValueRFC7230(normalizedValue)) {
|
| exceptionState.throwTypeError("Invalid value");
|
| return;
|
| }
|
| - // "2. If guard is |immutable|, throw a TypeError."
|
| + // "3. If guard is |immutable|, throw a TypeError."
|
| if (m_guard == ImmutableGuard) {
|
| exceptionState.throwTypeError("Headers are immutable");
|
| return;
|
| }
|
| - // "3. Otherwise, if guard is |request| and |name| is a forbidden header
|
| + // "4. Otherwise, if guard is |request| and |name| is a forbidden header
|
| // name, return."
|
| if (m_guard == RequestGuard && FetchUtils::isForbiddenHeaderName(name))
|
| return;
|
| - // "4. Otherwise, if guard is |request-no-CORS| and |name|/|value| is not a
|
| + // "5. Otherwise, if guard is |request-no-CORS| and |name|/|value| is not a
|
| // simple header, return."
|
| - if (m_guard == RequestNoCORSGuard && !FetchUtils::isSimpleHeader(AtomicString(name), AtomicString(value)))
|
| + if (m_guard == RequestNoCORSGuard && !FetchUtils::isSimpleHeader(AtomicString(name), AtomicString(normalizedValue)))
|
| return;
|
| - // "5. Otherwise, if guard is |response| and |name| is a forbidden response
|
| + // "6. Otherwise, if guard is |response| and |name| is a forbidden response
|
| // header name, return."
|
| if (m_guard == ResponseGuard && FetchUtils::isForbiddenResponseHeaderName(name))
|
| return;
|
| - // "6. Set |name|/|value| in header list."
|
| - m_headerList->set(name, value);
|
| + // "7. Set |name|/|value| in header list."
|
| + m_headerList->set(name, normalizedValue);
|
| }
|
|
|
| void Headers::fillWith(const Headers* object, ExceptionState& exceptionState)
|
|
|