aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4urlobject.cpp
diff options
context:
space:
mode:
authorOlivier De Cannière <olivier.decanniere@qt.io>2023-02-06 10:12:11 +0100
committerOlivier De Cannière <olivier.decanniere@qt.io>2023-02-09 13:02:01 +0100
commitd2c8fe712a87a247864decd9d13167f847035aab (patch)
treed79e36abe66f95b8d22d287e4c60ba2ab30e32dd /src/qml/jsruntime/qv4urlobject.cpp
parent2af8743aab51287ec914d25176ae0fc45202db32 (diff)
UrlObject: Fix setting searchParams not modifying the url's search field
Previously, setting the search params via the searchParams.set() method did not change the url's search field. The searchParams object now has a back pointer to the urlObject it belongs to. Whenever a search param is set, the url search field is also updated. The tst_qv4urlobject test was also added to check proper behavior. Pick-to: 6.5 Task-number: QTBUG-110454 Change-Id: I3b0e843395da8a0e5aedcf71895981f68560d9c6 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4urlobject.cpp')
-rw-r--r--src/qml/jsruntime/qv4urlobject.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4urlobject.cpp b/src/qml/jsruntime/qv4urlobject.cpp
index 8b6db439e2..e5d8ddb9e8 100644
--- a/src/qml/jsruntime/qv4urlobject.cpp
+++ b/src/qml/jsruntime/qv4urlobject.cpp
@@ -670,6 +670,7 @@ ReturnedValue UrlPrototype::method_getSearchParams(const FunctionObject *b, cons
Scoped<UrlSearchParamsObject> usp(scope, v4->newUrlSearchParamsObject());
+ usp->setUrlObject(thisObject->as<UrlObject>());
usp->initializeParams(r->search());
return usp->asReturnedValue();
@@ -960,6 +961,11 @@ void UrlSearchParamsObject::setParams(QList<QStringList> params)
d()->values.set(engine(), values);
}
+void UrlSearchParamsObject::setUrlObject(const UrlObject *url)
+{
+ d()->url.set(engine(), url->d());
+}
+
void UrlSearchParamsObject::append(Heap::String *name, Heap::String *value)
{
Scope scope(engine());
@@ -1008,6 +1014,25 @@ QList<QStringList> UrlSearchParamsObject::params() const
return result;
}
+Heap::UrlObject *UrlSearchParamsObject::urlObject() const
+{
+ return d()->url.get();
+}
+
+QString UrlSearchParamsObject::searchString() const
+{
+ QString search = QLatin1String("");
+ auto params = this->params();
+ auto len = params.size();
+ for (int i = 0; i < len; ++i) {
+ const QStringList &param = params[i];
+ search += param[0] + QLatin1Char('=') + param[1];
+ if (i != len - 1)
+ search += QLatin1Char('&');
+ }
+ return search;
+}
+
int UrlSearchParamsObject::length() const
{
auto *arrayObject = d()->params.get();
@@ -1335,6 +1360,10 @@ ReturnedValue UrlSearchParamsPrototype::method_set(const FunctionObject *b, cons
o->setParams(params);
+ Scoped<UrlObject> scopedUrlObject(scope, o->d()->url.get());
+ if (scopedUrlObject)
+ scopedUrlObject->setSearch(o->searchString());
+
return Encode::undefined();
}