Title: [271092] trunk
Revision
271092
Author
[email protected]
Date
2020-12-26 12:40:28 -0800 (Sat, 26 Dec 2020)

Log Message

[WebIDL] Remove [CustomToStringName] and Location-specific extended attributes
https://bugs.webkit.org/show_bug.cgi?id=219276

Reviewed by Sam Weinig.

LayoutTests/imported/w3c:

* web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf-expected.txt: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf.html: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf-expected.txt: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf.html: Added.

Source/WebCore:

This patch:

a) Removes [CustomToStringName] and 3 related overrides, whose purpose was to ensure
   that Object.prototype.toString() returns "[object Object]" for cross-realm Location /
   WindowProxy objects, which is already accomplished via own unforgeable @@toStringTag
   property [1], making this change unobservable.

b) Inlines putCommon() to avoid weird true => false returns and save an extra identifier
   creation / check in putByIndex(). This is also unobservable.

c) Removes "toString" and "valueOf" special-casing from JSLocation::defineOwnProperty(),
   which failed silently instead of throwing a TypeError. Since these are own unforgeable
   properties of Location [2], ordinary [[DefineOwnProperty]] prevents their redefinition.

d) Removes [CustomDefineOwnPropertyOnPrototype], [CustomPutOnPrototype], and corresponding
   overrides, whose purpose was to prevent definition of "toString" and "valueOf" properties
   on Location.prototype. Since these are own unforgeable properties of Location instances [2],
   the limitation doesn't make sense. Location.prototype is an ordinary object per spec.

Both c) and d) align WebKit with the spec, Blink, and Gecko.

[1]: https://html.spec.whatwg.org/multipage/browsers.html#crossoriginpropertyfallback-(-p-)
[2]: https://html.spec.whatwg.org/multipage/history.html#the-location-interface (step 3)

Tests: imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf.html
       imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf.html

* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::toStringName): Deleted.
* bindings/js/JSLocationCustom.cpp:
(WebCore::JSLocation::put):
(WebCore::JSLocation::putByIndex):
(WebCore::JSLocation::defineOwnProperty):
(WebCore::putCommon): Deleted.
(WebCore::JSLocation::toStringName): Deleted.
(WebCore::JSLocationPrototype::put): Deleted.
(WebCore::JSLocationPrototype::defineOwnProperty): Deleted.
* bindings/js/JSRemoteDOMWindowCustom.cpp:
(WebCore::JSRemoteDOMWindow::toStringName): Deleted.
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader):
(GeneratePrototypeDeclaration):
(HeaderNeedsPrototypeDeclaration):
* bindings/scripts/IDLAttributes.json:
* page/DOMWindow.idl:
* page/Location.idl:
* page/RemoteDOMWindow.idl:

LayoutTests:

* fast/dom/Window/Location/location-override-toString-using-defineGetter-expected.txt:
* fast/dom/Window/Location/location-override-toString-using-defineGetter.html:
* fast/dom/Window/Location/location-override-valueOf-using-defineGetter-expected.txt:
* fast/dom/Window/Location/location-override-valueOf-using-defineGetter.html:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (271091 => 271092)


--- trunk/LayoutTests/ChangeLog	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/LayoutTests/ChangeLog	2020-12-26 20:40:28 UTC (rev 271092)
@@ -1,3 +1,15 @@
+2020-12-26  Alexey Shvayka  <[email protected]>
+
+        [WebIDL] Remove [CustomToStringName] and Location-specific extended attributes
+        https://bugs.webkit.org/show_bug.cgi?id=219276
+
+        Reviewed by Sam Weinig.
+
+        * fast/dom/Window/Location/location-override-toString-using-defineGetter-expected.txt:
+        * fast/dom/Window/Location/location-override-toString-using-defineGetter.html:
+        * fast/dom/Window/Location/location-override-valueOf-using-defineGetter-expected.txt:
+        * fast/dom/Window/Location/location-override-valueOf-using-defineGetter.html:
+
 2020-12-26  Simon Fraser  <[email protected]>
 
         Fix scrolling issues when scrolling on only one axis is enabled

Modified: trunk/LayoutTests/fast/dom/Window/Location/location-override-toString-using-defineGetter-expected.txt (271091 => 271092)


