| 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 bb2d8be6a3de5ac37505b24288b8f3d6c6cd2cdc..2af740449985a06de0fc6371df5db2e855cd23e3 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 "core/dom/DOMURL.h"
|
| #include "platform/network/FormDataEncoder.h"
|
| #include "platform/weborigin/KURL.h"
|
| #include "wtf/text/StringBuilder.h"
|
| @@ -46,7 +47,8 @@ URLSearchParams* URLSearchParams::create(const URLSearchParamsInit& init)
|
| return new URLSearchParams(String());
|
| }
|
|
|
| -URLSearchParams::URLSearchParams(const String& queryString)
|
| +URLSearchParams::URLSearchParams(const String& queryString, DOMURL* urlObject)
|
| + : m_urlObject(urlObject)
|
| {
|
| if (!queryString.isEmpty())
|
| setInput(queryString);
|
| @@ -62,6 +64,27 @@ URLSearchParams::~URLSearchParams()
|
| {
|
| }
|
|
|
| +DEFINE_TRACE(URLSearchParams)
|
| +{
|
| + visitor->trace(m_urlObject);
|
| +}
|
| +
|
| +#if ENABLE(ASSERT)
|
| +DOMURL* URLSearchParams::urlObject() const
|
| +{
|
| + return m_urlObject;
|
| +}
|
| +#endif
|
| +
|
| +void URLSearchParams::runUpdateSteps()
|
| +{
|
| + if (!m_urlObject)
|
| + return;
|
| +
|
| + TemporaryChange<bool> scope(m_isUpdating, true);
|
| + m_urlObject->setQuery(toString());
|
| +}
|
| +
|
| static String decodeString(String input)
|
| {
|
| return decodeURLEscapeSequences(input.replace('+', ' '));
|
| @@ -69,7 +92,11 @@ static String decodeString(String input)
|
|
|
| void URLSearchParams::setInput(const String& queryString)
|
| {
|
| - ASSERT(m_params.isEmpty());
|
| + if (m_isUpdating)
|
| + return;
|
| +
|
| + m_params.clear();
|
| +
|
| size_t start = 0;
|
| size_t queryStringLength = queryString.length();
|
| while (start < queryStringLength) {
|
| @@ -91,7 +118,9 @@ void URLSearchParams::setInput(const String& queryString)
|
| }
|
| start = nameValueEnd + 1;
|
| }
|
| + runUpdateSteps();
|
| }
|
| +
|
| static String encodeString(const String& input)
|
| {
|
| return encodeWithURLEscapeSequences(input).replace("%20", "+");
|
| @@ -113,6 +142,7 @@ String URLSearchParams::toString() const
|
| void URLSearchParams::append(const String& name, const String& value)
|
| {
|
| m_params.append(std::make_pair(name, value));
|
| + runUpdateSteps();
|
| }
|
|
|
| void URLSearchParams::deleteAllWithName(const String& name)
|
| @@ -123,6 +153,7 @@ void URLSearchParams::deleteAllWithName(const String& name)
|
| else
|
| i++;
|
| }
|
| + runUpdateSteps();
|
| }
|
|
|
| String URLSearchParams::get(const String& name) const
|
| @@ -174,6 +205,8 @@ void URLSearchParams::set(const String& name, const String& value)
|
| // Otherwise, append a new name-value pair to the list.
|
| if (!foundMatch)
|
| append(name, value);
|
| + else
|
| + runUpdateSteps();
|
| }
|
|
|
| PassRefPtr<EncodedFormData> URLSearchParams::encodeFormData() const
|
| @@ -184,10 +217,6 @@ PassRefPtr<EncodedFormData> URLSearchParams::encodeFormData() const
|
| return EncodedFormData::create(encodedData.data(), encodedData.size());
|
| }
|
|
|
| -DEFINE_TRACE(URLSearchParams)
|
| -{
|
| -}
|
| -
|
| PairIterable<String, String>::IterationSource* URLSearchParams::startIteration(ScriptState*, ExceptionState&)
|
| {
|
| return new URLSearchParamsIterationSource(m_params);
|
|
|