@@ -151,7 +151,7 @@ fn create_html_element(
151
151
// local name set to localName, custom element state set to "undefined",
152
152
// custom element definition set to null, is value set to is,
153
153
// and node document set to document.
154
- let element = create_native_html_element ( name, prefix, document, creator, proto) ;
154
+ let element = create_native_html_element ( name, prefix, document, creator, proto, false ) ;
155
155
element. set_is ( definition. name . clone ( ) ) ;
156
156
element. set_custom_element_state ( CustomElementState :: Undefined ) ;
157
157
match mode {
@@ -236,7 +236,8 @@ fn create_html_element(
236
236
// namespace set to namespace, namespace prefix set to prefix, local name set to localName,
237
237
// custom element state set to "uncustomized", custom element definition set to null,
238
238
// is value set to is, and node document set to document.
239
- let result = create_native_html_element ( name. clone ( ) , prefix, document, creator, proto) ;
239
+ 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
241
// Step 5.3. If namespace is the HTML namespace, and either localName is a valid custom element name or
241
242
// is is non-null, then set result’s custom element state to "undefined".
242
243
match is {
@@ -247,8 +248,6 @@ fn create_html_element(
247
248
None => {
248
249
if is_valid_custom_element_name ( & name. local ) {
249
250
result. set_custom_element_state ( CustomElementState :: Undefined ) ;
250
- } else {
251
- result. set_custom_element_state ( CustomElementState :: Uncustomized ) ;
252
251
}
253
252
} ,
254
253
} ;
@@ -263,6 +262,7 @@ pub(crate) fn create_native_html_element(
263
262
document : & Document ,
264
263
creator : ElementCreator ,
265
264
proto : Option < HandleObject > ,
265
+ defined : bool ,
266
266
) -> DomRoot < Element > {
267
267
assert_eq ! ( name. ns, ns!( html) ) ;
268
268
@@ -318,7 +318,14 @@ pub(crate) fn create_native_html_element(
318
318
local_name ! ( "dfn" ) => make ! ( HTMLElement ) ,
319
319
local_name ! ( "dialog" ) => make ! ( HTMLDialogElement ) ,
320
320
local_name ! ( "dir" ) => make ! ( HTMLDirectoryElement ) ,
321
- local_name ! ( "div" ) => make ! ( HTMLDivElement ) ,
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
329
local_name ! ( "dl" ) => make ! ( HTMLDListElement ) ,
323
330
local_name ! ( "dt" ) => make ! ( HTMLElement ) ,
324
331
local_name ! ( "em" ) => make ! ( HTMLElement ) ,
0 commit comments