Source/WebCore:
authorMs2ger@igalia.com <Ms2ger@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Nov 2017 15:43:33 +0000 (15:43 +0000)
committerMs2ger@igalia.com <Ms2ger@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Nov 2017 15:43:33 +0000 (15:43 +0000)
[GTK] Use fallible allocation in ImageBuffer::ImageBuffer().
https://bugs.webkit.org/show_bug.cgi?id=179051

Reviewed by Michael Catanzaro.

Test: imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html

* platform/graphics/cairo/ImageBufferCairo.cpp:
(WebCore::ImageBuffer::ImageBuffer):

Source/WTF:
Export tryFastZeroedMalloc.
https://bugs.webkit.org/show_bug.cgi?id=179051

Reviewed by Michael Catanzaro.

The other functions were exported in bug 72855. There does not seem to be a
reason not to export this one.

* wtf/FastMalloc.h:

LayoutTests:
[GTK] Update test expectations for imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html.
https://bugs.webkit.org/show_bug.cgi?id=179051

Reviewed by Michael Catanzaro.

The expectations are platform-specific because the test times out on mac.
The difference with the mac expectations is only in the last part of the
test, after the timeout.

This follows our policy of creating -expected files with failures for
imported wpt tests, to allow using them as regression tests.

* platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@224681 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt
Source/WTF/ChangeLog
Source/WTF/wtf/FastMalloc.h
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp

index 630e629..bece521 100644 (file)
@@ -1,3 +1,19 @@
+2017-11-10  Ms2ger  <Ms2ger@igalia.com>
+
+        [GTK] Update test expectations for imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html.
+        https://bugs.webkit.org/show_bug.cgi?id=179051
+
+        Reviewed by Michael Catanzaro.
+
+        The expectations are platform-specific because the test times out on mac.
+        The difference with the mac expectations is only in the last part of the
+        test, after the timeout.
+
+        This follows our policy of creating -expected files with failures for
+        imported wpt tests, to allow using them as regression tests.
+
+        * platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt:
+
 2017-11-10  Chris Dumez  <cdumez@apple.com>
 
         Unreviewed, mark imported/w3c/web-platform-tests/service-workers/service-worker/unregister-then-register-new-script.https.html as flaky
index ec94b06..f03e7f3 100644 (file)
@@ -1,30 +1,31 @@
+CONSOLE MESSAGE: line 167: Canvas area exceeds the maximum limit (width * height > 268435456).
 
-FAIL createImageBitmap with a HTMLImageElement source and sw set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a HTMLImageElement source and sh set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a HTMLImageElement source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a HTMLVideoElement source and sw set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a HTMLVideoElement source and sh set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a HTMLVideoElement source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a HTMLCanvasElement source and sw set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a HTMLCanvasElement source and sh set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a HTMLCanvasElement source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
+PASS createImageBitmap with a HTMLImageElement source and sw set to 0 rejects with a RangeError. 
+PASS createImageBitmap with a HTMLImageElement source and sh set to 0 rejects with a RangeError. 
+FAIL createImageBitmap with a HTMLImageElement source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. assert_unreached: Should have rejected: undefined Reached unreachable code
+PASS createImageBitmap with a HTMLVideoElement source and sw set to 0 rejects with a RangeError. 
+PASS createImageBitmap with a HTMLVideoElement source and sh set to 0 rejects with a RangeError. 
+FAIL createImageBitmap with a HTMLVideoElement source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. assert_throws: function "function () { throw e }" threw object "TypeError: createImageBitmap with HTMLVideoElement is not implemented" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
+PASS createImageBitmap with a HTMLCanvasElement source and sw set to 0 rejects with a RangeError. 
+PASS createImageBitmap with a HTMLCanvasElement source and sh set to 0 rejects with a RangeError. 
+FAIL createImageBitmap with a HTMLCanvasElement source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. assert_unreached: Should have rejected: undefined Reached unreachable code
 FAIL createImageBitmap with a OffscreenCanvas source and sw set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: OffscreenCanvas"
 FAIL createImageBitmap with a OffscreenCanvas source and sh set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: OffscreenCanvas"
 FAIL createImageBitmap with a OffscreenCanvas source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: OffscreenCanvas"
