Skip to content

Commit 9ed565b

Browse files
committed
set the defined state for all elements
1 parent 8f5764d commit 9ed565b

File tree

4 files changed

+18
-35
lines changed

4 files changed

+18
-35
lines changed

components/script/dom/bindings/constructor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ fn html_constructor(
183183
&document,
184184
ElementCreator::ScriptCreated,
185185
None,
186-
false
186+
false,
187187
)
188188
};
189189

components/script/dom/create.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ fn create_html_element(
237237
// custom element state set to "uncustomized", custom element definition set to null,
238238
// is value set to is, and node document set to document.
239239
let is_builtin = is.is_none() && !is_valid_custom_element_name(&name.local);
240-
let result = create_native_html_element(name.clone(), prefix, document, creator, proto, is_builtin);
240+
let result =
241+
create_native_html_element(name.clone(), prefix, document, creator, proto, is_builtin);
241242
// Step 5.3. If namespace is the HTML namespace, and either localName is a valid custom element name or
242243
// is is non-null, then set result’s custom element state to "undefined".
243244
match is {
@@ -280,7 +281,7 @@ pub(crate) fn create_native_html_element(
280281
// This is a big match, and the IDs for inline-interned atoms are not very structured.
281282
// Perhaps we should build a perfect hash from those IDs instead.
282283
// https://html.spec.whatwg.org/multipage/#elements-in-the-dom
283-
match name.local {
284+
let element: DomRoot<Element> = match name.local {
284285
local_name!("a") => make!(HTMLAnchorElement),
285286
local_name!("abbr") => make!(HTMLElement),
286287
local_name!("acronym") => make!(HTMLElement),
@@ -318,14 +319,7 @@ pub(crate) fn create_native_html_element(
318319
local_name!("dfn") => make!(HTMLElement),
319320
local_name!("dialog") => make!(HTMLDialogElement),
320321
local_name!("dir") => make!(HTMLDirectoryElement),
321-
local_name!("div") => {
322-
let obj = if defined {
323-
HTMLDivElement::new_defined(name.local, prefix, document, proto, CanGc::note())
324-
} else {
325-
HTMLDivElement::new(name.local, prefix, document, proto, CanGc::note())
326-
};
327-
DomRoot::upcast(obj)
328-
},
322+
local_name!("div") => make!(HTMLDivElement),
329323
local_name!("dl") => make!(HTMLDListElement),
330324
local_name!("dt") => make!(HTMLElement),
331325
local_name!("em") => make!(HTMLElement),
@@ -435,7 +429,13 @@ pub(crate) fn create_native_html_element(
435429
local_name!("xmp") => make!(HTMLPreElement),
436430
_ if is_valid_custom_element_name(&name.local) => make!(HTMLElement),
437431
_ => make!(HTMLUnknownElement),
432+
};
433+
434+
if defined {
435+
element.force_defined();
438436
}
437+
438+
element
439439
}
440440

441441
pub(crate) fn create_element(

components/script/dom/element.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4959,6 +4959,13 @@ impl Element {
49594959
self.state.get()
49604960
}
49614961

4962+
pub(crate) fn force_defined(&self) {
4963+
let mut state = self.state.get();
4964+
state.insert(ElementState::DEFINED);
4965+
// debug_assert!(state == ElementState::ENABLED || state == ElementState::empty());
4966+
self.state.set(state);
4967+
}
4968+
49624969
pub(crate) fn set_state(&self, which: ElementState, value: bool) {
49634970
let mut state = self.state.get();
49644971
let previous_state = state;

components/script/dom/htmldivelement.rs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use dom_struct::dom_struct;
66
use html5ever::{LocalName, Prefix};
77
use js::rust::HandleObject;
8-
use stylo_dom::ElementState;
98

109
use crate::dom::bindings::codegen::Bindings::HTMLDivElementBinding::HTMLDivElementMethods;
1110
use crate::dom::bindings::root::DomRoot;
@@ -31,29 +30,6 @@ impl HTMLDivElement {
3130
}
3231
}
3332

34-
#[cfg_attr(crown, allow(crown::unrooted_must_root))]
35-
pub(crate) fn new_defined(
36-
local_name: LocalName,
37-
prefix: Option<Prefix>,
38-
document: &Document,
39-
proto: Option<HandleObject>,
40-
can_gc: CanGc,
41-
) -> DomRoot<HTMLDivElement> {
42-
Node::reflect_node_with_proto(
43-
Box::new(HTMLDivElement {
44-
htmlelement: HTMLElement::new_inherited_with_state(
45-
ElementState::DEFINED,
46-
local_name,
47-
prefix,
48-
document
49-
)
50-
}),
51-
document,
52-
proto,
53-
can_gc,
54-
)
55-
}
56-
5733
#[cfg_attr(crown, allow(crown::unrooted_must_root))]
5834
pub(crate) fn new(
5935
local_name: LocalName,

0 commit comments

Comments
 (0)