--- trunk/LayoutTests/fast/dom/Window/Location/location-override-toString-using-defineGetter-expected.txt	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/LayoutTests/fast/dom/Window/Location/location-override-toString-using-defineGetter-expected.txt	2020-12-26 20:40:28 UTC (rev 271092)
@@ -1,4 +1,4 @@
-PASS result is correctValue
+PASS location.__defineGetter__('toString', getter) threw exception TypeError: Attempting to change configurable attribute of unconfigurable property..
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/dom/Window/Location/location-override-toString-using-defineGetter.html (271091 => 271092)


--- trunk/LayoutTests/fast/dom/Window/Location/location-override-toString-using-defineGetter.html	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/LayoutTests/fast/dom/Window/Location/location-override-toString-using-defineGetter.html	2020-12-26 20:40:28 UTC (rev 271092)
@@ -1,17 +1,11 @@
 <html>
 <head>
     <script src=""
-    <script src=""
 </head>
 <body>
 <script>
-    window.location.__defineGetter__("toString", function () {
-        return function() { return "haxored"; }
-    });
-
-    var result = normalizeURL(String(window.location));
-    var correctValue = normalizeURL(document.URL);
-    shouldBe("result", "correctValue");
+    function getter() { throw new Error("[[Get]] should be unreachable!"); }
+    shouldThrowErrorName("location.__defineGetter__('toString', getter)", "TypeError");
 </script>
 <script src=""
 </body>

Modified: trunk/LayoutTests/fast/dom/Window/Location/location-override-valueOf-using-defineGetter-expected.txt (271091 => 271092)


--- trunk/LayoutTests/fast/dom/Window/Location/location-override-valueOf-using-defineGetter-expected.txt	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/LayoutTests/fast/dom/Window/Location/location-override-valueOf-using-defineGetter-expected.txt	2020-12-26 20:40:28 UTC (rev 271092)
@@ -1,4 +1,4 @@
-PASS result is correctValue
+PASS location.__defineGetter__('valueOf', getter) threw exception TypeError: Attempting to change configurable attribute of unconfigurable property..
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/dom/Window/Location/location-override-valueOf-using-defineGetter.html (271091 => 271092)


--- trunk/LayoutTests/fast/dom/Window/Location/location-override-valueOf-using-defineGetter.html	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/LayoutTests/fast/dom/Window/Location/location-override-valueOf-using-defineGetter.html	2020-12-26 20:40:28 UTC (rev 271092)
@@ -1,17 +1,11 @@
 <html>
 <head>
     <script src=""
-    <script src=""
 </head>
 <body>
 <script>
