LayoutTests/imported/w3c/web-platform-tests/css/geometry-1/DOMMatrix-newobject-expected.txt

@@PASS DOMMatrix flipX
1212PASS DOMMatrix flipY
1313PASS DOMMatrix inverse
1414FAIL DOMMatrix transformPoint matrix[method] is not a function. (In 'matrix[method]()', 'matrix[method]' is undefined)
15 FAIL DOMMatrix toFloat32Array matrix[method] is not a function. (In 'matrix[method]()', 'matrix[method]' is undefined)
16 FAIL DOMMatrix toFloat64Array matrix[method] is not a function. (In 'matrix[method]()', 'matrix[method]' is undefined)
 15PASS DOMMatrix toFloat32Array
 16PASS DOMMatrix toFloat64Array
1717PASS DOMMatrixReadOnly translate
1818PASS DOMMatrixReadOnly scale
1919PASS DOMMatrixReadOnly scale3d

@@PASS DOMMatrixReadOnly flipX
2727PASS DOMMatrixReadOnly flipY
2828PASS DOMMatrixReadOnly inverse
2929FAIL DOMMatrixReadOnly transformPoint matrix[method] is not a function. (In 'matrix[method]()', 'matrix[method]' is undefined)
30 FAIL DOMMatrixReadOnly toFloat32Array matrix[method] is not a function. (In 'matrix[method]()', 'matrix[method]' is undefined)
31 FAIL DOMMatrixReadOnly toFloat64Array matrix[method] is not a function. (In 'matrix[method]()', 'matrix[method]' is undefined)
 30PASS DOMMatrixReadOnly toFloat32Array
 31PASS DOMMatrixReadOnly toFloat64Array
3232

Source/WebCore/css/DOMMatrix.cpp

@@ExceptionOr<Ref<DOMMatrix>> DOMMatrix::fromMatrix(DOMMatrixInit&& init)
4343 return fromMatrixHelper<DOMMatrix>(WTFMove(init));
4444}
4545
 46ExceptionOr<Ref<DOMMatrix>> DOMMatrix::fromFloat32Array(Ref<Float32Array>&& array32)
 47{
 48 if (array32->length() == 6)
 49 return DOMMatrix::create(TransformationMatrix(array32->item(0), array32->item(1), array32->item(2), array32->item(3), array32->item(4), array32->item(5)), Is2D::Yes);
 50
 51 if (array32->length() == 16) {
 52 return DOMMatrix::create(TransformationMatrix(
 53 array32->item(0), array32->item(1), array32->item(2), array32->item(3),
 54 array32->item(4), array32->item(5), array32->item(6), array32->item(7),
 55 array32->item(8), array32->item(9), array32->item(10), array32->item(11),
 56 array32->item(12), array32->item(13), array32->item(14), array32->item(15)
 57 ), Is2D::No);
 58 }
 59
 60 return Exception { TypeError };
 61}
 62
 63ExceptionOr<Ref<DOMMatrix>> DOMMatrix::fromFloat64Array(Ref<Float64Array>&& array64)
 64{
 65 if (array64->length() == 6)
 66 return DOMMatrix::create(TransformationMatrix(array64->item(0), array64->item(1), array64->item(2), array64->item(3), array64->item(4), array64->item(5)), Is2D::Yes);
 67
 68 if (array64->length() == 16) {
 69 return DOMMatrix::create(TransformationMatrix(
 70 array64->item(0), array64->item(1), array64->item(2), array64->item(3),
 71 array64->item(4), array64->item(5), array64->item(6), array64->item(7),
 72 array64->item(8), array64->item(9), array64->item(10), array64->item(11),
 73 array64->item(12), array64->item(13), array64->item(14), array64->item(15)
 74 ), Is2D::No);
 75 }
 76
 77 return Exception { TypeError };
 78}
 79
