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

Unified Diff: Source/modules/serviceworkers/FetchHeaderList.cpp

Issue 366853003: [ServiceWorker] A header list contains lowercased header names (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: quote Created 6 years, 6 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
« no previous file with comments | « LayoutTests/http/tests/serviceworker/resources/headers-worker.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/serviceworkers/FetchHeaderList.cpp
diff --git a/Source/modules/serviceworkers/FetchHeaderList.cpp b/Source/modules/serviceworkers/FetchHeaderList.cpp
index ec5702314a7a46d484756affbbcaa14f86009d67..33b85650c9aa6f36a2ba19e45bad6a8182aa6802 100644
--- a/Source/modules/serviceworkers/FetchHeaderList.cpp
+++ b/Source/modules/serviceworkers/FetchHeaderList.cpp
@@ -28,24 +28,26 @@ FetchHeaderList::~FetchHeaderList()
void FetchHeaderList::append(const String& name, const String& value)
{
// "To append a name/value (|name|/|value|) pair to a header list (|list|),
- // append a new header whose name is |name| and value is |value|, to
- // |list|."
- m_headerList.append(adoptPtr(new Header(name, value)));
+ // append a new header whose name is |name|, byte lowercased, and value is
+ // |value|, to |list|."
+ m_headerList.append(adoptPtr(new Header(name.lower(), value)));
}
void FetchHeaderList::set(const String& name, const String& value)
{
// "To set a name/value (|name|/|value|) pair in a header list (|list|), run
// these steps:
- // 1. If there are any headers in |list| whose name is |name|, set the value
+ // 1. Byte lowercase |name|.
+ // 2. If there are any headers in |list| whose name is |name|, set the value
// of the first such header to |value| and remove the others.
- // 2. Otherwise, append a new header whose name is |name| and value is
+ // 3. Otherwise, append a new header whose name is |name| and value is
// |value|, to |list|."
+ const String lowercasedName = name.lower();
for (size_t i = 0; i < m_headerList.size(); ++i) {
- if (m_headerList[i]->first == name) {
+ if (m_headerList[i]->first == lowercasedName) {
m_headerList[i]->second = value;
for (size_t j = i + 1; j < m_headerList.size(); ) {
- if (m_headerList[j]->first == name)
+ if (m_headerList[j]->first == lowercasedName)
m_headerList.remove(j);
else
++j;
@@ -53,7 +55,7 @@ void FetchHeaderList::set(const String& name, const String& value)
return;
}
}
- m_headerList.append(adoptPtr(new Header(name, value)));
+ m_headerList.append(adoptPtr(new Header(lowercasedName, value)));
}
size_t FetchHeaderList::size() const
@@ -63,8 +65,11 @@ size_t FetchHeaderList::size() const
void FetchHeaderList::remove(const String& name)
{
+ // "To delete a name (|name|) from a header list (|list|), remove all headers
+ // whose name is |name|, byte lowercased, from |list|."
+ const String lowercasedName = name.lower();
for (size_t i = 0; i < m_headerList.size(); ) {
- if (m_headerList[i]->first == name)
+ if (m_headerList[i]->first == lowercasedName)
m_headerList.remove(i);
else
++i;
@@ -73,8 +78,9 @@ void FetchHeaderList::remove(const String& name)
bool FetchHeaderList::get(const String& name, String& result) const
{
+ const String lowercasedName = name.lower();
for (size_t i = 0; i < m_headerList.size(); ++i) {
- if (m_headerList[i]->first == name) {
+ if (m_headerList[i]->first == lowercasedName) {
result = m_headerList[i]->second;
return true;
}
@@ -84,17 +90,19 @@ bool FetchHeaderList::get(const String& name, String& result) const
void FetchHeaderList::getAll(const String& name, Vector<String>& result) const
{
+ const String lowercasedName = name.lower();
result.clear();
for (size_t i = 0; i < m_headerList.size(); ++i) {
- if (m_headerList[i]->first == name)
+ if (m_headerList[i]->first == lowercasedName)
result.append(m_headerList[i]->second);
}
}
bool FetchHeaderList::has(const String& name) const
{
+ const String lowercasedName = name.lower();
for (size_t i = 0; i < m_headerList.size(); ++i) {
- if (m_headerList[i]->first == name)
+ if (m_headerList[i]->first == lowercasedName)
return true;
}
return false;
@@ -107,8 +115,8 @@ void FetchHeaderList::clearList()
bool FetchHeaderList::isValidHeaderName(const String& name)
{
- // FIXME: According to the spec (http://fetch.spec.whatwg.org/) should we
- // accept all characters in the range 0x00 to 0x7F?
+ // "A name is a case-insensitive byte sequence that matches the field-name
+ // token production."
return isValidHTTPToken(name);
}
@@ -116,7 +124,7 @@ bool FetchHeaderList::isValidHeaderValue(const String& value)
{
// "A value is a byte sequence that matches the field-value token production
// and contains no 0x0A or 0x0D bytes."
- return (value.find('\r') == kNotFound) && (value.find('\n') == kNotFound);
+ return isValidHTTPHeaderValue(value);
}
bool FetchHeaderList::isSimpleHeader(const String& name, const String& value)
« no previous file with comments | « LayoutTests/http/tests/serviceworker/resources/headers-worker.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698