-    window.location.__defineGetter__("valueOf", function () {
-        return function() { return "haxored"; }
-    });
-
-    var result = normalizeURL(String(window.location));
-    var correctValue = normalizeURL(document.URL);
-    shouldBe("result", "correctValue");
+    function getter() { throw new Error("[[Get]] should be unreachable!"); }
+    shouldThrowErrorName("location.__defineGetter__('valueOf', getter)", "TypeError");
 </script>
 <script src=""
 </body>

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (271091 => 271092)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2020-12-26 20:40:28 UTC (rev 271092)
@@ -1,3 +1,15 @@
+2020-12-26  Alexey Shvayka  <[email protected]>
+
+        [WebIDL] Remove [CustomToStringName] and Location-specific extended attributes
+        https://bugs.webkit.org/show_bug.cgi?id=219276
+
+        Reviewed by Sam Weinig.
+
+        * web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf-expected.txt: Added.
+        * web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf.html: Added.
+        * web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf-expected.txt: Added.
+        * web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf.html: Added.
+
 2020-12-22  Ziran Sun  <[email protected]>
 
         Add test for logical properties in webkit non-standard '-webkit-writing-mode: horizontal-bt' mode

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf-expected.txt (0 => 271092)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf-expected.txt	2020-12-26 20:40:28 UTC (rev 271092)
@@ -0,0 +1,4 @@
+
+PASS 'toString' redefinition with accessor fails
+PASS 'valueOf' redefinition with accessor fails
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf.html (0 => 271092)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf.html	2020-12-26 20:40:28 UTC (rev 271092)
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Same-origin Location objects have non-configurable "toString" and "valueOf" properties</title>
+<link rel="help" href=""
+
+<script src=""
+<script src=""
+
+<script>
+"use strict";
+
+test(() => {
+  assert_own_property(location, "toString");
+  const origToString = location.toString;
+
+  assert_throws_js(TypeError, () => {
+    Object.defineProperty(location, "toString", {
+      get() {},
+      set(_v) {},
+      enumerable: true,
+      configurable: true,
+    });
+  });
+
+  assert_equals(location.toString, origToString);
+}, "'toString' redefinition with accessor fails");
+
+test(() => {
+  assert_own_property(location, "valueOf");
+  const origValueOf = location.valueOf;
+
+  assert_throws_js(TypeError, () => {
+    Object.defineProperty(location, "valueOf", {
+      get() {},
+      enumerable: false,
+      configurable: true,
+    });
+  });
+
+  assert_equals(location.valueOf, origValueOf);
+}, "'valueOf' redefinition with accessor fails");
+</script>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf-expected.txt (0 => 271092)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf-expected.txt	2020-12-26 20:40:28 UTC (rev 271092)
@@ -0,0 +1,6 @@
+
+PASS 'toString' accessor property is defined
+PASS 'toString' data property is created via [[Set]]
+PASS 'valueOf' accessor property is defined
+PASS 'valueOf' data property is created via [[Set]]
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf.html (0 => 271092)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf.html	2020-12-26 20:40:28 UTC (rev 271092)
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Location.prototype objects don't have own "toString" and "valueOf" properties</title>
+
+<script src=""
+<script src=""
+
+<script>
+"use strict";
+
+test(t => {
+  assert_not_own_property(Location.prototype, "toString");
+  t.add_cleanup(() => { delete Location.prototype.toString; });
+
+  let val;
+  Object.defineProperty(Location.prototype, "toString", {
+    get: () => val,
+    set: newVal => { val = newVal; },
+    enumerable: false,
+    configurable: true,
+  });
+
+  Location.prototype.toString = 2;
+  assert_equals(Location.prototype.toString, 2);
+}, "'toString' accessor property is defined");
+
+test(t => {
+  assert_not_own_property(Location.prototype, "toString");
+  t.add_cleanup(() => { delete Location.prototype.toString; });
+
+  Location.prototype.toString = 4;
+  assert_equals(Location.prototype.toString, 4);
+}, "'toString' data property is created via [[Set]]");
+
+test(t => {
+  assert_not_own_property(Location.prototype, "valueOf");
+  t.add_cleanup(() => { delete Location.prototype.valueOf; });
+
+  Object.defineProperty(Location.prototype, "valueOf", {
+    get: () => 6,
+    enumerable: true,
+    configurable: true,
+  });
+
+  assert_equals(Location.prototype.valueOf, 6);
+}, "'valueOf' accessor property is defined");
+
+test(t => {
+  assert_not_own_property(Location.prototype, "valueOf");
+  t.add_cleanup(() => { delete Location.prototype.valueOf; });
+
+  Location.prototype.valueOf = 8;
+  assert_equals(Object.getOwnPropertyDescriptor(Location.prototype, "valueOf").value, 8);
+}, "'valueOf' data property is created via [[Set]]");
+</script>

Modified: trunk/Source/WebCore/ChangeLog (271091 => 271092)


--- trunk/Source/WebCore/ChangeLog	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/ChangeLog	2020-12-26 20:40:28 UTC (rev 271092)
@@ -1,3 +1,58 @@
+2020-12-26  Alexey Shvayka  <[email protected]>
+
+        [WebIDL] Remove [CustomToStringName] and Location-specific extended attributes
+        https://bugs.webkit.org/show_bug.cgi?id=219276
+
+        Reviewed by Sam Weinig.
+
+        This patch:
+
+        a) Removes [CustomToStringName] and 3 related overrides, whose purpose was to ensure
+           that Object.prototype.toString() returns "[object Object]" for cross-realm Location /
+           WindowProxy objects, which is already accomplished via own unforgeable @@toStringTag
+           property [1], making this change unobservable.
+
+        b) Inlines putCommon() to avoid weird true => false returns and save an extra identifier
+           creation / check in putByIndex(). This is also unobservable.
+
+        c) Removes "toString" and "valueOf" special-casing from JSLocation::defineOwnProperty(),
+           which failed silently instead of throwing a TypeError. Since these are own unforgeable
+           properties of Location [2], ordinary [[DefineOwnProperty]] prevents their redefinition.
+
+        d) Removes [CustomDefineOwnPropertyOnPrototype], [CustomPutOnPrototype], and corresponding
+           overrides, whose purpose was to prevent definition of "toString" and "valueOf" properties
+           on Location.prototype. Since these are own unforgeable properties of Location instances [2],
+           the limitation doesn't make sense. Location.prototype is an ordinary object per spec.
+
+        Both c) and d) align WebKit with the spec, Blink, and Gecko.
+
+        [1]: https://html.spec.whatwg.org/multipage/browsers.html#crossoriginpropertyfallback-(-p-)
+        [2]: https://html.spec.whatwg.org/multipage/history.html#the-location-interface (step 3)
+
+        Tests: imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-non-configurable-toString-valueOf.html
+               imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-no-toString-valueOf.html
+
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::JSDOMWindow::toStringName): Deleted.
+        * bindings/js/JSLocationCustom.cpp:
+        (WebCore::JSLocation::put):
+        (WebCore::JSLocation::putByIndex):
+        (WebCore::JSLocation::defineOwnProperty):
+        (WebCore::putCommon): Deleted.
+        (WebCore::JSLocation::toStringName): Deleted.
+        (WebCore::JSLocationPrototype::put): Deleted.
+        (WebCore::JSLocationPrototype::defineOwnProperty): Deleted.
+        * bindings/js/JSRemoteDOMWindowCustom.cpp:
+        (WebCore::JSRemoteDOMWindow::toStringName): Deleted.
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHeader):
+        (GeneratePrototypeDeclaration):
+        (HeaderNeedsPrototypeDeclaration):
+        * bindings/scripts/IDLAttributes.json:
+        * page/DOMWindow.idl:
+        * page/Location.idl:
+        * page/RemoteDOMWindow.idl:
+
 2020-12-26  Zalan Bujtas  <[email protected]>
 
         [LFC] Rect::expandToContain should call LayoutRect::uniteEvenIfEmpty

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp (271091 => 271092)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp	2020-12-26 20:40:28 UTC (rev 271092)
@@ -500,14 +500,6 @@
     return false;
 }
 
