| OLD | NEW |
| 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/StringBuilder.h" | |
| 11 #include "wtf/text/TextEncoding.h" | 10 #include "wtf/text/TextEncoding.h" |
| 12 | 11 |
| 13 namespace blink { | 12 namespace blink { |
| 14 | 13 |
| 15 namespace { | 14 namespace { |
| 16 | 15 |
| 17 class URLSearchParamsIterationSource final : public PairIterable<String, String>
::IterationSource { | 16 class URLSearchParamsIterationSource final : public PairIterable<String, String>
::IterationSource { |
| 18 public: | 17 public: |
| 19 URLSearchParamsIterationSource(Vector<std::pair<String, String>> params) : m
_params(params), m_current(0) { } | 18 URLSearchParamsIterationSource(Vector<std::pair<String, String>> params) : m
_params(params), m_current(0) { } |
| 20 | 19 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 value = decodeString(queryString.substring(endOfName + 1, nameVa
lueEnd - endOfName - 1)); | 116 value = decodeString(queryString.substring(endOfName + 1, nameVa
lueEnd - endOfName - 1)); |
| 118 if (value.isNull()) | 117 if (value.isNull()) |
| 119 value = ""; | 118 value = ""; |
| 120 m_params.append(std::make_pair(name, value)); | 119 m_params.append(std::make_pair(name, value)); |
| 121 } | 120 } |
| 122 start = nameValueEnd + 1; | 121 start = nameValueEnd + 1; |
| 123 } | 122 } |
| 124 runUpdateSteps(); | 123 runUpdateSteps(); |
| 125 } | 124 } |
| 126 | 125 |
| 127 static String encodeString(const String& input) | |
| 128 { | |
| 129 return encodeWithURLEscapeSequences(input).replace("%20", "+"); | |
| 130 } | |
| 131 | |
| 132 String URLSearchParams::toString() const | 126 String URLSearchParams::toString() const |
| 133 { | 127 { |
| 134 StringBuilder result; | 128 Vector<char> encodedData; |
| 135 for (size_t i = 0; i < m_params.size(); ++i) { | 129 encodeAsFormData(encodedData); |
| 136 if (i) | 130 return String(encodedData.data(), encodedData.size()); |
| 137 result.append('&'); | |
| 138 result.append(encodeString(m_params[i].first)); | |
| 139 result.append('='); | |
| 140 result.append(encodeString(m_params[i].second)); | |
| 141 } | |
| 142 return result.toString(); | |
| 143 } | 131 } |
| 144 | 132 |
| 145 void URLSearchParams::append(const String& name, const String& value) | 133 void URLSearchParams::append(const String& name, const String& value) |
| 146 { | 134 { |
| 147 m_params.append(std::make_pair(name, value)); | 135 m_params.append(std::make_pair(name, value)); |
| 148 runUpdateSteps(); | 136 runUpdateSteps(); |
| 149 } | 137 } |
| 150 | 138 |
| 151 void URLSearchParams::deleteAllWithName(const String& name) | 139 void URLSearchParams::deleteAllWithName(const String& name) |
| 152 { | 140 { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 i++; | 193 i++; |
| 206 } | 194 } |
| 207 } | 195 } |
| 208 // Otherwise, append a new name-value pair to the list. | 196 // Otherwise, append a new name-value pair to the list. |
| 209 if (!foundMatch) | 197 if (!foundMatch) |
| 210 append(name, value); | 198 append(name, value); |
| 211 else | 199 else |
| 212 runUpdateSteps(); | 200 runUpdateSteps(); |
| 213 } | 201 } |
| 214 | 202 |
| 215 PassRefPtr<EncodedFormData> URLSearchParams::encodeFormData() const | 203 void URLSearchParams::encodeAsFormData(Vector<char>& encodedData) const |
| 204 { |
| 205 for (const auto& param : m_params) |
| 206 FormDataEncoder::addKeyValuePairAsFormData(encodedData, param.first.utf8
(), param.second.utf8(), EncodedFormData::FormURLEncoded, FormDataEncoder::DoNot
NormalizeCRLF); |
| 207 } |
| 208 |
| 209 PassRefPtr<EncodedFormData> URLSearchParams::toEncodedFormData() const |
| 216 { | 210 { |
| 217 Vector<char> encodedData; | 211 Vector<char> encodedData; |
| 218 for (const auto& param : m_params) | 212 encodeAsFormData(encodedData); |
| 219 FormDataEncoder::addKeyValuePairAsFormData(encodedData, param.first.utf8
(), param.second.utf8(), EncodedFormData::FormURLEncoded); | |
| 220 return EncodedFormData::create(encodedData.data(), encodedData.size()); | 213 return EncodedFormData::create(encodedData.data(), encodedData.size()); |
| 221 } | 214 } |
| 222 | 215 |
| 223 PairIterable<String, String>::IterationSource* URLSearchParams::startIteration(S
criptState*, ExceptionState&) | 216 PairIterable<String, String>::IterationSource* URLSearchParams::startIteration(S
criptState*, ExceptionState&) |
| 224 { | 217 { |
| 225 return new URLSearchParamsIterationSource(m_params); | 218 return new URLSearchParamsIterationSource(m_params); |
| 226 } | 219 } |
| 227 | 220 |
| 228 } // namespace blink | 221 } // namespace blink |
| OLD | NEW |