Title: [195904] trunk
Revision
195904
Author
[email protected]
Date
2016-01-30 12:10:18 -0800 (Sat, 30 Jan 2016)

Log Message

Move more 'constructor' properties to the prototype
https://bugs.webkit.org/show_bug.cgi?id=153667

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Rebaseline several W3C tests now that more checks are passing. A lot of
the 'constructor' attributes checks are still failing because the
attribute is not writable. This is being addressed via Bug 149412.

* web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt:
* web-platform-tests/dom/interfaces-expected.txt:
* web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt:
* web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt:
* web-platform-tests/html/dom/interfaces-expected.txt:

Source/WebCore:

Move more 'constructor' properties to the prototype. In particular, we
used to keep the 'constructor' on the instance for interfaces that have
an indexed / named property getter because our getOwnPropertySlot()
implementation used to be wrong for such interfaces.

However, getOwnPropertySlot() should be correct after r188590 so we
should now be able to move the 'constructor' up to the prototype for
these interfaces, as per the specification:
http://heycam.github.io/webidl/#interface-prototype-object

No new tests, already covered by existing tests.

* bindings/js/JSPluginElementFunctions.h:
(WebCore::pluginElementCustomGetOwnPropertySlot):
Add a null check for staticPropHashTable. It is now null because this
type no longer has any property on the instance now that 'constructor'
is on the prototype.

* bindings/scripts/CodeGeneratorJS.pm:
(ConstructorShouldBeOnInstance):

LayoutTests:

Rebaseline a couple of tests now that 'constructor' is on the prototype
for more interfaces.

* fast/dom/htmlcollection-getownpropertynames-expected.txt:
* storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (195903 => 195904)


--- trunk/LayoutTests/ChangeLog	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/ChangeLog	2016-01-30 20:10:18 UTC (rev 195904)
@@ -1,3 +1,16 @@
+2016-01-30  Chris Dumez  <[email protected]>
+
+        Move more 'constructor' properties to the prototype
+        https://bugs.webkit.org/show_bug.cgi?id=153667
+
+        Reviewed by Darin Adler.
+
+        Rebaseline a couple of tests now that 'constructor' is on the prototype
+        for more interfaces.
+
+        * fast/dom/htmlcollection-getownpropertynames-expected.txt:
+        * storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt:
+
 2016-01-30  Ryosuke Niwa  <[email protected]>
 
         TouchList should be retargeted

Modified: trunk/LayoutTests/fast/dom/htmlcollection-getownpropertynames-expected.txt (195903 => 195904)


--- trunk/LayoutTests/fast/dom/htmlcollection-getownpropertynames-expected.txt	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/fast/dom/htmlcollection-getownpropertynames-expected.txt	2016-01-30 20:10:18 UTC (rev 195904)
@@ -4,7 +4,7 @@
 
 
 * Own properties
-Actual:   ['0', '1', '2', '3', '4', '5', '6', '7', 'some-id', 'some-name', 'another-id', 'another-name', 'constructor', 'length']
+Actual:   ['0', '1', '2', '3', '4', '5', '6', '7', 'some-id', 'some-name', 'another-id', 'another-name', 'length']
 Expected: ['0', '1', '2', '3', '4', '5', '6', '7', 'some-id', 'some-name', 'another-id', 'another-name']
 
 * Enumerated properties

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (195903 => 195904)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2016-01-30 20:10:18 UTC (rev 195904)
@@ -1,3 +1,20 @@
+2016-01-30  Chris Dumez  <[email protected]>
+
+        Move more 'constructor' properties to the prototype
+        https://bugs.webkit.org/show_bug.cgi?id=153667
+
+        Reviewed by Darin Adler.
+
+        Rebaseline several W3C tests now that more checks are passing. A lot of
+        the 'constructor' attributes checks are still failing because the
+        attribute is not writable. This is being addressed via Bug 149412.
+
+        * web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt:
+        * web-platform-tests/dom/interfaces-expected.txt:
+        * web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt:
+        * web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt:
+        * web-platform-tests/html/dom/interfaces-expected.txt:
+
 2016-01-28  Chris Dumez  <[email protected]>
 
         Move attributes to the prototype for List types / and types with indexed/named property getters

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt (195903 => 195904)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt	2016-01-30 20:10:18 UTC (rev 195904)
@@ -1,5 +1,5 @@
 
