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

Side by Side Diff: third_party/WebKit/Source/core/dom/URLSearchParams.cpp

Issue 2725593003: Construct URLSearchParams from sequence initializer. (Closed)
Patch Set: style update Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "core/dom/URLSearchParams.h" 5 #include "core/dom/URLSearchParams.h"
6 6
7 #include <utility>
7 #include "core/dom/DOMURL.h" 8 #include "core/dom/DOMURL.h"
8 #include "platform/network/FormDataEncoder.h" 9 #include "platform/network/FormDataEncoder.h"
9 #include "platform/weborigin/KURL.h" 10 #include "platform/weborigin/KURL.h"
10 #include "wtf/text/TextEncoding.h" 11 #include "wtf/text/TextEncoding.h"
11 12
12 namespace blink { 13 namespace blink {
13 14
14 namespace { 15 namespace {
15 16
16 class URLSearchParamsIterationSource final 17 class URLSearchParamsIterationSource final
(...skipping 15 matching lines...) Expand all
32 return true; 33 return true;
33 } 34 }
34 35
35 private: 36 private:
36 Vector<std::pair<String, String>> m_params; 37 Vector<std::pair<String, String>> m_params;
37 size_t m_current; 38 size_t m_current;
38 }; 39 };
39 40
40 } // namespace 41 } // namespace
41 42
42 URLSearchParams* URLSearchParams::create(const URLSearchParamsInit& init) { 43 URLSearchParams* URLSearchParams::create(const URLSearchParamsInit& init,
44 ExceptionState& exceptionState) {
43 if (init.isUSVString()) { 45 if (init.isUSVString()) {
44 const String& queryString = init.getAsUSVString(); 46 const String& queryString = init.getAsUSVString();
45 if (queryString.startsWith('?')) 47 if (queryString.startsWith('?'))
46 return new URLSearchParams(queryString.substring(1)); 48 return new URLSearchParams(queryString.substring(1));
47 return new URLSearchParams(queryString); 49 return new URLSearchParams(queryString);
48 } 50 }
51 // TODO(sof): copy constructor no longer in the spec,
52 // consider removing.
tyoshino (SeeGerritForStatus) 2017/03/01 09:37:39 Filed 697378 for this!
49 if (init.isURLSearchParams()) 53 if (init.isURLSearchParams())
50 return new URLSearchParams(init.getAsURLSearchParams()); 54 return new URLSearchParams(init.getAsURLSearchParams());
51 55
56 if (init.isUSVStringSequenceSequence()) {
57 return URLSearchParams::create(init.getAsUSVStringSequenceSequence(),
58 exceptionState);
59 }
60
52 DCHECK(init.isNull()); 61 DCHECK(init.isNull());
53 return new URLSearchParams(String()); 62 return new URLSearchParams(String());
54 } 63 }
55 64
65 URLSearchParams* URLSearchParams::create(const Vector<Vector<String>>& init,
66 ExceptionState& exceptionState) {
67 URLSearchParams* instance = new URLSearchParams(String());
68 if (!init.size())
69 return instance;
70 for (unsigned i = 0; i < init.size(); ++i) {
71 const Vector<String>& pair = init[i];
72 if (pair.size() != 2) {
73 exceptionState.throwTypeError(ExceptionMessages::failedToConstruct(
74 "URLSearchParams",
75 "Sequence initializer must only contain pair elements"));
76 return nullptr;
77 }
78 instance->appendWithoutUpdate(pair[0], pair[1]);
79 }
80 instance->runUpdateSteps();
81 return instance;
82 }
83
56 URLSearchParams::URLSearchParams(const String& queryString, DOMURL* urlObject) 84 URLSearchParams::URLSearchParams(const String& queryString, DOMURL* urlObject)
57 : m_urlObject(urlObject) { 85 : m_urlObject(urlObject) {
58 if (!queryString.isEmpty()) 86 if (!queryString.isEmpty())
59 setInput(queryString); 87 setInput(queryString);
60 } 88 }
61 89
62 URLSearchParams::URLSearchParams(URLSearchParams* searchParams) { 90 URLSearchParams::URLSearchParams(URLSearchParams* searchParams) {
63 DCHECK(searchParams); 91 DCHECK(searchParams);
64 m_params = searchParams->m_params; 92 m_params = searchParams->m_params;
65 } 93 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 if (endOfName == kNotFound || endOfName > nameValueEnd) 133 if (endOfName == kNotFound || endOfName > nameValueEnd)
106 endOfName = nameValueEnd; 134 endOfName = nameValueEnd;
107 String name = 135 String name =
108 decodeString(queryString.substring(nameStart, endOfName - nameStart)); 136 decodeString(queryString.substring(nameStart, endOfName - nameStart));
109 String value; 137 String value;
110 if (endOfName != nameValueEnd) 138 if (endOfName != nameValueEnd)
111 value = decodeString( 139 value = decodeString(
112 queryString.substring(endOfName + 1, nameValueEnd - endOfName - 1)); 140 queryString.substring(endOfName + 1, nameValueEnd - endOfName - 1));
113 if (value.isNull()) 141 if (value.isNull())
114 value = ""; 142 value = "";
115 m_params.push_back(std::make_pair(name, value)); 143 appendWithoutUpdate(name, value);
116 } 144 }
117 start = nameValueEnd + 1; 145 start = nameValueEnd + 1;
118 } 146 }
119 runUpdateSteps(); 147 runUpdateSteps();
120 } 148 }
121 149
122 String URLSearchParams::toString() const { 150 String URLSearchParams::toString() const {
123 Vector<char> encodedData; 151 Vector<char> encodedData;
124 encodeAsFormData(encodedData); 152 encodeAsFormData(encodedData);
125 return String(encodedData.data(), encodedData.size()); 153 return String(encodedData.data(), encodedData.size());
126 } 154 }
127 155
156 void URLSearchParams::appendWithoutUpdate(const String& name,
157 const String& value) {
158 m_params.push_back(std::make_pair(name, value));
159 }
160
128 void URLSearchParams::append(const String& name, const String& value) { 161 void URLSearchParams::append(const String& name, const String& value) {
129 m_params.push_back(std::make_pair(name, value)); 162 appendWithoutUpdate(name, value);
130 runUpdateSteps(); 163 runUpdateSteps();
131 } 164 }
132 165
133 void URLSearchParams::deleteAllWithName(const String& name) { 166 void URLSearchParams::deleteAllWithName(const String& name) {
134 for (size_t i = 0; i < m_params.size();) { 167 for (size_t i = 0; i < m_params.size();) {
135 if (m_params[i].first == name) 168 if (m_params[i].first == name)
136 m_params.remove(i); 169 m_params.remove(i);
137 else 170 else
138 i++; 171 i++;
139 } 172 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 return EncodedFormData::create(encodedData.data(), encodedData.size()); 235 return EncodedFormData::create(encodedData.data(), encodedData.size());
203 } 236 }
204 237
205 PairIterable<String, String>::IterationSource* URLSearchParams::startIteration( 238 PairIterable<String, String>::IterationSource* URLSearchParams::startIteration(
206 ScriptState*, 239 ScriptState*,
207 ExceptionState&) { 240 ExceptionState&) {
208 return new URLSearchParamsIterationSource(m_params); 241 return new URLSearchParamsIterationSource(m_params);
209 } 242 }
210 243
211 } // namespace blink 244 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/URLSearchParams.h ('k') | third_party/WebKit/Source/core/dom/URLSearchParams.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698