From 8d2f7cfb58a1350ddde098827fa9d11d581fe0bb Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Sat, 9 Mar 2024 22:41:26 +0100 Subject: [PATCH] LibWeb: Add {,de}serialization steps for DOMMatrix --- .../HTML/StructuredClone-serializable-objects.txt | 3 +++ .../HTML/StructuredClone-serializable-objects.html | 6 ++++++ Userland/Libraries/LibWeb/Geometry/DOMMatrix.cpp | 10 ++++++++++ Userland/Libraries/LibWeb/Geometry/DOMMatrix.h | 5 +++++ Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp | 3 +++ 5 files changed, 27 insertions(+) diff --git a/Tests/LibWeb/Text/expected/HTML/StructuredClone-serializable-objects.txt b/Tests/LibWeb/Text/expected/HTML/StructuredClone-serializable-objects.txt index 58fd081e04..34b534dfce 100644 --- a/Tests/LibWeb/Text/expected/HTML/StructuredClone-serializable-objects.txt +++ b/Tests/LibWeb/Text/expected/HTML/StructuredClone-serializable-objects.txt @@ -9,3 +9,6 @@ File.size: 12 instanceOf DOMMatrixReadOnly: true DOMMatrixReadOnly: {"a":1.7976931348623157e+308,"b":2.2250738585072014e-308,"c":2.220446049250313e-16,"d":40,"e":50,"f":60,"m11":1.7976931348623157e+308,"m12":2.2250738585072014e-308,"m13":0,"m14":0,"m21":2.220446049250313e-16,"m22":40,"m23":0,"m24":0,"m31":0,"m32":0,"m33":1,"m34":0,"m41":50,"m42":60,"m43":0,"m44":1,"is2D":true,"isIdentity":false} DOMMatrixReadOnly: {"a":10,"b":20,"c":50,"d":60,"e":130,"f":140,"m11":10,"m12":20,"m13":30,"m14":40,"m21":50,"m22":60,"m23":70,"m24":80,"m31":90,"m32":100,"m33":110,"m34":120,"m41":130,"m42":140,"m43":150,"m44":160,"is2D":false,"isIdentity":false} +instanceOf DOMMatrix: true +DOMMatrix: {"a":10,"b":20,"c":30,"d":40,"e":50,"f":60,"m11":10,"m12":20,"m13":0,"m14":0,"m21":30,"m22":40,"m23":0,"m24":0,"m31":0,"m32":0,"m33":1,"m34":0,"m41":50,"m42":60,"m43":0,"m44":1,"is2D":true,"isIdentity":false} +DOMMatrix: {"a":10,"b":20,"c":50,"d":60,"e":130,"f":140,"m11":10,"m12":20,"m13":30,"m14":40,"m21":50,"m22":60,"m23":70,"m24":80,"m31":90,"m32":100,"m33":110,"m34":120,"m41":130,"m42":140,"m43":150,"m44":160,"is2D":false,"isIdentity":false} diff --git a/Tests/LibWeb/Text/input/HTML/StructuredClone-serializable-objects.html b/Tests/LibWeb/Text/input/HTML/StructuredClone-serializable-objects.html index 1a6934d78e..87002d560b 100644 --- a/Tests/LibWeb/Text/input/HTML/StructuredClone-serializable-objects.html +++ b/Tests/LibWeb/Text/input/HTML/StructuredClone-serializable-objects.html @@ -21,6 +21,12 @@ domMatrixReadOnly = structuredClone(new DOMMatrixReadOnly([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160])); println(`DOMMatrixReadOnly: ${JSON.stringify(domMatrixReadOnly)}`); + let domMatrix = structuredClone(new DOMMatrix([10, 20, 30, 40, 50, 60])); + println(`instanceOf DOMMatrix: ${domMatrix instanceof DOMMatrix}`); + println(`DOMMatrix: ${JSON.stringify(domMatrix)}`); + domMatrix = structuredClone(new DOMMatrix([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160])); + println(`DOMMatrix: ${JSON.stringify(domMatrix)}`); + done(); }); diff --git a/Userland/Libraries/LibWeb/Geometry/DOMMatrix.cpp b/Userland/Libraries/LibWeb/Geometry/DOMMatrix.cpp index b974f5ee10..3af86a8d54 100644 --- a/Userland/Libraries/LibWeb/Geometry/DOMMatrix.cpp +++ b/Userland/Libraries/LibWeb/Geometry/DOMMatrix.cpp @@ -118,6 +118,11 @@ JS::NonnullGCPtr DOMMatrix::create_from_dom_matrix_read_only(JS::Real return realm.heap().allocate(realm, realm, read_only_matrix); } +JS::NonnullGCPtr DOMMatrix::create(JS::Realm& realm) +{ + return realm.heap().allocate(realm, realm); +} + DOMMatrix::DOMMatrix(JS::Realm& realm, double m11, double m12, double m21, double m22, double m41, double m42) : DOMMatrixReadOnly(realm, m11, m12, m21, m22, m41, m42) { @@ -133,6 +138,11 @@ DOMMatrix::DOMMatrix(JS::Realm& realm, DOMMatrixReadOnly const& read_only_matrix { } +DOMMatrix::DOMMatrix(JS::Realm& realm) + : DOMMatrixReadOnly(realm) +{ +} + DOMMatrix::~DOMMatrix() = default; void DOMMatrix::initialize(JS::Realm& realm) diff --git a/Userland/Libraries/LibWeb/Geometry/DOMMatrix.h b/Userland/Libraries/LibWeb/Geometry/DOMMatrix.h index b6ba1ecd04..923fb13495 100644 --- a/Userland/Libraries/LibWeb/Geometry/DOMMatrix.h +++ b/Userland/Libraries/LibWeb/Geometry/DOMMatrix.h @@ -7,6 +7,7 @@ #pragma once +#include #include #include @@ -22,6 +23,7 @@ public: static WebIDL::ExceptionOr> create_from_dom_matrix_2d_init(JS::Realm&, DOMMatrix2DInit& init); static WebIDL::ExceptionOr> create_from_dom_matrix_init(JS::Realm&, DOMMatrixInit& init); static JS::NonnullGCPtr create_from_dom_matrix_read_only(JS::Realm&, DOMMatrixReadOnly const& read_only_matrix); + static JS::NonnullGCPtr create(JS::Realm&); virtual ~DOMMatrix() override; @@ -67,10 +69,13 @@ public: WebIDL::ExceptionOr> set_matrix_value(String const& transform_list); + virtual StringView interface_name() const override { return "DOMMatrix"sv; } + private: DOMMatrix(JS::Realm&, double m11, double m12, double m21, double m22, double m41, double m42); DOMMatrix(JS::Realm&, double m11, double m12, double m13, double m14, double m21, double m22, double m23, double m24, double m31, double m32, double m33, double m34, double m41, double m42, double m43, double m44); DOMMatrix(JS::Realm&, DOMMatrixReadOnly const& read_only_matrix); + explicit DOMMatrix(JS::Realm&); virtual void initialize(JS::Realm&) override; }; diff --git a/Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp b/Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp index f5e9af3118..cabd81c39d 100644 --- a/Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp +++ b/Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -966,6 +967,8 @@ private: return FileAPI::File::create(realm); if (interface_name == "DOMMatrixReadOnly"sv) return Geometry::DOMMatrixReadOnly::create(realm); + if (interface_name == "DOMMatrix"sv) + return Geometry::DOMMatrix::create(realm); VERIFY_NOT_REACHED(); }