Skip to content
This repository has been archived by the owner on Jul 18, 2018. It is now read-only.

Commit

Permalink
bindings: Remove support for WebIDL arrays.
Browse files Browse the repository at this point in the history
WebIDL arrays (e.g. "T[] bar") were removed from the spec back in 2015 with
whatwg/webidl#52. Previous users should use
sequences or FrozenArrays most of the time.

Now that all existing WebIDL array users have been fixed, we can finally
adapt to the change and remove support for arrays from //tools/idl_parser as
well as the bindings layer and related tests.

Bug: 740865
Change-Id: I9edfcb7b88963ea92836f7ed93945ad7edd48603
Reviewed-on: https://chromium-review.googlesource.com/616661
Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Kenichi Ishibashi <bashi@chromium.org>
Reviewed-by: Hitoshi Yoshida <peria@chromium.org>
Commit-Queue: Raphael Kubo da Costa (rakuco) <raphael.kubo.da.costa@intel.com>
Cr-Commit-Position: refs/heads/master@{#495108}
  • Loading branch information
rakuco authored and Commit Bot committed Aug 17, 2017
1 parent eb03356 commit 8794c1e
Show file tree
Hide file tree
Showing 30 changed files with 151 additions and 779 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
CONSOLE WARNING: line 230: 'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead.
CONSOLE WARNING: line 226: 'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead.
IDL dictionary unittest

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
Expand All @@ -22,7 +22,6 @@ PASS dict.stringSequenceOrNullMember is null
PASS dict.elementMember is undefined.
PASS dict.elementOrNullMember is null
PASS dict.enumMember is undefined.
PASS dict.enumArrayMember is undefined.
PASS dict.enumMemberWithDefault is "foo"
PASS dict.enumOrNullMember is null
PASS dict.objectMember is undefined.
Expand Down Expand Up @@ -73,7 +72,6 @@ PASS dict.elementOrNullMember is null
PASS dict.enumMember is "foo"
PASS dict.enumMemberWithDefault is "bar"
PASS dict.enumOrNullMember is "baz"
PASS dict.enumArrayMember is ["foo", "bar", "baz"]
PASS dict.objectMember is testObject1
PASS dict.objectOrNullMemberWithDefault is testObject2
PASS dict.doubleOrStringMember is 3.14
Expand Down Expand Up @@ -110,7 +108,6 @@ Test for setting invalid USVString value
PASS dict.usvStringMember is "_�_�_��_"
Test for setting invalid enum value
PASS dictionaryTest.set({enumMember: 'invalid'}) threw exception TypeError: Failed to execute 'set' on 'DictionaryTest': The provided value 'invalid' is not a valid enum value of type InternalEnum..
PASS dictionaryTest.set({enumArrayMember: ['foo', 'invalid', 'baz']}) threw exception TypeError: Failed to execute 'set' on 'DictionaryTest': The provided value 'invalid' is not a valid enum value of type InternalEnum..

Test for setting invalid object value
PASS dictionaryTest.set({objectMember: 42}) threw exception TypeError: Failed to execute 'set' on 'DictionaryTest': member objectMember is not an object..
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
shouldBeUndefined('dict.elementMember');
shouldBeNull('dict.elementOrNullMember');
shouldBeUndefined('dict.enumMember');
shouldBeUndefined('dict.enumArrayMember');
shouldBeEqualToString('dict.enumMemberWithDefault', 'foo');
shouldBeNull('dict.enumOrNullMember');
shouldBeUndefined('dict.objectMember');
Expand Down Expand Up @@ -87,7 +86,6 @@
enumMember: 'foo',
enumMemberWithDefault: 'bar',
enumOrNullMember: 'baz',
enumArrayMember: ['foo', 'bar', 'baz'],
objectMember: testObject1,
objectOrNullMemberWithDefault: testObject2,
doubleOrStringMember: 3.14,
Expand Down Expand Up @@ -116,7 +114,6 @@
shouldBeEqualToString('dict.enumMember', 'foo');
shouldBeEqualToString('dict.enumMemberWithDefault', 'bar');
shouldBeEqualToString('dict.enumOrNullMember', 'baz');
shouldBe('dict.enumArrayMember', '["foo", "bar", "baz"]');
shouldBe('dict.objectMember', 'testObject1');
shouldBe('dict.objectOrNullMemberWithDefault', 'testObject2');
shouldBe('dict.doubleOrStringMember', '3.14');
Expand Down Expand Up @@ -195,7 +192,6 @@

debug('Test for setting invalid enum value');
shouldThrow("dictionaryTest.set({enumMember: 'invalid'})");
shouldThrow("dictionaryTest.set({enumArrayMember: ['foo', 'invalid', 'baz']})");
debug('');

debug('Test for setting invalid object value');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE


Tests for attributes
PASS unionTypesTest.doubleOrStringOrStringArrayAttribute is 0
PASS unionTypesTest.doubleOrStringOrStringArrayAttribute is 3.14
PASS unionTypesTest.doubleOrStringOrStringArrayAttribute is "foo"
PASS unionTypesTest.doubleOrStringOrStringArrayAttribute is "undefined"
PASS unionTypesTest.doubleOrStringOrStringArrayAttribute is "null"
PASS unionTypesTest.doubleOrStringOrStringArrayAttribute is "[object Object]"
PASS JSON.stringify(unionTypesTest.doubleOrStringOrStringArrayAttribute) is "[]"
PASS JSON.stringify(unionTypesTest.doubleOrStringOrStringArrayAttribute) is "[\"a\",\"3.14\"]"
PASS unionTypesTest.doubleOrStringOrStringSequenceAttribute is 0
PASS unionTypesTest.doubleOrStringOrStringSequenceAttribute is 3.14
PASS unionTypesTest.doubleOrStringOrStringSequenceAttribute is "foo"
PASS unionTypesTest.doubleOrStringOrStringSequenceAttribute is "undefined"
PASS unionTypesTest.doubleOrStringOrStringSequenceAttribute is "null"
PASS unionTypesTest.doubleOrStringOrStringSequenceAttribute is "[object Object]"
PASS JSON.stringify(unionTypesTest.doubleOrStringOrStringSequenceAttribute) is "[]"
PASS JSON.stringify(unionTypesTest.doubleOrStringOrStringSequenceAttribute) is "[\"a\",\"3.14\"]"

Tests for method arguments
PASS unionTypesTest.doubleOrStringArg(3.14) is "double is passed: 3.14"
Expand All @@ -30,14 +30,6 @@ PASS unionTypesTest.doubleOrInternalEnumArg(null) threw exception TypeError: Fai
PASS unionTypesTest.doubleOrInternalEnumArg({}) threw exception TypeError: Failed to execute 'doubleOrInternalEnumArg' on 'UnionTypesTest': The provided value '[object Object]' is not a valid enum value of type InternalEnum..
PASS unionTypesTest.doubleOrInternalEnumArg([]) threw exception TypeError: Failed to execute 'doubleOrInternalEnumArg' on 'UnionTypesTest': The provided value '' is not a valid enum value of type InternalEnum..

PASS unionTypesTest.doubleOrStringArrayArg([]) is ""
PASS unionTypesTest.doubleOrStringArrayArg([3.14, "foo"]) is "double: 3.14, string: foo"
PASS unionTypesTest.doubleOrStringArrayArg([1, "foo", "bar", 2]) is "double: 1, string: foo, string: bar, double: 2"
PASS unionTypesTest.doubleOrStringArrayArg([null, undefined, {}, []]) is "string: null, string: undefined, string: [object Object], string: "
PASS unionTypesTest.doubleOrStringArrayArg(null) threw exception TypeError: Failed to execute 'doubleOrStringArrayArg' on 'UnionTypesTest': The provided value cannot be converted to a sequence..
PASS unionTypesTest.doubleOrStringArrayArg(undefined) threw exception TypeError: Failed to execute 'doubleOrStringArrayArg' on 'UnionTypesTest': The provided value cannot be converted to a sequence..
PASS unionTypesTest.doubleOrStringArrayArg({}) threw exception TypeError: Failed to execute 'doubleOrStringArrayArg' on 'UnionTypesTest': Iterator getter is not callable..

PASS unionTypesTest.doubleOrStringSequenceArg([]) is ""
PASS unionTypesTest.doubleOrStringSequenceArg([3.14, "foo"]) is "double: 3.14, string: foo"
PASS unionTypesTest.doubleOrStringSequenceArg([1, "foo", "bar", 2]) is "double: 1, string: foo, string: bar, double: 2"
Expand Down Expand Up @@ -73,16 +65,7 @@ PASS unionTypesTest.nodeListOrElementArg(null) threw exception TypeError: Failed
PASS unionTypesTest.nodeListOrElementArg(nodeList) is "nodelist is passed"
PASS unionTypesTest.nodeListOrElementArg(element) is "element is passed"

Tests for method arguments with array/sequence members
PASS unionTypesTest.doubleOrStringOrStringArrayArg() threw exception TypeError: Failed to execute 'doubleOrStringOrStringArrayArg' on 'UnionTypesTest': 1 argument required, but only 0 present..
PASS unionTypesTest.doubleOrStringOrStringArrayArg("abc") is "string: abc"
PASS unionTypesTest.doubleOrStringOrStringArrayArg(3.14) is "double: 3.14"
PASS unionTypesTest.doubleOrStringOrStringArrayArg(true) is "string: true"
PASS unionTypesTest.doubleOrStringOrStringArrayArg(null) is "string: null"
PASS unionTypesTest.doubleOrStringOrStringArrayArg(undefined) is "string: undefined"
PASS unionTypesTest.doubleOrStringOrStringArrayArg([]) is "array: []"
PASS unionTypesTest.doubleOrStringOrStringArrayArg(["a", 3.14]) is "array: [a, 3.14]"
PASS unionTypesTest.doubleOrStringOrStringArrayArg(new Array(3)) is "array: [undefined, undefined, undefined]"
Tests for method arguments with sequence members
PASS unionTypesTest.doubleOrStringOrStringSequenceArg() threw exception TypeError: Failed to execute 'doubleOrStringOrStringSequenceArg' on 'UnionTypesTest': 1 argument required, but only 0 present..
PASS unionTypesTest.doubleOrStringOrStringSequenceArg("abc") is "string: abc"
PASS unionTypesTest.doubleOrStringOrStringSequenceArg(3.14) is "double: 3.14"
Expand All @@ -93,16 +76,7 @@ PASS unionTypesTest.doubleOrStringOrStringSequenceArg([]) is "sequence: []"
PASS unionTypesTest.doubleOrStringOrStringSequenceArg(["a", 3.14]) is "sequence: [a, 3.14]"
PASS unionTypesTest.doubleOrStringOrStringSequenceArg(new Array(3)) is "sequence: [undefined, undefined, undefined]"

Tests for nullable method arguments with array/sequence members
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg() threw exception TypeError: Failed to execute 'doubleOrStringOrStringArrayNullableArg' on 'UnionTypesTest': 1 argument required, but only 0 present..
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg("abc") is "string: abc"
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg(3.14) is "double: 3.14"
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg(true) is "string: true"
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg(null) is "null"
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg(undefined) is "null"
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg([]) is "array: []"
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg(["a", 3.14]) is "array: [a, 3.14]"
PASS unionTypesTest.doubleOrStringOrStringArrayNullableArg(new Array(3)) is "array: [undefined, undefined, undefined]"
Tests for nullable method arguments with sequence members
PASS unionTypesTest.doubleOrStringOrStringSequenceNullableArg() threw exception TypeError: Failed to execute 'doubleOrStringOrStringSequenceNullableArg' on 'UnionTypesTest': 1 argument required, but only 0 present..
PASS unionTypesTest.doubleOrStringOrStringSequenceNullableArg("abc") is "string: abc"
PASS unionTypesTest.doubleOrStringOrStringSequenceNullableArg(3.14) is "double: 3.14"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,21 @@
var unionTypesTest = internals.unionTypesTest();

debug('Tests for attributes');
shouldBe('unionTypesTest.doubleOrStringOrStringArrayAttribute', '0');
unionTypesTest.doubleOrStringOrStringArrayAttribute = 3.14;
shouldBe('unionTypesTest.doubleOrStringOrStringArrayAttribute', '3.14');
unionTypesTest.doubleOrStringOrStringArrayAttribute = "foo";
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayAttribute', 'foo');
unionTypesTest.doubleOrStringOrStringArrayAttribute = undefined;
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayAttribute', 'undefined');
unionTypesTest.doubleOrStringOrStringArrayAttribute = null;
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayAttribute', 'null');
unionTypesTest.doubleOrStringOrStringArrayAttribute = {};
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayAttribute', '[object Object]');
unionTypesTest.doubleOrStringOrStringArrayAttribute = [];
shouldBeEqualToString('JSON.stringify(unionTypesTest.doubleOrStringOrStringArrayAttribute)', '[]');
unionTypesTest.doubleOrStringOrStringArrayAttribute = ['a', 3.14];
shouldBeEqualToString('JSON.stringify(unionTypesTest.doubleOrStringOrStringArrayAttribute)', '["a","3.14"]');
shouldBe('unionTypesTest.doubleOrStringOrStringSequenceAttribute', '0');
unionTypesTest.doubleOrStringOrStringSequenceAttribute = 3.14;
shouldBe('unionTypesTest.doubleOrStringOrStringSequenceAttribute', '3.14');
unionTypesTest.doubleOrStringOrStringSequenceAttribute = "foo";
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceAttribute', 'foo');
unionTypesTest.doubleOrStringOrStringSequenceAttribute = undefined;
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceAttribute', 'undefined');
unionTypesTest.doubleOrStringOrStringSequenceAttribute = null;
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceAttribute', 'null');
unionTypesTest.doubleOrStringOrStringSequenceAttribute = {};
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceAttribute', '[object Object]');
unionTypesTest.doubleOrStringOrStringSequenceAttribute = [];
shouldBeEqualToString('JSON.stringify(unionTypesTest.doubleOrStringOrStringSequenceAttribute)', '[]');
unionTypesTest.doubleOrStringOrStringSequenceAttribute = ['a', 3.14];
shouldBeEqualToString('JSON.stringify(unionTypesTest.doubleOrStringOrStringSequenceAttribute)', '["a","3.14"]');
debug('');

debug('Tests for method arguments');
Expand Down Expand Up @@ -55,15 +55,6 @@
shouldThrow('unionTypesTest.doubleOrInternalEnumArg([])');
debug('');

shouldBeEqualToString('unionTypesTest.doubleOrStringArrayArg([])', '');
shouldBeEqualToString('unionTypesTest.doubleOrStringArrayArg([3.14, "foo"])', 'double: 3.14, string: foo');
shouldBeEqualToString('unionTypesTest.doubleOrStringArrayArg([1, "foo", "bar", 2])', 'double: 1, string: foo, string: bar, double: 2');
shouldBeEqualToString('unionTypesTest.doubleOrStringArrayArg([null, undefined, {}, []])', 'string: null, string: undefined, string: [object Object], string: ');
shouldThrow('unionTypesTest.doubleOrStringArrayArg(null)');
shouldThrow('unionTypesTest.doubleOrStringArrayArg(undefined)');
shouldThrow('unionTypesTest.doubleOrStringArrayArg({})');
debug('');

shouldBeEqualToString('unionTypesTest.doubleOrStringSequenceArg([])', '');
shouldBeEqualToString('unionTypesTest.doubleOrStringSequenceArg([3.14, "foo"])', 'double: 3.14, string: foo');
shouldBeEqualToString('unionTypesTest.doubleOrStringSequenceArg([1, "foo", "bar", 2])', 'double: 1, string: foo, string: bar, double: 2');
Expand Down Expand Up @@ -103,17 +94,7 @@
shouldBeEqualToString('unionTypesTest.nodeListOrElementArg(element)', 'element is passed');
debug('');

debug('Tests for method arguments with array/sequence members');
shouldThrow('unionTypesTest.doubleOrStringOrStringArrayArg()');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayArg("abc")', 'string: abc');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayArg(3.14)', 'double: 3.14');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayArg(true)', 'string: true');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayArg(null)', 'string: null');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayArg(undefined)', 'string: undefined');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayArg([])', 'array: []');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayArg(["a", 3.14])', 'array: [a, 3.14]');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayArg(new Array(3))', 'array: [undefined, undefined, undefined]');

