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

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

Issue 2725593003: Construct URLSearchParams from sequence initializer. (Closed)
Patch Set: 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 "core/dom/DOMURL.h" 7 #include "core/dom/DOMURL.h"
8 #include "platform/network/FormDataEncoder.h" 8 #include "platform/network/FormDataEncoder.h"
9 #include "platform/weborigin/KURL.h" 9 #include "platform/weborigin/KURL.h"
10 #include "wtf/text/TextEncoding.h" 10 #include "wtf/text/TextEncoding.h"
(...skipping 21 matching lines...) Expand all
32 return true; 32 return true;
33 } 33 }
34 34
35 private: 35 private:
36 Vector<std::pair<String, String>> m_params; 36 Vector<std::pair<String, String>> m_params;
37 size_t m_current; 37 size_t m_current;
38 }; 38 };
39 39
40 } // namespace 40 } // namespace
41 41
42 URLSearchParams* URLSearchParams::create(const URLSearchParamsInit& init) { 42 URLSearchParams* URLSearchParams::create(const URLSearchParamsInit& init,
43 ExceptionState& exceptionState) {
43 if (init.isUSVString()) { 44 if (init.isUSVString()) {
44 const String& queryString = init.getAsUSVString(); 45 const String& queryString = init.getAsUSVString();
45 if (queryString.startsWith('?')) 46 if (queryString.startsWith('?'))
46 return new URLSearchParams(queryString.substring(1)); 47 return new URLSearchParams(queryString.substring(1));
47 return new URLSearchParams(queryString); 48 return new URLSearchParams(queryString);
48 } 49 }
50 // TODO(sof): copy constructor no longer in the spec,
51 // consider removing.
49 if (init.isURLSearchParams()) 52 if (init.isURLSearchParams())
50 return new URLSearchParams(init.getAsURLSearchParams()); 53 return new URLSearchParams(init.getAsURLSearchParams());
51 54
55 if (init.isUSVStringSequenceSequence()) {
56 return URLSearchParams::create(init.getAsUSVStringSequenceSequence(),
57 exceptionState);
58 }
59
52 DCHECK(init.isNull()); 60 DCHECK(init.isNull());
53 return new URLSearchParams(String()); 61 return new URLSearchParams(String());
54 } 62 }
55 63
64 URLSearchParams* URLSearchParams::create(const Vector<Vector<String>>& init,
65 ExceptionState& exceptionState) {
66 URLSearchParams* instance = new URLSearchParams(String());
67 for (unsigned i = 0; i < init.size(); ++i) {
68 const Vector<String>& pair = init[i];
69 if (pair.size() != 2) {
70 exceptionState.throwTypeError(ExceptionMessages::failedToConstruct(
71 "URLSearchParams",
72 "Sequence initializer must only contain pair elements"));
73 return nullptr;
74 }
75 instance->append(pair[0], pair[1]);
tyoshino (SeeGerritForStatus) 2017/03/01 08:07:26 can we populate m_params first and then runUpdateS
sof 2017/03/01 08:40:59 Done, runUpdateSteps() would be near no-op in this
76 }
77 return instance;
78 }
79
56 URLSearchParams::URLSearchParams(const String& queryString, DOMURL* urlObject) 80 URLSearchParams::URLSearchParams(const String& queryString, DOMURL* urlObject)
57 : m_urlObject(urlObject) { 81 : m_urlObject(urlObject) {
58 if (!queryString.isEmpty()) 82 if (!queryString.isEmpty())
59 setInput(queryString); 83 setInput(queryString);
60 } 84 }
61 85
62 URLSearchParams::URLSearchParams(URLSearchParams* searchParams) { 86 URLSearchParams::URLSearchParams(URLSearchParams* searchParams) {
63 DCHECK(searchParams); 87 DCHECK(searchParams);
64 m_params = searchParams->m_params; 88 m_params = searchParams->m_params;
65 } 89 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 return EncodedFormData::create(encodedData.data(), encodedData.size()); 226 return EncodedFormData::create(encodedData.data(), encodedData.size());
203 } 227 }
204 228
205 PairIterable<String, String>::IterationSource* URLSearchParams::startIteration( 229 PairIterable<String, String>::IterationSource* URLSearchParams::startIteration(
206 ScriptState*, 230 ScriptState*,
207 ExceptionState&) { 231 ExceptionState&) {
208 return new URLSearchParamsIterationSource(m_params); 232 return new URLSearchParamsIterationSource(m_params);
209 } 233 }
210 234
211 } // namespace blink 235 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698