Changeset 166246 in webkit


Ignore:
Timestamp:
Mar 25, 2014 1:24:14 PM (10 years ago)
Author:
krit@webkit.org
Message:

Implement ImageData constructors and WebWorkers exposure
https://bugs.webkit.org/show_bug.cgi?id=130668

Reviewed by Dean Jackson.

Source/WebCore:

Add new constructors for ImageData.

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#pixel-manipulation

Test: fast/canvas/canvas-imageData.html

  • html/ImageData.cpp:

(WebCore::ImageData::create):

  • html/ImageData.h:
  • html/ImageData.idl:

LayoutTests:

Tests for ImageData constructors. Remove a false tests for constructors
from Philip's test suite.

  • fast/canvas/canvas-imageData-expected.txt: Added.
  • fast/canvas/canvas-imageData.html: Added.
  • fast/canvas/script-tests/canvas-imageData.js: Added.

(testTransparentBlack):

  • LayoutTests/canvas/philip/tests/2d.imageData.object.ctor.html: Removed.
  • LayoutTests/canvas/philip/tests/2d.imageData.object.ctor-expected.txt: Removed.
  • LayoutTests/js/dom/global-constructors-attributes-dedicated-worker-expected.txt
  • LayoutTests/js/dom/global-constructors-attributes-shared-worker-expected.txt
