diff options
author | Maximilian Goldstein <max.goldstein@qt.io> | 2020-04-09 13:34:01 +0200 |
---|---|---|
committer | Maximilian Goldstein <max.goldstein@qt.io> | 2020-05-06 10:45:48 +0200 |
commit | a714a3a446a47b3ac18de6cea1e6c4ca01535170 (patch) | |
tree | 2569eb6ec42f4b537bc18477b88d9a718f444012 /src/qml/jsruntime/qv4urlobject_p.h | |
parent | 22f9e5fb1ed643f284f50b9417bdbafdfb20566b (diff) |
Implement URLSearchParams
Implements URLSearchParams (https://url.spec.whatwg.org/#urlsearchparams),
completing our implementation of the URL object.
Still needs the for..of iterator to get implemented.
Change-Id: Iad33ed2f3fe0b2598ca2b0b21a4743f5f7dc19fd
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4urlobject_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4urlobject_p.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4urlobject_p.h b/src/qml/jsruntime/qv4urlobject_p.h index bc066818b6..aa0e7a062f 100644 --- a/src/qml/jsruntime/qv4urlobject_p.h +++ b/src/qml/jsruntime/qv4urlobject_p.h @@ -85,6 +85,24 @@ struct UrlCtor : FunctionObject { void init(QV4::ExecutionContext *scope); }; + +// clang-format on +#define UrlSearchParamsObjectMembers(class, Member) \ + Member(class, Pointer, ArrayObject *, params) \ + Member(class, Pointer, ArrayObject *, keys) \ + Member(class, Pointer, ArrayObject *, values) +// clang-format off + +DECLARE_HEAP_OBJECT(UrlSearchParamsObject, Object) +{ + DECLARE_MARKOBJECTS(UrlSearchParamsObject); + void init() { Object::init(); } +}; + +struct UrlSearchParamsCtor : FunctionObject +{ + void init(QV4::ExecutionContext *scope); +}; } struct UrlObject : Object @@ -205,6 +223,91 @@ struct UrlPrototype : Object const Value *argv, int argc); static ReturnedValue method_setUsername(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + + static ReturnedValue method_getSearchParams(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); +}; + +struct UrlSearchParamsObject : Object +{ + V4_OBJECT2(UrlSearchParamsObject, Object) + Q_MANAGED_TYPE(UrlSearchParamsObject) + V4_PROTOTYPE(urlSearchParamsPrototype) + + void initializeParams(); + void initializeParams(QString params); + void initializeParams(ScopedArrayObject& params); + void initializeParams(ScopedObject& params); + + QList<QStringList> params() const; + void setParams(QList<QStringList> params); + + QString nameAt(int index) const; + Heap::String * nameAtRaw(int index) const; + QString valueAt(int index) const; + Heap::String * valueAtRaw(int index) const; + + void append(Heap::String *name, Heap::String *value); + + int indexOf(QString name, int last = -1) const; + int length() const; + + using Object::getOwnProperty; +protected: + static OwnPropertyKeyIterator *virtualOwnPropertyKeys(const Object *m, Value *target); + static PropertyAttributes virtualGetOwnProperty(const Managed *m, PropertyKey id, Property *p); +private: + QString stringAt(int index, int pairIndex) const; + Heap::String * stringAtRaw(int index, int pairIndex) const; +}; + +template<> +inline const UrlSearchParamsObject *Value::as() const +{ + return isManaged() && m()->internalClass->vtable->type == Managed::Type_UrlSearchParamsObject + ? static_cast<const UrlSearchParamsObject *>(this) + : nullptr; +} + +struct UrlSearchParamsCtor : FunctionObject +{ + V4_OBJECT2(UrlSearchParamsCtor, FunctionObject) + + static ReturnedValue virtualCallAsConstructor(const FunctionObject *, const Value *argv, + int argc, const Value *); +}; + +struct UrlSearchParamsPrototype : Object +{ + V4_PROTOTYPE(objectPrototype) + + void init(ExecutionEngine *engine, Object *ctor); + + static ReturnedValue method_toString(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_sort(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_append(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_delete(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_has(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_set(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_get(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_getAll(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_forEach(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_entries(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_keys(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + static ReturnedValue method_values(const FunctionObject *, const Value *thisObject, + const Value *argv, int argc); + }; } |