-FAIL Object.getOwnPropertyNames on HTMLCollection assert_array_equals: lengths differ, expected 12 got 14
-FAIL Object.getOwnPropertyNames on HTMLCollection with non-HTML namespace assert_array_equals: lengths differ, expected 1 got 3
-FAIL Object.getOwnPropertyNames on HTMLCollection with expando object assert_array_equals: lengths differ, expected 2 got 4
+FAIL Object.getOwnPropertyNames on HTMLCollection assert_array_equals: lengths differ, expected 12 got 13
+FAIL Object.getOwnPropertyNames on HTMLCollection with non-HTML namespace assert_array_equals: lengths differ, expected 1 got 2
+FAIL Object.getOwnPropertyNames on HTMLCollection with expando object assert_array_equals: lengths differ, expected 2 got 3
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt (195903 => 195904)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt	2016-01-30 20:10:18 UTC (rev 195904)
@@ -121,7 +121,7 @@
 PASS NodeList interface object length 
 PASS NodeList interface object name 
 PASS NodeList interface: existence and properties of interface prototype object 
-FAIL NodeList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: NodeList.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL NodeList interface: existence and properties of interface prototype object's "constructor" property assert_true: NodeList.prototype.constructor is not writable expected true got false
 PASS NodeList interface: operation item(unsigned long) 
 FAIL NodeList interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 PASS NodeList must be primary interface of document.querySelectorAll("script") 
@@ -133,7 +133,7 @@
 PASS HTMLCollection interface object length 
 PASS HTMLCollection interface object name 
 PASS HTMLCollection interface: existence and properties of interface prototype object 
-FAIL HTMLCollection interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLCollection.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLCollection interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLCollection.prototype.constructor is not writable expected true got false
 FAIL HTMLCollection interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 FAIL HTMLCollection interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
 FAIL HTMLCollection interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
@@ -927,7 +927,7 @@
 PASS NamedNodeMap interface object length 
 PASS NamedNodeMap interface object name 
 PASS NamedNodeMap interface: existence and properties of interface prototype object 
-FAIL NamedNodeMap interface: existence and properties of interface prototype object's "constructor" property assert_own_property: NamedNodeMap.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL NamedNodeMap interface: existence and properties of interface prototype object's "constructor" property assert_true: NamedNodeMap.prototype.constructor is not writable expected true got false
 FAIL NamedNodeMap interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 FAIL NamedNodeMap interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
 FAIL NamedNodeMap interface: operation getNamedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
@@ -1550,7 +1550,7 @@
 PASS DOMTokenList interface object length 
 PASS DOMTokenList interface object name 
 PASS DOMTokenList interface: existence and properties of interface prototype object 
-FAIL DOMTokenList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: DOMTokenList.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL DOMTokenList interface: existence and properties of interface prototype object's "constructor" property assert_true: DOMTokenList.prototype.constructor is not writable expected true got false
 FAIL DOMTokenList interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 PASS DOMTokenList interface: operation item(unsigned long) 
 PASS DOMTokenList interface: operation contains(DOMString) 
@@ -1575,6 +1575,6 @@
 PASS DOMSettableTokenList interface object length 
 PASS DOMSettableTokenList interface object name 
 PASS DOMSettableTokenList interface: existence and properties of interface prototype object 
-FAIL DOMSettableTokenList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: DOMSettableTokenList.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL DOMSettableTokenList interface: existence and properties of interface prototype object's "constructor" property assert_true: DOMSettableTokenList.prototype.constructor is not writable expected true got false
 FAIL DOMSettableTokenList interface: attribute value assert_equals: getter must be Function expected "function" but got "undefined"
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt (195903 => 195904)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt	2016-01-30 20:10:18 UTC (rev 195904)
@@ -8,7 +8,7 @@
     }" did not throw
 PASS Should be able to set expando shadowing a proto prop (item) 
 PASS Should be able to set expando shadowing a proto prop (namedItem) 
