Bug 1360475: Use union for DOMMatrix constructor r=bzbarsky

Differential Revision: https://phabricator.services.mozilla.com/D35211

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Kagami Sascha Rosylight 2019-07-16 21:12:38 +00:00
Родитель 7d7ca018fd
Коммит d75e9f219f
4 изменённых файлов: 43 добавлений и 71 удалений

Просмотреть файл

@ -219,7 +219,7 @@ already_AddRefed<DOMMatrixReadOnly> DOMMatrixReadOnly::FromFloat64Array(
already_AddRefed<DOMMatrixReadOnly> DOMMatrixReadOnly::Constructor(
const GlobalObject& aGlobal,
const Optional<StringOrUnrestrictedDoubleSequence>& aArg,
const Optional<StringOrUnrestrictedDoubleSequenceOrDOMMatrixReadOnly>& aArg,
ErrorResult& aRv) {
if (!aArg.WasPassed()) {
RefPtr<DOMMatrixReadOnly> rval =
@ -240,6 +240,11 @@ already_AddRefed<DOMMatrixReadOnly> DOMMatrixReadOnly::Constructor(
rval->SetMatrixValue(arg.GetAsString(), aRv);
return rval.forget();
}
if (arg.IsDOMMatrixReadOnly()) {
RefPtr<DOMMatrixReadOnly> obj = new DOMMatrixReadOnly(
aGlobal.GetAsSupports(), arg.GetAsDOMMatrixReadOnly());
return obj.forget();
}
const auto& sequence = arg.GetAsUnrestrictedDoubleSequence();
const int length = sequence.Length();
@ -658,30 +663,39 @@ already_AddRefed<DOMMatrix> DOMMatrix::FromFloat64Array(
return obj.forget();
}
already_AddRefed<DOMMatrix> DOMMatrix::Constructor(const GlobalObject& aGlobal,
ErrorResult& aRv) {
RefPtr<DOMMatrix> obj = new DOMMatrix(aGlobal.GetAsSupports());
return obj.forget();
}
already_AddRefed<DOMMatrix> DOMMatrix::Constructor(
const GlobalObject& aGlobal, const nsAString& aTransformList,
const GlobalObject& aGlobal,
const Optional<StringOrUnrestrictedDoubleSequenceOrDOMMatrixReadOnly>& aArg,
ErrorResult& aRv) {
nsCOMPtr<nsPIDOMWindowInner> win = do_QueryInterface(aGlobal.GetAsSupports());
if (!win) {
aRv.ThrowTypeError<MSG_ILLEGAL_CONSTRUCTOR>();
return nullptr;
if (!aArg.WasPassed()) {
RefPtr<DOMMatrix> rval = new DOMMatrix(aGlobal.GetAsSupports());
return rval.forget();
}
RefPtr<DOMMatrix> obj = new DOMMatrix(aGlobal.GetAsSupports());
obj = obj->SetMatrixValue(aTransformList, aRv);
return obj.forget();
}
already_AddRefed<DOMMatrix> DOMMatrix::Constructor(
const GlobalObject& aGlobal, const DOMMatrixReadOnly& aOther,
ErrorResult& aRv) {
RefPtr<DOMMatrix> obj = new DOMMatrix(aGlobal.GetAsSupports(), aOther);
return obj.forget();
const auto& arg = aArg.Value();
if (arg.IsString()) {
nsCOMPtr<nsPIDOMWindowInner> win =
do_QueryInterface(aGlobal.GetAsSupports());
if (!win) {
aRv.ThrowTypeError<MSG_ILLEGAL_CONSTRUCTOR>();
return nullptr;
}
RefPtr<DOMMatrix> rval = new DOMMatrix(aGlobal.GetAsSupports());
rval->SetMatrixValue(arg.GetAsString(), aRv);
return rval.forget();
}
if (arg.IsDOMMatrixReadOnly()) {
RefPtr<DOMMatrix> obj =
new DOMMatrix(aGlobal.GetAsSupports(), arg.GetAsDOMMatrixReadOnly());
return obj.forget();
}
const auto& sequence = arg.GetAsUnrestrictedDoubleSequence();
const int length = sequence.Length();
const bool is2D = length == 6;
RefPtr<DOMMatrix> rval = new DOMMatrix(aGlobal.GetAsSupports(), is2D);
SetDataInMatrix(rval, sequence.Elements(), length, aRv);
return rval.forget();
}
template <typename T>
@ -718,29 +732,6 @@ static void SetDataInMatrix(DOMMatrixReadOnly* aMatrix, const T* aData,
}
}
already_AddRefed<DOMMatrix> DOMMatrix::Constructor(const GlobalObject& aGlobal,
const Float32Array& aArray32,
ErrorResult& aRv) {
return FromFloat32Array(aGlobal, aArray32, aRv);
}
already_AddRefed<DOMMatrix> DOMMatrix::Constructor(const GlobalObject& aGlobal,
const Float64Array& aArray64,
ErrorResult& aRv) {
return FromFloat64Array(aGlobal, aArray64, aRv);
}
already_AddRefed<DOMMatrix> DOMMatrix::Constructor(
const GlobalObject& aGlobal, const Sequence<double>& aNumberSequence,
ErrorResult& aRv) {
const int length = aNumberSequence.Length();
const bool is2D = length == 6;
RefPtr<DOMMatrix> obj = new DOMMatrix(aGlobal.GetAsSupports(), is2D);
SetDataInMatrix(obj, aNumberSequence.Elements(), length, aRv);
return obj.forget();
}
already_AddRefed<DOMMatrix> DOMMatrix::ReadStructuredClone(
JSContext* aCx, nsIGlobalObject* aGlobal,
JSStructuredCloneReader* aReader) {

Просмотреть файл

@ -26,7 +26,7 @@ namespace dom {
class GlobalObject;
class DOMMatrix;
class DOMPoint;
class StringOrUnrestrictedDoubleSequence;
class StringOrUnrestrictedDoubleSequenceOrDOMMatrixReadOnly;
struct DOMPointInit;
struct DOMMatrixInit;
struct DOMMatrix2DInit;
@ -83,7 +83,8 @@ class DOMMatrixReadOnly : public nsWrapperCache {
static already_AddRefed<DOMMatrixReadOnly> Constructor(
const GlobalObject& aGlobal,
const Optional<StringOrUnrestrictedDoubleSequence>& aArg,
const Optional<StringOrUnrestrictedDoubleSequenceOrDOMMatrixReadOnly>&
aArg,
ErrorResult& aRv);
static already_AddRefed<DOMMatrixReadOnly> ReadStructuredClone(
@ -288,22 +289,10 @@ class DOMMatrix : public DOMMatrixReadOnly {
const GlobalObject& aGlobal, const Float64Array& aArray64,
ErrorResult& aRv);
static already_AddRefed<DOMMatrix> Constructor(const GlobalObject& aGlobal,
ErrorResult& aRv);
static already_AddRefed<DOMMatrix> Constructor(
const GlobalObject& aGlobal, const nsAString& aTransformList,
ErrorResult& aRv);
static already_AddRefed<DOMMatrix> Constructor(
const GlobalObject& aGlobal, const DOMMatrixReadOnly& aOther,
ErrorResult& aRv);
static already_AddRefed<DOMMatrix> Constructor(const GlobalObject& aGlobal,
const Float32Array& aArray32,
ErrorResult& aRv);
static already_AddRefed<DOMMatrix> Constructor(const GlobalObject& aGlobal,
const Float64Array& aArray64,
ErrorResult& aRv);
static already_AddRefed<DOMMatrix> Constructor(
const GlobalObject& aGlobal, const Sequence<double>& aNumberSequence,
const GlobalObject& aGlobal,
const Optional<StringOrUnrestrictedDoubleSequenceOrDOMMatrixReadOnly>&
aArg,
ErrorResult& aRv);
static already_AddRefed<DOMMatrix> ReadStructuredClone(

Просмотреть файл

@ -11,7 +11,7 @@
*/
[Pref="layout.css.DOMMatrix.enabled",
Constructor(optional (DOMString or sequence<unrestricted double>) init),
Constructor(optional (DOMString or sequence<unrestricted double> or DOMMatrixReadOnly) init),
Exposed=(Window,Worker),
Serializable]
interface DOMMatrixReadOnly {
@ -88,12 +88,7 @@ interface DOMMatrixReadOnly {
};
[Pref="layout.css.DOMMatrix.enabled",
Constructor,
Constructor(DOMString transformList),
Constructor(DOMMatrixReadOnly other),
Constructor(Float32Array array32),
Constructor(Float64Array array64),
Constructor(sequence<unrestricted double> numberSequence),
Constructor(optional (DOMString or sequence<unrestricted double> or DOMMatrixReadOnly) init),
Exposed=(Window,Worker),
Serializable,
LegacyWindowAlias=WebKitCSSMatrix]

Просмотреть файл

@ -1,3 +0,0 @@
[DOMMatrix-001.html]
[new DOMMatrix(undefined)]
expected: FAIL