-String JSDOMWindow::toStringName(const JSObject* object, JSGlobalObject* lexicalGlobalObject)
-{
-    auto* thisObject = jsCast<const JSDOMWindow*>(object);
-    if (!BindingSecurity::shouldAllowAccessToDOMWindow(lexicalGlobalObject, thisObject->wrapped(), DoNotReportSecurityError))
-        return "Object"_s;
-    return "Window"_s;
-}
-
 // Custom Attributes
 
 JSValue JSDOMWindow::event(JSGlobalObject& lexicalGlobalObject) const

Modified: trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp (271091 => 271092)


--- trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp	2020-12-26 20:40:28 UTC (rev 271092)
@@ -113,23 +113,6 @@
     RELEASE_AND_RETURN(scope, JSObject::getOwnPropertySlotByIndex(object, lexicalGlobalObject, index, slot));
 }
 
-static bool putCommon(JSLocation& thisObject, JSGlobalObject& lexicalGlobalObject, PropertyName propertyName)
-{
-    VM& vm = lexicalGlobalObject.vm();
-
-    // Always allow assigning to the whole location.
-    // However, alllowing assigning of pieces might inadvertently disclose parts of the original location.
-    // So fall through to the access check for those.
-    if (propertyName == static_cast<JSVMClientData*>(vm.clientData)->builtinNames().hrefPublicName())
-        return false;
-
-    // Block access and throw if there is a security error.
-    if (!BindingSecurity::shouldAllowAccessToDOMWindow(&lexicalGlobalObject, thisObject.wrapped().window(), ThrowSecurityError))
-        return true;
-
-    return false;
-}
-
 void JSLocation::doPutPropertySecurityCheck(JSObject* object, JSGlobalObject* lexicalGlobalObject, PropertyName propertyName, PutPropertySlot&)
 {
     auto* thisObject = jsCast<JSLocation*>(object);
@@ -149,11 +132,17 @@
 
 bool JSLocation::put(JSCell* cell, JSGlobalObject* lexicalGlobalObject, PropertyName propertyName, JSValue value, PutPropertySlot& putPropertySlot)
 {
+    VM& vm = lexicalGlobalObject->vm();
     auto* thisObject = jsCast<JSLocation*>(cell);
     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
 
-    if (putCommon(*thisObject, *lexicalGlobalObject, propertyName))
-        return false;
+    // Always allow assigning to the whole location.
+    // However, allowing assigning of pieces might inadvertently disclose parts of the original location.
+    // So fall through to the access check for those.
+    if (propertyName != static_cast<JSVMClientData*>(vm.clientData)->builtinNames().hrefPublicName()) {
+        if (!BindingSecurity::shouldAllowAccessToDOMWindow(lexicalGlobalObject, thisObject->wrapped().window(), ThrowSecurityError))
+            return false;
+    }
 
     return JSObject::put(thisObject, lexicalGlobalObject, propertyName, value, putPropertySlot);
 }
@@ -160,11 +149,10 @@
 
 bool JSLocation::putByIndex(JSCell* cell, JSGlobalObject* lexicalGlobalObject, unsigned index, JSValue value, bool shouldThrow)
 {
-    VM& vm = lexicalGlobalObject->vm();
     auto* thisObject = jsCast<JSLocation*>(cell);
     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
 
-    if (putCommon(*thisObject, *lexicalGlobalObject, Identifier::from(vm, index)))
+    if (!BindingSecurity::shouldAllowAccessToDOMWindow(lexicalGlobalObject, thisObject->wrapped().window(), ThrowSecurityError))
         return false;
 
     return JSObject::putByIndex(cell, lexicalGlobalObject, index, value, shouldThrow);
@@ -205,9 +193,6 @@
     if (!BindingSecurity::shouldAllowAccessToDOMWindow(lexicalGlobalObject, thisObject->wrapped().window(), ThrowSecurityError))
         return false;
 
-    VM& vm = lexicalGlobalObject->vm();
-    if (descriptor.isAccessorDescriptor() && (propertyName == vm.propertyNames->toString || propertyName == vm.propertyNames->valueOf))
-        return false;
     return Base::defineOwnProperty(object, lexicalGlobalObject, propertyName, descriptor, throwException);
 }
 
@@ -225,29 +210,4 @@
     return false;
 }
 
