aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/create.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/create.rs')
-rw-r--r--components/script/dom/create.rs29
1 files changed, 18 insertions, 11 deletions
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index 1a4815d1179..087148cb037 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -85,28 +85,30 @@ use crate::dom::svgsvgelement::SVGSVGElement;
use crate::realms::{enter_realm, InRealm};
use crate::script_thread::ScriptThread;
use html5ever::{LocalName, Prefix, QualName};
+use js::rust::HandleObject;
use servo_config::pref;
fn create_svg_element(
name: QualName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
assert_eq!(name.ns, ns!(svg));
macro_rules! make(
($ctor:ident) => ({
- let obj = $ctor::new(name.local, prefix, document);
+ let obj = $ctor::new(name.local, prefix, document, proto);
DomRoot::upcast(obj)
});
($ctor:ident, $($arg:expr),+) => ({
- let obj = $ctor::new(name.local, prefix, document, $($arg),+);
+ let obj = $ctor::new(name.local, prefix, document, proto, $($arg),+);
DomRoot::upcast(obj)
})
);
if !pref!(dom.svg.enabled) {
- return Element::new(name.local, name.ns, prefix, document);
+ return Element::new(name.local, name.ns, prefix, document, proto);
}
match name.local {
@@ -124,6 +126,7 @@ fn create_html_element(
document: &Document,
creator: ElementCreator,
mode: CustomElementCreationMode,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
assert_eq!(name.ns, ns!(html));
@@ -138,6 +141,7 @@ fn create_html_element(
name.local.clone(),
prefix.clone(),
document,
+ proto,
));
result.set_custom_element_state(CustomElementState::Undefined);
ScriptThread::enqueue_upgrade_reaction(&*result, definition);
@@ -145,6 +149,7 @@ fn create_html_element(
},
CustomElementCreationMode::Synchronous => {
let local_name = name.local.clone();
+ //TODO(jdm) Pass proto to create_element?
return match definition.create_element(document, prefix.clone()) {
Ok(element) => {
element.set_custom_element_definition(definition.clone());
@@ -165,7 +170,7 @@ fn create_html_element(
// Step 6.1.2
let element = DomRoot::upcast::<Element>(HTMLUnknownElement::new(
- local_name, prefix, document,
+ local_name, prefix, document, proto,
));
element.set_custom_element_state(CustomElementState::Failed);
element
@@ -175,7 +180,7 @@ fn create_html_element(
}
} else {
// Steps 5.1-5.2
- let element = create_native_html_element(name, prefix, document, creator);
+ let element = create_native_html_element(name, prefix, document, creator, proto);
element.set_is(definition.name.clone());
element.set_custom_element_state(CustomElementState::Undefined);
match mode {
@@ -191,7 +196,7 @@ fn create_html_element(
}
// Steps 7.1-7.3
- let result = create_native_html_element(name.clone(), prefix, document, creator);
+ let result = create_native_html_element(name.clone(), prefix, document, creator, proto);
match is {
Some(is) => {
result.set_is(is);
@@ -215,16 +220,17 @@ pub fn create_native_html_element(
prefix: Option<Prefix>,
document: &Document,
creator: ElementCreator,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
assert_eq!(name.ns, ns!(html));
macro_rules! make(
($ctor:ident) => ({
- let obj = $ctor::new(name.local, prefix, document);
+ let obj = $ctor::new(name.local, prefix, document, proto);
DomRoot::upcast(obj)
});
($ctor:ident, $($arg:expr),+) => ({
- let obj = $ctor::new(name.local, prefix, document, $($arg),+);
+ let obj = $ctor::new(name.local, prefix, document, proto, $($arg),+);
DomRoot::upcast(obj)
})
);
@@ -386,11 +392,12 @@ pub fn create_element(
document: &Document,
creator: ElementCreator,
mode: CustomElementCreationMode,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
let prefix = name.prefix.clone();
match name.ns {
- ns!(html) => create_html_element(name, prefix, is, document, creator, mode),
- ns!(svg) => create_svg_element(name, prefix, document),
- _ => Element::new(name.local, name.ns, prefix, document),
+ ns!(html) => create_html_element(name, prefix, is, document, creator, mode, proto),
+ ns!(svg) => create_svg_element(name, prefix, document, proto),
+ _ => Element::new(name.local, name.ns, prefix, document, proto),
}
}