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

Side by Side Diff: Source/modules/serviceworkers/FetchHeaderList.cpp

Issue 795323003: Move Fetch API releted code to modules/fetch. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years 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 unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "FetchHeaderList.h"
7
8 #include "core/fetch/FetchUtils.h"
9 #include "platform/network/HTTPParsers.h"
10 #include "wtf/PassOwnPtr.h"
11
12 namespace blink {
13
14 FetchHeaderList* FetchHeaderList::create()
15 {
16 return new FetchHeaderList();
17 }
18
19 FetchHeaderList* FetchHeaderList::createCopy()
20 {
21 FetchHeaderList* list = create();
22 for (size_t i = 0; i < m_headerList.size(); ++i)
23 list->append(m_headerList[i]->first, m_headerList[i]->second);
24 return list;
25 }
26
27 FetchHeaderList::FetchHeaderList()
28 {
29 }
30
31 FetchHeaderList::~FetchHeaderList()
32 {
33 }
34
35 void FetchHeaderList::append(const String& name, const String& value)
36 {
37 // "To append a name/value (|name|/|value|) pair to a header list (|list|),
38 // append a new header whose name is |name|, byte lowercased, and value is
39 // |value|, to |list|."
40 m_headerList.append(adoptPtr(new Header(name.lower(), value)));
41 }
42
43 void FetchHeaderList::set(const String& name, const String& value)
44 {
45 // "To set a name/value (|name|/|value|) pair in a header list (|list|), run
46 // these steps:
47 // 1. Byte lowercase |name|.
48 // 2. If there are any headers in |list| whose name is |name|, set the value
49 // of the first such header to |value| and remove the others.
50 // 3. Otherwise, append a new header whose name is |name| and value is
51 // |value|, to |list|."
52 const String lowercasedName = name.lower();
53 for (size_t i = 0; i < m_headerList.size(); ++i) {
54 if (m_headerList[i]->first == lowercasedName) {
55 m_headerList[i]->second = value;
56 for (size_t j = i + 1; j < m_headerList.size(); ) {
57 if (m_headerList[j]->first == lowercasedName)
58 m_headerList.remove(j);
59 else
60 ++j;
61 }
62 return;
63 }
64 }
65 m_headerList.append(adoptPtr(new Header(lowercasedName, value)));
66 }
67
68 size_t FetchHeaderList::size() const
69 {
70 return m_headerList.size();
71 }
72
73 void FetchHeaderList::remove(const String& name)
74 {
75 // "To delete a name (|name|) from a header list (|list|), remove all header s
76 // whose name is |name|, byte lowercased, from |list|."
77 const String lowercasedName = name.lower();
78 for (size_t i = 0; i < m_headerList.size(); ) {
79 if (m_headerList[i]->first == lowercasedName)
80 m_headerList.remove(i);
81 else
82 ++i;
83 }
84 }
85
86 bool FetchHeaderList::get(const String& name, String& result) const
87 {
88 const String lowercasedName = name.lower();
89 for (size_t i = 0; i < m_headerList.size(); ++i) {
90 if (m_headerList[i]->first == lowercasedName) {
91 result = m_headerList[i]->second;
92 return true;
93 }
94 }
95 return false;
96 }
97
98 void FetchHeaderList::getAll(const String& name, Vector<String>& result) const
99 {
100 const String lowercasedName = name.lower();
101 result.clear();
102 for (size_t i = 0; i < m_headerList.size(); ++i) {
103 if (m_headerList[i]->first == lowercasedName)
104 result.append(m_headerList[i]->second);
105 }
106 }
107
108 bool FetchHeaderList::has(const String& name) const
109 {
110 const String lowercasedName = name.lower();
111 for (size_t i = 0; i < m_headerList.size(); ++i) {
112 if (m_headerList[i]->first == lowercasedName)
113 return true;
114 }
115 return false;
116 }
117
118 void FetchHeaderList::clearList()
119 {
120 m_headerList.clear();
121 }
122
123 bool FetchHeaderList::containsNonSimpleHeader() const
124 {
125 for (size_t i = 0; i < m_headerList.size(); ++i) {
126 if (!FetchUtils::isSimpleHeader(AtomicString(m_headerList[i]->first), At omicString(m_headerList[i]->second)))
127 return true;
128 }
129 return false;
130 }
131
132 bool FetchHeaderList::isValidHeaderName(const String& name)
133 {
134 // "A name is a case-insensitive byte sequence that matches the field-name
135 // token production."
136 return isValidHTTPToken(name);
137 }
138
139 bool FetchHeaderList::isValidHeaderValue(const String& value)
140 {
141 // "A value is a byte sequence that matches the field-value token production
142 // and contains no 0x0A or 0x0D bytes."
143 return isValidHTTPHeaderValue(value);
144 }
145
146 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/serviceworkers/FetchHeaderList.h ('k') | Source/modules/serviceworkers/FetchManager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698