From 0bc46526909e579acf7f7dc5c59668fd79662437 Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 8 Jun 2019 17:32:46 -0400 Subject: 1333045 - Update Location object properties to current spec. Specifically, three changes: 1) valueOf should be non-enumerable. 2) valueOf should be === to Object.prototype.valueOf. 3) There should be no toJSON. --- dom/bindings/BindingUtils.cpp | 8 -------- dom/bindings/BindingUtils.h | 3 --- dom/bindings/Codegen.py | 15 +++++---------- js/xpconnect/tests/chrome/test_bug1041626.xul | 3 --- testing/web-platform/meta/MANIFEST.json | 12 ++++++++++++ .../the-location-interface/location-stringifier.html | 13 +++++++++++++ .../location-symbol-toprimitive.html | 14 ++++++++++++++ .../history/the-location-interface/location-tojson.html | 13 +++++++++++++ .../history/the-location-interface/location-valueof.html | 15 +++++++++++++++ 9 files changed, 72 insertions(+), 24 deletions(-) create mode 100644 testing/web-platform/tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html create mode 100644 testing/web-platform/tests/html/browsers/history/the-location-interface/location-tojson.html create mode 100644 testing/web-platform/tests/html/browsers/history/the-location-interface/location-valueof.html diff --git a/dom/bindings/BindingUtils.cpp b/dom/bindings/BindingUtils.cpp index 8d2bdaac6..a26fc4422 100644 --- a/dom/bindings/BindingUtils.cpp +++ b/dom/bindings/BindingUtils.cpp @@ -1183,14 +1183,6 @@ GetInterfaceImpl(JSContext* aCx, nsIInterfaceRequestor* aRequestor, } } -bool -UnforgeableValueOf(JSContext* cx, unsigned argc, JS::Value* vp) -{ - JS::CallArgs args = JS::CallArgsFromVp(argc, vp); - args.rval().set(args.thisv()); - return true; -} - bool ThrowingConstructor(JSContext* cx, unsigned argc, JS::Value* vp) { diff --git a/dom/bindings/BindingUtils.h b/dom/bindings/BindingUtils.h index a3ec70f47..5cab835b3 100644 --- a/dom/bindings/BindingUtils.h +++ b/dom/bindings/BindingUtils.h @@ -2044,9 +2044,6 @@ GetInterface(JSContext* aCx, T* aThis, nsIJSID* aIID, GetInterfaceImpl(aCx, aThis, aThis, aIID, aRetval, aError); } -bool -UnforgeableValueOf(JSContext* cx, unsigned argc, JS::Value* vp); - bool ThrowingConstructor(JSContext* cx, unsigned argc, JS::Value* vp); diff --git a/dom/bindings/Codegen.py b/dom/bindings/Codegen.py index 74acb5918..d7d700a96 100644 --- a/dom/bindings/Codegen.py +++ b/dom/bindings/Codegen.py @@ -2390,11 +2390,10 @@ class MethodDefiner(PropertyDefiner): # Synthesize our valueOf method self.regular.append({ "name": 'valueOf', - "nativeName": "UnforgeableValueOf", + "selfHostedName": "Object_valueOf", "methodInfo": False, "length": 0, - "flags": "JSPROP_ENUMERATE", # readonly/permanent added - # automatically. + "flags": "0", # readonly/permanent added automatically. "condition": MemberCondition() }) @@ -3456,19 +3455,15 @@ def InitUnforgeablePropertiesOnHolder(descriptor, properties, failureCode, "nsContentUtils::ThreadsafeIsCallerChrome()")) if descriptor.interface.getExtendedAttribute("Unforgeable"): - # We do our undefined toJSON and toPrimitive here, not as a regular - # property because we don't have a concept of value props anywhere in - # IDL. + # We do our undefined toPrimitive here, not as a regular property + # because we don't have a concept of value props anywhere in IDL. unforgeables.append(CGGeneric(fill( """ JS::RootedId toPrimitive(aCx, SYMBOL_TO_JSID(JS::GetWellKnownSymbol(aCx, JS::SymbolCode::toPrimitive))); if (!JS_DefinePropertyById(aCx, ${holderName}, toPrimitive, JS::UndefinedHandleValue, - JSPROP_READONLY | JSPROP_PERMANENT) || - !JS_DefineProperty(aCx, ${holderName}, "toJSON", - JS::UndefinedHandleValue, - JSPROP_READONLY | JSPROP_ENUMERATE | JSPROP_PERMANENT)) { + JSPROP_READONLY | JSPROP_PERMANENT)) { $*{failureCode} } """, diff --git a/js/xpconnect/tests/chrome/test_bug1041626.xul b/js/xpconnect/tests/chrome/test_bug1041626.xul index c7c7b7024..11529fbe4 100644 --- a/js/xpconnect/tests/chrome/test_bug1041626.xul +++ b/js/xpconnect/tests/chrome/test_bug1041626.xul @@ -28,9 +28,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1041626 ok(Cu.isXrayWrapper(window[0].location), "Location is Xrayed"); let xrayOwnProperties = Object.getOwnPropertyNames(window[0].location); - todo(xrayOwnProperties.indexOf('toJSON') != -1, - "dummy toJSON on Location should show up in Xrayable properties"); - xrayOwnProperties.push('toJSON'); let realOwnProperties = Object.getOwnPropertyNames(window[0].wrappedJSObject.location); ok(realOwnProperties.length > 2); diff --git a/testing/web-platform/meta/MANIFEST.json b/testing/web-platform/meta/MANIFEST.json index 7edded5dc..03dda4a1f 100644 --- a/testing/web-platform/meta/MANIFEST.json +++ b/testing/web-platform/meta/MANIFEST.json @@ -18165,6 +18165,18 @@ "path": "html/browsers/history/the-location-interface/location-stringifier.html", "url": "/html/browsers/history/the-location-interface/location-stringifier.html" }, + { + "path": "html/browsers/history/the-location-interface/location-symbol-toprimitive.html", + "url": "/html/browsers/history/the-location-interface/location-symbol-toprimitive.html" + }, + { + "path": "html/browsers/history/the-location-interface/location-tojson.html", + "url": "/html/browsers/history/the-location-interface/location-tojson.html" + }, + { + "path": "html/browsers/history/the-location-interface/location-valueof.html", + "url": "/html/browsers/history/the-location-interface/location-valueof.html" + }, { "path": "html/browsers/history/the-location-interface/location_assign.html", "url": "/html/browsers/history/the-location-interface/location_assign.html" diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html index d23323b37..bde54b266 100644 --- a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html +++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html @@ -8,4 +8,17 @@
diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html new file mode 100644 index 000000000..e666a3e70 --- /dev/null +++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html @@ -0,0 +1,14 @@ + +Location Symbol.toPrimitive + + +
+ diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-tojson.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-tojson.html new file mode 100644 index 000000000..5f20a6e15 --- /dev/null +++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-tojson.html @@ -0,0 +1,13 @@ + +Location has no toJSON + + +
+ + diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-valueof.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-valueof.html new file mode 100644 index 000000000..978bbb63a --- /dev/null +++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-valueof.html @@ -0,0 +1,15 @@ + +Location valueOf + + +
+ -- cgit v1.2.3