mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Auto merge of #25446 - pshaughn:fixme11868, r=jdm
Make getOwnPropertyDescriptor hold the correct value for indexed/named properties This is towards #25036 and #25415; it could have far-reaching implications so I want to test it in isolation and see the results on the full test suite. A few lines of code had a FIXME(#11868) despite that issue being closed, and looking for the pattern that was marked that way, I found one other unmarked instance of it. It doesn't immediately crash, and maybe it will pass some tests or fail some tests in informative ways. EDIT: After adding an overlooked extended attribute to HTMLFormElement, this works very well indeed and seems to be worth merging! --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #25036 <!-- Either: --> - [X] There are tests for these changes OR - [ ] These changes do not require tests because ___ <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
commit
fdfc840bac
8 changed files with 6 additions and 30 deletions
|
@ -5147,8 +5147,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
|
||||||
attrs = "JSPROP_ENUMERATE"
|
attrs = "JSPROP_ENUMERATE"
|
||||||
if self.descriptor.operations['IndexedSetter'] is None:
|
if self.descriptor.operations['IndexedSetter'] is None:
|
||||||
attrs += " | JSPROP_READONLY"
|
attrs += " | JSPROP_READONLY"
|
||||||
# FIXME(#11868) Should assign to desc.value, desc.get() is a copy.
|
fillDescriptor = ("desc.value = result_root.get();\n"
|
||||||
fillDescriptor = ("desc.get().value = result_root.get();\n"
|
|
||||||
"fill_property_descriptor(MutableHandle::from_raw(desc), proxy.get(), (%s) as u32);\n"
|
"fill_property_descriptor(MutableHandle::from_raw(desc), proxy.get(), (%s) as u32);\n"
|
||||||
"return true;" % attrs)
|
"return true;" % attrs)
|
||||||
templateValues = {
|
templateValues = {
|
||||||
|
@ -5173,8 +5172,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
|
||||||
attrs = " | ".join(attrs)
|
attrs = " | ".join(attrs)
|
||||||
else:
|
else:
|
||||||
attrs = "0"
|
attrs = "0"
|
||||||
# FIXME(#11868) Should assign to desc.value, desc.get() is a copy.
|
fillDescriptor = ("desc.value = result_root.get();\n"
|
||||||
fillDescriptor = ("desc.get().value = result_root.get();\n"
|
|
||||||
"fill_property_descriptor(MutableHandle::from_raw(desc), proxy.get(), (%s) as u32);\n"
|
"fill_property_descriptor(MutableHandle::from_raw(desc), proxy.get(), (%s) as u32);\n"
|
||||||
"return true;" % attrs)
|
"return true;" % attrs)
|
||||||
templateValues = {
|
templateValues = {
|
||||||
|
@ -5221,7 +5219,7 @@ if !expando.is_null() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""" + namedGet + """\
|
""" + namedGet + """\
|
||||||
desc.get().obj = ptr::null_mut();
|
desc.obj = ptr::null_mut();
|
||||||
return true;"""
|
return true;"""
|
||||||
|
|
||||||
def definition_body(self):
|
def definition_body(self):
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#htmlformelement
|
// https://html.spec.whatwg.org/multipage/#htmlformelement
|
||||||
[Exposed=Window]
|
[Exposed=Window, LegacyUnenumerableNamedProperties]
|
||||||
interface HTMLFormElement : HTMLElement {
|
interface HTMLFormElement : HTMLElement {
|
||||||
[HTMLConstructor] constructor();
|
[HTMLConstructor] constructor();
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#window
|
// https://html.spec.whatwg.org/multipage/#window
|
||||||
[Global=Window, Exposed=Window]
|
[Global=Window, Exposed=Window /*, LegacyUnenumerableNamedProperties */]
|
||||||
/*sealed*/ interface Window : GlobalScope {
|
/*sealed*/ interface Window : GlobalScope {
|
||||||
// the current browsing context
|
// the current browsing context
|
||||||
[Unforgeable] readonly attribute WindowProxy window;
|
[Unforgeable] readonly attribute WindowProxy window;
|
||||||
|
|
|
@ -822,8 +822,7 @@ unsafe extern "C" fn getOwnPropertyDescriptor(
|
||||||
|
|
||||||
assert!(desc.obj.is_null() || desc.obj == target.get());
|
assert!(desc.obj.is_null() || desc.obj == target.get());
|
||||||
if desc.obj == target.get() {
|
if desc.obj == target.get() {
|
||||||
// FIXME(#11868) Should assign to desc.obj, desc.get() is a copy.
|
desc.obj = proxy.get();
|
||||||
desc.get().obj = proxy.get();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
true
|
true
|
||||||
|
|
|
@ -1,14 +1,5 @@
|
||||||
[legacy-platform-object.html]
|
[legacy-platform-object.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
[[[GetOwnProperty\]\] with getters and no setters]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[[[GetOwnProperty\]\] with named property getters and setters]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[[[GetOwnProperty\]\] with indexed property getters and setters]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Test [[DefineOwnProperty\]\] with no indexed property setter support.]
|
[Test [[DefineOwnProperty\]\] with no indexed property setter support.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,3 @@
|
||||||
[Trying to set an expando with an indexed property name past the end of the list]
|
[Trying to set an expando with an indexed property name past the end of the list]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Trying to delete an indexed property name should never work]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,3 @@
|
||||||
[Setting property for key 9 with accessor property on prototype]
|
[Setting property for key 9 with accessor property on prototype]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Getting property descriptor for key 9]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Getting property descriptor for key x]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
[form-nameditem.html]
|
[form-nameditem.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
[Name for a single element should work]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[All listed elements except input type=image should be present in the form]
|
[All listed elements except input type=image should be present in the form]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue