| Index: third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp
|
| diff --git a/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp b/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp
|
| index 4290ed2c5d4899bc4e360a8866451371cca14f57..4c7d6ed5942d7eec18ae3a06a86f50e89f70ea09 100644
|
| --- a/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp
|
| +++ b/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp
|
| @@ -322,21 +322,83 @@ NotShared<DOMFloat64Array> DOMMatrixReadOnly::toFloat64Array() const {
|
| return NotShared<DOMFloat64Array>(DOMFloat64Array::Create(array, 16));
|
| }
|
|
|
| -const String DOMMatrixReadOnly::toString() const {
|
| - std::stringstream stream;
|
| +const String DOMMatrixReadOnly::toString(
|
| + ExceptionState& exception_state) const {
|
| + const char* kComma = ", ";
|
| + String result;
|
| +
|
| if (is2D()) {
|
| - stream << "matrix(" << a() << ", " << b() << ", " << c() << ", " << d()
|
| - << ", " << e() << ", " << f();
|
| - } else {
|
| - stream << "matrix3d(" << m11() << ", " << m12() << ", " << m13() << ", "
|
| - << m14() << ", " << m21() << ", " << m22() << ", " << m23() << ", "
|
| - << m24() << ", " << m31() << ", " << m32() << ", " << m33() << ", "
|
| - << m34() << ", " << m41() << ", " << m42() << ", " << m43() << ", "
|
| - << m44();
|
| + if (!std::isfinite(a()) || !std::isfinite(b()) || !std::isfinite(c()) ||
|
| + !std::isfinite(d()) || !std::isfinite(e()) || !std::isfinite(f())) {
|
| + exception_state.ThrowDOMException(
|
| + kInvalidStateError,
|
| + "DOMMatrix cannot be serialized with NaN or Infinity values.");
|
| + return String();
|
| + }
|
| +
|
| + result.append("matrix(");
|
| + result.append(String::NumberToStringECMAScript(a()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(b()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(c()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(d()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(e()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(f()));
|
| + result.append(")");
|
| + return result;
|
| + }
|
| +
|
| + if (!std::isfinite(m11()) || !std::isfinite(m12()) || !std::isfinite(m13()) ||
|
| + !std::isfinite(m14()) || !std::isfinite(m21()) || !std::isfinite(m22()) ||
|
| + !std::isfinite(m23()) || !std::isfinite(m24()) || !std::isfinite(m31()) ||
|
| + !std::isfinite(m32()) || !std::isfinite(m33()) || !std::isfinite(m34()) ||
|
| + !std::isfinite(m41()) || !std::isfinite(m42()) || !std::isfinite(m43()) ||
|
| + !std::isfinite(m44())) {
|
| + exception_state.ThrowDOMException(
|
| + kInvalidStateError,
|
| + "DOMMatrix cannot be serialized with NaN or Infinity values.");
|
| + return String();
|
| }
|
| - stream << ")";
|
|
|
| - return String(stream.str().c_str());
|
| + result.append("matrix3d(");
|
| + result.append(String::NumberToStringECMAScript(m11()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m12()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m13()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m14()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m21()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m22()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m23()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m24()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m31()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m32()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m33()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m34()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m41()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m42()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m43()));
|
| + result.append(kComma);
|
| + result.append(String::NumberToStringECMAScript(m44()));
|
| + result.append(")");
|
| +
|
| + return result;
|
| }
|
|
|
| ScriptValue DOMMatrixReadOnly::toJSONForBinding(
|
|
|