Location:
trunk
Files:
3 added
2 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r166245 r166246  
     12014-03-25  Dirk Schulze  <krit@webkit.org>
     2
     3        Implement ImageData constructors and WebWorkers exposure
     4        https://bugs.webkit.org/show_bug.cgi?id=130668
     5
     6        Reviewed by Dean Jackson.
     7
     8        Tests for ImageData constructors. Remove a false tests for constructors
     9        from Philip's test suite.
     10
     11        * fast/canvas/canvas-imageData-expected.txt: Added.
     12        * fast/canvas/canvas-imageData.html: Added.
     13        * fast/canvas/script-tests/canvas-imageData.js: Added.
     14        (testTransparentBlack):
     15        * LayoutTests/canvas/philip/tests/2d.imageData.object.ctor.html: Removed.
     16        * LayoutTests/canvas/philip/tests/2d.imageData.object.ctor-expected.txt: Removed.
     17        * LayoutTests/js/dom/global-constructors-attributes-dedicated-worker-expected.txt
     18        * LayoutTests/js/dom/global-constructors-attributes-shared-worker-expected.txt
     19
    1202014-03-25  Myles C. Maxfield  <mmaxfield@apple.com>
    221
  • trunk/LayoutTests/js/dom/global-constructors-attributes-dedicated-worker-expected.txt

    r156467 r166246  
    8585PASS [Worker] Object.getOwnPropertyDescriptor(global, 'IDBVersionChangeEvent').enumerable is false
    8686PASS [Worker] Object.getOwnPropertyDescriptor(global, 'IDBVersionChangeEvent').configurable is true
     87PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').value is ImageData
     88PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').hasOwnProperty('get') is false
     89PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').hasOwnProperty('set') is false
     90PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').enumerable is false
     91PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').configurable is true
    8792PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').value is MessageChannel
    8893PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').hasOwnProperty('get') is false
  • trunk/LayoutTests/js/dom/global-constructors-attributes-shared-worker-expected.txt

    r156467 r166246  
    8080PASS [Worker] Object.getOwnPropertyDescriptor(global, 'IDBVersionChangeEvent').enumerable is false
    8181PASS [Worker] Object.getOwnPropertyDescriptor(global, 'IDBVersionChangeEvent').configurable is true
     82PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').value is ImageData
     83PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').hasOwnProperty('get') is false
     84PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').hasOwnProperty('set') is false
     85PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').enumerable is false
     86PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').configurable is true
    8287PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').value is MessageChannel
    8388PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').hasOwnProperty('get') is false
  • trunk/Source/WebCore/ChangeLog

    r166245 r166246  
     12014-03-25  Dirk Schulze  <krit@webkit.org>
     2
     3        Implement ImageData constructors and WebWorkers exposure
     4        https://bugs.webkit.org/show_bug.cgi?id=130668
     5
     6        Reviewed by Dean Jackson.
     7
     8        Add new constructors for ImageData.
     9
     10        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#pixel-manipulation
     11
     12        Test: fast/canvas/canvas-imageData.html
     13
     14        * html/ImageData.cpp:
     15        (WebCore::ImageData::create):
     16        * html/ImageData.h:
     17        * html/ImageData.idl:
     18
    1192014-03-25  Myles C. Maxfield  <mmaxfield@apple.com>
    220
  • trunk/Source/WebCore/html/ImageData.cpp

    r165676 r166246  
    11/*
    22 * Copyright (C) 2008 Apple Inc. All rights reserved.
     3 * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    3031#include "ImageData.h"
    3132
     33#include "ExceptionCode.h"
     34
    3235namespace WebCore {
     36
     37PassRefPtr<ImageData> ImageData::create(unsigned sw, unsigned sh, ExceptionCode& ec)
     38{
     39    if (!sw || !sh) {
     40        ec = INDEX_SIZE_ERR;
     41        return nullptr;
     42    }
     43
     44    Checked<int, RecordOverflow> dataSize = 4;
     45    dataSize *= sw;
     46    dataSize *= sh;
     47    if (dataSize.hasOverflowed()) {
     48        ec = TypeError;
     49        return nullptr;
     50    }
     51
     52    IntSize size(sw, sh);
     53    RefPtr<ImageData> data = adoptRef(new ImageData(size));
     54    data->data()->zeroFill();
     55    return data.release();
     56}
    3357
    3458PassRefPtr<ImageData> ImageData::create(const IntSize& size)
     
    5882}
    5983
     84PassRefPtr<ImageData> ImageData::create(PassRefPtr<Uint8ClampedArray> byteArray, unsigned sw, unsigned sh, ExceptionCode& ec)
     85{
     86    unsigned length = byteArray->length();
     87    if (!length || length % 4 != 0) {
     88        ec = INVALID_STATE_ERR;
     89        return nullptr;
     90    }
     91
     92    if (!sw) {
     93        ec = INDEX_SIZE_ERR;
     94        return nullptr;
     95    }
     96
     97    length /= 4;
     98    if (length % sw != 0) {
     99        ec = INVALID_STATE_ERR;
     100        return nullptr;
     101    }
     102
     103    unsigned height = length / sw;
     104    if (sh && sh != height) {
     105        ec = INDEX_SIZE_ERR;
     106        return nullptr;
     107    }
     108
     109    return create(IntSize(sw, height), byteArray);
     110}
     111
    60112ImageData::ImageData(const IntSize& size)
    61113    : m_size(size)
  • trunk/Source/WebCore/html/ImageData.h

    r165676 r166246  
    3737namespace WebCore {
    3838
     39typedef int ExceptionCode;
     40
    3941class ImageData : public RefCounted<ImageData> {
    4042public:
     43    static PassRefPtr<ImageData> create(unsigned sw, unsigned sh, ExceptionCode&);
    4144    static PassRefPtr<ImageData> create(const IntSize&);
    4245    static PassRefPtr<ImageData> create(const IntSize&, PassRefPtr<Uint8ClampedArray>);
     46    static PassRefPtr<ImageData> create(PassRefPtr<Uint8ClampedArray>, unsigned sw, unsigned sh, ExceptionCode&);
    4347
    4448    IntSize size() const { return m_size; }
  • trunk/Source/WebCore/html/ImageData.idl

    r165676 r166246  
    2828
    2929[
     30    GlobalContext=DOMWindow&WorkerGlobalScope,
    3031    CustomToJSObject,
     32    // FIXME: Without [Default=Undefined] CodeGeneratorJS can't generate JSImageData. But with
     33    // the extended attribute we accept a value of 0 for sh and don't throw.
     34    // https://bugs.webkit.org/show_bug.cgi?id=130667
     35    Constructor(Uint8ClampedArray data, unsigned long sw, [Default=Undefined] optional unsigned long sh),
     36    Constructor(unsigned long sw, unsigned long sh),
     37    ConstructorRaisesException,
    3138    ImplementationLacksVTable
    3239] interface ImageData {
Note: See TracChangeset for help on using the changeset viewer.