-String JSLocation::toStringName(const JSObject* object, JSGlobalObject* lexicalGlobalObject)
-{
-    auto* thisObject = jsCast<const JSLocation*>(object);
-    if (!BindingSecurity::shouldAllowAccessToDOMWindow(lexicalGlobalObject, thisObject->wrapped().window(), DoNotReportSecurityError))
-        return "Object"_s;
-    return "Location"_s;
-}
-
-bool JSLocationPrototype::put(JSCell* cell, JSGlobalObject* lexicalGlobalObject, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
-{
-    VM& vm = lexicalGlobalObject->vm();
-    auto* thisObject = jsCast<JSLocationPrototype*>(cell);
-    if (propertyName == vm.propertyNames->toString || propertyName == vm.propertyNames->valueOf)
-        return false;
-    return Base::put(thisObject, lexicalGlobalObject, propertyName, value, slot);
-}
-
-bool JSLocationPrototype::defineOwnProperty(JSObject* object, JSGlobalObject* lexicalGlobalObject, PropertyName propertyName, const PropertyDescriptor& descriptor, bool throwException)
-{
-    VM& vm = lexicalGlobalObject->vm();
-    if (descriptor.isAccessorDescriptor() && (propertyName == vm.propertyNames->toString || propertyName == vm.propertyNames->valueOf))
-        return false;
-    return Base::defineOwnProperty(object, lexicalGlobalObject, propertyName, descriptor, throwException);
-}
-
 } // namespace WebCore

Modified: trunk/Source/WebCore/bindings/js/JSRemoteDOMWindowCustom.cpp (271091 => 271092)


--- trunk/Source/WebCore/bindings/js/JSRemoteDOMWindowCustom.cpp	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/bindings/js/JSRemoteDOMWindowCustom.cpp	2020-12-26 20:40:28 UTC (rev 271092)
@@ -127,9 +127,4 @@
     return false;
 }
 
-String JSRemoteDOMWindow::toStringName(const JSObject*, JSGlobalObject*)
-{
-    return "Object"_s;
-}
-
 } // namepace WebCore

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (271091 => 271092)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2020-12-26 20:40:28 UTC (rev 271092)
@@ -3009,10 +3009,6 @@
         $structureFlags{"JSC::OverridesGetPrototype"} = 1;
     }
     
-    if ($interface->extendedAttributes->{CustomToStringName}) {
-        push(@headerContent, "    static String toStringName(const JSC::JSObject*, JSC::JSGlobalObject*);\n");
-    }
-    
     if ($interface->extendedAttributes->{CustomPreventExtensions}) {
         push(@headerContent, "    static bool preventExtensions(JSC::JSObject*, JSC::JSGlobalObject*);\n");
     }
@@ -7663,17 +7659,6 @@
     push(@$outputArray, "\n");
     push(@$outputArray, "    void finishCreation(JSC::VM&);\n");
 
