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); |