diff --git a/components/script/dom/bindings/htmlconstructor.rs b/components/script/dom/bindings/htmlconstructor.rs
index 5654b52938b..a13b6fa9ecb 100644
--- a/components/script/dom/bindings/htmlconstructor.rs
+++ b/components/script/dom/bindings/htmlconstructor.rs
@@ -72,8 +72,8 @@ use crate::dom::bindings::conversions::DerivedFrom;
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::root::DomRoot;
use crate::dom::create::create_native_html_element;
-use crate::dom::customelementregistry::ConstructionStackEntry;
-use crate::dom::element::{CustomElementState, Element, ElementCreator};
+use crate::dom::customelementregistry::{ConstructionStackEntry, CustomElementState};
+use crate::dom::element::{Element, ElementCreator};
use crate::dom::htmlelement::HTMLElement;
use crate::dom::window::Window;
use crate::script_thread::ScriptThread;
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index 461e37a28de..6ffb38f753a 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -5,9 +5,11 @@
use crate::dom::bindings::error::{report_pending_exception, throw_dom_exception};
use crate::dom::bindings::reflector::DomObject;
use crate::dom::bindings::root::DomRoot;
-use crate::dom::customelementregistry::{is_valid_custom_element_name, upgrade_element};
+use crate::dom::customelementregistry::{
+ is_valid_custom_element_name, upgrade_element, CustomElementState,
+};
use crate::dom::document::Document;
-use crate::dom::element::{CustomElementCreationMode, CustomElementState, Element, ElementCreator};
+use crate::dom::element::{CustomElementCreationMode, Element, ElementCreator};
use crate::dom::globalscope::GlobalScope;
use crate::dom::htmlanchorelement::HTMLAnchorElement;
use crate::dom::htmlareaelement::HTMLAreaElement;
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index ff109f3c966..e1b3163bf4a 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -23,7 +23,7 @@ use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::document::Document;
use crate::dom::domexception::{DOMErrorName, DOMException};
-use crate::dom::element::{CustomElementState, Element};
+use crate::dom::element::Element;
use crate::dom::globalscope::GlobalScope;
use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::{document_from_node, window_from_node, Node, ShadowIncluding};
@@ -47,6 +47,21 @@ use std::ops::Deref;
use std::ptr;
use std::rc::Rc;
+///
+#[derive(Clone, Copy, Eq, JSTraceable, MallocSizeOf, PartialEq)]
+pub enum CustomElementState {
+ Undefined,
+ Failed,
+ Uncustomized,
+ Custom,
+}
+
+impl Default for CustomElementState {
+ fn default() -> CustomElementState {
+ CustomElementState::Uncustomized
+ }
+}
+
///
#[dom_struct]
pub struct CustomElementRegistry {
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index ce4a3ac5268..a27af0f99b3 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -33,7 +33,7 @@ use crate::dom::bindings::xmlname::{
use crate::dom::characterdata::CharacterData;
use crate::dom::create::create_element;
use crate::dom::customelementregistry::{
- CallbackReaction, CustomElementDefinition, CustomElementReaction,
+ CallbackReaction, CustomElementDefinition, CustomElementReaction, CustomElementState,
};
use crate::dom::document::{Document, LayoutDocumentHelpers};
use crate::dom::documentfragment::DocumentFragment;
@@ -166,13 +166,6 @@ pub struct Element {
/// when it has exclusive access to the element.
#[ignore_malloc_size_of = "bitflags defined in rust-selectors"]
selector_flags: Cell,
- ///
- custom_element_reaction_queue: DomRefCell>,
- ///
- #[ignore_malloc_size_of = "Rc"]
- custom_element_definition: DomRefCell