-FAIL hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames assert_array_equals: lengths differ, expected 7 got 9
+FAIL hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames assert_array_equals: lengths differ, expected 7 got 8
 PASS HTML element with uppercase tagName never matches in HTML Documents 
 PASS Element in non-HTML namespace, no prefix, lowercase name 
 PASS Element in non-HTML namespace, no prefix, uppercase name 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt (195903 => 195904)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt	2016-01-30 20:10:18 UTC (rev 195904)
@@ -5,5 +5,5 @@
 PASS document.forms.item with string arg 
 PASS document.forms with empty string 
 FAIL document.forms iteration assert_array_equals: property 3, expected "item" but got "length"
-FAIL document.forms getOwnPropertyNames assert_array_equals: lengths differ, expected 5 got 7
+FAIL document.forms getOwnPropertyNames assert_array_equals: lengths differ, expected 5 got 6
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt (195903 => 195904)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt	2016-01-30 20:10:18 UTC (rev 195904)
@@ -755,7 +755,7 @@
 PASS HTMLAllCollection interface object length 
 PASS HTMLAllCollection interface object name 
 FAIL HTMLAllCollection interface: existence and properties of interface prototype object assert_equals: prototype of HTMLAllCollection.prototype is not HTMLCollection.prototype expected object "[object HTMLCollectionPrototype]" but got object "[object Object]"
-FAIL HTMLAllCollection interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLAllCollection.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLAllCollection interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLAllCollection.prototype.constructor is not writable expected true got false
 FAIL HTMLAllCollection interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
 FAIL HTMLAllCollection interface: operation item(DOMString) assert_equals: property has wrong .length expected 1 but got 0
 PASS HTMLAllCollection interface: operation namedItem(DOMString) 
@@ -776,7 +776,7 @@
 PASS HTMLFormControlsCollection interface object length 
 PASS HTMLFormControlsCollection interface object name 
 PASS HTMLFormControlsCollection interface: existence and properties of interface prototype object 
-FAIL HTMLFormControlsCollection interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLFormControlsCollection.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLFormControlsCollection interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLFormControlsCollection.prototype.constructor is not writable expected true got false
 FAIL HTMLFormControlsCollection interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
 FAIL HTMLFormControlsCollection must be primary interface of document.createElement("form").elements assert_equals: wrong typeof object expected "function" but got "object"
 FAIL Stringification of document.createElement("form").elements assert_equals: wrong typeof object expected "function" but got "object"
@@ -791,13 +791,13 @@
 PASS RadioNodeList interface object length 
 PASS RadioNodeList interface object name 
 PASS RadioNodeList interface: existence and properties of interface prototype object 
-FAIL RadioNodeList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: RadioNodeList.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL RadioNodeList interface: existence and properties of interface prototype object's "constructor" property assert_true: RadioNodeList.prototype.constructor is not writable expected true got false
 FAIL RadioNodeList interface: attribute value assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLOptionsCollection interface: existence and properties of interface object assert_equals: class string of HTMLOptionsCollection expected "[object Function]" but got "[object HTMLOptionsCollectionConstructor]"
 PASS HTMLOptionsCollection interface object length 
 PASS HTMLOptionsCollection interface object name 
 PASS HTMLOptionsCollection interface: existence and properties of interface prototype object 
-FAIL HTMLOptionsCollection interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLOptionsCollection.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLOptionsCollection interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLOptionsCollection.prototype.constructor is not writable expected true got false
 FAIL HTMLOptionsCollection interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 PASS HTMLOptionsCollection interface: operation add([object Object],[object Object],[object Object],[object Object]) 
 FAIL HTMLOptionsCollection interface: operation remove(long) assert_equals: property has wrong .length expected 1 but got 0
@@ -842,7 +842,7 @@
 PASS DOMStringMap interface object length 
 PASS DOMStringMap interface object name 
 PASS DOMStringMap interface: existence and properties of interface prototype object 
-FAIL DOMStringMap interface: existence and properties of interface prototype object's "constructor" property assert_own_property: DOMStringMap.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL DOMStringMap interface: existence and properties of interface prototype object's "constructor" property assert_true: DOMStringMap.prototype.constructor is not writable expected true got false
 PASS DOMStringMap must be primary interface of document.head.dataset 
 PASS Stringification of document.head.dataset 
 FAIL DOMElementMap interface: existence and properties of interface object assert_own_property: self does not have own property "DOMElementMap" expected property "DOMElementMap" missing