debug('Tests for method arguments with sequence members');
shouldThrow('unionTypesTest.doubleOrStringOrStringSequenceArg()');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg("abc")', 'string: abc');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg(3.14)', 'double: 3.14');
Expand All @@ -125,17 +106,7 @@
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg(new Array(3))', 'sequence: [undefined, undefined, undefined]');
debug('');

debug('Tests for nullable method arguments with array/sequence members');
shouldThrow('unionTypesTest.doubleOrStringOrStringArrayNullableArg()');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayNullableArg("abc")', 'string: abc');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayNullableArg(3.14)', 'double: 3.14');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayNullableArg(true)', 'string: true');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayNullableArg(null)', 'null');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayNullableArg(undefined)', 'null');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayNullableArg([])', 'array: []');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayNullableArg(["a", 3.14])', 'array: [a, 3.14]');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringArrayNullableArg(new Array(3))', 'array: [undefined, undefined, undefined]');

debug('Tests for nullable method arguments with sequence members');
shouldThrow('unionTypesTest.doubleOrStringOrStringSequenceNullableArg()');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg("abc")', 'string: abc');
shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg(3.14)', 'double: 3.14');
Expand Down
2 changes: 0 additions & 2 deletions third_party/WebKit/Source/bindings/core/v8/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ bindings_core_generated_union_type_files = [
"$bindings_core_v8_output_dir/DoubleOrScrollTimelineAutoKeyword.h",
"$bindings_core_v8_output_dir/DoubleOrString.cpp",
"$bindings_core_v8_output_dir/DoubleOrString.h",
"$bindings_core_v8_output_dir/DoubleOrStringOrStringArray.cpp",
"$bindings_core_v8_output_dir/DoubleOrStringOrStringArray.h",
"$bindings_core_v8_output_dir/DoubleOrStringOrStringSequence.cpp",
"$bindings_core_v8_output_dir/DoubleOrStringOrStringSequence.h",
"$bindings_core_v8_output_dir/EventListenerOptionsOrBoolean.cpp",
Expand Down
15 changes: 2 additions & 13 deletions third_party/WebKit/Source/bindings/scripts/idl_definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@

import abc

from idl_types import IdlArrayType
from idl_types import IdlFrozenArrayType
from idl_types import IdlNullableType
from idl_types import IdlRecordType
Expand Down Expand Up @@ -932,24 +931,14 @@ def clear_constructor_attributes(extended_attributes):

def type_node_to_type(node):
children = node.GetChildren()
if len(children) < 1 or len(children) > 2:
raise ValueError('Type node expects 1 or 2 children (type + optional array []), got %s (multi-dimensional arrays are not supported).' % len(children))
if len(children) != 1:
raise ValueError('Type node expects 1 child, got %d.' % len(children))

base_type = type_node_inner_to_type(children[0])

if node.GetProperty('NULLABLE'):
base_type = IdlNullableType(base_type)

if len(children) == 2:
array_node = children[1]
array_node_class = array_node.GetClass()
if array_node_class != 'Array':
raise ValueError('Expected Array node as TypeSuffix, got %s node.' % array_node_class)
array_type = IdlArrayType(base_type)
if array_node.GetProperty('NULLABLE'):
return IdlNullableType(array_type)
return array_type

return base_type


Expand Down
23 changes: 1 addition & 22 deletions third_party/WebKit/Source/bindings/scripts/idl_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
IdlType
IdlUnionType
IdlArrayOrSequenceType
IdlArrayType
IdlSequenceType
IdlFrozenArrayType
IdlNullableType
Expand Down Expand Up @@ -391,7 +390,7 @@ def idl_types(self):


################################################################################
# IdlArrayOrSequenceType, IdlArrayType, IdlSequenceType, IdlFrozenArrayType
# IdlArrayOrSequenceType, IdlSequenceType, IdlFrozenArrayType
################################################################################

# TODO(bashi): Rename this like "IdlArrayTypeBase" or something.
Expand All @@ -418,10 +417,6 @@ def resolve_typedefs(self, typedefs):
def is_array_or_sequence_type(self):
return True

@property
def is_array_type(self):
return False

@property
def is_sequence_type(self):
return False
Expand All @@ -444,22 +439,6 @@ def idl_types(self):
yield idl_type


class IdlArrayType(IdlArrayOrSequenceType):
def __init__(self, element_type):
super(IdlArrayType, self).__init__(element_type)

def __str__(self):
return '%s[]' % self.element_type

@property
def name(self):
return self.element_type.name + 'Array'

@property
def is_array_type(self):
return True


class IdlSequenceType(IdlArrayOrSequenceType):
def __init__(self, element_type):
super(IdlSequenceType, self).__init__(element_type)
Expand Down

0 comments on commit 8794c1e

Please sign in to comment.