From 1f3fd77d8f8fc5820115db6f817ed9672c7c9259 Mon Sep 17 00:00:00 2001 From: Connor Brewster Date: Tue, 13 Jun 2017 12:03:31 -0600 Subject: [PATCH] Implement step 5 of HTMLConstructor --- components/script/dom/bindings/interface.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index 752917aa673..9900bf00e9a 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -257,22 +257,26 @@ pub unsafe fn html_constructor(window: &Window, call_args: &CallArgs) -> Fall { let _ac = JSAutoCompartment::new(window.get_cx(), callee.get()); + rooted!(in(window.get_cx()) let mut constructor = ptr::null_mut()); + rooted!(in(window.get_cx()) let global_object = CurrentGlobalOrNull(window.get_cx())); if definition.is_autonomous() { // Step 4 // Since this element is autonomous, its active function object must be the HTMLElement // Retrieve the constructor object for HTMLElement - rooted!(in(window.get_cx()) let mut constructor = ptr::null_mut()); - rooted!(in(window.get_cx()) let global_object = CurrentGlobalOrNull(window.get_cx())); HTMLElementBinding::GetConstructorObject(window.get_cx(), global_object.handle(), constructor.handle_mut()); - // Callee must be the same constructor object as HTMLElement - if constructor.get() != callee.get() { - return Err(Error::Type("Active function object is not HTMLElement".to_owned())); - } } else { - // TODO: Step 5 + // Step 5 + get_constructor_object_from_local_name(definition.local_name.clone(), + window.get_cx(), + global_object.handle(), + constructor.handle_mut()); + } + // Callee must be the same as the element interface's constructor object. + if constructor.get() != callee.get() { + return Err(Error::Type("Custom element does not extend the proper interface".to_owned())); } }