-    # FIXME: Should this override putByIndex as well?
-    if ($interface->extendedAttributes->{CustomPutOnPrototype}) {
-        push(@$outputArray, "\n");
-        push(@$outputArray, "    static bool put(JSC::JSCell*, JSC::JSGlobalObject*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&);\n");
-    }
-
-    if ($interface->extendedAttributes->{CustomDefineOwnPropertyOnPrototype}) {
-        push(@$outputArray, "\n");
-        push(@$outputArray, "    static bool defineOwnProperty(JSC::JSObject*, JSC::JSGlobalObject*, JSC::PropertyName, const JSC::PropertyDescriptor&, bool shouldThrow);\n");
-    }
-
     $structureFlags{"JSC::HasStaticPropertyTable"} = 1 if PrototypeHasStaticPropertyTable($interface) && IsGlobalInterface($interface);
     $structureFlags{"JSC::IsImmutablePrototypeExoticObject"} = 1 if $interface->extendedAttributes->{IsImmutablePrototypeExoticObjectOnPrototype};
 
@@ -8037,9 +8022,7 @@
 sub HeaderNeedsPrototypeDeclaration
 {
     my $interface = shift;
-    return IsDOMGlobalObject($interface)
-        || $interface->extendedAttributes->{CustomPutOnPrototype}
-        || $interface->extendedAttributes->{CustomDefineOwnPropertyOnPrototype};
+    return IsDOMGlobalObject($interface);
 }
 
 sub IsLegacyUnforgeable

Modified: trunk/Source/WebCore/bindings/scripts/IDLAttributes.json (271091 => 271092)


--- trunk/Source/WebCore/bindings/scripts/IDLAttributes.json	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/bindings/scripts/IDLAttributes.json	2020-12-26 20:40:28 UTC (rev 271092)
@@ -91,9 +91,6 @@
         "CustomDefineOwnProperty": {
             "contextsAllowed": ["interface"]
         },
-        "CustomDefineOwnPropertyOnPrototype": {
-            "contextsAllowed": ["interface"]
-        },
         "CustomDeleteProperty": {
             "contextsAllowed": ["interface"]
         },
@@ -133,9 +130,6 @@
         "CustomPut": {
             "contextsAllowed": ["interface"]
         },
-        "CustomPutOnPrototype": {
-            "contextsAllowed": ["interface"]
-        },
         "CustomSetter": {
             "contextsAllowed": ["attribute"]
         },
@@ -142,9 +136,6 @@
         "CustomToJSObject": {
             "contextsAllowed": ["interface"]
         },
-        "CustomToStringName": {
-            "contextsAllowed": ["interface"]
-        },
         "CustomEnabled": {
             "contextsAllowed": ["interface", "dictionary", "enum", "attribute", "operation", "constant", "iterable"]
         },

Modified: trunk/Source/WebCore/page/DOMWindow.idl (271091 => 271092)


--- trunk/Source/WebCore/page/DOMWindow.idl	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/page/DOMWindow.idl	2020-12-26 20:40:28 UTC (rev 271092)
@@ -35,7 +35,6 @@
     CustomPreventExtensions,
     CustomProxyToJSObject,
     CustomPut,
-    CustomToStringName,
     ExportMacro=WEBCORE_EXPORT,
     ImplicitThis,
     InterfaceName=Window,

Modified: trunk/Source/WebCore/page/Location.idl (271091 => 271092)


--- trunk/Source/WebCore/page/Location.idl	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/page/Location.idl	2020-12-26 20:40:28 UTC (rev 271092)
@@ -30,7 +30,6 @@
 [
     CheckSecurity,
     CustomDefineOwnProperty,
-    CustomDefineOwnPropertyOnPrototype,
     CustomDeleteProperty,
     CustomGetOwnPropertyNames,
     CustomGetOwnPropertySlot,
@@ -37,8 +36,6 @@
     CustomGetPrototype,
     CustomPreventExtensions,
     CustomPut,
-    CustomPutOnPrototype,
-    CustomToStringName,
     ExportMacro=WEBCORE_EXPORT,
     GenerateIsReachable=ReachableFromDOMWindow,
     IsImmutablePrototypeExoticObject,

Modified: trunk/Source/WebCore/page/RemoteDOMWindow.idl (271091 => 271092)


--- trunk/Source/WebCore/page/RemoteDOMWindow.idl	2020-12-26 19:42:26 UTC (rev 271091)
+++ trunk/Source/WebCore/page/RemoteDOMWindow.idl	2020-12-26 20:40:28 UTC (rev 271092)
@@ -32,7 +32,6 @@
     CustomPreventExtensions,
     CustomProxyToJSObject,
     CustomPut,
-    CustomToStringName,
     ImplicitThis,
     InterfaceName=Window,
     IsImmutablePrototypeExoticObject,
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to