@@ -1794,7 +1794,7 @@
 PASS HTMLEmbedElement interface object length 
 PASS HTMLEmbedElement interface object name 
 PASS HTMLEmbedElement interface: existence and properties of interface prototype object 
-FAIL HTMLEmbedElement interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLEmbedElement.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLEmbedElement interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLEmbedElement.prototype.constructor is not writable expected true got false
 FAIL HTMLEmbedElement interface: attribute src assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLEmbedElement interface: attribute type assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLEmbedElement interface: attribute width assert_equals: getter must be Function expected "function" but got "undefined"
@@ -1815,7 +1815,7 @@
 PASS HTMLObjectElement interface object length 
 PASS HTMLObjectElement interface object name 
 PASS HTMLObjectElement interface: existence and properties of interface prototype object 
-FAIL HTMLObjectElement interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLObjectElement.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLObjectElement interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLObjectElement.prototype.constructor is not writable expected true got false
 FAIL HTMLObjectElement interface: attribute data assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLObjectElement interface: attribute type assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLObjectElement interface: attribute typeMustMatch assert_true: The prototype object must have a property "typeMustMatch" expected true got false
@@ -2308,7 +2308,7 @@
 PASS TextTrackList interface object length 
 PASS TextTrackList interface object name 
 FAIL TextTrackList interface: existence and properties of interface prototype object assert_equals: prototype of TextTrackList.prototype is not EventTarget.prototype expected object "[object EventTargetPrototype]" but got object "[object Object]"
-FAIL TextTrackList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: TextTrackList.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL TextTrackList interface: existence and properties of interface prototype object's "constructor" property assert_true: TextTrackList.prototype.constructor is not writable expected true got false
 FAIL TextTrackList interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 PASS TextTrackList interface: operation getTrackById(DOMString) 
 FAIL TextTrackList interface: attribute onchange assert_equals: getter must be Function expected "function" but got "undefined"
@@ -2377,7 +2377,7 @@
 PASS TextTrackCueList interface object length 
 PASS TextTrackCueList interface object name 
 PASS TextTrackCueList interface: existence and properties of interface prototype object 
-FAIL TextTrackCueList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: TextTrackCueList.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL TextTrackCueList interface: existence and properties of interface prototype object's "constructor" property assert_true: TextTrackCueList.prototype.constructor is not writable expected true got false
 FAIL TextTrackCueList interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 PASS TextTrackCueList interface: operation getCueById(DOMString) 
 PASS TextTrackCueList must be primary interface of document.createElement("video").addTextTrack("subtitles").cues 
@@ -2750,7 +2750,7 @@
 PASS HTMLFormElement interface object length 
 PASS HTMLFormElement interface object name 
 PASS HTMLFormElement interface: existence and properties of interface prototype object 
-FAIL HTMLFormElement interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLFormElement.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLFormElement interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLFormElement.prototype.constructor is not writable expected true got false
 FAIL HTMLFormElement interface: attribute acceptCharset assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLFormElement interface: attribute action assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLFormElement interface: attribute autocomplete assert_equals: getter must be Function expected "function" but got "undefined"
@@ -2979,7 +2979,7 @@
 PASS HTMLSelectElement interface object length 
 PASS HTMLSelectElement interface object name 
 PASS HTMLSelectElement interface: existence and properties of interface prototype object 
-FAIL HTMLSelectElement interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLSelectElement.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLSelectElement interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLSelectElement.prototype.constructor is not writable expected true got false
 FAIL HTMLSelectElement interface: attribute autocomplete assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLSelectElement interface: attribute autofocus assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLSelectElement interface: attribute disabled assert_equals: getter must be Function expected "function" but got "undefined"
@@ -4078,7 +4078,7 @@
 PASS History interface object length 
 PASS History interface object name 
 PASS History interface: existence and properties of interface prototype object 
-FAIL History interface: existence and properties of interface prototype object's "constructor" property assert_own_property: History.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL History interface: existence and properties of interface prototype object's "constructor" property assert_true: History.prototype.constructor is not writable expected true got false
 FAIL History interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 FAIL History interface: attribute state assert_true: The prototype object must have a property "state" expected true got false
 PASS History interface: operation go(long) 
