Changeset 253031 in webkit


Ignore:
Timestamp:
Dec 3, 2019 2:30:55 AM (4 years ago)
Author:
commit-queue@webkit.org
Message:

Implement createImageBitmap(OffscreenCanvas)
https://bugs.webkit.org/show_bug.cgi?id=183440

Patch by Zan Dobersek <zdobersek@igalia.com> on 2019-12-03
Reviewed by Antti Koivisto.

LayoutTests/imported/w3c:

  • web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt:
  • web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable-expected.txt:
  • web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer-expected.txt:
  • web-platform-tests/offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob.w-expected.txt:
  • web-platform-tests/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt:

Source/WebCore:

No new tests. Covered by existing tests.

  • html/ImageBitmap.cpp:

(WebCore::ImageBitmap::createPromise):

  • html/ImageBitmap.h:
  • page/WindowOrWorkerGlobalScope.idl:

LayoutTests:

  • platform/wpe/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt:
Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r253018 r253031  
     12019-12-03  Zan Dobersek  <zdobersek@igalia.com>
     2
     3        Implement createImageBitmap(OffscreenCanvas)
     4        https://bugs.webkit.org/show_bug.cgi?id=183440
     5
     6        Reviewed by Antti Koivisto.
     7
     8        * platform/wpe/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt:
     9
    1102019-12-02  Nikita Vasilyev  <nvasilyev@apple.com>
    211
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r252998 r253031  
     12019-12-03  Zan Dobersek  <zdobersek@igalia.com>
     2
     3        Implement createImageBitmap(OffscreenCanvas)
     4        https://bugs.webkit.org/show_bug.cgi?id=183440
     5
     6        Reviewed by Antti Koivisto.
     7
     8        * web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt:
     9        * web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable-expected.txt:
     10        * web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer-expected.txt:
     11        * web-platform-tests/offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob.w-expected.txt:
     12        * web-platform-tests/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt:
     13
    1142019-12-02  Alex Christensen  <achristensen@webkit.org>
    215
  • trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt

    r252856 r253031  
    3535FAIL createImageBitmap from a vector SVGImageElement resized, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    3636FAIL createImageBitmap from a vector SVGImageElement with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    37 FAIL createImageBitmap from an OffscreenCanvas, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    38 FAIL createImageBitmap from an OffscreenCanvas scaled down, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    39 FAIL createImageBitmap from an OffscreenCanvas scaled up, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    40 FAIL createImageBitmap from an OffscreenCanvas resized, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    41 FAIL createImageBitmap from an OffscreenCanvas with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
     37PASS createImageBitmap from an OffscreenCanvas, and drawImage on the created ImageBitmap
     38PASS createImageBitmap from an OffscreenCanvas scaled down, and drawImage on the created ImageBitmap
     39PASS createImageBitmap from an OffscreenCanvas scaled up, and drawImage on the created ImageBitmap
     40PASS createImageBitmap from an OffscreenCanvas resized, and drawImage on the created ImageBitmap
     41PASS createImageBitmap from an OffscreenCanvas with negative sw/sh, and drawImage on the created ImageBitmap
    4242FAIL createImageBitmap from an ImageData, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented"
    4343FAIL createImageBitmap from an ImageData scaled down, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented"
  • trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable-expected.txt

    r252856 r253031  
    77FAIL Serialize ImageBitmap created from a bitmap SVGImageElement promise_test: Unhandled rejection with value: object "TypeError: Type error"
    88FAIL Serialize ImageBitmap created from a vector SVGImageElement promise_test: Unhandled rejection with value: object "TypeError: Type error"
    9 FAIL Serialize ImageBitmap created from an OffscreenCanvas promise_test: Unhandled rejection with value: object "TypeError: Type error"
     9PASS Serialize ImageBitmap created from an OffscreenCanvas
    1010FAIL Serialize ImageBitmap created from an ImageData promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented"
    1111PASS Serialize ImageBitmap created from an ImageBitmap
  • trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer-expected.txt

    r252856 r253031  
    77FAIL Transfer ImageBitmap created from a bitmap SVGImageElement promise_test: Unhandled rejection with value: object "TypeError: Type error"
    88FAIL Transfer ImageBitmap created from a vector SVGImageElement promise_test: Unhandled rejection with value: object "TypeError: Type error"
    9 FAIL Transfer ImageBitmap created from an OffscreenCanvas promise_test: Unhandled rejection with value: object "TypeError: Type error"
     9PASS Transfer ImageBitmap created from an OffscreenCanvas
    1010FAIL Transfer ImageBitmap created from an ImageData promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented"
    1111PASS Transfer ImageBitmap created from an ImageBitmap
  • trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt

    r252856 r253031  
    3535FAIL createImageBitmap from a vector SVGImageElement resized, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    3636FAIL createImageBitmap from a vector SVGImageElement with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    37 FAIL createImageBitmap from an OffscreenCanvas, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    38 FAIL createImageBitmap from an OffscreenCanvas scaled down, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    39 FAIL createImageBitmap from an OffscreenCanvas scaled up, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    40 FAIL createImageBitmap from an OffscreenCanvas resized, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
    41 FAIL createImageBitmap from an OffscreenCanvas with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error"
     37PASS createImageBitmap from an OffscreenCanvas, and drawImage on the created ImageBitmap
     38PASS createImageBitmap from an OffscreenCanvas scaled down, and drawImage on the created ImageBitmap
     39PASS createImageBitmap from an OffscreenCanvas scaled up, and drawImage on the created ImageBitmap
     40PASS createImageBitmap from an OffscreenCanvas resized, and drawImage on the created ImageBitmap
     41PASS createImageBitmap from an OffscreenCanvas with negative sw/sh, and drawImage on the created ImageBitmap
    4242FAIL createImageBitmap from an ImageData, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented"
    4343FAIL createImageBitmap from an ImageData scaled down, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented"
  • trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt

    r252856 r253031  
    2222FAIL createImageBitmap with a a vector SVGImageElement source and sh set to 0 assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "RangeError" ("RangeError")
    2323FAIL createImageBitmap with a a vector SVGImageElement source and oversized (unallocatable) crop region assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
    24 FAIL createImageBitmap with a an OffscreenCanvas source and sw set to 0 assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "RangeError" ("RangeError")
    25 FAIL createImageBitmap with a an OffscreenCanvas source and sh set to 0 assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "RangeError" ("RangeError")
    26 FAIL createImageBitmap with a an OffscreenCanvas source and oversized (unallocatable) crop region assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
     24PASS createImageBitmap with a an OffscreenCanvas source and sw set to 0
     25PASS createImageBitmap with a an OffscreenCanvas source and sh set to 0
     26FAIL createImageBitmap with a an OffscreenCanvas source and oversized (unallocatable) crop region assert_unreached: Should have rejected: undefined Reached unreachable code
    2727PASS createImageBitmap with a an ImageData source and sw set to 0
    2828PASS createImageBitmap with a an ImageData source and sh set to 0
     
    4343PASS createImageBitmap with empty video source.
    4444PASS createImageBitmap with an oversized canvas source.
    45 FAIL createImageBitmap with an invalid OffscreenCanvas source. assert_throws: function "function () { throw e }" threw object "TypeError: Type error" that is not a DOMException InvalidStateError: property "code" is equal to undefined, expected 11
     45PASS createImageBitmap with an invalid OffscreenCanvas source.
    4646PASS createImageBitmap with an undecodable blob source.
    4747PASS createImageBitmap with a broken image source.
  • trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable-expected.txt

    r252856 r253031  
    77FAIL Serialize ImageBitmap created from a bitmap SVGImageElement promise_test: Unhandled rejection with value: object "TypeError: Type error"
    88FAIL Serialize ImageBitmap created from a vector SVGImageElement promise_test: Unhandled rejection with value: object "TypeError: Type error"
    9 FAIL Serialize ImageBitmap created from an OffscreenCanvas promise_test: Unhandled rejection with value: object "TypeError: Type error"
     9PASS Serialize ImageBitmap created from an OffscreenCanvas
    1010FAIL Serialize ImageBitmap created from an ImageData promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented"
    1111PASS Serialize ImageBitmap created from an ImageBitmap
  • trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer-expected.txt

    r252856 r253031  
    77FAIL Transfer ImageBitmap created from a bitmap SVGImageElement promise_test: Unhandled rejection with value: object "TypeError: Type error"
    88FAIL Transfer ImageBitmap created from a vector SVGImageElement promise_test: Unhandled rejection with value: object "TypeError: Type error"
    9 FAIL Transfer ImageBitmap created from an OffscreenCanvas promise_test: Unhandled rejection with value: object "TypeError: Type error"
     9PASS Transfer ImageBitmap created from an OffscreenCanvas
    1010FAIL Transfer ImageBitmap created from an ImageData promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented"
    1111PASS Transfer ImageBitmap created from an ImageBitmap
  • trunk/Source/WebCore/ChangeLog

    r253030 r253031  
     12019-12-03  Zan Dobersek  <zdobersek@igalia.com>
     2
     3        Implement createImageBitmap(OffscreenCanvas)
     4        https://bugs.webkit.org/show_bug.cgi?id=183440
     5
     6        Reviewed by Antti Koivisto.
     7
     8        No new tests. Covered by existing tests.
     9
     10        * html/ImageBitmap.cpp:
     11        (WebCore::ImageBitmap::createPromise):
     12        * html/ImageBitmap.h:
     13        * page/WindowOrWorkerGlobalScope.idl:
     14
    1152019-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>
    216
  • trunk/Source/WebCore/html/ImageBitmap.cpp

    r251244 r253031  
    4444#include "JSImageBitmap.h"
    4545#include "LayoutSize.h"
     46#if ENABLE(OFFSCREEN_CANVAS)
     47#include "OffscreenCanvas.h"
     48#endif
    4649#include "RenderElement.h"
    4750#include "SharedBuffer.h"
     
    344347}
    345348
    346 void ImageBitmap::createPromise(ScriptExecutionContext&, RefPtr<HTMLCanvasElement>& canvasElement, ImageBitmapOptions&& options, Optional<IntRect> rect, ImageBitmap::Promise&& promise)
     349void ImageBitmap::createPromise(ScriptExecutionContext& context, RefPtr<HTMLCanvasElement>& canvasElement, ImageBitmapOptions&& options, Optional<IntRect> rect, ImageBitmap::Promise&& promise)
     350{
     351    createPromise(context, *canvasElement, WTFMove(options), WTFMove(rect), WTFMove(promise));
     352}
     353
     354#if ENABLE(OFFSCREEN_CANVAS)
     355void ImageBitmap::createPromise(ScriptExecutionContext& context, RefPtr<OffscreenCanvas>& canvasElement, ImageBitmapOptions&& options, Optional<IntRect> rect, ImageBitmap::Promise&& promise)
     356{
     357    createPromise(context, *canvasElement, WTFMove(options), WTFMove(rect), WTFMove(promise));
     358}
     359#endif
     360
     361void ImageBitmap::createPromise(ScriptExecutionContext&, CanvasBase& canvas, ImageBitmapOptions&& options, Optional<IntRect> rect, ImageBitmap::Promise&& promise)
    347362{
    348363    // 2. If the canvas element's bitmap has either a horizontal dimension or a vertical
    349364    //    dimension equal to zero, then return a promise rejected with an "InvalidStateError"
    350365    //    DOMException and abort these steps.
    351     auto size = canvasElement->size();
     366    auto size = canvas.size();
    352367    if (!size.width() || !size.height()) {
    353368        promise.reject(InvalidStateError, "Cannot create ImageBitmap from a canvas that has zero width or height");
     
    367382    auto bitmapData = ImageBuffer::create(FloatSize(outputSize.width(), outputSize.height()), bufferRenderingMode);
    368383
    369     auto imageForRender = canvasElement->copiedImage();
     384    auto imageForRender = canvas.copiedImage();
    370385    if (!imageForRender) {
    371386        promise.reject(InvalidStateError, "Cannot create ImageBitmap from canvas that can't be rendered");
     
    382397    //    the origin-clean flag of the canvas element's bitmap.
    383398
    384     imageBitmap->m_originClean = canvasElement->originClean();
     399    imageBitmap->m_originClean = canvas.originClean();
    385400
    386401    // 6. Return a new promise, but continue running these steps in parallel.
  • trunk/Source/WebCore/html/ImageBitmap.h

    r250795 r253031  
    3939
    4040class Blob;
     41class CanvasBase;
    4142class HTMLCanvasElement;
    4243class HTMLImageElement;
     
    4748class IntRect;
    4849class IntSize;
     50#if ENABLE(OFFSCREEN_CANVAS)
     51class OffscreenCanvas;
     52#endif
    4953class PendingImageBitmap;
    5054class ScriptExecutionContext;
     
    6468        RefPtr<HTMLCanvasElement>,
    6569        RefPtr<ImageBitmap>,
     70#if ENABLE(OFFSCREEN_CANVAS)
     71        RefPtr<OffscreenCanvas>,
     72#endif
    6673#if ENABLE(CSS_TYPED_OM)
    6774        RefPtr<TypedOMCSSImageValue>,
     
    106113    static void createPromise(ScriptExecutionContext&, RefPtr<HTMLVideoElement>&, ImageBitmapOptions&&, Optional<IntRect>, Promise&&);
    107114#endif
     115    static void createPromise(ScriptExecutionContext&, RefPtr<ImageBitmap>&, ImageBitmapOptions&&, Optional<IntRect>, Promise&&);
    108116    static void createPromise(ScriptExecutionContext&, RefPtr<HTMLCanvasElement>&, ImageBitmapOptions&&, Optional<IntRect>, Promise&&);
    109     static void createPromise(ScriptExecutionContext&, RefPtr<ImageBitmap>&, ImageBitmapOptions&&, Optional<IntRect>, Promise&&);
     117#if ENABLE(OFFSCREEN_CANVAS)
     118    static void createPromise(ScriptExecutionContext&, RefPtr<OffscreenCanvas>&, ImageBitmapOptions&&, Optional<IntRect>, Promise&&);
     119#endif
     120    static void createPromise(ScriptExecutionContext&, CanvasBase&, ImageBitmapOptions&&, Optional<IntRect>, Promise&&);
    110121    static void createPromise(ScriptExecutionContext&, RefPtr<Blob>&, ImageBitmapOptions&&, Optional<IntRect>, Promise&&);
    111122    static void createPromise(ScriptExecutionContext&, RefPtr<ImageData>&, ImageBitmapOptions&&, Optional<IntRect>, Promise&&);
  • trunk/Source/WebCore/page/WindowOrWorkerGlobalScope.idl

    r251630 r253031  
    2626 */
    2727
    28 #if defined(ENABLE_VIDEO) && ENABLE_VIDEO && defined(ENABLE_CSS_TYPED_OM) && ENABLE_CSS_TYPED_OM
    29 typedef (HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or TypedOMCSSImageValue) CanvasImageSource;
    30 #elif defined(ENABLE_VIDEO) && ENABLE_VIDEO
    31 typedef (HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap) CanvasImageSource;
    32 #else
    33 typedef (HTMLImageElement or HTMLCanvasElement or ImageBitmap) CanvasImageSource;
     28// FIXME: This should include SVGImageElement.
     29typedef (HTMLImageElement
     30#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
     31    or HTMLVideoElement
    3432#endif
     33    or HTMLCanvasElement
     34    or ImageBitmap
     35#if defined(ENABLE_OFFSCREEN_CANVAS) && ENABLE_OFFSCREEN_CANVAS
     36    or OffscreenCanvas
     37#endif
     38#if defined(ENABLE_CSS_TYPED_OM) && ENABLE_CSS_TYPED_OM
     39    or TypedOMCSSImageValue
     40#endif
     41) CanvasImageSource;
    3542
    3643typedef (CanvasImageSource or Blob or ImageData) ImageBitmapSource;
Note: See TracChangeset for help on using the changeset viewer.