[CherryPick] Expose ArrayBufferView constructor on DOMWindow
authorkbr@google.com <kbr@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 Dec 2012 19:38:28 +0000 (19:38 +0000)
committerYongGeol Jung <yg48.jung@samsung.com>
Wed, 17 Apr 2013 05:01:46 +0000 (14:01 +0900)
[Title] [CherryPick] Expose ArrayBufferView constructor on DOMWindow
[Issue#] TWEB-1128
[Problem] ArrayBufferView does not have [NotInterfaceObject] extended attribute, this attribute not defined.
[Cause] ArrayBufferView constructor was not exposed.
[Solution] Expose ArrayBufferView constructor.

Expose ArrayBufferView constructor on DOMWindow
https://bugs.webkit.org/show_bug.cgi?id=105605

Reviewed by Sam Weinig.

Source/WebCore:

Update IDL to track recent spec change exposing ArrayBufferView
constructor on DOMWindow for instanceof checks. There are no
constructors exposed in the Web IDL, however, so calling it via
operator new throws TypeError.

Test (updated): fast/canvas/webgl/array-unit-tests.html

* html/canvas/ArrayBufferView.idl:
    Removed OmitConstructor attribute.
* page/DOMWindow.idl:
    Exposed ArrayBufferView constructor function attribute.

LayoutTests:

Updated test from Khronos repository.

* fast/canvas/webgl/array-unit-tests-expected.txt:
* fast/canvas/webgl/array-unit-tests.html:

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

Conflicts:

LayoutTests/ChangeLog
Source/WebCore/ChangeLog
Source/WebCore/html/canvas/ArrayBufferView.idl
Source/WebCore/page/DOMWindow.idl

Change-Id: I8a0683faf445baeecbf969cdb5574b32673ba755

LayoutTests/fast/canvas/webgl/array-unit-tests-expected.txt
LayoutTests/fast/canvas/webgl/array-unit-tests.html
Source/WebCore/html/canvas/ArrayBufferView.idl
Source/WebCore/page/DOMWindow.idl

index d3db9b1..304176f 100644 (file)
@@ -2,6 +2,21 @@ Verifies the functionality of the new array-like objects in the TypedArray spec
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
+PASS testSlice
+test inheritance hierarchy of typed array views
+PASS ArrayBufferView does not have [NoInterfaceObject] extended attribute and should be defined
+PASS new Int8Array(1) instanceof ArrayBufferView is true
+PASS new Uint8Array(1) instanceof ArrayBufferView is true
+PASS new Uint8ClampedArray(1) instanceof ArrayBufferView is true
+PASS new Int16Array(1) instanceof ArrayBufferView is true
+PASS new Uint16Array(1) instanceof ArrayBufferView is true
+PASS new Int32Array(1) instanceof ArrayBufferView is true
+PASS new Uint32Array(1) instanceof ArrayBufferView is true
+PASS new Float32Array(1) instanceof ArrayBufferView is true
+PASS new Float64Array(1) instanceof ArrayBufferView is true
+PASS new DataView(new ArrayBuffer(8)) instanceof ArrayBufferView is true
+PASS new ArrayBufferView() threw TypeError
+PASS new Uint8ClampedArray(1) instanceof Uint8Array is true
 PASS test Float32Array SetAndGetPos10ToNeg10
 PASS test Float32Array ConstructWithArrayOfSignedValues
 PASS test Float32Array ConstructWithTypedArrayOfSignedValues
index df8fd0e..86d76d0 100644 (file)
@@ -70,6 +70,7 @@ function testSlice() {
   }
 
   try {
+    running('testSlice');
     var buffer = new ArrayBuffer(32);
     var array = new Int8Array(buffer);
     for (var i = 0; i < 32; ++i)
@@ -102,6 +103,7 @@ function testSlice() {
     test("buffer.slice(-20, -8)", 12, 12);
     test("buffer.slice(-40, 16)", 0, 16);
     test("buffer.slice(-40, 40)", 0, 32);
+    pass();
   } catch (e) {
     fail(e);
   }
@@ -218,11 +220,11 @@ function testIntegralArrayTruncationBehavior(type, name, unsigned) {
   var expectedResults;
 
   if (unsigned) {
-    sourceData = [0.6, 10.6];
+    sourceData = [0.6, 10.6, 0.2, 10.2, 10.5, 11.5];
     if (type === Uint8ClampedArray) {
-      expectedResults = [1, 11];
+      expectedResults = [1, 11, 0, 10, 10, 12];
     } else {
-      expectedResults = [0, 10];
+      expectedResults = [0, 10, 0, 10, 10, 11];
     }
   } else {
     sourceData = [0.6, 10.6, -0.6, -10.6];
@@ -552,6 +554,22 @@ function shouldThrowIndexSizeErr(func, text) {
     }
 }
 
+function shouldThrowTypeError(func, text) {
+    var ok = false;
+    try {
+        func();
+    } catch (e) {
+        if (e instanceof TypeError) {
+            ok = true;
+        }
+    }
+    if (ok) {
+        testPassed(text + " threw TypeError");
+    } else {
+        testFailed(text + " should throw TypeError");
+    }
+}
+
 function testConstructionWithOutOfRangeValues(type, name) {
     shouldThrowIndexSizeErr(function() {
         var buffer = new ArrayBuffer(4);
@@ -901,6 +919,34 @@ function testNaNConversion(type, name) {
   }
 }
 
+function testInheritanceHierarchy() {
+  debug('test inheritance hierarchy of typed array views');
+
+  try {
+    var foo = ArrayBufferView;
+    testPassed('ArrayBufferView does not have [NoInterfaceObject] extended attribute and should be defined');
+
+    shouldBe('new Int8Array(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new Uint8Array(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new Uint8ClampedArray(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new Int16Array(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new Uint16Array(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new Int32Array(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new Uint32Array(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new Float32Array(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new Float64Array(1) instanceof ArrayBufferView', 'true');
+    shouldBe('new DataView(new ArrayBuffer(8)) instanceof ArrayBufferView', 'true');
+
+    shouldThrowTypeError(function() { new ArrayBufferView() }, "new ArrayBufferView()");
+  } catch (e) {
+    testFailed('ArrayBufferView does not have [NoInterfaceObject] extended attribute but was not defined');
+  }
+
+  // There is currently only one kind of view that inherits from another
+  shouldBe('new Uint8ClampedArray(1) instanceof Uint8Array', 'true');
+}
+
+
 //
 // Test driver
 //
@@ -909,6 +955,7 @@ function runTests() {
   allPassed = true;
 
   testSlice();
+  testInheritanceHierarchy();
 
   // The "name" attribute is a concession to browsers which don't
   // implement the "name" property on function objects
index 0e934e6..724cec9 100644 (file)
@@ -26,8 +26,7 @@
 module html {
     interface [
         CustomToJSObject,
-        JSNoStaticTables,
-        OmitConstructor
+        JSNoStaticTables
     ] ArrayBufferView {
         readonly attribute ArrayBuffer buffer;
         readonly attribute unsigned long byteOffset;
index ca003db..b03444c 100644 (file)
@@ -516,6 +516,7 @@ module window {
         attribute DOMStringMapConstructor DOMStringMap;
 
         attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator
+        attribute ArrayBufferViewConstructor ArrayBufferView;
         attribute Int8ArrayConstructor Int8Array; // Usable with new operator
         attribute Uint8ArrayConstructor Uint8Array; // Usable with new operator
         attribute Uint8ClampedArrayConstructor Uint8ClampedArray; // Usable with new operator