Skip to content

[WIP] script: Partially implement the window named getter.#19904

Closed
emilio wants to merge 3 commits intoservo:masterfrom
emilio:window-named-getter
Closed

[WIP] script: Partially implement the window named getter.#19904
emilio wants to merge 3 commits intoservo:masterfrom
emilio:window-named-getter

Conversation

@emilio
Copy link
Copy Markdown
Member

@emilio emilio commented Jan 30, 2018

There's tons of layout tests that depend on this, and I keep forgetting Servo
doesn't support it :)


This change is Reviewable

@highfive
Copy link
Copy Markdown

Heads up! This PR modifies the following files:

  • @asajeffrey: components/script/dom/document.rs, components/script/dom/window.rs, components/script/dom/webidls/Window.webidl, components/script/dom/element.rs
  • @fitzgen: components/script/dom/document.rs, components/script/dom/window.rs, components/script/dom/webidls/Window.webidl, components/script/dom/element.rs
  • @KiChjang: components/script/dom/document.rs, components/script/dom/window.rs, components/script/dom/webidls/Window.webidl, components/script/dom/element.rs

@highfive highfive added the S-awaiting-review There is new code that needs to be reviewed. label Jan 30, 2018
@highfive
Copy link
Copy Markdown

warning Warning warning

  • These commits modify unsafe code. Please review it carefully!
  • These commits modify script code, but no tests are modified. Please consider adding a test!

@emilio
Copy link
Copy Markdown
Member Author

emilio commented Jan 30, 2018

r? @jdm

This fails at codegen in the call to create_global_object, expecting an (unexisting) &'static JSClass. I have absolutely no idea about what the right thing to do is there.

Gecko generates a JSClass: https://searchfox.org/mozilla-central/source/__GENERATED__/dom/bindings/WindowBinding.cpp#16292

While with this change we only generate a DOMClass.

Diff between old and new bindings:

Details
diff --git a/wb-old.rs b/wb-new.rs
index 0a89b24f5c..807e410636 100644
--- a/wb-old.rs
+++ b/wb-new.rs
@@ -8864,37 +8864,199 @@ unsafe extern fn _trace(trc: *mut JSTracer, obj: *mut JSObject) {
     }), ());
 }
 
-static CLASS_OPS: js::jsapi::JSClassOps = js::jsapi::JSClassOps {
-    addProperty: None,
-    delProperty: None,
-    getProperty: None,
-    setProperty: None,
-    enumerate: Some(enumerate_global),
-    resolve: Some(resolve_global),
-    mayResolve: None,
-    finalize: Some(_finalize),
-    call: None,
-    hasInstance: None,
-    construct: None,
-    trace: Some(js::jsapi::JS_GlobalObjectTraceHook),
-};
-
-static Class: DOMJSClass = DOMJSClass {
-    base: js::jsapi::JSClass {
-        name: b"Window\0" as *const u8 as *const libc::c_char,
-        flags: JSCLASS_IS_DOMJSCLASS | JSCLASS_IS_GLOBAL | JSCLASS_DOM_GLOBAL |
-               (((JSCLASS_GLOBAL_SLOT_COUNT + 1) & JSCLASS_RESERVED_SLOTS_MASK) << JSCLASS_RESERVED_SLOTS_SHIFT)
-               /* JSCLASS_HAS_RESERVED_SLOTS(JSCLASS_GLOBAL_SLOT_COUNT + 1) */,
-        cOps: &CLASS_OPS,
-        reserved: [0 as *mut _; 3],
-    },
-    dom_class: DOMClass {
+pub unsafe fn DefineProxyHandler() -> *const libc::c_void {
+    let traps = ProxyTraps {
+        enter: None,
+        getOwnPropertyDescriptor: Some(getOwnPropertyDescriptor),
+        defineProperty: Some(proxyhandler::define_property),
+        ownPropertyKeys: Some(own_property_keys),
+        delete_: Some(proxyhandler::delete),
+        enumerate: None,
+        getPrototypeIfOrdinary: Some(proxyhandler::get_prototype_if_ordinary),
+        preventExtensions: Some(proxyhandler::prevent_extensions),
+        isExtensible: Some(proxyhandler::is_extensible),
+        has: None,
+        get: Some(get),
+        set: None,
+        call: None,
+        construct: None,
+        getPropertyDescriptor: Some(get_property_descriptor),
+        hasOwn: Some(hasOwn),
+        getOwnEnumerablePropertyKeys: Some(own_property_keys),
+        nativeCall: None,
+        hasInstance: None,
+        objectClassIs: None,
+        className: Some(className),
+        fun_toString: None,
+        boxedValue_unbox: None,
+        defaultValue: None,
+        trace: Some(_trace),
+        finalize: Some(_finalize),
+        objectMoved: None,
+        isCallable: None,
+        isConstructor: None,
+    };
+
+    CreateProxyHandler(&traps, Class.as_void_ptr())
+}
+
+#[inline] unsafe fn UnwrapProxy(obj: HandleObject) -> *const Window {
+    /*if (xpc::WrapperFactory::IsXrayWrapper(obj)) {
+        obj = js::UnwrapObject(obj);
+    }*/
+    //MOZ_ASSERT(IsProxy(obj));
+    let box_ = GetProxyPrivate(obj.get()).to_private() as *const Window;
+    return box_;
+}
+
+static Class: DOMClass = DOMClass {
     interface_chain: [ PrototypeList::ID::EventTarget, PrototypeList::ID::GlobalScope, PrototypeList::ID::Window, PrototypeList::ID::Last, PrototypeList::ID::Last, PrototypeList::ID::Last ],
     type_id: ::dom::bindings::codegen::InheritTypes::TopTypeId { eventtarget: (::dom::bindings::codegen::InheritTypes::EventTargetTypeId::GlobalScope(::dom::bindings::codegen::InheritTypes::GlobalScopeTypeId::Window)) },
     malloc_size_of: malloc_size_of_including_raw_self::<Window> as unsafe fn(&mut _, _) -> _,
     global: InterfaceObjectMap::Globals::WINDOW,
-}
 };