@@ -4106,7 +4106,7 @@
 PASS Location interface object length 
 PASS Location interface object name 
 PASS Location interface: existence and properties of interface prototype object 
-FAIL Location interface: existence and properties of interface prototype object's "constructor" property assert_own_property: Location.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL Location interface: existence and properties of interface prototype object's "constructor" property assert_true: Location.prototype.constructor is not writable expected true got false
 PASS Location must be primary interface of window.location 
 PASS Stringification of window.location 
 FAIL Location interface: window.location must have own property "href" assert_equals: getter must be Function expected "function" but got "undefined"
@@ -4302,7 +4302,7 @@
 PASS PluginArray interface object length 
 PASS PluginArray interface object name 
 PASS PluginArray interface: existence and properties of interface prototype object 
-FAIL PluginArray interface: existence and properties of interface prototype object's "constructor" property assert_own_property: PluginArray.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL PluginArray interface: existence and properties of interface prototype object's "constructor" property assert_true: PluginArray.prototype.constructor is not writable expected true got false
 PASS PluginArray interface: operation refresh(boolean) 
 FAIL PluginArray interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 FAIL PluginArray interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
@@ -4311,7 +4311,7 @@
 PASS MimeTypeArray interface object length 
 PASS MimeTypeArray interface object name 
 PASS MimeTypeArray interface: existence and properties of interface prototype object 
-FAIL MimeTypeArray interface: existence and properties of interface prototype object's "constructor" property assert_own_property: MimeTypeArray.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL MimeTypeArray interface: existence and properties of interface prototype object's "constructor" property assert_true: MimeTypeArray.prototype.constructor is not writable expected true got false
 FAIL MimeTypeArray interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 FAIL MimeTypeArray interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
 FAIL MimeTypeArray interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
@@ -4319,7 +4319,7 @@
 PASS Plugin interface object length 
 PASS Plugin interface object name 
 PASS Plugin interface: existence and properties of interface prototype object 
-FAIL Plugin interface: existence and properties of interface prototype object's "constructor" property assert_own_property: Plugin.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL Plugin interface: existence and properties of interface prototype object's "constructor" property assert_true: Plugin.prototype.constructor is not writable expected true got false
 FAIL Plugin interface: attribute name assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL Plugin interface: attribute description assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL Plugin interface: attribute filename assert_equals: getter must be Function expected "function" but got "undefined"
@@ -4541,7 +4541,7 @@
 PASS Storage interface object length 
 PASS Storage interface object name 
 PASS Storage interface: existence and properties of interface prototype object 
-FAIL Storage interface: existence and properties of interface prototype object's "constructor" property assert_own_property: Storage.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL Storage interface: existence and properties of interface prototype object's "constructor" property assert_true: Storage.prototype.constructor is not writable expected true got false
 FAIL Storage interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
 PASS Storage interface: operation key(unsigned long) 
 PASS Storage interface: operation getItem(DOMString) 
@@ -4562,7 +4562,7 @@
 PASS HTMLAppletElement interface object length 
 PASS HTMLAppletElement interface object name 
 PASS HTMLAppletElement interface: existence and properties of interface prototype object 
-FAIL HTMLAppletElement interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLAppletElement.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLAppletElement interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLAppletElement.prototype.constructor is not writable expected true got false
 FAIL HTMLAppletElement interface: attribute align assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLAppletElement interface: attribute alt assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLAppletElement interface: attribute archive assert_equals: getter must be Function expected "function" but got "undefined"
@@ -4630,7 +4630,7 @@
 PASS HTMLFrameSetElement interface object length 
 PASS HTMLFrameSetElement interface object name 
 PASS HTMLFrameSetElement interface: existence and properties of interface prototype object 
-FAIL HTMLFrameSetElement interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLFrameSetElement.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLFrameSetElement interface: existence and properties of interface prototype object's "constructor" property assert_true: HTMLFrameSetElement.prototype.constructor is not writable expected true got false
 FAIL HTMLFrameSetElement interface: attribute cols assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLFrameSetElement interface: attribute rows assert_equals: getter must be Function expected "function" but got "undefined"
 FAIL HTMLFrameSetElement interface: attribute onafterprint assert_true: The prototype object must have a property "onafterprint" expected true got false

Modified: trunk/LayoutTests/storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt (195903 => 195904)


--- trunk/LayoutTests/storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/LayoutTests/storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt	2016-01-30 20:10:18 UTC (rev 195904)
@@ -1,10 +1,10 @@
-CONSOLE MESSAGE: line 12: constructor,length
-CONSOLE MESSAGE: line 15: 1,constructor,length
-CONSOLE MESSAGE: line 18: 1,constructor,length
-CONSOLE MESSAGE: line 21: 1,2,constructor,length
-CONSOLE MESSAGE: line 24: 1,constructor,length
-CONSOLE MESSAGE: line 27: 1,constructor,length,Test
-CONSOLE MESSAGE: line 30: 1,constructor,length
-CONSOLE MESSAGE: line 33: 1,constructor,length,Test1
-CONSOLE MESSAGE: line 36: 1,constructor,length,Test1
+CONSOLE MESSAGE: line 12: length
+CONSOLE MESSAGE: line 15: 1,length
+CONSOLE MESSAGE: line 18: 1,length
+CONSOLE MESSAGE: line 21: 1,2,length
+CONSOLE MESSAGE: line 24: 1,length
+CONSOLE MESSAGE: line 27: 1,length,Test
+CONSOLE MESSAGE: line 30: 1,length
+CONSOLE MESSAGE: line 33: 1,length,Test1
+CONSOLE MESSAGE: line 36: 1,length,Test1
 

Modified: trunk/Source/WebCore/ChangeLog (195903 => 195904)


--- trunk/Source/WebCore/ChangeLog	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/Source/WebCore/ChangeLog	2016-01-30 20:10:18 UTC (rev 195904)
@@ -1,3 +1,31 @@
+2016-01-30  Chris Dumez  <[email protected]>
+
+        Move more 'constructor' properties to the prototype
+        https://bugs.webkit.org/show_bug.cgi?id=153667
+
+        Reviewed by Darin Adler.
+
+        Move more 'constructor' properties to the prototype. In particular, we
+        used to keep the 'constructor' on the instance for interfaces that have
+        an indexed / named property getter because our getOwnPropertySlot()
+        implementation used to be wrong for such interfaces.
+
+        However, getOwnPropertySlot() should be correct after r188590 so we
+        should now be able to move the 'constructor' up to the prototype for
+        these interfaces, as per the specification:
+        http://heycam.github.io/webidl/#interface-prototype-object
+
+        No new tests, already covered by existing tests.
+
+        * bindings/js/JSPluginElementFunctions.h:
+        (WebCore::pluginElementCustomGetOwnPropertySlot):
+        Add a null check for staticPropHashTable. It is now null because this
+        type no longer has any property on the instance now that 'constructor'
+        is on the prototype.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (ConstructorShouldBeOnInstance):
+
 2016-01-29  Ada Chan  <[email protected]>
 
         Enable VIDEO_PRESENTATION_MODE only in Debug and Release builds on Mac

Modified: trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h (195903 => 195904)


--- trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h	2016-01-30 20:10:18 UTC (rev 195904)
@@ -46,7 +46,7 @@
     template <class Type, class Base> bool pluginElementCustomGetOwnPropertySlot(JSC::ExecState* exec, JSC::PropertyName propertyName, JSC::PropertySlot& slot, Type* element)
     {
         if (!element->globalObject()->world().isNormal()) {
-            if (JSC::getStaticValueSlot<Type, Base>(exec, *Type::info()->staticPropHashTable, element, propertyName, slot))
+            if (Type::info()->staticPropHashTable && JSC::getStaticValueSlot<Type, Base>(exec, *Type::info()->staticPropHashTable, element, propertyName, slot))
                 return true;
 
             JSC::JSValue proto = element->prototype();

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (195903 => 195904)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2016-01-30 20:06:53 UTC (rev 195903)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2016-01-30 20:10:18 UTC (rev 195904)
@@ -684,8 +684,9 @@
 sub ConstructorShouldBeOnInstance
 {
     my $interface = shift;
+
     return 1 if $interface->extendedAttributes->{"CheckSecurity"};
-    return HasComplexGetOwnProperty($interface);
+    return 0;
 }
 
 sub AttributeShouldBeOnInstanceForCompatibility
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to