Commit 7ad32cbf authored by corona10's avatar corona10 Committed by Commit bot

Appending headers of the same name should have their values

joined by ','.
Now, FetchHeaderList::get() is iterating all header list and
append strings to a result joined by ','.

BUG=645497

Review-Url: https://codereview.chromium.org/2587463002
Cr-Commit-Position: refs/heads/master@{#439743}
parent f3ccb26f
...@@ -136,7 +136,7 @@ test(function() { ...@@ -136,7 +136,7 @@ test(function() {
headers.append('X-FETCH-TEST-2', 'response test field - append'); headers.append('X-FETCH-TEST-2', 'response test field - append');
assert_equals(size(headers), 5, 'headers size should increase by 1.'); assert_equals(size(headers), 5, 'headers size should increase by 1.');
assert_equals(headers.get('X-FETCH-Test'), assert_equals(headers.get('X-FETCH-Test'),
'response test field - updated', 'response test field - updated,response test field - append',
'the value of the first header added should be returned.'); 'the value of the first header added should be returned.');
allValues = headers.getAll('X-FETch-TEST'); allValues = headers.getAll('X-FETch-TEST');
assert_equals(allValues.length, 2); assert_equals(allValues.length, 2);
...@@ -156,7 +156,7 @@ test(function() { ...@@ -156,7 +156,7 @@ test(function() {
headers = new Headers([['a', 'b'], ['c', 'd'], ['c', 'e']]); headers = new Headers([['a', 'b'], ['c', 'd'], ['c', 'e']]);
assert_equals(size(headers), 2, 'headers size should match'); assert_equals(size(headers), 2, 'headers size should match');
assert_equals(headers.get('a'), 'b'); assert_equals(headers.get('a'), 'b');
assert_equals(headers.get('c'), 'd'); assert_equals(headers.get('c'), 'd,e');
assert_equals(headers.getAll('c')[0], 'd'); assert_equals(headers.getAll('c')[0], 'd');
assert_equals(headers.getAll('c')[1], 'e'); assert_equals(headers.getAll('c')[1], 'e');
...@@ -164,13 +164,25 @@ test(function() { ...@@ -164,13 +164,25 @@ test(function() {
var headers2 = new Headers(headers); var headers2 = new Headers(headers);
assert_equals(size(headers2), 2, 'headers size should match'); assert_equals(size(headers2), 2, 'headers size should match');
assert_equals(headers2.get('a'), 'b'); assert_equals(headers2.get('a'), 'b');
assert_equals(headers2.get('c'), 'd'); assert_equals(headers2.get('c'), 'd,e');
assert_equals(headers2.getAll('c')[0], 'd'); assert_equals(headers2.getAll('c')[0], 'd');
assert_equals(headers2.getAll('c')[1], 'e'); assert_equals(headers2.getAll('c')[1], 'e');
headers.set('a', 'x'); headers.set('a', 'x');
assert_equals(headers.get('a'), 'x'); assert_equals(headers.get('a'), 'x');
assert_equals(headers2.get('a'), 'b'); assert_equals(headers2.get('a'), 'b');
var headers3 = new Headers();
headers3.append('test', 'a');
headers3.append('test', '');
headers3.append('test', 'b');
assert_equals(headers3.get('test'), 'a,,b');
headers3.set('test', '');
assert_equals(headers3.get('test'), '');
var headers4 = new Headers();
headers4.append('foo', '');
headers4.append('foo', 'a');
assert_equals(headers4.get('foo'), ',a');
// new Headers with Dictionary // new Headers with Dictionary
headers = new Headers({'a': 'b', 'c': 'd'}); headers = new Headers({'a': 'b', 'c': 'd'});
assert_equals(size(headers), 2, 'headers size should match'); assert_equals(size(headers), 2, 'headers size should match');
......
...@@ -87,13 +87,20 @@ void FetchHeaderList::remove(const String& name) { ...@@ -87,13 +87,20 @@ void FetchHeaderList::remove(const String& name) {
bool FetchHeaderList::get(const String& name, String& result) const { bool FetchHeaderList::get(const String& name, String& result) const {
const String lowercasedName = name.lower(); const String lowercasedName = name.lower();
for (size_t i = 0; i < m_headerList.size(); ++i) { bool found = false;
if (m_headerList[i]->first == lowercasedName) { for (const auto& header : m_headerList) {
result = m_headerList[i]->second; if (header->first == lowercasedName) {
return true; if (!found) {
result = "";
result.append(header->second);
found = true;
} else {
result.append(",");
result.append(header->second);
}
} }
} }
return false; return found;
} }
void FetchHeaderList::getAll(const String& name, Vector<String>& result) const { void FetchHeaderList::getAll(const String& name, Vector<String>& result) const {
......
...@@ -177,8 +177,9 @@ String Headers::get(const String& name, ExceptionState& exceptionState) { ...@@ -177,8 +177,9 @@ String Headers::get(const String& name, ExceptionState& exceptionState) {
exceptionState.throwTypeError("Invalid name"); exceptionState.throwTypeError("Invalid name");
return String(); return String();
} }
// "2. Return the value of the first header in header list whose name is // "2. If there is no header in header list whose name is |name|,
// |name|, and null otherwise." // return null."
// "3. Return the combined value given |name| and header list."
String result; String result;
m_headerList->get(name, result); m_headerList->get(name, result);
return result; return result;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment