diff options
| author | Olivier De Cannière <olivier.decanniere@qt.io> | 2023-02-06 10:12:11 +0100 |
|---|---|---|
| committer | Olivier De Cannière <olivier.decanniere@qt.io> | 2023-02-09 13:02:01 +0100 |
| commit | d2c8fe712a87a247864decd9d13167f847035aab (patch) | |
| tree | d79e36abe66f95b8d22d287e4c60ba2ab30e32dd /src/qml/jsruntime/qv4urlobject.cpp | |
| parent | 2af8743aab51287ec914d25176ae0fc45202db32 (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.cpp | 29 |
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 ¶m = 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(); } |
