| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "modules/fetch/FetchHeaderList.h" | 5 #include "modules/fetch/FetchHeaderList.h" |
| 6 | 6 |
| 7 #include "core/fetch/FetchUtils.h" | 7 #include "core/fetch/FetchUtils.h" |
| 8 #include "platform/network/HTTPParsers.h" | 8 #include "platform/network/HTTPParsers.h" |
| 9 #include "wtf/PassOwnPtr.h" | 9 #include "wtf/PtrUtil.h" |
| 10 | 10 |
| 11 namespace blink { | 11 namespace blink { |
| 12 | 12 |
| 13 FetchHeaderList* FetchHeaderList::create() | 13 FetchHeaderList* FetchHeaderList::create() |
| 14 { | 14 { |
| 15 return new FetchHeaderList(); | 15 return new FetchHeaderList(); |
| 16 } | 16 } |
| 17 | 17 |
| 18 FetchHeaderList* FetchHeaderList::clone() | 18 FetchHeaderList* FetchHeaderList::clone() |
| 19 { | 19 { |
| 20 FetchHeaderList* list = create(); | 20 FetchHeaderList* list = create(); |
| 21 for (size_t i = 0; i < m_headerList.size(); ++i) | 21 for (size_t i = 0; i < m_headerList.size(); ++i) |
| 22 list->append(m_headerList[i]->first, m_headerList[i]->second); | 22 list->append(m_headerList[i]->first, m_headerList[i]->second); |
| 23 return list; | 23 return list; |
| 24 } | 24 } |
| 25 | 25 |
| 26 FetchHeaderList::FetchHeaderList() | 26 FetchHeaderList::FetchHeaderList() |
| 27 { | 27 { |
| 28 } | 28 } |
| 29 | 29 |
| 30 FetchHeaderList::~FetchHeaderList() | 30 FetchHeaderList::~FetchHeaderList() |
| 31 { | 31 { |
| 32 } | 32 } |
| 33 | 33 |
| 34 void FetchHeaderList::append(const String& name, const String& value) | 34 void FetchHeaderList::append(const String& name, const String& value) |
| 35 { | 35 { |
| 36 // "To append a name/value (|name|/|value|) pair to a header list (|list|), | 36 // "To append a name/value (|name|/|value|) pair to a header list (|list|), |
| 37 // append a new header whose name is |name|, byte lowercased, and value is | 37 // append a new header whose name is |name|, byte lowercased, and value is |
| 38 // |value|, to |list|." | 38 // |value|, to |list|." |
| 39 m_headerList.append(adoptPtr(new Header(name.lower(), value))); | 39 m_headerList.append(wrapUnique(new Header(name.lower(), value))); |
| 40 } | 40 } |
| 41 | 41 |
| 42 void FetchHeaderList::set(const String& name, const String& value) | 42 void FetchHeaderList::set(const String& name, const String& value) |
| 43 { | 43 { |
| 44 // "To set a name/value (|name|/|value|) pair in a header list (|list|), run | 44 // "To set a name/value (|name|/|value|) pair in a header list (|list|), run |
| 45 // these steps: | 45 // these steps: |
| 46 // 1. Byte lowercase |name|. | 46 // 1. Byte lowercase |name|. |
| 47 // 2. If there are any headers in |list| whose name is |name|, set the value | 47 // 2. If there are any headers in |list| whose name is |name|, set the value |
| 48 // of the first such header to |value| and remove the others. | 48 // of the first such header to |value| and remove the others. |
| 49 // 3. Otherwise, append a new header whose name is |name| and value is | 49 // 3. Otherwise, append a new header whose name is |name| and value is |
| 50 // |value|, to |list|." | 50 // |value|, to |list|." |
| 51 const String lowercasedName = name.lower(); | 51 const String lowercasedName = name.lower(); |
| 52 for (size_t i = 0; i < m_headerList.size(); ++i) { | 52 for (size_t i = 0; i < m_headerList.size(); ++i) { |
| 53 if (m_headerList[i]->first == lowercasedName) { | 53 if (m_headerList[i]->first == lowercasedName) { |
| 54 m_headerList[i]->second = value; | 54 m_headerList[i]->second = value; |
| 55 for (size_t j = i + 1; j < m_headerList.size(); ) { | 55 for (size_t j = i + 1; j < m_headerList.size(); ) { |
| 56 if (m_headerList[j]->first == lowercasedName) | 56 if (m_headerList[j]->first == lowercasedName) |
| 57 m_headerList.remove(j); | 57 m_headerList.remove(j); |
| 58 else | 58 else |
| 59 ++j; | 59 ++j; |
| 60 } | 60 } |
| 61 return; | 61 return; |
| 62 } | 62 } |
| 63 } | 63 } |
| 64 m_headerList.append(adoptPtr(new Header(lowercasedName, value))); | 64 m_headerList.append(wrapUnique(new Header(lowercasedName, value))); |
| 65 } | 65 } |
| 66 | 66 |
| 67 String FetchHeaderList::extractMIMEType() const | 67 String FetchHeaderList::extractMIMEType() const |
| 68 { | 68 { |
| 69 // To extract a MIME type from a header list (headers), run these steps: | 69 // To extract a MIME type from a header list (headers), run these steps: |
| 70 // 1. Let MIMEType be the result of parsing `Content-Type` in headers. | 70 // 1. Let MIMEType be the result of parsing `Content-Type` in headers. |
| 71 String mimeType; | 71 String mimeType; |
| 72 if (!get("Content-Type", mimeType)) { | 72 if (!get("Content-Type", mimeType)) { |
| 73 // 2. If MIMEType is null or failure, return the empty byte sequence. | 73 // 2. If MIMEType is null or failure, return the empty byte sequence. |
| 74 return String(); | 74 return String(); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 } | 149 } |
| 150 | 150 |
| 151 bool FetchHeaderList::isValidHeaderValue(const String& value) | 151 bool FetchHeaderList::isValidHeaderValue(const String& value) |
| 152 { | 152 { |
| 153 // "A value is a byte sequence that matches the field-value token production | 153 // "A value is a byte sequence that matches the field-value token production |
| 154 // and contains no 0x0A or 0x0D bytes." | 154 // and contains no 0x0A or 0x0D bytes." |
| 155 return isValidHTTPHeaderValue(value); | 155 return isValidHTTPHeaderValue(value); |
| 156 } | 156 } |
| 157 | 157 |
| 158 } // namespace blink | 158 } // namespace blink |
| OLD | NEW |