aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/customelementregistry.rs16
-rw-r--r--tests/wpt/meta/custom-elements/upgrading.html.ini3
2 files changed, 11 insertions, 8 deletions
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index 4349c140234..bfd0622dbfb 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -831,7 +831,7 @@ pub(crate) fn upgrade_element(
.push(ConstructionStackEntry::Element(DomRoot::from_ref(element)));
// Steps 7-8, successful case
- let result = run_upgrade_constructor(&definition.constructor, element, can_gc);
+ let result = run_upgrade_constructor(&definition, element, can_gc);
// "regardless of whether the above steps threw an exception" step
definition.construction_stack.borrow_mut().pop();
@@ -900,10 +900,11 @@ pub(crate) fn upgrade_element(
/// Steps 8.1-8.3
#[allow(unsafe_code)]
fn run_upgrade_constructor(
- constructor: &Rc<CustomElementConstructor>,
+ definition: &CustomElementDefinition,
element: &Element,
can_gc: CanGc,
) -> ErrorResult {
+ let constructor = &definition.constructor;
let window = element.owner_window();
let cx = GlobalScope::get_cx();
rooted!(in(*cx) let constructor_val = ObjectValue(constructor.callback()));
@@ -913,12 +914,16 @@ fn run_upgrade_constructor(
}
rooted!(in(*cx) let mut construct_result = ptr::null_mut::<JSObject>());
{
- // Step 8.1 TODO when shadow DOM exists
+ // Step 8.1. If definition's disable shadow is true and element's shadow root is non-null,
+ // then throw a "NotSupportedError" DOMException.
+ if definition.disable_shadow && element.is_shadow_host() {
+ return Err(Error::NotSupported);
+ }
// Go into the constructor's realm
let _ac = JSAutoRealm::new(*cx, constructor.callback());
let args = HandleValueArray::empty();
- // Step 8.2
+ // Step 8.2. Set element's custom element state to "precustomized".
if unsafe {
!Construct1(
*cx,
@@ -938,9 +943,10 @@ fn run_upgrade_constructor(
.perform_a_microtask_checkpoint(can_gc);
}
- // Step 8.3
+ // Step 8.3. Let constructResult be the result of constructing C, with no arguments.
let mut same = false;
rooted!(in(*cx) let construct_result_val = ObjectValue(construct_result.get()));
+ // Step 8.4. If SameValue(constructResult, element) is false, then throw a TypeError.
if unsafe {
!SameValue(
*cx,
diff --git a/tests/wpt/meta/custom-elements/upgrading.html.ini b/tests/wpt/meta/custom-elements/upgrading.html.ini
deleted file mode 100644
index 1fdfd3bb19f..00000000000
--- a/tests/wpt/meta/custom-elements/upgrading.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[upgrading.html]
- [If definition's disable shadow is true and element's shadow root is non-null, then throw a "NotSupportedError" DOMException.]
- expected: FAIL