-FAIL createImageBitmap with a ImageData source and sw set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a ImageData source and sh set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a ImageData source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a ImageBitmap source and sw set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a ImageBitmap source and sh set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a ImageBitmap source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a Blob source and sw set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a Blob source and sh set to 0 rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with a Blob source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
-FAIL createImageBitmap with undefined image source rejects with a TypeError. Can't find variable: createImageBitmap
-FAIL createImageBitmap with null image source rejects with a TypeError. Can't find variable: createImageBitmap
-FAIL createImageBitmap with empty image source rejects with a InvalidStateError. Can't find variable: createImageBitmap
-FAIL createImageBitmap with empty video source rejects with a InvalidStateError. Can't find variable: createImageBitmap
-FAIL createImageBitmap with an oversized canvas source rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
+PASS createImageBitmap with a ImageData source and sw set to 0 rejects with a RangeError. 
+PASS createImageBitmap with a ImageData source and sh set to 0 rejects with a RangeError. 
+FAIL createImageBitmap with a ImageData source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. assert_throws: function "function () { throw e }" threw object "TypeError: createImageBitmap with ImageData is not implemented" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
+PASS createImageBitmap with a ImageBitmap source and sw set to 0 rejects with a RangeError. 
+PASS createImageBitmap with a ImageBitmap source and sh set to 0 rejects with a RangeError. 
+FAIL createImageBitmap with a ImageBitmap source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. assert_throws: function "function () { throw e }" threw object "TypeError: createImageBitmap with ImageBitmap is not implemented" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
+PASS createImageBitmap with a Blob source and sw set to 0 rejects with a RangeError. 
+PASS createImageBitmap with a Blob source and sh set to 0 rejects with a RangeError. 
+FAIL createImageBitmap with a Blob source and oversized (unallocatable) crop region rejects with an InvalidStateError DOMException. assert_throws: function "function () { throw e }" threw object "TypeError: createImageBitmap with ArrayBuffer or Blob is not implemented" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
+PASS createImageBitmap with undefined image source rejects with a TypeError. 
+PASS createImageBitmap with null image source rejects with a TypeError. 
+PASS createImageBitmap with empty image source rejects with a InvalidStateError. 
+FAIL createImageBitmap with empty video source rejects with a InvalidStateError. assert_throws: function "function () { throw e }" threw object "TypeError: createImageBitmap with HTMLVideoElement is not implemented" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
+PASS createImageBitmap with an oversized canvas source rejects with a RangeError. 
 FAIL createImageBitmap with an invalid OffscreenCanvas source rejects with a RangeError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: OffscreenCanvas"
-FAIL createImageBitmap with an undecodable blob source rejects with an InvalidStateError. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: createImageBitmap"
+FAIL createImageBitmap with an undecodable blob source rejects with an InvalidStateError. assert_throws: function "function () { throw e }" threw object "TypeError: createImageBitmap with ArrayBuffer or Blob is not implemented" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
 
index 69e1b24..83588fe 100644 (file)
@@ -1,3 +1,15 @@
+2017-11-10  Ms2ger  <Ms2ger@igalia.com>
+
+        Export tryFastZeroedMalloc.
+        https://bugs.webkit.org/show_bug.cgi?id=179051
+
+        Reviewed by Michael Catanzaro.
+
+        The other functions were exported in bug 72855. There does not seem to be a
+        reason not to export this one.
+
+        * wtf/FastMalloc.h:
+
 2017-11-09  Chris Dumez  <cdumez@apple.com>
 
         Unreviewed, rolling out r224661.
index 3bd7774..f0a792b 100644 (file)
@@ -52,7 +52,7 @@ WTF_EXPORT_PRIVATE void* fastRealloc(void*, size_t) RETURNS_NONNULL;
 WTF_EXPORT_PRIVATE char* fastStrDup(const char*) RETURNS_NONNULL;
 
 WTF_EXPORT_PRIVATE TryMallocReturnValue tryFastMalloc(size_t);
-TryMallocReturnValue tryFastZeroedMalloc(size_t);
+WTF_EXPORT_PRIVATE TryMallocReturnValue tryFastZeroedMalloc(size_t);
 WTF_EXPORT_PRIVATE TryMallocReturnValue tryFastCalloc(size_t numElements, size_t elementSize);
 
 WTF_EXPORT_PRIVATE void fastFree(void*);
index afca1cc..79c74c2 100644 (file)
@@ -1,3 +1,15 @@
+2017-11-10  Ms2ger  <Ms2ger@igalia.com>
+
+        [GTK] Use fallible allocation in ImageBuffer::ImageBuffer().
+        https://bugs.webkit.org/show_bug.cgi?id=179051
+
+        Reviewed by Michael Catanzaro.
+
+        Test: imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html
+
+        * platform/graphics/cairo/ImageBufferCairo.cpp:
+        (WebCore::ImageBuffer::ImageBuffer):
+
 2017-11-10  Miguel Gomez  <magomez@igalia.com>
 
         [GTK][WPE] CoordinatedGraphicsLayer::setNeedsDisplayInRect() converts FloatRect to IntRect erroneously
index 546a005..668bada 100644 (file)
@@ -231,7 +231,9 @@ ImageBuffer::ImageBuffer(const FloatSize& size, float resolutionScale, ColorSpac
         static cairo_user_data_key_t s_surfaceDataKey;
 
         int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, m_size.width());
-        auto* surfaceData = fastZeroedMalloc(m_size.height() * stride);
+        void* surfaceData;
+        if (!tryFastZeroedMalloc(m_size.height() * stride).getValue(surfaceData))
+            return;
 
         m_data.m_surface = adoptRef(cairo_image_surface_create_for_data(static_cast<unsigned char*>(surfaceData), CAIRO_FORMAT_ARGB32, m_size.width(), m_size.height(), stride));
         cairo_surface_set_user_data(m_data.m_surface.get(), &s_surfaceDataKey, surfaceData, [](void* data) { fastFree(data); });