4680// https://drafts.fxtf.org/geometry/#dom-dommatrix-multiplyself
4781ExceptionOr<Ref<DOMMatrix>> DOMMatrix::multiplySelf(DOMMatrixInit&& other)
4882{

Source/WebCore/css/DOMMatrix.h

@@public:
5252
5353 static ExceptionOr<Ref<DOMMatrix>> fromMatrix(DOMMatrixInit&&);
5454
 55 static ExceptionOr<Ref<DOMMatrix>> fromFloat32Array(Ref<Float32Array>&&);
 56 static ExceptionOr<Ref<DOMMatrix>> fromFloat64Array(Ref<Float64Array>&&);
 57
5558 ExceptionOr<Ref<DOMMatrix>> multiplySelf(DOMMatrixInit&& other);
5659 ExceptionOr<Ref<DOMMatrix>> preMultiplySelf(DOMMatrixInit&& other);
5760 Ref<DOMMatrix> translateSelf(double tx = 0, double ty = 0, double tz = 0);

Source/WebCore/css/DOMMatrix.idl

3232 ImplementationLacksVTable
3333 ] interface DOMMatrix : DOMMatrixReadOnly {
3434 [MayThrowException, NewObject] static DOMMatrix fromMatrix(optional DOMMatrixInit other);
35  // [NewObject] static DOMMatrix fromFloat32Array(Float32Array array32); // FIXME: Implement this.
36  // [NewObject] static DOMMatrix fromFloat64Array(Float64Array array64); // FIXME: Implement this.
 35 [MayThrowException, NewObject] static DOMMatrix fromFloat32Array(Float32Array array32);
 36 [MayThrowException, NewObject] static DOMMatrix fromFloat64Array(Float64Array array64);
3737
3838 // These attributes are simple aliases for certain elements of the 4x4 matrix
3939 inherit attribute unrestricted double a; // Alias for m11.

Source/WebCore/css/DOMMatrixReadOnly.cpp

3232#include "ExceptionCode.h"
3333#include "StyleProperties.h"
3434#include "TransformFunctions.h"
 35#include <JavaScriptCore/GenericTypedArrayViewInlines.h>
 36#include <JavaScriptCore/JSGenericTypedArrayViewInlines.h>
 37#include <heap/HeapInlines.h>
3538#include <wtf/text/StringBuilder.h>
3639
3740namespace WebCore {

@@ExceptionOr<Ref<DOMMatrixReadOnly>> DOMMatrixReadOnly::fromMatrix(DOMMatrixInit&
114117 return fromMatrixHelper<DOMMatrixReadOnly>(WTFMove(init));
115118}
116119
 120ExceptionOr<Ref<DOMMatrixReadOnly>> DOMMatrixReadOnly::fromFloat32Array(Ref<Float32Array>&& array32)
 121{
 122 if (array32->length() == 6)
 123 return DOMMatrixReadOnly::create(TransformationMatrix(array32->item(0), array32->item(1), array32->item(2), array32->item(3), array32->item(4), array32->item(5)), Is2D::Yes);
 124
 125 if (array32->length() == 16) {
 126 return DOMMatrixReadOnly::create(TransformationMatrix(
 127 array32->item(0), array32->item(1), array32->item(2), array32->item(3),
 128 array32->item(4), array32->item(5), array32->item(6), array32->item(7),
 129 array32->item(8), array32->item(9), array32->item(10), array32->item(11),
 130 array32->item(12), array32->item(13), array32->item(14), array32->item(15)
 131 ), Is2D::No);
 132 }
 133
 134 return Exception { TypeError };
 135}
 136
 137ExceptionOr<Ref<DOMMatrixReadOnly>> DOMMatrixReadOnly::fromFloat64Array(Ref<Float64Array>&& array64)
 138{
 139 if (array64->length() == 6)
 140 return DOMMatrixReadOnly::create(TransformationMatrix(array64->item(0), array64->item(1), array64->item(2), array64->item(3), array64->item(4), array64->item(5)), Is2D::Yes);
 141
 142 if (array64->length() == 16) {
 143 return DOMMatrixReadOnly::create(TransformationMatrix(
 144 array64->item(0), array64->item(1), array64->item(2), array64->item(3),
 145 array64->item(4), array64->item(5), array64->item(6), array64->item(7),
 146 array64->item(8), array64->item(9), array64->item(10), array64->item(11),
 147 array64->item(12), array64->item(13), array64->item(14), array64->item(15)
 148 ), Is2D::No);
 149 }
 150
 151 return Exception { TypeError };
 152}
 153
117154bool DOMMatrixReadOnly::isIdentity() const
118155{
119156 return m_matrix.isIdentity();

@@Ref<DOMMatrix> DOMMatrixReadOnly::inverse() const
248285 return matrix->invertSelf();
249286}
250287
 288RefPtr<Float32Array> DOMMatrixReadOnly::toFloat32Array() const
 289{
 290 auto array32 = Float32Array::createUninitialized(16);
 291 if (!array32)
 292 return nullptr;
 293
 294 array32->set(static_cast<unsigned>(0), m_matrix.m11());
 295 array32->set(1, m_matrix.m12());
 296 array32->set(2, m_matrix.m13());
 297 array32->set(3, m_matrix.m14());
 298 array32->set(4, m_matrix.m21());
 299 array32->set(5, m_matrix.m22());
 300 array32->set(6, m_matrix.m23());
 301 array32->set(7, m_matrix.m24());
 302 array32->set(8, m_matrix.m31());
 303 array32->set(9, m_matrix.m32());
 304 array32->set(10, m_matrix.m33());
 305 array32->set(11, m_matrix.m34());
 306 array32->set(12, m_matrix.m41());
 307 array32->set(13, m_matrix.m42());
 308 array32->set(14, m_matrix.m43());
 309 array32->set(15, m_matrix.m44());
 310 return array32;
 311}
 312
 313RefPtr<Float64Array> DOMMatrixReadOnly::toFloat64Array() const
 314{
 315 auto array64 = Float64Array::createUninitialized(16);
 316 if (!array64)
 317 return nullptr;
 318
 319 array64->set(static_cast<unsigned>(0), m_matrix.m11());
 320 array64->set(1, m_matrix.m12());
 321 array64->set(2, m_matrix.m13());
 322 array64->set(3, m_matrix.m14());
 323 array64->set(4, m_matrix.m21());
 324 array64->set(5, m_matrix.m22());
 325 array64->set(6, m_matrix.m23());
 326 array64->set(7, m_matrix.m24());
 327 array64->set(8, m_matrix.m31());
 328 array64->set(9, m_matrix.m32());
 329 array64->set(10, m_matrix.m33());
 330 array64->set(11, m_matrix.m34());
 331 array64->set(12, m_matrix.m41());
 332 array64->set(13, m_matrix.m42());
 333 array64->set(14, m_matrix.m43());
 334 array64->set(15, m_matrix.m44());
 335 return array64;
 336}
 337
251338// https://drafts.fxtf.org/geometry/#dom-dommatrixreadonly-stringifier
252339ExceptionOr<String> DOMMatrixReadOnly::toString() const
253340{

Source/WebCore/css/DOMMatrixReadOnly.h

2929#include "ExceptionOr.h"
3030#include "ScriptWrappable.h"
3131#include "TransformationMatrix.h"
 32#include <runtime/Float32Array.h>
 33#include <runtime/Float64Array.h>
3234#include <wtf/RefCounted.h>
3335#include <wtf/Variant.h>
3436#include <wtf/Vector.h>

@@public:
6365
6466 static ExceptionOr<Ref<DOMMatrixReadOnly>> fromMatrix(DOMMatrixInit&&);
6567
 68 static ExceptionOr<Ref<DOMMatrixReadOnly>> fromFloat32Array(Ref<Float32Array>&&);
 69 static ExceptionOr<Ref<DOMMatrixReadOnly>> fromFloat64Array(Ref<Float64Array>&&);
 70
6671 double a() const { return m_matrix.a(); }
6772 double b() const { return m_matrix.b(); }
6873 double c() const { return m_matrix.c(); }

@@public:
106111 Ref<DOMMatrix> skewY(double sy = 0); // Angle is in degrees.
107112 Ref<DOMMatrix> inverse() const;
108113
 114 RefPtr<Float32Array> toFloat32Array() const;
 115 RefPtr<Float64Array> toFloat64Array() const;
 116
109117 ExceptionOr<String> toString() const;
110118
111119protected:

Source/WebCore/css/DOMMatrixReadOnly.idl

3131 ImplementationLacksVTable
3232] interface DOMMatrixReadOnly {
3333 [MayThrowException, NewObject] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other);
34  // [NewObject] static DOMMatrixReadOnly fromFloat32Array(Float32Array array32); // FIXME: Implement this.
35  // [NewObject] static DOMMatrixReadOnly fromFloat64Array(Float64Array array64); // FIXME: Implement this.
 34 [MayThrowException, NewObject] static DOMMatrixReadOnly fromFloat32Array(Float32Array array32);
 35 [MayThrowException, NewObject] static DOMMatrixReadOnly fromFloat64Array(Float64Array array64);
3636
3737 // These attributes are simple aliases for certain elements of the 4x4 matrix
3838 readonly attribute unrestricted double a; // Alias for m11.

9393 [NewObject] DOMMatrix inverse();
9494
9595 // [NewObject] DOMPoint transformPoint(optional DOMPointInit point); // FIXME: Implement this.
96  // [NewObject] Float32Array toFloat32Array(); // FIXME: Implement this.
97  // [NewObject] Float64Array toFloat64Array(); // FIXME: Implement this.
 96 [NewObject] Float32Array? toFloat32Array();
 97 [NewObject] Float64Array? toFloat64Array();
9898
9999 [MayThrowException] DOMString toString(); // FIXME: Should be stringifier; once it is supported.
100100 serializer = { attribute };