+
+unsafe extern fn own_property_keys(cx: *mut JSContext, proxy: HandleObject, props: *mut AutoIdVector) -> bool {
+    return wrap_panic(panic::AssertUnwindSafe(|| {
+        let unwrapped_proxy = UnwrapProxy(proxy);
+        for name in (*unwrapped_proxy).SupportedPropertyNames() {
+            let cstring = CString::new(name).unwrap();
+            let jsstring = JS_AtomizeAndPinString(cx, cstring.as_ptr());
+            rooted!(in(cx) let rooted = jsstring);
+            let jsid = INTERNED_STRING_TO_JSID(cx, rooted.handle().get());
+            rooted!(in(cx) let rooted_jsid = jsid);
+            AppendToAutoIdVector(props, rooted_jsid.handle().get());
+        }
+        rooted!(in(cx) let mut expando = ptr::null_mut::<JSObject>());
+        get_expando_object(proxy, expando.handle_mut());
+        if !expando.is_null() {
+            GetPropertyKeys(cx, expando.handle(), JSITER_OWNONLY | JSITER_HIDDEN | JSITER_SYMBOLS, props);
+        }
+
+        return true;
+
+    }), false);
+}
+
+unsafe extern fn getOwnPropertyDescriptor(cx: *mut JSContext, proxy: HandleObject, id: HandleId, desc: MutableHandle<PropertyDescriptor>) -> bool {
+    return wrap_panic(panic::AssertUnwindSafe(|| {
+        rooted!(in(cx) let mut expando = ptr::null_mut::<JSObject>());
+        get_expando_object(proxy, expando.handle_mut());
+        //if (!xpc::WrapperFactory::IsXrayWrapper(proxy) && (expando = GetExpandoObject(proxy))) {
+        if !expando.is_null() {
+            if !JS_GetPropertyDescriptorById(cx, expando.handle(), id, desc) {
+                return false;
+            }
+            if !desc.obj.is_null() {
+                // Pretend the property lives on the wrapper.
+                desc.get().obj = proxy.get();
+                return true;
+            }
+        }
+
+        if RUST_JSID_IS_STRING(id) || RUST_JSID_IS_INT(id) {
+            let mut has_on_proto = false;
+            if !has_property_on_prototype(cx, proxy, id, &mut has_on_proto) {
+                return false;
+            }
+            if !has_on_proto {
+                        let name = jsid_to_string(cx, id).expect("Not a string-convertible JSID?");
+                let this = UnwrapProxy(proxy);
+                let this = &*this;
+                let result: Option<NonNull<JSObject>> = this.NamedGetter(cx, name);
+
+                if let Some(result) = result {
+                    rooted!(in(cx) let mut result_root = UndefinedValue());
+                    (result).to_jsval(cx, result_root.handle_mut());
+                    desc.get().value = result_root.get();
+                    fill_property_descriptor(desc, proxy.get(), JSPROP_ENUMERATE | JSPROP_READONLY);
+                    return true;
+                }
+            }
+        }
+        desc.get().obj = ptr::null_mut();
+        return true;
+    }), false);
+}
+
+unsafe extern fn className(cx: *mut JSContext, _proxy: HandleObject) -> *const i8 {
+    b"Window\0" as *const u8 as *const i8
+}
+
+unsafe extern fn get(cx: *mut JSContext, proxy: HandleObject, receiver: HandleValue, id: HandleId, vp: MutableHandleValue) -> bool {
+    return wrap_panic(panic::AssertUnwindSafe(|| {
+        //MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy),
+        //"Should not have a XrayWrapper here");
+
+        rooted!(in(cx) let mut expando = ptr::null_mut::<JSObject>());
+        get_expando_object(proxy, expando.handle_mut());
+        if !expando.is_null() {
+            let mut hasProp = false;
+            if !JS_HasPropertyById(cx, expando.handle(), id, &mut hasProp) {
+                return false;
+            }
+
+            if hasProp {
+                return JS_ForwardGetPropertyTo(cx, expando.handle(), id, receiver, vp);
+            }
+        }
+
+        let mut found = false;
+        if !get_property_on_prototype(cx, proxy, receiver, id, &mut found, vp) {
+            return false;
+        }
+
+        if found {
+            return true;
+        }
+        if RUST_JSID_IS_STRING(id) || RUST_JSID_IS_INT(id) {
+            let name = jsid_to_string(cx, id).expect("Not a string-convertible JSID?");
+            let this = UnwrapProxy(proxy);
+            let this = &*this;
+            let result: Option<NonNull<JSObject>> = this.NamedGetter(cx, name);
+
+            if let Some(result) = result {
+
+                (result).to_jsval(cx, vp);
+                return true;
+            }}
+
+        vp.set(UndefinedValue());
+        return true;
+    }), false);
+}
+
+unsafe extern fn hasOwn(cx: *mut JSContext, proxy: HandleObject, id: HandleId, bp: *mut bool) -> bool {
+    return wrap_panic(panic::AssertUnwindSafe(|| {
+        rooted!(in(cx) let mut expando = ptr::null_mut::<JSObject>());
+        get_expando_object(proxy, expando.handle_mut());
+        if !expando.is_null() {
+            let ok = JS_HasPropertyById(cx, expando.handle(), id, bp);
+            if !ok || *bp {
+                return ok;
+            }
+        }
+        if RUST_JSID_IS_STRING(id) || RUST_JSID_IS_INT(id) {
+            let mut has_on_proto = false;
+            if !has_property_on_prototype(cx, proxy, id, &mut has_on_proto) {
+                return false;
+            }
+            if !has_on_proto {
+                        let name = jsid_to_string(cx, id).expect("Not a string-convertible JSID?");
+                let this = UnwrapProxy(proxy);
+                let this = &*this;
+                let result: Option<NonNull<JSObject>> = this.NamedGetter(cx, name);
+
+                *bp = result.is_some();
+                return true;
+            }
+        }
+
+        *bp = false;
+        return true;
+    }), false);
+}
+
 pub unsafe fn Wrap(cx: *mut JSContext, object: Box<Window>) -> DomRoot<Window> {
     let raw = Box::into_raw(object);
     let _rt = RootedTraceable::new(&*raw);
@@ -8921,10 +9083,12 @@ pub unsafe fn Wrap(cx: *mut JSContext, object: Box<Window>) -> DomRoot<Window> {
     define_guarded_properties(cx, obj.handle(), sAttributes);
     define_guarded_methods(cx, obj.handle(), sMethods);
 
+    rooted!(in(cx) let mut expando = ptr::null_mut::<JSObject>());
+    ensure_expando_object(cx, obj.handle(), expando.handle_mut());
     rooted!(in(cx) let mut unforgeable_holder = ptr::null_mut::<JSObject>());
     unforgeable_holder.handle_mut().set(
         JS_GetReservedSlot(proto.get(), DOM_PROTO_UNFORGEABLE_HOLDER_SLOT).to_object());
-    assert!(JS_CopyPropertiesFrom(cx, obj.handle(), unforgeable_holder.handle()));
+    assert!(JS_CopyPropertiesFrom(cx, expando.handle(), unforgeable_holder.handle()));
 
 
     DomRoot::from_ref(&*raw)
@@ -8933,7 +9097,7 @@ pub unsafe fn Wrap(cx: *mut JSContext, object: Box<Window>) -> DomRoot<Window> {
 impl IDLInterface for Window {
     #[inline]
     fn derives(class: &'static DOMClass) -> bool {
-        class as *const _ == &Class.dom_class as *const _
+        class as *const _ == &Class as *const _
     }
 }
 
@@ -9177,6 +9341,8 @@ pub trait WindowMethods {
     unsafe fn SetInterval(&self, cx: *mut JSContext, handler: Rc<Function>, timeout: i32, arguments: Vec<HandleValue>) -> i32;
     unsafe fn SetInterval_(&self, cx: *mut JSContext, handler: DOMString, timeout: i32, arguments: Vec<HandleValue>) -> i32;
     fn ClearInterval(&self, handle: i32) -> ();
+    fn SupportedPropertyNames(&self) -> Vec<DOMString>;
+    unsafe fn NamedGetter(&self, cx: *mut JSContext, name: DOMString) -> Option<NonNull<JSObject>>;
 }
 const sMethods_specs: &'static [&'static[JSFunctionSpec]] = &[
 &[

@highfive highfive assigned jdm and unassigned Manishearth Jan 30, 2018
@emilio
Copy link
Copy Markdown
Member Author

emilio commented Jan 30, 2018

@bors-servo try

  • Worth a shot

bors-servo pushed a commit that referenced this pull request Jan 30, 2018
[WIP] script: Partially implement the window named getter.

There's tons of layout tests that depend on this, and I keep forgetting Servo
doesn't support it :)

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/19904)
<!-- Reviewable:end -->
@bors-servo
Copy link
Copy Markdown
Contributor

⌛ Trying commit feeb833 with merge a86b2f2...

@bors-servo
Copy link
Copy Markdown
Contributor

💔 Test failed - linux-dev

@highfive highfive added the S-tests-failed The changes caused existing tests to fail. label Jan 30, 2018
@emilio
Copy link
Copy Markdown
Member Author

emilio commented Jan 30, 2018

Ok, so that's clearly wrong. Just so this doesn't get lost on IRC:

17:10 <~jdm> https://searchfox.org/mozilla-central/source/dom/bindings/Configuration.py#465-468
17:10 <~jdm> gecko uses a separate object as the prototype of the global for this case
17:10 <~jdm> https://searchfox.org/mozilla-central/source/__GENERATED__/dom/bindings/WindowBinding.cpp#16217
17:10 <~jdm> https://searchfox.org/mozilla-central/source/dom/base/WindowNamedPropertiesHandler.cpp#257
17:11 <~jdm> "global scope polluter" is the other key term here
17:11 <nox> Well,
17:11 <nox> the spec does that, no?
17:11 <nox> jdm, emilio: 'For every interface declared with the [Global] extended attribute that supports named properties, there must exist an object known as the named properties object for that interface on which named properties are exposed.'
17:11 <~jdm> mhm
17:11 <nox> https://heycam.github.io/webidl/#named-properties-object
17:12 <nox> It ends up on the prototype chain of the global.
17:13 <nox> See https://heycam.github.io/webidl/#ref-for-dfn-interface-prototype-object①③
17:13 <nox> That's one fancy anchor.

@jdm jdm added S-needs-code-changes Changes have not yet been made that were requested by a reviewer. and removed S-awaiting-review There is new code that needs to be reviewed. labels Jan 31, 2018
There's tons of layout tests that depend on this, and I keep forgetting Servo
doesn't support it :)
@emilio emilio force-pushed the window-named-getter branch from feeb833 to c098d21 Compare February 4, 2018 19:41
@highfive highfive added S-awaiting-review There is new code that needs to be reviewed. and removed S-tests-failed The changes caused existing tests to fail. S-needs-code-changes Changes have not yet been made that were requested by a reviewer. labels Feb 4, 2018
@emilio
Copy link
Copy Markdown
Member Author

emilio commented Feb 4, 2018

I tried to write the appropriate hook into the bindings. @jdm does the last commit look reasonable?

def addIndexedOrNamedOperation(operation, m):
self.proxy = True
if not self.isGlobal():
self.proxy = True
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self.proxy = not self.isGlobal()

yield name, attribute_arguments(typeNeedsCx(m.type, False), m.type), rettype

if descriptor.proxy:
if descriptor.proxy or descriptor.hasNamedPropertiesObject():
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm on the fence about this, because the SupportedPropertyNames and NamedGetter methods won't actually be hooked up to anything automatically. Is the idea that the named properties proxy object would grab the window object and invoke those methods? I think it would be less confusing if we did not reuse this machinery in a way that's different than how it's used for proxy objects.

@jdm jdm added S-needs-code-changes Changes have not yet been made that were requested by a reviewer. and removed S-awaiting-review There is new code that needs to be reviewed. labels Feb 6, 2018
@bors-servo
Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #19975) made this pull request unmergeable. Please resolve the merge conflicts.

@nox
Copy link
Copy Markdown
Contributor

nox commented Aug 31, 2018

I found some WebGL tests which need this.

@jdm jdm mentioned this pull request Oct 4, 2018
bors-servo pushed a commit that referenced this pull request Oct 4, 2018
Window getter

This is a rebase of #19904 with an attempt at porting Gecko's named property getter support to Servo on top of it. It's very rough but I want to see what effect it has on tests so far.
bors-servo pushed a commit that referenced this pull request Oct 4, 2018
[WIP] Named window getter

This is a rebase of #19904 with an attempt at porting Gecko's named property getter support to Servo on top of it. It's very rough but I want to see what effect it has on tests so far.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21869)
<!-- Reviewable:end -->
bors-servo pushed a commit that referenced this pull request Oct 4, 2018
[WIP] Named window getter

This is a rebase of #19904 with an attempt at porting Gecko's named property getter support to Servo on top of it. It's very rough but I want to see what effect it has on tests so far.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21869)
<!-- Reviewable:end -->
bors-servo pushed a commit that referenced this pull request Oct 5, 2018
[WIP] Named window getter

This is a rebase of #19904 with an attempt at porting Gecko's named property getter support to Servo on top of it. It's very rough but I want to see what effect it has on tests so far.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21869)
<!-- Reviewable:end -->
@jdm
Copy link
Copy Markdown
Member

jdm commented Oct 5, 2018

Closing in favour of #21869.

@jdm jdm closed this Oct 5, 2018
bors-servo added a commit that referenced this pull request Feb 23, 2023
HTML #named-access-on-the-window-object

(see also #27952, #25562, #21869, #19904)

* [x] updates #27952, resolving conflicts related to #29079 and #28546
* [ ] fixes “Servo exited with return value 11”

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [ ] `./mach build -d` does not report any errors
- [ ] `./mach test-tidy` does not report any errors
- [ ] These changes fix #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Feb 27, 2023
HTML #named-access-on-the-window-object

(see also #27952, #25562, #21869, #19904)

* [x] updates #27952, resolving conflicts related to #29079 and #28546 (5ae0ca4)
* [x] fixes “Servo exited with return value 11” (1e24ffd)
* [x] fixes “Assertion failure: CurrentThreadCanAccessRuntime(cx->runtime())” (5a2f05a)

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [ ] `./mach build -d` does not report any errors
- [ ] `./mach test-tidy` does not report any errors
- [ ] These changes fix #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 2, 2023
HTML #named-access-on-the-window-object

(see also #27952, #25562, #21869, #19904)

* [x] updates #27952, resolving conflicts related to #29079 and #28546 (5ae0ca4)
* [x] fixes “Servo exited with return value 11” (1e24ffd)
* [x] fixes “Assertion failure: CurrentThreadCanAccessRuntime(cx->runtime())” (5a2f05a)

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [ ] `./mach build -d` does not report any errors
- [ ] `./mach test-tidy` does not report any errors
- [ ] These changes fix #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 3, 2023
HTML #named-access-on-the-window-object

(see also #27952, #25562, #21869, #19904)

* [x] updates #27952, resolving conflicts related to #29079 and #28546 (5ae0ca4)
* [x] fixes “Servo exited with return value 11” (1e24ffd)
* [x] fixes “Assertion failure: CurrentThreadCanAccessRuntime(cx->runtime())” (5a2f05a)

<details><summary>130× tests that now pass</summary>

* /cors/script-304.html
* /css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html
* /css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html
* /css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html
* /css/CSS2/floats/computed-float-position-absolute.html
* /css/CSS2/normal-flow/block-in-inline-hittest-float-001.html
* /css/CSS2/normal-flow/block-in-inline-insert-018.html
* /css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html
* /css/CSS2/positioning/abspos-change-in-inline-block.html
* /css/CSS2/positioning/abspos-width-change-inline-container-001.html
* /css/CSS2/positioning/detach-abspos-before-layout.html
* /css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html
* /css/CSS2/positioning/relpos-percentage-left-in-scrollable.html
* /css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html
* /css/CSS2/stacking-context/opacity-change-parent-stacking-context.html
* /css/CSS2/stacking-context/opacity-change-twice-stacking-context.html
* /css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html
* /css/css-animations/animation-base-response-002.html
* /css/css-animations/style-animation-parsing.html
* /css/css-backgrounds/background-clip-color-repaint.html
* /css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html
* /css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html
* /css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html
* /css/css-backgrounds/background-image-none-gradient-repaint.html
* /css/css-backgrounds/border-radius-dynamic-from-no-radius.html
* /css/css-backgrounds/child-move-reveals-parent-background.html
* /css/css-color/filters-under-will-change-opacity.html
* /css/css-flexbox/anonymous-flex-item-001.html
* /css/css-flexbox/anonymous-flex-item-003.html
* /css/css-flexbox/dynamic-bsize-change.html
* /css/css-flexbox/flex-aspect-ratio-img-row-016.html
* /css/cssom/at-namespace.html
* /css/cssom/computed-style-002.html
* /css/cssom/getComputedStyle-display-none-002.html
* /css/cssom/getComputedStyle-display-none-003.html
* /css/cssom/preferred-stylesheet-reversed-order.html
* /css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html
* /css/cssom-view/pt-to-px-width.html
* /css/cssom-view/scroll-back-to-initial-position.html
* /css/css-text-decor/text-decoration-color-recalc-002.html
* /css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html
* /css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html
* /css/css-text/text-indent/percentage-value-intrinsic-size.html
* /css/css-text/white-space/display-contents-remove-whitespace-change.html
* /css/css-text/white-space/white-space-empty-text-sibling.html
* /css/css-transforms/change-perspective-property.html
* /css/css-transforms/change-scale-wide-range.html
* /css/css-transforms/change-transform-origin-property.html
* /css/css-transforms/dynamic-fixed-pos-cb-change.html
* /css/css-transforms/individual-transform/change-rotate-property.html
* /css/css-transforms/individual-transform/change-scale-property.html
* /css/css-transforms/paint-order-with-transform-change.html
* /css/css-transforms/size-change-under-backface-visibility-hidden.html
* /css/css-transforms/subpixel-transform-changes-001.html
* /css/css-transforms/subpixel-transform-changes-002.html
* /css/css-transforms/subpixel-transform-changes-003.html
* /css/css-transforms/subpixel-transform-changes-004.html
* /css/css-transitions/transition-reparented.html
* /css/css-ui/historical/moz-user-modify-01.html
* /css/css-ui/historical/user-modify-01.html
* /css/css-ui/historical/webkit-user-modify-01.html
* /css/css-ui/resize-change-margin.html
* /css/css-ui/text-overflow-change-color.html
* /css/css-ui/text-overflow-ellipsis-width-001.html
* /css/css-values/animations/line-height-lh-transition.html
* /css/css-values/calc-nesting.html
* /css/css-values/update-subpixel-rem-unit.html
* /css/css-values/viewport-units-modify.html
* /css/css-variables/css-variable-change-style-001.html
* /css/css-variables/css-variable-change-style-002.html
* /css/css-variables/variable-cycles.html
* /css/selectors/attribute-selectors/style-attribute-selector.html
* /css/selectors/i18n/lang-pseudo-class-disconnected.html
* /css/selectors/invalidation/attribute.html
* /css/selectors/invalidation/class-id-attr.html
* /css/selectors/invalidation/defined.html
* /css/selectors/invalidation/sheet-going-away-001.html
* /css/selectors/invalidation/sibling.html
* /css/selectors/missing-right-token.html
* /css/selectors/not-complex.html
* /css/selectors/not-specificity.html
* /css/selectors/nth-of-type-namespace.html
* /css/selectors/selectors-case-sensitive-001.html
* /css/selectors/visited-inheritance.html
* /custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html
* /dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html
* /dom/nodes/remove-and-adopt-thcrash.html
* /FileAPI/Blob-methods-from-detached-frame.html done #29450 #29451
* /html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html
* /html/browsers/history/the-history-interface/history_back_cross_realm_method.html
* /html/browsers/history/the-history-interface/history_forward_cross_realm_method.html
* /html/browsers/history/the-history-interface/history_go_cross_realm_method.html
* /html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html
* /html/dom/elements/images/bypass-cache-revalidation.html
* /html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html
* /html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html
* /html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html
* /html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html
* /html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html
* /html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html
* /html/rendering/widgets/the-select-element/select-invalidation.html
* /html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html
* /html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html
* /html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html
* /html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html
* /html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html
* /html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html
* /html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html
* /html/semantics/embedded-content/the-img-element/image-compositing-change.html
* /html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html
* /html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html
* /html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html
* /html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html
* /html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html
* /html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html
* /html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html
* /html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html
* /html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html
* /html/semantics/forms/the-input-element/radio-morphed.html
* /html/semantics/forms/the-progress-element/progress.html
* /html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html
* /html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html
* /html/syntax/serializing-html-fragments/initial-linefeed-pre.html
* /html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html
* /html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html
* /quirks/unitless-length/excluded-properties-001.html
* /quirks/unitless-length/excluded-properties-003.html
* /selection/caret/empty-elements.html
* /selection/contenteditable/cefalse-on-boundaries.html
* /selection/textcontrols/onselectionchange-content-attribute.html
</details>

<details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary>

* **/css/css-animations/animation-base-response-001.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html**
* **/css/css-backgrounds/inheritance.sub.html**
* **/css/css-backgrounds/local-attachment-content-box-scroll.html**
* **/css/css-color/canvas-change-opacity.html**
* **/css/css-color/color-initial-canvastext.html**
* **/css/css-flexbox/flex-aspect-ratio-img-column-010.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-004.html**
* **/css/css-fonts/parsing/font-face-src-format.html**
  getter works but insertRule does nothing
* **/css/css-fonts/parsing/font-face-src-list.html**
  as above
* **/css/css-fonts/parsing/font-face-src-local.html**
  as above, but also delayed length change?
* **/css/css-fonts/parsing/font-face-src-tech.html**
  as above
* **/css/css-text/white-space/trailing-space-before-br-001.html**
* **/css/css-transforms/3d-rendering-context-behavior.html**
  failures are subject of test, but also blank page?
* **/css/css-transforms/individual-transform/change-translate-property.html**
* **/css/css-transforms/preserve-3d-flat-grouping-properties.html**
* **/css/css-transforms/transforms-support-calc.html**
* **/css/css-transitions/inherit-height-transition.html**
* **/css/css-ui/inheritance.html**
* **/css/css-ui/parsing/outline-width-computed.html**
  failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width
* **/css/css-values/lh-unit-003.html**
* **/css/css-values/viewport-units-compute.html**
* **/css/css-values/viewport-units-keyframes.html**
* **/css/css-values/viewport-units-media-queries.html**
* **/css/css-values/viewport-units-writing-mode.html**
* **/css/cssom-view/elementsFromPoint-table.html**
* **/css/cssom-view/scroll-behavior-default-css.html**
* **/css/cssom-view/scroll-behavior-element.html**
* **/css/cssom-view/scroll-behavior-main-frame-root.html**
* **/css/cssom-view/scroll-behavior-main-frame-window.html**
* **/css/cssom-view/scroll-behavior-smooth-navigation.html**
* **/css/cssom-view/scroll-behavior-subframe-root.html**
* **/css/cssom/computed-style-003.html**
* **/css/cssom/computed-style-004.html**
* **/css/cssom/font-variant-shorthand-serialization.html**
* **/css/selectors/dir-selector-auto.html**
* **/css/selectors/has-argument-with-explicit-scope.html**
* **/css/selectors/has-basic.html**
* **/css/selectors/has-relative-argument.html**
* **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html**
* **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/dir-pseudo-class-in-has.html**
* **/css/selectors/invalidation/empty-pseudo-in-has.html**
* **/css/selectors/invalidation/has-in-adjacent-position.html**
* **/css/selectors/invalidation/has-in-ancestor-position.html**
* **/css/selectors/invalidation/has-in-parent-position.html**
* **/css/selectors/invalidation/has-in-sibling-position.html**
* **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html**
* **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html**
* **/css/selectors/invalidation/has-sibling.html**
* **/css/selectors/invalidation/has-with-not.html**
* **/css/selectors/invalidation/has-with-pseudo-class.html**
* **/css/selectors/invalidation/input-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/lang-pseudo-class-in-has.html**
* **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/is-where-basic.html**
* **/css/selectors/is-where-not.html**
* **/html/rendering/non-replaced-elements/tables/form-in-tables.html**
* /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html**
* **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html**
* **/html/semantics/popovers/popover-stacking.html**
* **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html**
* **/resource-timing/resource-reload-TAO.html**
* **/selection/bidi/modify.tentative.html**
* **/selection/contenteditable/modify.tentative.html**
* **/selection/textcontrols/selectionchange.html**
* **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html**
* **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html**
* **/css/css-animations/computed-style-animation-parsing.html**
* **/css/css-variables/variables-substitute-guaranteed-invalid.html**
* **/css/cssom-view/elementsFromPoint-simple.html**
* **/css/cssom/CSSStyleSheet-modify-after-removal.html**
* **/css/cssom/getComputedStyle-display-none-001.html**
* **/css/selectors/focus-visible-script-focus-001.html**
* **/css/selectors/has-specificity.html**
* **/css/selectors/invalidation/is.html**
* **/css/selectors/invalidation/not-002.html**
* **/dom/events/EventListener-handleEvent-cross-realm.html**
* **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html**
* **/html/browsers/the-window-object/window-properties.https.html**
* **/html/browsers/the-window-object/window-prototype-chain.html**
* **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html**
* **/html/dom/aria-element-reflection.html**
* **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html**
* **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html**
* **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html**
* **/quirks/unitless-length/excluded-properties-002.html**
</details>

<details open><summary>22× tests with failures that looked interesting</summary>

* 1× CRASH [expected ...]
    * **/css/css-fonts/crash-large-grapheme-cluster.html**
      crash is subject of test
* 6× FAIL [expected PASS] /... (reftest)
    * **/css/css-flexbox/anonymous-flex-item-005.html**
      old pass was spurious
    * **/css/css-flexbox/anonymous-flex-item-006.html**
      old pass was spurious
    * **/css/css-text-decor/text-decoration-line-recalc.html**
      old pass was spurious; ‘text-decoration’ shorthand unimplemented
    * **/css/css-ui/appearance-auto-non-html-namespace-001.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html**
      old pass was spurious
* 13× TIMEOUT [expected ...]
    * **/css/css-fonts/font-size-monospace-adjust.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/css/cssom-view/background-change-during-smooth-scroll.html**
      timeout is subject of test
    * **/css/selectors/invalidation/has-complexity.html**
      timeout is subject of test
    * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html**
      timeout is subject of test; :has() unimplemented
    * **/fetch/stale-while-revalidate/stale-image.html**
      timeout is subject of test
    * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html**
      timeout is subject of test
    * **/html/rendering/widgets/appearance/appearance-animation-001.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-animation-002.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-transition-001.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-002.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-003.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/resource-timing/opaque-origin.html**
      timeout is subject of test
    * **/selection/textcontrols/selectionchange-bubble.html**
      timeout is subject of test
* **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html**
  ‘HTMLDocument’ unimplemented
* **/webidl/ecmascript-binding/window-named-properties-object.html**
  potentially interesting?
</details>

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [ ] `./mach build -d` does not report any errors
- [ ] `./mach test-tidy` does not report any errors
- [ ] These changes fix #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 23, 2023
HTML #named-access-on-the-window-object

This patch implements [named access on the window object](https://html.spec.whatwg.org/#named-access-on-the-window-object) based on @pylbrecht’s and @yvt’s previous work (see also #27952, #25562, #21869, #19904).

That work makes 130 tests pass, and I’ve made some additional changes to make [the test for the feature itself](https://wpt.live/webidl/ecmascript-binding/window-named-properties-object.html) pass too, but I haven’t worked with mozjs before, so I have no idea if I’ve gone about my changes the Right Way.

In particular, this patch:

* [x] applies @pylbrecht’s patch (#27952)
* [x] resolves conflicts related to #29079 and #28546 (5ae0ca4)
* [x] applies @yvt’s patch to the segfault in getPrototypeIfOrdinary (1e24ffd)
* [x] reverts the change introducing Untransplantable (76dc35a), since #28534 was abandoned in favour of #28536
* [x] triages the unexpected WPT results, updating expectations as needed (see below)
* [x] fixes the failures in /webidl/ecmascript-binding/window-named-properties-object.html (3844f69)
    * [x] fixes the failures in the [[GetOwnProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[DefineOwnProperty]] subtest (e4e7a14)
    * [x] fixes the failures in the [[HasProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[Get]] subtest (4bafb27)
    * [x] fixes the failures in the [[Set]] (direct) subtest (e4e7a14)
    * [x] fixes the failures in the [[Delete]] subtest (4bafb27)
    * [x] fixes the failures in the [[OwnPropertyKeys]] subtest (afcd24a)
* [x] resolves the todos and fixmes
    * [x] Document: handle exposed objects ×3 (ed3e37b)
    * [x] Window::NamedGetter: document.get_elements_with_id() (618ef57)
    * [x] get_own_property_descriptor: check for interactions with indexed access (b906fae)
    * [x] create trap: pass proper classp (618ef57)

<details><summary>131× tests that now pass</summary>

* **/webidl/ecmascript-binding/window-named-properties-object.html**
  *directly relevant to this patch*
* **/FileAPI/Blob-methods-from-detached-frame.html**
  done #29450 #29451
* **/cors/script-304.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html**
* **/css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html**
* **/css/CSS2/floats/computed-float-position-absolute.html**
* **/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html**
* **/css/CSS2/normal-flow/block-in-inline-insert-018.html**
* **/css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html**
* **/css/CSS2/positioning/abspos-change-in-inline-block.html**
* **/css/CSS2/positioning/abspos-width-change-inline-container-001.html**
* **/css/CSS2/positioning/detach-abspos-before-layout.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html**
* **/css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html**
* **/css/CSS2/stacking-context/opacity-change-parent-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-change-twice-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html**
* **/css/css-animations/animation-base-response-002.html**
* **/css/css-animations/style-animation-parsing.html**
* **/css/css-backgrounds/background-clip-color-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html**
* **/css/css-backgrounds/background-image-none-gradient-repaint.html**
* **/css/css-backgrounds/border-radius-dynamic-from-no-radius.html**
* **/css/css-backgrounds/child-move-reveals-parent-background.html**
* **/css/css-color/filters-under-will-change-opacity.html**
* **/css/css-flexbox/anonymous-flex-item-001.html**
* **/css/css-flexbox/anonymous-flex-item-003.html**
* **/css/css-flexbox/dynamic-bsize-change.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-016.html**
* **/css/cssom/at-namespace.html**
* **/css/cssom/computed-style-002.html**
* **/css/cssom/getComputedStyle-display-none-002.html**
* **/css/cssom/getComputedStyle-display-none-003.html**
* **/css/cssom/preferred-stylesheet-reversed-order.html**
* **/css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html**
* **/css/cssom-view/pt-to-px-width.html**
* **/css/cssom-view/scroll-back-to-initial-position.html**
* **/css/css-text-decor/text-decoration-color-recalc-002.html**
* **/css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html**
* **/css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html**
* **/css/css-text/text-indent/percentage-value-intrinsic-size.html**
* **/css/css-text/white-space/display-contents-remove-whitespace-change.html**
* **/css/css-text/white-space/white-space-empty-text-sibling.html**
* **/css/css-transforms/change-perspective-property.html**
* **/css/css-transforms/change-scale-wide-range.html**
* **/css/css-transforms/change-transform-origin-property.html**
* **/css/css-transforms/dynamic-fixed-pos-cb-change.html**
* **/css/css-transforms/individual-transform/change-rotate-property.html**
* **/css/css-transforms/individual-transform/change-scale-property.html**
* **/css/css-transforms/paint-order-with-transform-change.html**
* **/css/css-transforms/size-change-under-backface-visibility-hidden.html**
* **/css/css-transforms/subpixel-transform-changes-001.html**
* **/css/css-transforms/subpixel-transform-changes-002.html**
* **/css/css-transforms/subpixel-transform-changes-003.html**
* **/css/css-transforms/subpixel-transform-changes-004.html**
* **/css/css-transitions/transition-reparented.html**
* **/css/css-ui/historical/moz-user-modify-01.html**
* **/css/css-ui/historical/user-modify-01.html**
* **/css/css-ui/historical/webkit-user-modify-01.html**
* **/css/css-ui/resize-change-margin.html**
* **/css/css-ui/text-overflow-change-color.html**
* **/css/css-ui/text-overflow-ellipsis-width-001.html**
* **/css/css-values/animations/line-height-lh-transition.html**
* **/css/css-values/calc-nesting.html**
* **/css/css-values/update-subpixel-rem-unit.html**
* **/css/css-values/viewport-units-modify.html**
* **/css/css-variables/css-variable-change-style-001.html**
* **/css/css-variables/css-variable-change-style-002.html**
* **/css/css-variables/variable-cycles.html**
* **/css/selectors/attribute-selectors/style-attribute-selector.html**
* **/css/selectors/i18n/lang-pseudo-class-disconnected.html**
* **/css/selectors/invalidation/attribute.html**
* **/css/selectors/invalidation/class-id-attr.html**
* **/css/selectors/invalidation/defined.html**
* **/css/selectors/invalidation/sheet-going-away-001.html**
* **/css/selectors/invalidation/sibling.html**
* **/css/selectors/missing-right-token.html**
* **/css/selectors/not-complex.html**
* **/css/selectors/not-specificity.html**
* **/css/selectors/nth-of-type-namespace.html**
* **/css/selectors/selectors-case-sensitive-001.html**
* **/css/selectors/visited-inheritance.html**
* **/custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html**
* **/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html**
* **/dom/nodes/remove-and-adopt-thcrash.html**
* **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html**
* **/html/browsers/history/the-history-interface/history_back_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_go_cross_realm_method.html**
* **/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html**
* **/html/dom/elements/images/bypass-cache-revalidation.html**
* **/html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html**
* **/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html**
* **/html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html**
* **/html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html**
* **/html/rendering/widgets/the-select-element/select-invalidation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html**
* **/html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-change.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html**
* **/html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html**
* **/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html**
* **/html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html**
* **/html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html**
* **/html/semantics/forms/the-input-element/radio-morphed.html**
* **/html/semantics/forms/the-progress-element/progress.html**
* **/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html**
* **/html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html**
* **/html/syntax/serializing-html-fragments/initial-linefeed-pre.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html**
* **/quirks/unitless-length/excluded-properties-001.html**
* **/quirks/unitless-length/excluded-properties-003.html**
* **/selection/caret/empty-elements.html**
* **/selection/contenteditable/cefalse-on-boundaries.html**
* **/selection/textcontrols/onselectionchange-content-attribute.html**
</details>

<details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary>

* **/css/css-animations/animation-base-response-001.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html**
* **/css/css-backgrounds/inheritance.sub.html**
* **/css/css-backgrounds/local-attachment-content-box-scroll.html**
* **/css/css-color/canvas-change-opacity.html**
* **/css/css-color/color-initial-canvastext.html**
* **/css/css-flexbox/flex-aspect-ratio-img-column-010.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-004.html**
* **/css/css-fonts/parsing/font-face-src-format.html**
  getter works but insertRule does nothing
* **/css/css-fonts/parsing/font-face-src-list.html**
  as above
* **/css/css-fonts/parsing/font-face-src-local.html**
  as above, but also delayed length change?
* **/css/css-fonts/parsing/font-face-src-tech.html**
  as above
* **/css/css-text/white-space/trailing-space-before-br-001.html**
* **/css/css-transforms/3d-rendering-context-behavior.html**
  failures are subject of test, but also blank page?
* **/css/css-transforms/individual-transform/change-translate-property.html**
* **/css/css-transforms/preserve-3d-flat-grouping-properties.html**
* **/css/css-transforms/transforms-support-calc.html**
* **/css/css-transitions/inherit-height-transition.html**
* **/css/css-ui/inheritance.html**
* **/css/css-ui/parsing/outline-width-computed.html**
  failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width
* **/css/css-values/lh-unit-003.html**
* **/css/css-values/viewport-units-compute.html**
* **/css/css-values/viewport-units-keyframes.html**
* **/css/css-values/viewport-units-media-queries.html**
* **/css/css-values/viewport-units-writing-mode.html**
* **/css/cssom-view/elementsFromPoint-table.html**
* **/css/cssom-view/scroll-behavior-default-css.html**
* **/css/cssom-view/scroll-behavior-element.html**
* **/css/cssom-view/scroll-behavior-main-frame-root.html**
* **/css/cssom-view/scroll-behavior-main-frame-window.html**
* **/css/cssom-view/scroll-behavior-smooth-navigation.html**
* **/css/cssom-view/scroll-behavior-subframe-root.html**
* **/css/cssom/computed-style-003.html**
* **/css/cssom/computed-style-004.html**
* **/css/cssom/font-variant-shorthand-serialization.html**
* **/css/selectors/dir-selector-auto.html**
* **/css/selectors/has-argument-with-explicit-scope.html**
* **/css/selectors/has-basic.html**
* **/css/selectors/has-relative-argument.html**
* **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html**
* **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/dir-pseudo-class-in-has.html**
* **/css/selectors/invalidation/empty-pseudo-in-has.html**
* **/css/selectors/invalidation/has-in-adjacent-position.html**
* **/css/selectors/invalidation/has-in-ancestor-position.html**
* **/css/selectors/invalidation/has-in-parent-position.html**
* **/css/selectors/invalidation/has-in-sibling-position.html**
* **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html**
* **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html**
* **/css/selectors/invalidation/has-sibling.html**
* **/css/selectors/invalidation/has-with-not.html**
* **/css/selectors/invalidation/has-with-pseudo-class.html**
* **/css/selectors/invalidation/input-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/lang-pseudo-class-in-has.html**
* **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/is-where-basic.html**
* **/css/selectors/is-where-not.html**
* **/html/rendering/non-replaced-elements/tables/form-in-tables.html**
* /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html**
* **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html**
* **/html/semantics/popovers/popover-stacking.html**
* **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html**
* **/resource-timing/resource-reload-TAO.html**
* **/selection/bidi/modify.tentative.html**
* **/selection/contenteditable/modify.tentative.html**
* **/selection/textcontrols/selectionchange.html**
* **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html**
* **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html**
* **/css/css-animations/computed-style-animation-parsing.html**
* **/css/css-variables/variables-substitute-guaranteed-invalid.html**
* **/css/cssom-view/elementsFromPoint-simple.html**
* **/css/cssom/CSSStyleSheet-modify-after-removal.html**
* **/css/cssom/getComputedStyle-display-none-001.html**
* **/css/selectors/focus-visible-script-focus-001.html**
* **/css/selectors/has-specificity.html**
* **/css/selectors/invalidation/is.html**
* **/css/selectors/invalidation/not-002.html**
* **/dom/events/EventListener-handleEvent-cross-realm.html**
* **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html**
* **/html/browsers/the-window-object/window-properties.https.html**
* **/html/browsers/the-window-object/window-prototype-chain.html**
* **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html**
* **/html/dom/aria-element-reflection.html**
* **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html**
* **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html**
* **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html**
* **/quirks/unitless-length/excluded-properties-002.html**
</details>

<details><summary>22× tests with failures that looked interesting</summary>

* 1× CRASH [expected ...]
    * **/css/css-fonts/crash-large-grapheme-cluster.html**
      crash is subject of test
* 6× FAIL [expected PASS] /... (reftest)
    * **/css/css-flexbox/anonymous-flex-item-005.html**
      old pass was spurious
    * **/css/css-flexbox/anonymous-flex-item-006.html**
      old pass was spurious
    * **/css/css-text-decor/text-decoration-line-recalc.html**
      old pass was spurious; ‘text-decoration’ shorthand unimplemented
    * **/css/css-ui/appearance-auto-non-html-namespace-001.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html**
      old pass was spurious
* 13× TIMEOUT [expected ...]
    * **/css/css-fonts/font-size-monospace-adjust.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/css/cssom-view/background-change-during-smooth-scroll.html**
      timeout is subject of test
    * **/css/selectors/invalidation/has-complexity.html**
      timeout is subject of test
    * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html**
      timeout is subject of test; :has() unimplemented
    * **/fetch/stale-while-revalidate/stale-image.html**
      timeout is subject of test
    * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html**
      timeout is subject of test
    * **/html/rendering/widgets/appearance/appearance-animation-001.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-animation-002.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-transition-001.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-002.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-003.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/resource-timing/opaque-origin.html**
      timeout is subject of test
    * **/selection/textcontrols/selectionchange-bubble.html**
      timeout is subject of test
* **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html**
  ‘HTMLDocument’ unimplemented
</details>

---
<!-- 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 #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 27, 2023
HTML #named-access-on-the-window-object

This patch implements [named access on the window object](https://html.spec.whatwg.org/#named-access-on-the-window-object) based on @pylbrecht’s and @yvt’s previous work (see also #27952, #25562, #21869, #19904).

That work makes 130 tests pass, and I’ve made some additional changes to make [the test for the feature itself](https://wpt.live/webidl/ecmascript-binding/window-named-properties-object.html) pass too, but I haven’t worked with mozjs before, so I have no idea if I’ve gone about my changes the Right Way.

In particular, this patch:

* [x] applies @pylbrecht’s patch (#27952)
* [x] resolves conflicts related to #29079 and #28546 (5ae0ca4)
* [x] applies @yvt’s patch to the segfault in getPrototypeIfOrdinary (1e24ffd)
* [x] reverts the change introducing Untransplantable (76dc35a), since #28534 was abandoned in favour of #28536
* [x] triages the unexpected WPT results, updating expectations as needed (see below)
* [x] fixes the failures in /webidl/ecmascript-binding/window-named-properties-object.html (3844f69)
    * [x] fixes the failures in the [[GetOwnProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[DefineOwnProperty]] subtest (e4e7a14)
    * [x] fixes the failures in the [[HasProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[Get]] subtest (4bafb27)
    * [x] fixes the failures in the [[Set]] (direct) subtest (e4e7a14)
    * [x] fixes the failures in the [[Delete]] subtest (4bafb27)
    * [x] fixes the failures in the [[OwnPropertyKeys]] subtest (afcd24a)
* [x] resolves the todos and fixmes
    * [x] Document: handle exposed objects ×3 (ed3e37b)
    * [x] Window::NamedGetter: document.get_elements_with_id() (618ef57)
    * [x] get_own_property_descriptor: check for interactions with indexed access (b906fae)
    * [x] create trap: pass proper classp (618ef57)

<details><summary>131× tests that now pass</summary>

* **/webidl/ecmascript-binding/window-named-properties-object.html**
  *directly relevant to this patch*
* **/FileAPI/Blob-methods-from-detached-frame.html**
  done #29450 #29451
* **/cors/script-304.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html**
* **/css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html**
* **/css/CSS2/floats/computed-float-position-absolute.html**
* **/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html**
* **/css/CSS2/normal-flow/block-in-inline-insert-018.html**
* **/css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html**
* **/css/CSS2/positioning/abspos-change-in-inline-block.html**
* **/css/CSS2/positioning/abspos-width-change-inline-container-001.html**
* **/css/CSS2/positioning/detach-abspos-before-layout.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html**
* **/css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html**
* **/css/CSS2/stacking-context/opacity-change-parent-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-change-twice-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html**
* **/css/css-animations/animation-base-response-002.html**
* **/css/css-animations/style-animation-parsing.html**
* **/css/css-backgrounds/background-clip-color-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html**
* **/css/css-backgrounds/background-image-none-gradient-repaint.html**
* **/css/css-backgrounds/border-radius-dynamic-from-no-radius.html**
* **/css/css-backgrounds/child-move-reveals-parent-background.html**
* **/css/css-color/filters-under-will-change-opacity.html**
* **/css/css-flexbox/anonymous-flex-item-001.html**
* **/css/css-flexbox/anonymous-flex-item-003.html**
* **/css/css-flexbox/dynamic-bsize-change.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-016.html**
* **/css/cssom/at-namespace.html**
* **/css/cssom/computed-style-002.html**
* **/css/cssom/getComputedStyle-display-none-002.html**
* **/css/cssom/getComputedStyle-display-none-003.html**
* **/css/cssom/preferred-stylesheet-reversed-order.html**
* **/css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html**
* **/css/cssom-view/pt-to-px-width.html**
* **/css/cssom-view/scroll-back-to-initial-position.html**
* **/css/css-text-decor/text-decoration-color-recalc-002.html**
* **/css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html**
* **/css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html**
* **/css/css-text/text-indent/percentage-value-intrinsic-size.html**
* **/css/css-text/white-space/display-contents-remove-whitespace-change.html**
* **/css/css-text/white-space/white-space-empty-text-sibling.html**
* **/css/css-transforms/change-perspective-property.html**
* **/css/css-transforms/change-scale-wide-range.html**
* **/css/css-transforms/change-transform-origin-property.html**
* **/css/css-transforms/dynamic-fixed-pos-cb-change.html**
* **/css/css-transforms/individual-transform/change-rotate-property.html**
* **/css/css-transforms/individual-transform/change-scale-property.html**
* **/css/css-transforms/paint-order-with-transform-change.html**
* **/css/css-transforms/size-change-under-backface-visibility-hidden.html**
* **/css/css-transforms/subpixel-transform-changes-001.html**
* **/css/css-transforms/subpixel-transform-changes-002.html**
* **/css/css-transforms/subpixel-transform-changes-003.html**
* **/css/css-transforms/subpixel-transform-changes-004.html**
* **/css/css-transitions/transition-reparented.html**
* **/css/css-ui/historical/moz-user-modify-01.html**
* **/css/css-ui/historical/user-modify-01.html**
* **/css/css-ui/historical/webkit-user-modify-01.html**
* **/css/css-ui/resize-change-margin.html**
* **/css/css-ui/text-overflow-change-color.html**
* **/css/css-ui/text-overflow-ellipsis-width-001.html**
* **/css/css-values/animations/line-height-lh-transition.html**
* **/css/css-values/calc-nesting.html**
* **/css/css-values/update-subpixel-rem-unit.html**
* **/css/css-values/viewport-units-modify.html**
* **/css/css-variables/css-variable-change-style-001.html**
* **/css/css-variables/css-variable-change-style-002.html**
* **/css/css-variables/variable-cycles.html**
* **/css/selectors/attribute-selectors/style-attribute-selector.html**
* **/css/selectors/i18n/lang-pseudo-class-disconnected.html**
* **/css/selectors/invalidation/attribute.html**
* **/css/selectors/invalidation/class-id-attr.html**
* **/css/selectors/invalidation/defined.html**
* **/css/selectors/invalidation/sheet-going-away-001.html**
* **/css/selectors/invalidation/sibling.html**
* **/css/selectors/missing-right-token.html**
* **/css/selectors/not-complex.html**
* **/css/selectors/not-specificity.html**
* **/css/selectors/nth-of-type-namespace.html**
* **/css/selectors/selectors-case-sensitive-001.html**
* **/css/selectors/visited-inheritance.html**
* **/custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html**
* **/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html**
* **/dom/nodes/remove-and-adopt-thcrash.html**
* **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html**
* **/html/browsers/history/the-history-interface/history_back_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_go_cross_realm_method.html**
* **/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html**
* **/html/dom/elements/images/bypass-cache-revalidation.html**
* **/html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html**
* **/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html**
* **/html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html**
* **/html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html**
* **/html/rendering/widgets/the-select-element/select-invalidation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html**
* **/html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-change.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html**
* **/html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html**
* **/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html**
* **/html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html**
* **/html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html**
* **/html/semantics/forms/the-input-element/radio-morphed.html**
* **/html/semantics/forms/the-progress-element/progress.html**
* **/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html**
* **/html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html**
* **/html/syntax/serializing-html-fragments/initial-linefeed-pre.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html**
* **/quirks/unitless-length/excluded-properties-001.html**
* **/quirks/unitless-length/excluded-properties-003.html**
* **/selection/caret/empty-elements.html**
* **/selection/contenteditable/cefalse-on-boundaries.html**
* **/selection/textcontrols/onselectionchange-content-attribute.html**
</details>

<details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary>

* **/css/css-animations/animation-base-response-001.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html**
* **/css/css-backgrounds/inheritance.sub.html**
* **/css/css-backgrounds/local-attachment-content-box-scroll.html**
* **/css/css-color/canvas-change-opacity.html**
* **/css/css-color/color-initial-canvastext.html**
* **/css/css-flexbox/flex-aspect-ratio-img-column-010.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-004.html**
* **/css/css-fonts/parsing/font-face-src-format.html**
  getter works but insertRule does nothing
* **/css/css-fonts/parsing/font-face-src-list.html**
  as above
* **/css/css-fonts/parsing/font-face-src-local.html**
  as above, but also delayed length change?
* **/css/css-fonts/parsing/font-face-src-tech.html**
  as above
* **/css/css-text/white-space/trailing-space-before-br-001.html**
* **/css/css-transforms/3d-rendering-context-behavior.html**
  failures are subject of test, but also blank page?
* **/css/css-transforms/individual-transform/change-translate-property.html**
* **/css/css-transforms/preserve-3d-flat-grouping-properties.html**
* **/css/css-transforms/transforms-support-calc.html**
* **/css/css-transitions/inherit-height-transition.html**
* **/css/css-ui/inheritance.html**
* **/css/css-ui/parsing/outline-width-computed.html**
  failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width
* **/css/css-values/lh-unit-003.html**
* **/css/css-values/viewport-units-compute.html**
* **/css/css-values/viewport-units-keyframes.html**
* **/css/css-values/viewport-units-media-queries.html**
* **/css/css-values/viewport-units-writing-mode.html**
* **/css/cssom-view/elementsFromPoint-table.html**
* **/css/cssom-view/scroll-behavior-default-css.html**
* **/css/cssom-view/scroll-behavior-element.html**
* **/css/cssom-view/scroll-behavior-main-frame-root.html**
* **/css/cssom-view/scroll-behavior-main-frame-window.html**
* **/css/cssom-view/scroll-behavior-smooth-navigation.html**
* **/css/cssom-view/scroll-behavior-subframe-root.html**
* **/css/cssom/computed-style-003.html**
* **/css/cssom/computed-style-004.html**
* **/css/cssom/font-variant-shorthand-serialization.html**
* **/css/selectors/dir-selector-auto.html**
* **/css/selectors/has-argument-with-explicit-scope.html**
* **/css/selectors/has-basic.html**
* **/css/selectors/has-relative-argument.html**
* **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html**
* **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/dir-pseudo-class-in-has.html**
* **/css/selectors/invalidation/empty-pseudo-in-has.html**
* **/css/selectors/invalidation/has-in-adjacent-position.html**
* **/css/selectors/invalidation/has-in-ancestor-position.html**
* **/css/selectors/invalidation/has-in-parent-position.html**
* **/css/selectors/invalidation/has-in-sibling-position.html**
* **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html**
* **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html**
* **/css/selectors/invalidation/has-sibling.html**
* **/css/selectors/invalidation/has-with-not.html**
* **/css/selectors/invalidation/has-with-pseudo-class.html**
* **/css/selectors/invalidation/input-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/lang-pseudo-class-in-has.html**
* **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/is-where-basic.html**
* **/css/selectors/is-where-not.html**
* **/html/rendering/non-replaced-elements/tables/form-in-tables.html**
* /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html**
* **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html**
* **/html/semantics/popovers/popover-stacking.html**
* **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html**
* **/resource-timing/resource-reload-TAO.html**
* **/selection/bidi/modify.tentative.html**
* **/selection/contenteditable/modify.tentative.html**
* **/selection/textcontrols/selectionchange.html**
* **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html**
* **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html**
* **/css/css-animations/computed-style-animation-parsing.html**
* **/css/css-variables/variables-substitute-guaranteed-invalid.html**
* **/css/cssom-view/elementsFromPoint-simple.html**
* **/css/cssom/CSSStyleSheet-modify-after-removal.html**
* **/css/cssom/getComputedStyle-display-none-001.html**
* **/css/selectors/focus-visible-script-focus-001.html**
* **/css/selectors/has-specificity.html**
* **/css/selectors/invalidation/is.html**
* **/css/selectors/invalidation/not-002.html**
* **/dom/events/EventListener-handleEvent-cross-realm.html**
* **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html**
* **/html/browsers/the-window-object/window-properties.https.html**
* **/html/browsers/the-window-object/window-prototype-chain.html**
* **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html**
* **/html/dom/aria-element-reflection.html**
* **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html**
* **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html**
* **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html**
* **/quirks/unitless-length/excluded-properties-002.html**
</details>

<details><summary>22× tests with failures that looked interesting</summary>

* 1× CRASH [expected ...]
    * **/css/css-fonts/crash-large-grapheme-cluster.html**
      crash is subject of test
* 6× FAIL [expected PASS] /... (reftest)
    * **/css/css-flexbox/anonymous-flex-item-005.html**
      old pass was spurious
    * **/css/css-flexbox/anonymous-flex-item-006.html**
      old pass was spurious
    * **/css/css-text-decor/text-decoration-line-recalc.html**
      old pass was spurious; ‘text-decoration’ shorthand unimplemented
    * **/css/css-ui/appearance-auto-non-html-namespace-001.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html**
      old pass was spurious
* 13× TIMEOUT [expected ...]
    * **/css/css-fonts/font-size-monospace-adjust.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/css/cssom-view/background-change-during-smooth-scroll.html**
      timeout is subject of test
    * **/css/selectors/invalidation/has-complexity.html**
      timeout is subject of test
    * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html**
      timeout is subject of test; :has() unimplemented
    * **/fetch/stale-while-revalidate/stale-image.html**
      timeout is subject of test
    * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html**
      timeout is subject of test
    * **/html/rendering/widgets/appearance/appearance-animation-001.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-animation-002.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-transition-001.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-002.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-003.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/resource-timing/opaque-origin.html**
      timeout is subject of test
    * **/selection/textcontrols/selectionchange-bubble.html**
      timeout is subject of test
* **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html**
  ‘HTMLDocument’ unimplemented
</details>

---
<!-- 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 #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 27, 2023
HTML #named-access-on-the-window-object

This patch implements [named access on the window object](https://html.spec.whatwg.org/#named-access-on-the-window-object) based on @pylbrecht’s and @yvt’s previous work (see also #27952, #25562, #21869, #19904).

That work makes 130 tests pass, and I’ve made some additional changes to make [the test for the feature itself](https://wpt.live/webidl/ecmascript-binding/window-named-properties-object.html) pass too, but I haven’t worked with mozjs before, so I have no idea if I’ve gone about my changes the Right Way.

In particular, this patch:

* [x] applies @pylbrecht’s patch (#27952)
* [x] resolves conflicts related to #29079 and #28546 (5ae0ca4)
* [x] applies @yvt’s patch to the segfault in getPrototypeIfOrdinary (1e24ffd)
* [x] reverts the change introducing Untransplantable (76dc35a), since #28534 was abandoned in favour of #28536
* [x] triages the unexpected WPT results, updating expectations as needed (see below)
* [x] fixes the failures in /webidl/ecmascript-binding/window-named-properties-object.html (3844f69)
    * [x] fixes the failures in the [[GetOwnProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[DefineOwnProperty]] subtest (e4e7a14)
    * [x] fixes the failures in the [[HasProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[Get]] subtest (4bafb27)
    * [x] fixes the failures in the [[Set]] (direct) subtest (e4e7a14)
    * [x] fixes the failures in the [[Delete]] subtest (4bafb27)
    * [x] fixes the failures in the [[OwnPropertyKeys]] subtest (afcd24a)
* [x] resolves the todos and fixmes
    * [x] Document: handle exposed objects ×3 (ed3e37b)
    * [x] Window::NamedGetter: document.get_elements_with_id() (618ef57)
    * [x] get_own_property_descriptor: check for interactions with indexed access (b906fae)
    * [x] create trap: pass proper classp (618ef57)

<details><summary>131× tests that now pass</summary>

* **/webidl/ecmascript-binding/window-named-properties-object.html**
  *directly relevant to this patch*
* **/FileAPI/Blob-methods-from-detached-frame.html**
  done #29450 #29451
* **/cors/script-304.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html**
* **/css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html**
* **/css/CSS2/floats/computed-float-position-absolute.html**
* **/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html**
* **/css/CSS2/normal-flow/block-in-inline-insert-018.html**
* **/css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html**
* **/css/CSS2/positioning/abspos-change-in-inline-block.html**
* **/css/CSS2/positioning/abspos-width-change-inline-container-001.html**
* **/css/CSS2/positioning/detach-abspos-before-layout.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html**
* **/css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html**
* **/css/CSS2/stacking-context/opacity-change-parent-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-change-twice-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html**
* **/css/css-animations/animation-base-response-002.html**
* **/css/css-animations/style-animation-parsing.html**
* **/css/css-backgrounds/background-clip-color-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html**
* **/css/css-backgrounds/background-image-none-gradient-repaint.html**
* **/css/css-backgrounds/border-radius-dynamic-from-no-radius.html**
* **/css/css-backgrounds/child-move-reveals-parent-background.html**
* **/css/css-color/filters-under-will-change-opacity.html**
* **/css/css-flexbox/anonymous-flex-item-001.html**
* **/css/css-flexbox/anonymous-flex-item-003.html**
* **/css/css-flexbox/dynamic-bsize-change.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-016.html**
* **/css/cssom/at-namespace.html**
* **/css/cssom/computed-style-002.html**
* **/css/cssom/getComputedStyle-display-none-002.html**
* **/css/cssom/getComputedStyle-display-none-003.html**
* **/css/cssom/preferred-stylesheet-reversed-order.html**
* **/css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html**
* **/css/cssom-view/pt-to-px-width.html**
* **/css/cssom-view/scroll-back-to-initial-position.html**
* **/css/css-text-decor/text-decoration-color-recalc-002.html**
* **/css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html**
* **/css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html**
* **/css/css-text/text-indent/percentage-value-intrinsic-size.html**
* **/css/css-text/white-space/display-contents-remove-whitespace-change.html**
* **/css/css-text/white-space/white-space-empty-text-sibling.html**
* **/css/css-transforms/change-perspective-property.html**
* **/css/css-transforms/change-scale-wide-range.html**
* **/css/css-transforms/change-transform-origin-property.html**
* **/css/css-transforms/dynamic-fixed-pos-cb-change.html**
* **/css/css-transforms/individual-transform/change-rotate-property.html**
* **/css/css-transforms/individual-transform/change-scale-property.html**
* **/css/css-transforms/paint-order-with-transform-change.html**
* **/css/css-transforms/size-change-under-backface-visibility-hidden.html**
* **/css/css-transforms/subpixel-transform-changes-001.html**
* **/css/css-transforms/subpixel-transform-changes-002.html**
* **/css/css-transforms/subpixel-transform-changes-003.html**
* **/css/css-transforms/subpixel-transform-changes-004.html**
* **/css/css-transitions/transition-reparented.html**
* **/css/css-ui/historical/moz-user-modify-01.html**
* **/css/css-ui/historical/user-modify-01.html**
* **/css/css-ui/historical/webkit-user-modify-01.html**
* **/css/css-ui/resize-change-margin.html**
* **/css/css-ui/text-overflow-change-color.html**
* **/css/css-ui/text-overflow-ellipsis-width-001.html**
* **/css/css-values/animations/line-height-lh-transition.html**
* **/css/css-values/calc-nesting.html**
* **/css/css-values/update-subpixel-rem-unit.html**
* **/css/css-values/viewport-units-modify.html**
* **/css/css-variables/css-variable-change-style-001.html**
* **/css/css-variables/css-variable-change-style-002.html**
* **/css/css-variables/variable-cycles.html**
* **/css/selectors/attribute-selectors/style-attribute-selector.html**
* **/css/selectors/i18n/lang-pseudo-class-disconnected.html**
* **/css/selectors/invalidation/attribute.html**
* **/css/selectors/invalidation/class-id-attr.html**
* **/css/selectors/invalidation/defined.html**
* **/css/selectors/invalidation/sheet-going-away-001.html**
* **/css/selectors/invalidation/sibling.html**
* **/css/selectors/missing-right-token.html**
* **/css/selectors/not-complex.html**
* **/css/selectors/not-specificity.html**
* **/css/selectors/nth-of-type-namespace.html**
* **/css/selectors/selectors-case-sensitive-001.html**
* **/css/selectors/visited-inheritance.html**
* **/custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html**
* **/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html**
* **/dom/nodes/remove-and-adopt-thcrash.html**
* **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html**
* **/html/browsers/history/the-history-interface/history_back_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_go_cross_realm_method.html**
* **/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html**
* **/html/dom/elements/images/bypass-cache-revalidation.html**
* **/html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html**
* **/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html**
* **/html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html**
* **/html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html**
* **/html/rendering/widgets/the-select-element/select-invalidation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html**
* **/html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-change.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html**
* **/html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html**
* **/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html**
* **/html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html**
* **/html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html**
* **/html/semantics/forms/the-input-element/radio-morphed.html**
* **/html/semantics/forms/the-progress-element/progress.html**
* **/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html**
* **/html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html**
* **/html/syntax/serializing-html-fragments/initial-linefeed-pre.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html**
* **/quirks/unitless-length/excluded-properties-001.html**
* **/quirks/unitless-length/excluded-properties-003.html**
* **/selection/caret/empty-elements.html**
* **/selection/contenteditable/cefalse-on-boundaries.html**
* **/selection/textcontrols/onselectionchange-content-attribute.html**
</details>

<details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary>

* **/css/css-animations/animation-base-response-001.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html**
* **/css/css-backgrounds/inheritance.sub.html**
* **/css/css-backgrounds/local-attachment-content-box-scroll.html**
* **/css/css-color/canvas-change-opacity.html**
* **/css/css-color/color-initial-canvastext.html**
* **/css/css-flexbox/flex-aspect-ratio-img-column-010.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-004.html**
* **/css/css-fonts/parsing/font-face-src-format.html**
  getter works but insertRule does nothing
* **/css/css-fonts/parsing/font-face-src-list.html**
  as above
* **/css/css-fonts/parsing/font-face-src-local.html**
  as above, but also delayed length change?
* **/css/css-fonts/parsing/font-face-src-tech.html**
  as above
* **/css/css-text/white-space/trailing-space-before-br-001.html**
* **/css/css-transforms/3d-rendering-context-behavior.html**
  failures are subject of test, but also blank page?
* **/css/css-transforms/individual-transform/change-translate-property.html**
* **/css/css-transforms/preserve-3d-flat-grouping-properties.html**
* **/css/css-transforms/transforms-support-calc.html**
* **/css/css-transitions/inherit-height-transition.html**
* **/css/css-ui/inheritance.html**
* **/css/css-ui/parsing/outline-width-computed.html**
  failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width
* **/css/css-values/lh-unit-003.html**
* **/css/css-values/viewport-units-compute.html**
* **/css/css-values/viewport-units-keyframes.html**
* **/css/css-values/viewport-units-media-queries.html**
* **/css/css-values/viewport-units-writing-mode.html**
* **/css/cssom-view/elementsFromPoint-table.html**
* **/css/cssom-view/scroll-behavior-default-css.html**
* **/css/cssom-view/scroll-behavior-element.html**
* **/css/cssom-view/scroll-behavior-main-frame-root.html**
* **/css/cssom-view/scroll-behavior-main-frame-window.html**
* **/css/cssom-view/scroll-behavior-smooth-navigation.html**
* **/css/cssom-view/scroll-behavior-subframe-root.html**
* **/css/cssom/computed-style-003.html**
* **/css/cssom/computed-style-004.html**
* **/css/cssom/font-variant-shorthand-serialization.html**
* **/css/selectors/dir-selector-auto.html**
* **/css/selectors/has-argument-with-explicit-scope.html**
* **/css/selectors/has-basic.html**
* **/css/selectors/has-relative-argument.html**
* **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html**
* **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/dir-pseudo-class-in-has.html**
* **/css/selectors/invalidation/empty-pseudo-in-has.html**
* **/css/selectors/invalidation/has-in-adjacent-position.html**
* **/css/selectors/invalidation/has-in-ancestor-position.html**
* **/css/selectors/invalidation/has-in-parent-position.html**
* **/css/selectors/invalidation/has-in-sibling-position.html**
* **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html**
* **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html**
* **/css/selectors/invalidation/has-sibling.html**
* **/css/selectors/invalidation/has-with-not.html**
* **/css/selectors/invalidation/has-with-pseudo-class.html**
* **/css/selectors/invalidation/input-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/lang-pseudo-class-in-has.html**
* **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/is-where-basic.html**
* **/css/selectors/is-where-not.html**
* **/html/rendering/non-replaced-elements/tables/form-in-tables.html**
* /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html**
* **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html**
* **/html/semantics/popovers/popover-stacking.html**
* **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html**
* **/resource-timing/resource-reload-TAO.html**
* **/selection/bidi/modify.tentative.html**
* **/selection/contenteditable/modify.tentative.html**
* **/selection/textcontrols/selectionchange.html**
* **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html**
* **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html**
* **/css/css-animations/computed-style-animation-parsing.html**
* **/css/css-variables/variables-substitute-guaranteed-invalid.html**
* **/css/cssom-view/elementsFromPoint-simple.html**
* **/css/cssom/CSSStyleSheet-modify-after-removal.html**
* **/css/cssom/getComputedStyle-display-none-001.html**
* **/css/selectors/focus-visible-script-focus-001.html**
* **/css/selectors/has-specificity.html**
* **/css/selectors/invalidation/is.html**
* **/css/selectors/invalidation/not-002.html**
* **/dom/events/EventListener-handleEvent-cross-realm.html**
* **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html**
* **/html/browsers/the-window-object/window-properties.https.html**
* **/html/browsers/the-window-object/window-prototype-chain.html**
* **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html**
* **/html/dom/aria-element-reflection.html**
* **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html**
* **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html**
* **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html**
* **/quirks/unitless-length/excluded-properties-002.html**
</details>

<details><summary>22× tests with failures that looked interesting</summary>

* 1× CRASH [expected ...]
    * **/css/css-fonts/crash-large-grapheme-cluster.html**
      crash is subject of test
* 6× FAIL [expected PASS] /... (reftest)
    * **/css/css-flexbox/anonymous-flex-item-005.html**
      old pass was spurious
    * **/css/css-flexbox/anonymous-flex-item-006.html**
      old pass was spurious
    * **/css/css-text-decor/text-decoration-line-recalc.html**
      old pass was spurious; ‘text-decoration’ shorthand unimplemented
    * **/css/css-ui/appearance-auto-non-html-namespace-001.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html**
      old pass was spurious
* 13× TIMEOUT [expected ...]
    * **/css/css-fonts/font-size-monospace-adjust.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/css/cssom-view/background-change-during-smooth-scroll.html**
      timeout is subject of test
    * **/css/selectors/invalidation/has-complexity.html**
      timeout is subject of test
    * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html**
      timeout is subject of test; :has() unimplemented
    * **/fetch/stale-while-revalidate/stale-image.html**
      timeout is subject of test
    * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html**
      timeout is subject of test
    * **/html/rendering/widgets/appearance/appearance-animation-001.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-animation-002.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-transition-001.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-002.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-003.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/resource-timing/opaque-origin.html**
      timeout is subject of test
    * **/selection/textcontrols/selectionchange-bubble.html**
      timeout is subject of test
* **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html**
  ‘HTMLDocument’ unimplemented
</details>

---
<!-- 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 #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 27, 2023
HTML #named-access-on-the-window-object

This patch implements [named access on the window object](https://html.spec.whatwg.org/#named-access-on-the-window-object) based on @pylbrecht’s and @yvt’s previous work (see also #27952, #25562, #21869, #19904).

That work makes 130 tests pass, and I’ve made some additional changes to make [the test for the feature itself](https://wpt.live/webidl/ecmascript-binding/window-named-properties-object.html) pass too, but I haven’t worked with mozjs before, so I have no idea if I’ve gone about my changes the Right Way.

In particular, this patch:

* [x] applies @pylbrecht’s patch (#27952)
* [x] resolves conflicts related to #29079 and #28546 (5ae0ca4)
* [x] applies @yvt’s patch to the segfault in getPrototypeIfOrdinary (1e24ffd)
* [x] reverts the change introducing Untransplantable (76dc35a), since #28534 was abandoned in favour of #28536
* [x] triages the unexpected WPT results, updating expectations as needed (see below)
* [x] fixes the failures in /webidl/ecmascript-binding/window-named-properties-object.html (3844f69)
    * [x] fixes the failures in the [[GetOwnProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[DefineOwnProperty]] subtest (e4e7a14)
    * [x] fixes the failures in the [[HasProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[Get]] subtest (4bafb27)
    * [x] fixes the failures in the [[Set]] (direct) subtest (e4e7a14)
    * [x] fixes the failures in the [[Delete]] subtest (4bafb27)
    * [x] fixes the failures in the [[OwnPropertyKeys]] subtest (afcd24a)
* [x] resolves the todos and fixmes
    * [x] Document: handle exposed objects ×3 (ed3e37b)
    * [x] Window::NamedGetter: document.get_elements_with_id() (618ef57)
    * [x] get_own_property_descriptor: check for interactions with indexed access (b906fae)
    * [x] create trap: pass proper classp (618ef57)

<details><summary>131× tests that now pass</summary>

* **/webidl/ecmascript-binding/window-named-properties-object.html**
  *directly relevant to this patch*
* **/FileAPI/Blob-methods-from-detached-frame.html**
  done #29450 #29451
* **/cors/script-304.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html**
* **/css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html**
* **/css/CSS2/floats/computed-float-position-absolute.html**
* **/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html**
* **/css/CSS2/normal-flow/block-in-inline-insert-018.html**
* **/css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html**
* **/css/CSS2/positioning/abspos-change-in-inline-block.html**
* **/css/CSS2/positioning/abspos-width-change-inline-container-001.html**
* **/css/CSS2/positioning/detach-abspos-before-layout.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html**
* **/css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html**
* **/css/CSS2/stacking-context/opacity-change-parent-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-change-twice-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html**
* **/css/css-animations/animation-base-response-002.html**
* **/css/css-animations/style-animation-parsing.html**
* **/css/css-backgrounds/background-clip-color-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html**
* **/css/css-backgrounds/background-image-none-gradient-repaint.html**
* **/css/css-backgrounds/border-radius-dynamic-from-no-radius.html**
* **/css/css-backgrounds/child-move-reveals-parent-background.html**
* **/css/css-color/filters-under-will-change-opacity.html**
* **/css/css-flexbox/anonymous-flex-item-001.html**
* **/css/css-flexbox/anonymous-flex-item-003.html**
* **/css/css-flexbox/dynamic-bsize-change.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-016.html**
* **/css/cssom/at-namespace.html**
* **/css/cssom/computed-style-002.html**
* **/css/cssom/getComputedStyle-display-none-002.html**
* **/css/cssom/getComputedStyle-display-none-003.html**
* **/css/cssom/preferred-stylesheet-reversed-order.html**
* **/css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html**
* **/css/cssom-view/pt-to-px-width.html**
* **/css/cssom-view/scroll-back-to-initial-position.html**
* **/css/css-text-decor/text-decoration-color-recalc-002.html**
* **/css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html**
* **/css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html**
* **/css/css-text/text-indent/percentage-value-intrinsic-size.html**
* **/css/css-text/white-space/display-contents-remove-whitespace-change.html**
* **/css/css-text/white-space/white-space-empty-text-sibling.html**
* **/css/css-transforms/change-perspective-property.html**
* **/css/css-transforms/change-scale-wide-range.html**
* **/css/css-transforms/change-transform-origin-property.html**
* **/css/css-transforms/dynamic-fixed-pos-cb-change.html**
* **/css/css-transforms/individual-transform/change-rotate-property.html**
* **/css/css-transforms/individual-transform/change-scale-property.html**
* **/css/css-transforms/paint-order-with-transform-change.html**
* **/css/css-transforms/size-change-under-backface-visibility-hidden.html**
* **/css/css-transforms/subpixel-transform-changes-001.html**
* **/css/css-transforms/subpixel-transform-changes-002.html**
* **/css/css-transforms/subpixel-transform-changes-003.html**
* **/css/css-transforms/subpixel-transform-changes-004.html**
* **/css/css-transitions/transition-reparented.html**
* **/css/css-ui/historical/moz-user-modify-01.html**
* **/css/css-ui/historical/user-modify-01.html**
* **/css/css-ui/historical/webkit-user-modify-01.html**
* **/css/css-ui/resize-change-margin.html**
* **/css/css-ui/text-overflow-change-color.html**
* **/css/css-ui/text-overflow-ellipsis-width-001.html**
* **/css/css-values/animations/line-height-lh-transition.html**
* **/css/css-values/calc-nesting.html**
* **/css/css-values/update-subpixel-rem-unit.html**
* **/css/css-values/viewport-units-modify.html**
* **/css/css-variables/css-variable-change-style-001.html**
* **/css/css-variables/css-variable-change-style-002.html**
* **/css/css-variables/variable-cycles.html**
* **/css/selectors/attribute-selectors/style-attribute-selector.html**
* **/css/selectors/i18n/lang-pseudo-class-disconnected.html**
* **/css/selectors/invalidation/attribute.html**
* **/css/selectors/invalidation/class-id-attr.html**
* **/css/selectors/invalidation/defined.html**
* **/css/selectors/invalidation/sheet-going-away-001.html**
* **/css/selectors/invalidation/sibling.html**
* **/css/selectors/missing-right-token.html**
* **/css/selectors/not-complex.html**
* **/css/selectors/not-specificity.html**
* **/css/selectors/nth-of-type-namespace.html**
* **/css/selectors/selectors-case-sensitive-001.html**
* **/css/selectors/visited-inheritance.html**
* **/custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html**
* **/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html**
* **/dom/nodes/remove-and-adopt-thcrash.html**
* **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html**
* **/html/browsers/history/the-history-interface/history_back_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_go_cross_realm_method.html**
* **/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html**
* **/html/dom/elements/images/bypass-cache-revalidation.html**
* **/html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html**
* **/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html**
* **/html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html**
* **/html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html**
* **/html/rendering/widgets/the-select-element/select-invalidation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html**
* **/html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-change.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html**
* **/html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html**
* **/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html**
* **/html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html**
* **/html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html**
* **/html/semantics/forms/the-input-element/radio-morphed.html**
* **/html/semantics/forms/the-progress-element/progress.html**
* **/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html**
* **/html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html**
* **/html/syntax/serializing-html-fragments/initial-linefeed-pre.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html**
* **/quirks/unitless-length/excluded-properties-001.html**
* **/quirks/unitless-length/excluded-properties-003.html**
* **/selection/caret/empty-elements.html**
* **/selection/contenteditable/cefalse-on-boundaries.html**
* **/selection/textcontrols/onselectionchange-content-attribute.html**
</details>

<details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary>

* **/css/css-animations/animation-base-response-001.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html**
* **/css/css-backgrounds/inheritance.sub.html**
* **/css/css-backgrounds/local-attachment-content-box-scroll.html**
* **/css/css-color/canvas-change-opacity.html**
* **/css/css-color/color-initial-canvastext.html**
* **/css/css-flexbox/flex-aspect-ratio-img-column-010.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-004.html**
* **/css/css-fonts/parsing/font-face-src-format.html**
  getter works but insertRule does nothing
* **/css/css-fonts/parsing/font-face-src-list.html**
  as above
* **/css/css-fonts/parsing/font-face-src-local.html**
  as above, but also delayed length change?
* **/css/css-fonts/parsing/font-face-src-tech.html**
  as above
* **/css/css-text/white-space/trailing-space-before-br-001.html**
* **/css/css-transforms/3d-rendering-context-behavior.html**
  failures are subject of test, but also blank page?
* **/css/css-transforms/individual-transform/change-translate-property.html**
* **/css/css-transforms/preserve-3d-flat-grouping-properties.html**
* **/css/css-transforms/transforms-support-calc.html**
* **/css/css-transitions/inherit-height-transition.html**
* **/css/css-ui/inheritance.html**
* **/css/css-ui/parsing/outline-width-computed.html**
  failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width
* **/css/css-values/lh-unit-003.html**
* **/css/css-values/viewport-units-compute.html**
* **/css/css-values/viewport-units-keyframes.html**
* **/css/css-values/viewport-units-media-queries.html**
* **/css/css-values/viewport-units-writing-mode.html**
* **/css/cssom-view/elementsFromPoint-table.html**
* **/css/cssom-view/scroll-behavior-default-css.html**
* **/css/cssom-view/scroll-behavior-element.html**
* **/css/cssom-view/scroll-behavior-main-frame-root.html**
* **/css/cssom-view/scroll-behavior-main-frame-window.html**
* **/css/cssom-view/scroll-behavior-smooth-navigation.html**
* **/css/cssom-view/scroll-behavior-subframe-root.html**
* **/css/cssom/computed-style-003.html**
* **/css/cssom/computed-style-004.html**
* **/css/cssom/font-variant-shorthand-serialization.html**
* **/css/selectors/dir-selector-auto.html**
* **/css/selectors/has-argument-with-explicit-scope.html**
* **/css/selectors/has-basic.html**
* **/css/selectors/has-relative-argument.html**
* **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html**
* **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/dir-pseudo-class-in-has.html**
* **/css/selectors/invalidation/empty-pseudo-in-has.html**
* **/css/selectors/invalidation/has-in-adjacent-position.html**
* **/css/selectors/invalidation/has-in-ancestor-position.html**
* **/css/selectors/invalidation/has-in-parent-position.html**
* **/css/selectors/invalidation/has-in-sibling-position.html**
* **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html**
* **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html**
* **/css/selectors/invalidation/has-sibling.html**
* **/css/selectors/invalidation/has-with-not.html**
* **/css/selectors/invalidation/has-with-pseudo-class.html**
* **/css/selectors/invalidation/input-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/lang-pseudo-class-in-has.html**
* **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/is-where-basic.html**
* **/css/selectors/is-where-not.html**
* **/html/rendering/non-replaced-elements/tables/form-in-tables.html**
* /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html**
* **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html**
* **/html/semantics/popovers/popover-stacking.html**
* **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html**
* **/resource-timing/resource-reload-TAO.html**
* **/selection/bidi/modify.tentative.html**
* **/selection/contenteditable/modify.tentative.html**
* **/selection/textcontrols/selectionchange.html**
* **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html**
* **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html**
* **/css/css-animations/computed-style-animation-parsing.html**
* **/css/css-variables/variables-substitute-guaranteed-invalid.html**
* **/css/cssom-view/elementsFromPoint-simple.html**
* **/css/cssom/CSSStyleSheet-modify-after-removal.html**
* **/css/cssom/getComputedStyle-display-none-001.html**
* **/css/selectors/focus-visible-script-focus-001.html**
* **/css/selectors/has-specificity.html**
* **/css/selectors/invalidation/is.html**
* **/css/selectors/invalidation/not-002.html**
* **/dom/events/EventListener-handleEvent-cross-realm.html**
* **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html**
* **/html/browsers/the-window-object/window-properties.https.html**
* **/html/browsers/the-window-object/window-prototype-chain.html**
* **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html**
* **/html/dom/aria-element-reflection.html**
* **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html**
* **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html**
* **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html**
* **/quirks/unitless-length/excluded-properties-002.html**
</details>

<details><summary>22× tests with failures that looked interesting</summary>

* 1× CRASH [expected ...]
    * **/css/css-fonts/crash-large-grapheme-cluster.html**
      crash is subject of test
* 6× FAIL [expected PASS] /... (reftest)
    * **/css/css-flexbox/anonymous-flex-item-005.html**
      old pass was spurious
    * **/css/css-flexbox/anonymous-flex-item-006.html**
      old pass was spurious
    * **/css/css-text-decor/text-decoration-line-recalc.html**
      old pass was spurious; ‘text-decoration’ shorthand unimplemented
    * **/css/css-ui/appearance-auto-non-html-namespace-001.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html**
      old pass was spurious
* 13× TIMEOUT [expected ...]
    * **/css/css-fonts/font-size-monospace-adjust.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/css/cssom-view/background-change-during-smooth-scroll.html**
      timeout is subject of test
    * **/css/selectors/invalidation/has-complexity.html**
      timeout is subject of test
    * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html**
      timeout is subject of test; :has() unimplemented
    * **/fetch/stale-while-revalidate/stale-image.html**
      timeout is subject of test
    * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html**
      timeout is subject of test
    * **/html/rendering/widgets/appearance/appearance-animation-001.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-animation-002.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-transition-001.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-002.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-003.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/resource-timing/opaque-origin.html**
      timeout is subject of test
    * **/selection/textcontrols/selectionchange-bubble.html**
      timeout is subject of test
* **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html**
  ‘HTMLDocument’ unimplemented
</details>

---
<!-- 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 #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 27, 2023
HTML #named-access-on-the-window-object

This patch implements [named access on the window object](https://html.spec.whatwg.org/#named-access-on-the-window-object) based on @pylbrecht’s and @yvt’s previous work (see also #27952, #25562, #21869, #19904).

That work makes 130 tests pass, and I’ve made some additional changes to make [the test for the feature itself](https://wpt.live/webidl/ecmascript-binding/window-named-properties-object.html) pass too, but I haven’t worked with mozjs before, so I have no idea if I’ve gone about my changes the Right Way.

In particular, this patch:

* [x] applies @pylbrecht’s patch (#27952)
* [x] resolves conflicts related to #29079 and #28546 (5ae0ca4)
* [x] applies @yvt’s patch to the segfault in getPrototypeIfOrdinary (1e24ffd)
* [x] reverts the change introducing Untransplantable (76dc35a), since #28534 was abandoned in favour of #28536
* [x] triages the unexpected WPT results, updating expectations as needed (see below)
* [x] fixes the failures in /webidl/ecmascript-binding/window-named-properties-object.html (3844f69)
    * [x] fixes the failures in the [[GetOwnProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[DefineOwnProperty]] subtest (e4e7a14)
    * [x] fixes the failures in the [[HasProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[Get]] subtest (4bafb27)
    * [x] fixes the failures in the [[Set]] (direct) subtest (e4e7a14)
    * [x] fixes the failures in the [[Delete]] subtest (4bafb27)
    * [x] fixes the failures in the [[OwnPropertyKeys]] subtest (afcd24a)
* [x] resolves the todos and fixmes
    * [x] Document: handle exposed objects ×3 (ed3e37b)
    * [x] Window::NamedGetter: document.get_elements_with_id() (618ef57)
    * [x] get_own_property_descriptor: check for interactions with indexed access (b906fae)
    * [x] create trap: pass proper classp (618ef57)

<details><summary>131× tests that now pass</summary>

* **/webidl/ecmascript-binding/window-named-properties-object.html**
  *directly relevant to this patch*
* **/FileAPI/Blob-methods-from-detached-frame.html**
  done #29450 #29451
* **/cors/script-304.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html**
* **/css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html**
* **/css/CSS2/floats/computed-float-position-absolute.html**
* **/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html**
* **/css/CSS2/normal-flow/block-in-inline-insert-018.html**
* **/css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html**
* **/css/CSS2/positioning/abspos-change-in-inline-block.html**
* **/css/CSS2/positioning/abspos-width-change-inline-container-001.html**
* **/css/CSS2/positioning/detach-abspos-before-layout.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html**
* **/css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html**
* **/css/CSS2/stacking-context/opacity-change-parent-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-change-twice-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html**
* **/css/css-animations/animation-base-response-002.html**
* **/css/css-animations/style-animation-parsing.html**
* **/css/css-backgrounds/background-clip-color-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html**
* **/css/css-backgrounds/background-image-none-gradient-repaint.html**
* **/css/css-backgrounds/border-radius-dynamic-from-no-radius.html**
* **/css/css-backgrounds/child-move-reveals-parent-background.html**
* **/css/css-color/filters-under-will-change-opacity.html**
* **/css/css-flexbox/anonymous-flex-item-001.html**
* **/css/css-flexbox/anonymous-flex-item-003.html**
* **/css/css-flexbox/dynamic-bsize-change.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-016.html**
* **/css/cssom/at-namespace.html**
* **/css/cssom/computed-style-002.html**
* **/css/cssom/getComputedStyle-display-none-002.html**
* **/css/cssom/getComputedStyle-display-none-003.html**
* **/css/cssom/preferred-stylesheet-reversed-order.html**
* **/css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html**
* **/css/cssom-view/pt-to-px-width.html**
* **/css/cssom-view/scroll-back-to-initial-position.html**
* **/css/css-text-decor/text-decoration-color-recalc-002.html**
* **/css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html**
* **/css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html**
* **/css/css-text/text-indent/percentage-value-intrinsic-size.html**
* **/css/css-text/white-space/display-contents-remove-whitespace-change.html**
* **/css/css-text/white-space/white-space-empty-text-sibling.html**
* **/css/css-transforms/change-perspective-property.html**
* **/css/css-transforms/change-scale-wide-range.html**
* **/css/css-transforms/change-transform-origin-property.html**
* **/css/css-transforms/dynamic-fixed-pos-cb-change.html**
* **/css/css-transforms/individual-transform/change-rotate-property.html**
* **/css/css-transforms/individual-transform/change-scale-property.html**
* **/css/css-transforms/paint-order-with-transform-change.html**
* **/css/css-transforms/size-change-under-backface-visibility-hidden.html**
* **/css/css-transforms/subpixel-transform-changes-001.html**
* **/css/css-transforms/subpixel-transform-changes-002.html**
* **/css/css-transforms/subpixel-transform-changes-003.html**
* **/css/css-transforms/subpixel-transform-changes-004.html**
* **/css/css-transitions/transition-reparented.html**
* **/css/css-ui/historical/moz-user-modify-01.html**
* **/css/css-ui/historical/user-modify-01.html**
* **/css/css-ui/historical/webkit-user-modify-01.html**
* **/css/css-ui/resize-change-margin.html**
* **/css/css-ui/text-overflow-change-color.html**
* **/css/css-ui/text-overflow-ellipsis-width-001.html**
* **/css/css-values/animations/line-height-lh-transition.html**
* **/css/css-values/calc-nesting.html**
* **/css/css-values/update-subpixel-rem-unit.html**
* **/css/css-values/viewport-units-modify.html**
* **/css/css-variables/css-variable-change-style-001.html**
* **/css/css-variables/css-variable-change-style-002.html**
* **/css/css-variables/variable-cycles.html**
* **/css/selectors/attribute-selectors/style-attribute-selector.html**
* **/css/selectors/i18n/lang-pseudo-class-disconnected.html**
* **/css/selectors/invalidation/attribute.html**
* **/css/selectors/invalidation/class-id-attr.html**
* **/css/selectors/invalidation/defined.html**
* **/css/selectors/invalidation/sheet-going-away-001.html**
* **/css/selectors/invalidation/sibling.html**
* **/css/selectors/missing-right-token.html**
* **/css/selectors/not-complex.html**
* **/css/selectors/not-specificity.html**
* **/css/selectors/nth-of-type-namespace.html**
* **/css/selectors/selectors-case-sensitive-001.html**
* **/css/selectors/visited-inheritance.html**
* **/custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html**
* **/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html**
* **/dom/nodes/remove-and-adopt-thcrash.html**
* **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html**
* **/html/browsers/history/the-history-interface/history_back_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_go_cross_realm_method.html**
* **/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html**
* **/html/dom/elements/images/bypass-cache-revalidation.html**
* **/html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html**
* **/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html**
* **/html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html**
* **/html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html**
* **/html/rendering/widgets/the-select-element/select-invalidation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html**
* **/html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-change.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html**
* **/html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html**
* **/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html**
* **/html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html**
* **/html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html**
* **/html/semantics/forms/the-input-element/radio-morphed.html**
* **/html/semantics/forms/the-progress-element/progress.html**
* **/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html**
* **/html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html**
* **/html/syntax/serializing-html-fragments/initial-linefeed-pre.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html**
* **/quirks/unitless-length/excluded-properties-001.html**
* **/quirks/unitless-length/excluded-properties-003.html**
* **/selection/caret/empty-elements.html**
* **/selection/contenteditable/cefalse-on-boundaries.html**
* **/selection/textcontrols/onselectionchange-content-attribute.html**
</details>

<details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary>

* **/css/css-animations/animation-base-response-001.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html**
* **/css/css-backgrounds/inheritance.sub.html**
* **/css/css-backgrounds/local-attachment-content-box-scroll.html**
* **/css/css-color/canvas-change-opacity.html**
* **/css/css-color/color-initial-canvastext.html**
* **/css/css-flexbox/flex-aspect-ratio-img-column-010.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-004.html**
* **/css/css-fonts/parsing/font-face-src-format.html**
  getter works but insertRule does nothing
* **/css/css-fonts/parsing/font-face-src-list.html**
  as above
* **/css/css-fonts/parsing/font-face-src-local.html**
  as above, but also delayed length change?
* **/css/css-fonts/parsing/font-face-src-tech.html**
  as above
* **/css/css-text/white-space/trailing-space-before-br-001.html**
* **/css/css-transforms/3d-rendering-context-behavior.html**
  failures are subject of test, but also blank page?
* **/css/css-transforms/individual-transform/change-translate-property.html**
* **/css/css-transforms/preserve-3d-flat-grouping-properties.html**
* **/css/css-transforms/transforms-support-calc.html**
* **/css/css-transitions/inherit-height-transition.html**
* **/css/css-ui/inheritance.html**
* **/css/css-ui/parsing/outline-width-computed.html**
  failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width
* **/css/css-values/lh-unit-003.html**
* **/css/css-values/viewport-units-compute.html**
* **/css/css-values/viewport-units-keyframes.html**
* **/css/css-values/viewport-units-media-queries.html**
* **/css/css-values/viewport-units-writing-mode.html**
* **/css/cssom-view/elementsFromPoint-table.html**
* **/css/cssom-view/scroll-behavior-default-css.html**
* **/css/cssom-view/scroll-behavior-element.html**
* **/css/cssom-view/scroll-behavior-main-frame-root.html**
* **/css/cssom-view/scroll-behavior-main-frame-window.html**
* **/css/cssom-view/scroll-behavior-smooth-navigation.html**
* **/css/cssom-view/scroll-behavior-subframe-root.html**
* **/css/cssom/computed-style-003.html**
* **/css/cssom/computed-style-004.html**
* **/css/cssom/font-variant-shorthand-serialization.html**
* **/css/selectors/dir-selector-auto.html**
* **/css/selectors/has-argument-with-explicit-scope.html**
* **/css/selectors/has-basic.html**
* **/css/selectors/has-relative-argument.html**
* **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html**
* **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/dir-pseudo-class-in-has.html**
* **/css/selectors/invalidation/empty-pseudo-in-has.html**
* **/css/selectors/invalidation/has-in-adjacent-position.html**
* **/css/selectors/invalidation/has-in-ancestor-position.html**
* **/css/selectors/invalidation/has-in-parent-position.html**
* **/css/selectors/invalidation/has-in-sibling-position.html**
* **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html**
* **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html**
* **/css/selectors/invalidation/has-sibling.html**
* **/css/selectors/invalidation/has-with-not.html**
* **/css/selectors/invalidation/has-with-pseudo-class.html**
* **/css/selectors/invalidation/input-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/lang-pseudo-class-in-has.html**
* **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/is-where-basic.html**
* **/css/selectors/is-where-not.html**
* **/html/rendering/non-replaced-elements/tables/form-in-tables.html**
* /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html**
* **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html**
* **/html/semantics/popovers/popover-stacking.html**
* **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html**
* **/resource-timing/resource-reload-TAO.html**
* **/selection/bidi/modify.tentative.html**
* **/selection/contenteditable/modify.tentative.html**
* **/selection/textcontrols/selectionchange.html**
* **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html**
* **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html**
* **/css/css-animations/computed-style-animation-parsing.html**
* **/css/css-variables/variables-substitute-guaranteed-invalid.html**
* **/css/cssom-view/elementsFromPoint-simple.html**
* **/css/cssom/CSSStyleSheet-modify-after-removal.html**
* **/css/cssom/getComputedStyle-display-none-001.html**
* **/css/selectors/focus-visible-script-focus-001.html**
* **/css/selectors/has-specificity.html**
* **/css/selectors/invalidation/is.html**
* **/css/selectors/invalidation/not-002.html**
* **/dom/events/EventListener-handleEvent-cross-realm.html**
* **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html**
* **/html/browsers/the-window-object/window-properties.https.html**
* **/html/browsers/the-window-object/window-prototype-chain.html**
* **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html**
* **/html/dom/aria-element-reflection.html**
* **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html**
* **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html**
* **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html**
* **/quirks/unitless-length/excluded-properties-002.html**
</details>

<details><summary>22× tests with failures that looked interesting</summary>

* 1× CRASH [expected ...]
    * **/css/css-fonts/crash-large-grapheme-cluster.html**
      crash is subject of test
* 6× FAIL [expected PASS] /... (reftest)
    * **/css/css-flexbox/anonymous-flex-item-005.html**
      old pass was spurious
    * **/css/css-flexbox/anonymous-flex-item-006.html**
      old pass was spurious
    * **/css/css-text-decor/text-decoration-line-recalc.html**
      old pass was spurious; ‘text-decoration’ shorthand unimplemented
    * **/css/css-ui/appearance-auto-non-html-namespace-001.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html**
      old pass was spurious
* 13× TIMEOUT [expected ...]
    * **/css/css-fonts/font-size-monospace-adjust.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/css/cssom-view/background-change-during-smooth-scroll.html**
      timeout is subject of test
    * **/css/selectors/invalidation/has-complexity.html**
      timeout is subject of test
    * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html**
      timeout is subject of test; :has() unimplemented
    * **/fetch/stale-while-revalidate/stale-image.html**
      timeout is subject of test
    * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html**
      timeout is subject of test
    * **/html/rendering/widgets/appearance/appearance-animation-001.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-animation-002.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-transition-001.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-002.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-003.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/resource-timing/opaque-origin.html**
      timeout is subject of test
    * **/selection/textcontrols/selectionchange-bubble.html**
      timeout is subject of test
* **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html**
  ‘HTMLDocument’ unimplemented
</details>

---
<!-- 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 #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [x] There are tests for these changes (including but not limited to web-platform-tests/wpt#39211) OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 28, 2023
HTML #named-access-on-the-window-object

This patch implements [named access on the window object](https://html.spec.whatwg.org/#named-access-on-the-window-object) based on @pylbrecht’s and @yvt’s previous work (see also #27952, #25562, #21869, #19904).

That work makes 130 tests pass, and I’ve made some additional changes to make [the test for the feature itself](https://wpt.live/webidl/ecmascript-binding/window-named-properties-object.html) pass too, but I haven’t worked with mozjs before, so I have no idea if I’ve gone about my changes the Right Way.

In particular, this patch:

* [x] applies @pylbrecht’s patch (#27952)
* [x] resolves conflicts related to #29079 and #28546 (5ae0ca4)
* [x] applies @yvt’s patch to the segfault in getPrototypeIfOrdinary (1e24ffd)
* [x] reverts the change introducing Untransplantable (76dc35a), since #28534 was abandoned in favour of #28536
* [x] triages the unexpected WPT results, updating expectations as needed (see below)
* [x] fixes the failures in /webidl/ecmascript-binding/window-named-properties-object.html (3844f69)
    * [x] fixes the failures in the [[GetOwnProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[DefineOwnProperty]] subtest (e4e7a14)
    * [x] fixes the failures in the [[HasProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[Get]] subtest (4bafb27)
    * [x] fixes the failures in the [[Set]] (direct) subtest (e4e7a14)
    * [x] fixes the failures in the [[Delete]] subtest (4bafb27)
    * [x] fixes the failures in the [[OwnPropertyKeys]] subtest (afcd24a)
* [x] resolves the todos and fixmes
    * [x] Document: handle exposed objects ×3 (ed3e37b)
    * [x] Window::NamedGetter: document.get_elements_with_id() (618ef57)
    * [x] get_own_property_descriptor: check for interactions with indexed access (b906fae)
    * [x] create trap: pass proper classp (618ef57)

<details><summary>131× tests that now pass</summary>

* **/webidl/ecmascript-binding/window-named-properties-object.html**
  *directly relevant to this patch*
* **/FileAPI/Blob-methods-from-detached-frame.html**
  done #29450 #29451
* **/cors/script-304.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html**
* **/css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html**
* **/css/CSS2/floats/computed-float-position-absolute.html**
* **/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html**
* **/css/CSS2/normal-flow/block-in-inline-insert-018.html**
* **/css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html**
* **/css/CSS2/positioning/abspos-change-in-inline-block.html**
* **/css/CSS2/positioning/abspos-width-change-inline-container-001.html**
* **/css/CSS2/positioning/detach-abspos-before-layout.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html**
* **/css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html**
* **/css/CSS2/stacking-context/opacity-change-parent-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-change-twice-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html**
* **/css/css-animations/animation-base-response-002.html**
* **/css/css-animations/style-animation-parsing.html**
* **/css/css-backgrounds/background-clip-color-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html**
* **/css/css-backgrounds/background-image-none-gradient-repaint.html**
* **/css/css-backgrounds/border-radius-dynamic-from-no-radius.html**
* **/css/css-backgrounds/child-move-reveals-parent-background.html**
* **/css/css-color/filters-under-will-change-opacity.html**
* **/css/css-flexbox/anonymous-flex-item-001.html**
* **/css/css-flexbox/anonymous-flex-item-003.html**
* **/css/css-flexbox/dynamic-bsize-change.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-016.html**
* **/css/cssom/at-namespace.html**
* **/css/cssom/computed-style-002.html**
* **/css/cssom/getComputedStyle-display-none-002.html**
* **/css/cssom/getComputedStyle-display-none-003.html**
* **/css/cssom/preferred-stylesheet-reversed-order.html**
* **/css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html**
* **/css/cssom-view/pt-to-px-width.html**
* **/css/cssom-view/scroll-back-to-initial-position.html**
* **/css/css-text-decor/text-decoration-color-recalc-002.html**
* **/css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html**
* **/css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html**
* **/css/css-text/text-indent/percentage-value-intrinsic-size.html**
* **/css/css-text/white-space/display-contents-remove-whitespace-change.html**
* **/css/css-text/white-space/white-space-empty-text-sibling.html**
* **/css/css-transforms/change-perspective-property.html**
* **/css/css-transforms/change-scale-wide-range.html**
* **/css/css-transforms/change-transform-origin-property.html**
* **/css/css-transforms/dynamic-fixed-pos-cb-change.html**
* **/css/css-transforms/individual-transform/change-rotate-property.html**
* **/css/css-transforms/individual-transform/change-scale-property.html**
* **/css/css-transforms/paint-order-with-transform-change.html**
* **/css/css-transforms/size-change-under-backface-visibility-hidden.html**
* **/css/css-transforms/subpixel-transform-changes-001.html**
* **/css/css-transforms/subpixel-transform-changes-002.html**
* **/css/css-transforms/subpixel-transform-changes-003.html**
* **/css/css-transforms/subpixel-transform-changes-004.html**
* **/css/css-transitions/transition-reparented.html**
* **/css/css-ui/historical/moz-user-modify-01.html**
* **/css/css-ui/historical/user-modify-01.html**
* **/css/css-ui/historical/webkit-user-modify-01.html**
* **/css/css-ui/resize-change-margin.html**
* **/css/css-ui/text-overflow-change-color.html**
* **/css/css-ui/text-overflow-ellipsis-width-001.html**
* **/css/css-values/animations/line-height-lh-transition.html**
* **/css/css-values/calc-nesting.html**
* **/css/css-values/update-subpixel-rem-unit.html**
* **/css/css-values/viewport-units-modify.html**
* **/css/css-variables/css-variable-change-style-001.html**
* **/css/css-variables/css-variable-change-style-002.html**
* **/css/css-variables/variable-cycles.html**
* **/css/selectors/attribute-selectors/style-attribute-selector.html**
* **/css/selectors/i18n/lang-pseudo-class-disconnected.html**
* **/css/selectors/invalidation/attribute.html**
* **/css/selectors/invalidation/class-id-attr.html**
* **/css/selectors/invalidation/defined.html**
* **/css/selectors/invalidation/sheet-going-away-001.html**
* **/css/selectors/invalidation/sibling.html**
* **/css/selectors/missing-right-token.html**
* **/css/selectors/not-complex.html**
* **/css/selectors/not-specificity.html**
* **/css/selectors/nth-of-type-namespace.html**
* **/css/selectors/selectors-case-sensitive-001.html**
* **/css/selectors/visited-inheritance.html**
* **/custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html**
* **/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html**
* **/dom/nodes/remove-and-adopt-thcrash.html**
* **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html**
* **/html/browsers/history/the-history-interface/history_back_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_go_cross_realm_method.html**
* **/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html**
* **/html/dom/elements/images/bypass-cache-revalidation.html**
* **/html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html**
* **/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html**
* **/html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html**
* **/html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html**
* **/html/rendering/widgets/the-select-element/select-invalidation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html**
* **/html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-change.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html**
* **/html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html**
* **/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html**
* **/html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html**
* **/html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html**
* **/html/semantics/forms/the-input-element/radio-morphed.html**
* **/html/semantics/forms/the-progress-element/progress.html**
* **/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html**
* **/html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html**
* **/html/syntax/serializing-html-fragments/initial-linefeed-pre.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html**
* **/quirks/unitless-length/excluded-properties-001.html**
* **/quirks/unitless-length/excluded-properties-003.html**
* **/selection/caret/empty-elements.html**
* **/selection/contenteditable/cefalse-on-boundaries.html**
* **/selection/textcontrols/onselectionchange-content-attribute.html**
</details>

<details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary>

* **/css/css-animations/animation-base-response-001.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html**
* **/css/css-backgrounds/inheritance.sub.html**
* **/css/css-backgrounds/local-attachment-content-box-scroll.html**
* **/css/css-color/canvas-change-opacity.html**
* **/css/css-color/color-initial-canvastext.html**
* **/css/css-flexbox/flex-aspect-ratio-img-column-010.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-004.html**
* **/css/css-fonts/parsing/font-face-src-format.html**
  getter works but insertRule does nothing
* **/css/css-fonts/parsing/font-face-src-list.html**
  as above
* **/css/css-fonts/parsing/font-face-src-local.html**
  as above, but also delayed length change?
* **/css/css-fonts/parsing/font-face-src-tech.html**
  as above
* **/css/css-text/white-space/trailing-space-before-br-001.html**
* **/css/css-transforms/3d-rendering-context-behavior.html**
  failures are subject of test, but also blank page?
* **/css/css-transforms/individual-transform/change-translate-property.html**
* **/css/css-transforms/preserve-3d-flat-grouping-properties.html**
* **/css/css-transforms/transforms-support-calc.html**
* **/css/css-transitions/inherit-height-transition.html**
* **/css/css-ui/inheritance.html**
* **/css/css-ui/parsing/outline-width-computed.html**
  failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width
* **/css/css-values/lh-unit-003.html**
* **/css/css-values/viewport-units-compute.html**
* **/css/css-values/viewport-units-keyframes.html**
* **/css/css-values/viewport-units-media-queries.html**
* **/css/css-values/viewport-units-writing-mode.html**
* **/css/cssom-view/elementsFromPoint-table.html**
* **/css/cssom-view/scroll-behavior-default-css.html**
* **/css/cssom-view/scroll-behavior-element.html**
* **/css/cssom-view/scroll-behavior-main-frame-root.html**
* **/css/cssom-view/scroll-behavior-main-frame-window.html**
* **/css/cssom-view/scroll-behavior-smooth-navigation.html**
* **/css/cssom-view/scroll-behavior-subframe-root.html**
* **/css/cssom/computed-style-003.html**
* **/css/cssom/computed-style-004.html**
* **/css/cssom/font-variant-shorthand-serialization.html**
* **/css/selectors/dir-selector-auto.html**
* **/css/selectors/has-argument-with-explicit-scope.html**
* **/css/selectors/has-basic.html**
* **/css/selectors/has-relative-argument.html**
* **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html**
* **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/dir-pseudo-class-in-has.html**
* **/css/selectors/invalidation/empty-pseudo-in-has.html**
* **/css/selectors/invalidation/has-in-adjacent-position.html**
* **/css/selectors/invalidation/has-in-ancestor-position.html**
* **/css/selectors/invalidation/has-in-parent-position.html**
* **/css/selectors/invalidation/has-in-sibling-position.html**
* **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html**
* **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html**
* **/css/selectors/invalidation/has-sibling.html**
* **/css/selectors/invalidation/has-with-not.html**
* **/css/selectors/invalidation/has-with-pseudo-class.html**
* **/css/selectors/invalidation/input-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/lang-pseudo-class-in-has.html**
* **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/is-where-basic.html**
* **/css/selectors/is-where-not.html**
* **/html/rendering/non-replaced-elements/tables/form-in-tables.html**
* /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html**
* **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html**
* **/html/semantics/popovers/popover-stacking.html**
* **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html**
* **/resource-timing/resource-reload-TAO.html**
* **/selection/bidi/modify.tentative.html**
* **/selection/contenteditable/modify.tentative.html**
* **/selection/textcontrols/selectionchange.html**
* **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html**
* **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html**
* **/css/css-animations/computed-style-animation-parsing.html**
* **/css/css-variables/variables-substitute-guaranteed-invalid.html**
* **/css/cssom-view/elementsFromPoint-simple.html**
* **/css/cssom/CSSStyleSheet-modify-after-removal.html**
* **/css/cssom/getComputedStyle-display-none-001.html**
* **/css/selectors/focus-visible-script-focus-001.html**
* **/css/selectors/has-specificity.html**
* **/css/selectors/invalidation/is.html**
* **/css/selectors/invalidation/not-002.html**
* **/dom/events/EventListener-handleEvent-cross-realm.html**
* **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html**
* **/html/browsers/the-window-object/window-properties.https.html**
* **/html/browsers/the-window-object/window-prototype-chain.html**
* **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html**
* **/html/dom/aria-element-reflection.html**
* **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html**
* **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html**
* **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html**
* **/quirks/unitless-length/excluded-properties-002.html**
</details>

<details><summary>22× tests with failures that looked interesting</summary>

* 1× CRASH [expected ...]
    * **/css/css-fonts/crash-large-grapheme-cluster.html**
      crash is subject of test
* 6× FAIL [expected PASS] /... (reftest)
    * **/css/css-flexbox/anonymous-flex-item-005.html**
      old pass was spurious
    * **/css/css-flexbox/anonymous-flex-item-006.html**
      old pass was spurious
    * **/css/css-text-decor/text-decoration-line-recalc.html**
      old pass was spurious; ‘text-decoration’ shorthand unimplemented
    * **/css/css-ui/appearance-auto-non-html-namespace-001.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html**
      old pass was spurious
* 13× TIMEOUT [expected ...]
    * **/css/css-fonts/font-size-monospace-adjust.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/css/cssom-view/background-change-during-smooth-scroll.html**
      timeout is subject of test
    * **/css/selectors/invalidation/has-complexity.html**
      timeout is subject of test
    * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html**
      timeout is subject of test; :has() unimplemented
    * **/fetch/stale-while-revalidate/stale-image.html**
      timeout is subject of test
    * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html**
      timeout is subject of test
    * **/html/rendering/widgets/appearance/appearance-animation-001.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-animation-002.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-transition-001.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-002.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-003.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/resource-timing/opaque-origin.html**
      timeout is subject of test
    * **/selection/textcontrols/selectionchange-bubble.html**
      timeout is subject of test
* **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html**
  ‘HTMLDocument’ unimplemented
</details>

---
<!-- 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 #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [x] There are tests for these changes (including but not limited to web-platform-tests/wpt#39211) OR
- [ ] These changes do not require tests because ___
bors-servo added a commit that referenced this pull request Mar 28, 2023
HTML #named-access-on-the-window-object

This patch implements [named access on the window object](https://html.spec.whatwg.org/#named-access-on-the-window-object) based on @pylbrecht’s and @yvt’s previous work (see also #27952, #25562, #21869, #19904).

That work makes 130 tests pass, and I’ve made some additional changes to make [the test for the feature itself](https://wpt.live/webidl/ecmascript-binding/window-named-properties-object.html) pass too, but I haven’t worked with mozjs before, so I have no idea if I’ve gone about my changes the Right Way.

In particular, this patch:

* [x] applies @pylbrecht’s patch (#27952)
* [x] resolves conflicts related to #29079 and #28546 (5ae0ca4)
* [x] applies @yvt’s patch to the segfault in getPrototypeIfOrdinary (1e24ffd)
* [x] reverts the change introducing Untransplantable (76dc35a), since #28534 was abandoned in favour of #28536
* [x] triages the unexpected WPT results, updating expectations as needed (see below)
* [x] fixes the failures in /webidl/ecmascript-binding/window-named-properties-object.html (3844f69)
    * [x] fixes the failures in the [[GetOwnProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[DefineOwnProperty]] subtest (e4e7a14)
    * [x] fixes the failures in the [[HasProperty]] subtest (75c24e9)
    * [x] fixes the failures in the [[Get]] subtest (4bafb27)
    * [x] fixes the failures in the [[Set]] (direct) subtest (e4e7a14)
    * [x] fixes the failures in the [[Delete]] subtest (4bafb27)
    * [x] fixes the failures in the [[OwnPropertyKeys]] subtest (afcd24a)
* [x] resolves the todos and fixmes
    * [x] Document: handle exposed objects ×3 (ed3e37b)
    * [x] Window::NamedGetter: document.get_elements_with_id() (618ef57)
    * [x] get_own_property_descriptor: check for interactions with indexed access (b906fae)
    * [x] create trap: pass proper classp (618ef57)

<details><summary>131× tests that now pass</summary>

* **/webidl/ecmascript-binding/window-named-properties-object.html**
  *directly relevant to this patch*
* **/FileAPI/Blob-methods-from-detached-frame.html**
  done #29450 #29451
* **/cors/script-304.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html**
* **/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html**
* **/css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html**
* **/css/CSS2/floats/computed-float-position-absolute.html**
* **/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html**
* **/css/CSS2/normal-flow/block-in-inline-insert-018.html**
* **/css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html**
* **/css/CSS2/positioning/abspos-change-in-inline-block.html**
* **/css/CSS2/positioning/abspos-width-change-inline-container-001.html**
* **/css/CSS2/positioning/detach-abspos-before-layout.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html**
* **/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html**
* **/css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html**
* **/css/CSS2/stacking-context/opacity-change-parent-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-change-twice-stacking-context.html**
* **/css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html**
* **/css/css-animations/animation-base-response-002.html**
* **/css/css-animations/style-animation-parsing.html**
* **/css/css-backgrounds/background-clip-color-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html**
* **/css/css-backgrounds/background-image-none-gradient-repaint.html**
* **/css/css-backgrounds/border-radius-dynamic-from-no-radius.html**
* **/css/css-backgrounds/child-move-reveals-parent-background.html**
* **/css/css-color/filters-under-will-change-opacity.html**
* **/css/css-flexbox/anonymous-flex-item-001.html**
* **/css/css-flexbox/anonymous-flex-item-003.html**
* **/css/css-flexbox/dynamic-bsize-change.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-016.html**
* **/css/cssom/at-namespace.html**
* **/css/cssom/computed-style-002.html**
* **/css/cssom/getComputedStyle-display-none-002.html**
* **/css/cssom/getComputedStyle-display-none-003.html**
* **/css/cssom/preferred-stylesheet-reversed-order.html**
* **/css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html**
* **/css/cssom-view/pt-to-px-width.html**
* **/css/cssom-view/scroll-back-to-initial-position.html**
* **/css/css-text-decor/text-decoration-color-recalc-002.html**
* **/css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html**
* **/css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html**
* **/css/css-text/text-indent/percentage-value-intrinsic-size.html**
* **/css/css-text/white-space/display-contents-remove-whitespace-change.html**
* **/css/css-text/white-space/white-space-empty-text-sibling.html**
* **/css/css-transforms/change-perspective-property.html**
* **/css/css-transforms/change-scale-wide-range.html**
* **/css/css-transforms/change-transform-origin-property.html**
* **/css/css-transforms/dynamic-fixed-pos-cb-change.html**
* **/css/css-transforms/individual-transform/change-rotate-property.html**
* **/css/css-transforms/individual-transform/change-scale-property.html**
* **/css/css-transforms/paint-order-with-transform-change.html**
* **/css/css-transforms/size-change-under-backface-visibility-hidden.html**
* **/css/css-transforms/subpixel-transform-changes-001.html**
* **/css/css-transforms/subpixel-transform-changes-002.html**
* **/css/css-transforms/subpixel-transform-changes-003.html**
* **/css/css-transforms/subpixel-transform-changes-004.html**
* **/css/css-transitions/transition-reparented.html**
* **/css/css-ui/historical/moz-user-modify-01.html**
* **/css/css-ui/historical/user-modify-01.html**
* **/css/css-ui/historical/webkit-user-modify-01.html**
* **/css/css-ui/resize-change-margin.html**
* **/css/css-ui/text-overflow-change-color.html**
* **/css/css-ui/text-overflow-ellipsis-width-001.html**
* **/css/css-values/animations/line-height-lh-transition.html**
* **/css/css-values/calc-nesting.html**
* **/css/css-values/update-subpixel-rem-unit.html**
* **/css/css-values/viewport-units-modify.html**
* **/css/css-variables/css-variable-change-style-001.html**
* **/css/css-variables/css-variable-change-style-002.html**
* **/css/css-variables/variable-cycles.html**
* **/css/selectors/attribute-selectors/style-attribute-selector.html**
* **/css/selectors/i18n/lang-pseudo-class-disconnected.html**
* **/css/selectors/invalidation/attribute.html**
* **/css/selectors/invalidation/class-id-attr.html**
* **/css/selectors/invalidation/defined.html**
* **/css/selectors/invalidation/sheet-going-away-001.html**
* **/css/selectors/invalidation/sibling.html**
* **/css/selectors/missing-right-token.html**
* **/css/selectors/not-complex.html**
* **/css/selectors/not-specificity.html**
* **/css/selectors/nth-of-type-namespace.html**
* **/css/selectors/selectors-case-sensitive-001.html**
* **/css/selectors/visited-inheritance.html**
* **/custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html**
* **/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html**
* **/dom/nodes/remove-and-adopt-thcrash.html**
* **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html**
* **/html/browsers/history/the-history-interface/history_back_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html**
* **/html/browsers/history/the-history-interface/history_go_cross_realm_method.html**
* **/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html**
* **/html/dom/elements/images/bypass-cache-revalidation.html**
* **/html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html**
* **/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html**
* **/html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html**
* **/html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html**
* **/html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html**
* **/html/rendering/widgets/the-select-element/select-invalidation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html**
* **/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html**
* **/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html**
* **/html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html**
* **/html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-change.html**
* **/html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html**
* **/html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html**
* **/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html**
* **/html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html**
* **/html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html**
* **/html/semantics/forms/the-input-element/radio-morphed.html**
* **/html/semantics/forms/the-progress-element/progress.html**
* **/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html**
* **/html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html**
* **/html/syntax/serializing-html-fragments/initial-linefeed-pre.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html**
* **/html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html**
* **/quirks/unitless-length/excluded-properties-001.html**
* **/quirks/unitless-length/excluded-properties-003.html**
* **/selection/caret/empty-elements.html**
* **/selection/contenteditable/cefalse-on-boundaries.html**
* **/selection/textcontrols/onselectionchange-content-attribute.html**
</details>

<details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary>

* **/css/css-animations/animation-base-response-001.html**
* **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html**
* **/css/css-backgrounds/inheritance.sub.html**
* **/css/css-backgrounds/local-attachment-content-box-scroll.html**
* **/css/css-color/canvas-change-opacity.html**
* **/css/css-color/color-initial-canvastext.html**
* **/css/css-flexbox/flex-aspect-ratio-img-column-010.html**
* **/css/css-flexbox/flex-aspect-ratio-img-row-004.html**
* **/css/css-fonts/parsing/font-face-src-format.html**
  getter works but insertRule does nothing
* **/css/css-fonts/parsing/font-face-src-list.html**
  as above
* **/css/css-fonts/parsing/font-face-src-local.html**
  as above, but also delayed length change?
* **/css/css-fonts/parsing/font-face-src-tech.html**
  as above
* **/css/css-text/white-space/trailing-space-before-br-001.html**
* **/css/css-transforms/3d-rendering-context-behavior.html**
  failures are subject of test, but also blank page?
* **/css/css-transforms/individual-transform/change-translate-property.html**
* **/css/css-transforms/preserve-3d-flat-grouping-properties.html**
* **/css/css-transforms/transforms-support-calc.html**
* **/css/css-transitions/inherit-height-transition.html**
* **/css/css-ui/inheritance.html**
* **/css/css-ui/parsing/outline-width-computed.html**
  failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width
* **/css/css-values/lh-unit-003.html**
* **/css/css-values/viewport-units-compute.html**
* **/css/css-values/viewport-units-keyframes.html**
* **/css/css-values/viewport-units-media-queries.html**
* **/css/css-values/viewport-units-writing-mode.html**
* **/css/cssom-view/elementsFromPoint-table.html**
* **/css/cssom-view/scroll-behavior-default-css.html**
* **/css/cssom-view/scroll-behavior-element.html**
* **/css/cssom-view/scroll-behavior-main-frame-root.html**
* **/css/cssom-view/scroll-behavior-main-frame-window.html**
* **/css/cssom-view/scroll-behavior-smooth-navigation.html**
* **/css/cssom-view/scroll-behavior-subframe-root.html**
* **/css/cssom/computed-style-003.html**
* **/css/cssom/computed-style-004.html**
* **/css/cssom/font-variant-shorthand-serialization.html**
* **/css/selectors/dir-selector-auto.html**
* **/css/selectors/has-argument-with-explicit-scope.html**
* **/css/selectors/has-basic.html**
* **/css/selectors/has-relative-argument.html**
* **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html**
* **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/dir-pseudo-class-in-has.html**
* **/css/selectors/invalidation/empty-pseudo-in-has.html**
* **/css/selectors/invalidation/has-in-adjacent-position.html**
* **/css/selectors/invalidation/has-in-ancestor-position.html**
* **/css/selectors/invalidation/has-in-parent-position.html**
* **/css/selectors/invalidation/has-in-sibling-position.html**
* **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html**
* **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html**
* **/css/selectors/invalidation/has-sibling.html**
* **/css/selectors/invalidation/has-with-not.html**
* **/css/selectors/invalidation/has-with-pseudo-class.html**
* **/css/selectors/invalidation/input-pseudo-classes-in-has.html**
* **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/lang-pseudo-class-in-has.html**
* **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html**
* **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html**
* **/css/selectors/is-where-basic.html**
* **/css/selectors/is-where-not.html**
* **/html/rendering/non-replaced-elements/tables/form-in-tables.html**
* /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html**
* **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html**
* **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html**
* **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html**
* **/html/semantics/popovers/popover-stacking.html**
* **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html**
* **/resource-timing/resource-reload-TAO.html**
* **/selection/bidi/modify.tentative.html**
* **/selection/contenteditable/modify.tentative.html**
* **/selection/textcontrols/selectionchange.html**
* **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html**
* **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html**
* **/css/css-animations/computed-style-animation-parsing.html**
* **/css/css-variables/variables-substitute-guaranteed-invalid.html**
* **/css/cssom-view/elementsFromPoint-simple.html**
* **/css/cssom/CSSStyleSheet-modify-after-removal.html**
* **/css/cssom/getComputedStyle-display-none-001.html**
* **/css/selectors/focus-visible-script-focus-001.html**
* **/css/selectors/has-specificity.html**
* **/css/selectors/invalidation/is.html**
* **/css/selectors/invalidation/not-002.html**
* **/dom/events/EventListener-handleEvent-cross-realm.html**
* **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html**
* **/html/browsers/the-window-object/window-properties.https.html**
* **/html/browsers/the-window-object/window-prototype-chain.html**
* **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html**
* **/html/dom/aria-element-reflection.html**
* **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html**
* **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html**
* **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html**
* **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html**
* **/quirks/unitless-length/excluded-properties-002.html**
</details>

<details><summary>22× tests with failures that looked interesting</summary>

* 1× CRASH [expected ...]
    * **/css/css-fonts/crash-large-grapheme-cluster.html**
      crash is subject of test
* 6× FAIL [expected PASS] /... (reftest)
    * **/css/css-flexbox/anonymous-flex-item-005.html**
      old pass was spurious
    * **/css/css-flexbox/anonymous-flex-item-006.html**
      old pass was spurious
    * **/css/css-text-decor/text-decoration-line-recalc.html**
      old pass was spurious; ‘text-decoration’ shorthand unimplemented
    * **/css/css-ui/appearance-auto-non-html-namespace-001.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html**
      old pass was spurious
    * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html**
      old pass was spurious
* 13× TIMEOUT [expected ...]
    * **/css/css-fonts/font-size-monospace-adjust.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/css/cssom-view/background-change-during-smooth-scroll.html**
      timeout is subject of test
    * **/css/selectors/invalidation/has-complexity.html**
      timeout is subject of test
    * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html**
      timeout is subject of test; :has() unimplemented
    * **/fetch/stale-while-revalidate/stale-image.html**
      timeout is subject of test
    * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html**
      timeout is subject of test
    * **/html/rendering/widgets/appearance/appearance-animation-001.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-animation-002.html**
      timeout is subject of test; reftest runner bug with 1e10s animation?
    * **/html/rendering/widgets/appearance/appearance-transition-001.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-002.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/html/rendering/widgets/appearance/appearance-transition-003.html**
      timeout is subject of test; reftest runner bug with 1e10s transition?
    * **/resource-timing/opaque-origin.html**
      timeout is subject of test
    * **/selection/textcontrols/selectionchange-bubble.html**
      timeout is subject of test
* **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html**
  ‘HTMLDocument’ unimplemented
</details>

---
<!-- 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 #27949 (GitHub issue number if applicable)

<!-- Either: -->
- [x] There are tests for these changes (including but not limited to web-platform-tests/wpt#39211) OR
- [ ] These changes do not require tests because ___
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-needs-code-changes Changes have not yet been made that were requested by a reviewer. S-needs-rebase There are merge conflict errors.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants