Chromium Code Reviews| Index: third_party/WebKit/Source/core/dom/URLSearchParams.cpp |
| diff --git a/third_party/WebKit/Source/core/dom/URLSearchParams.cpp b/third_party/WebKit/Source/core/dom/URLSearchParams.cpp |
| index 30ba1da486351f1baf909e7e40e874f864b3404d..8de28baf4f0cd8efad462c74fe61993109e34f73 100644 |
| --- a/third_party/WebKit/Source/core/dom/URLSearchParams.cpp |
| +++ b/third_party/WebKit/Source/core/dom/URLSearchParams.cpp |
| @@ -4,6 +4,7 @@ |
| #include "core/dom/URLSearchParams.h" |
| +#include <utility> |
| #include "core/dom/DOMURL.h" |
| #include "platform/network/FormDataEncoder.h" |
| #include "platform/weborigin/KURL.h" |
| @@ -39,20 +40,47 @@ class URLSearchParamsIterationSource final |
| } // namespace |
| -URLSearchParams* URLSearchParams::create(const URLSearchParamsInit& init) { |
| +URLSearchParams* URLSearchParams::create(const URLSearchParamsInit& init, |
| + ExceptionState& exceptionState) { |
| if (init.isUSVString()) { |
| const String& queryString = init.getAsUSVString(); |
| if (queryString.startsWith('?')) |
| return new URLSearchParams(queryString.substring(1)); |
| return new URLSearchParams(queryString); |
| } |
| + // TODO(sof): copy constructor no longer in the spec, |
| + // consider removing. |
|
tyoshino (SeeGerritForStatus)
2017/03/01 09:37:39
Filed 697378 for this!
|
| if (init.isURLSearchParams()) |
| return new URLSearchParams(init.getAsURLSearchParams()); |
| + if (init.isUSVStringSequenceSequence()) { |
| + return URLSearchParams::create(init.getAsUSVStringSequenceSequence(), |
| + exceptionState); |
| + } |
| + |
| DCHECK(init.isNull()); |
| return new URLSearchParams(String()); |
| } |
| +URLSearchParams* URLSearchParams::create(const Vector<Vector<String>>& init, |
| + ExceptionState& exceptionState) { |
| + URLSearchParams* instance = new URLSearchParams(String()); |
| + if (!init.size()) |
| + return instance; |
| + for (unsigned i = 0; i < init.size(); ++i) { |
| + const Vector<String>& pair = init[i]; |
| + if (pair.size() != 2) { |
| + exceptionState.throwTypeError(ExceptionMessages::failedToConstruct( |
| + "URLSearchParams", |
| + "Sequence initializer must only contain pair elements")); |
| + return nullptr; |
| + } |
| + instance->appendWithoutUpdate(pair[0], pair[1]); |
| + } |
| + instance->runUpdateSteps(); |
| + return instance; |
| +} |
| + |
| URLSearchParams::URLSearchParams(const String& queryString, DOMURL* urlObject) |
| : m_urlObject(urlObject) { |
| if (!queryString.isEmpty()) |
| @@ -112,7 +140,7 @@ void URLSearchParams::setInput(const String& queryString) { |
| queryString.substring(endOfName + 1, nameValueEnd - endOfName - 1)); |
| if (value.isNull()) |
| value = ""; |
| - m_params.push_back(std::make_pair(name, value)); |
| + appendWithoutUpdate(name, value); |
| } |
| start = nameValueEnd + 1; |
| } |
| @@ -125,8 +153,13 @@ String URLSearchParams::toString() const { |
| return String(encodedData.data(), encodedData.size()); |
| } |
| -void URLSearchParams::append(const String& name, const String& value) { |
| +void URLSearchParams::appendWithoutUpdate(const String& name, |
| + const String& value) { |
| m_params.push_back(std::make_pair(name, value)); |
| +} |
| + |
| +void URLSearchParams::append(const String& name, const String& value) { |
| + appendWithoutUpdate(name, value); |
| runUpdateSteps(); |
| } |