diff options
Diffstat (limited to 'components/script/dom/htmlheadelement.rs')
-rw-r--r-- | components/script/dom/htmlheadelement.rs | 84 |
1 files changed, 47 insertions, 37 deletions
diff --git a/components/script/dom/htmlheadelement.rs b/components/script/dom/htmlheadelement.rs index 7e05ac3d45c..1bd6e5e1148 100644 --- a/components/script/dom/htmlheadelement.rs +++ b/components/script/dom/htmlheadelement.rs @@ -1,62 +1,72 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; -use dom::bindings::codegen::Bindings::HTMLHeadElementBinding; -use dom::bindings::inheritance::Castable; -use dom::bindings::js::{Root, RootedReference}; -use dom::bindings::str::DOMString; -use dom::document::{Document, determine_policy_for_token}; -use dom::element::Element; -use dom::htmlelement::HTMLElement; -use dom::htmlmetaelement::HTMLMetaElement; -use dom::node::{Node, document_from_node}; -use dom::userscripts::load_script; -use dom::virtualmethods::VirtualMethods; +use crate::dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; +use crate::dom::bindings::inheritance::Castable; +use crate::dom::bindings::root::DomRoot; +use crate::dom::document::{determine_policy_for_token, Document}; +use crate::dom::element::Element; +use crate::dom::htmlelement::HTMLElement; +use crate::dom::htmlmetaelement::HTMLMetaElement; +use crate::dom::node::{document_from_node, BindContext, Node, ShadowIncluding}; +use crate::dom::userscripts::load_script; +use crate::dom::virtualmethods::VirtualMethods; use dom_struct::dom_struct; -use html5ever_atoms::LocalName; +use html5ever::{LocalName, Prefix}; #[dom_struct] pub struct HTMLHeadElement { - htmlelement: HTMLElement + htmlelement: HTMLElement, } impl HTMLHeadElement { - fn new_inherited(local_name: LocalName, - prefix: Option<DOMString>, - document: &Document) -> HTMLHeadElement { + fn new_inherited( + local_name: LocalName, + prefix: Option<Prefix>, + document: &Document, + ) -> HTMLHeadElement { HTMLHeadElement { - htmlelement: HTMLElement::new_inherited(local_name, prefix, document) + htmlelement: HTMLElement::new_inherited(local_name, prefix, document), } } #[allow(unrooted_must_root)] - pub fn new(local_name: LocalName, - prefix: Option<DOMString>, - document: &Document) -> Root<HTMLHeadElement> { - Node::reflect_node(box HTMLHeadElement::new_inherited(local_name, prefix, document), - document, - HTMLHeadElementBinding::Wrap) + pub fn new( + local_name: LocalName, + prefix: Option<Prefix>, + document: &Document, + ) -> DomRoot<HTMLHeadElement> { + let n = Node::reflect_node( + Box::new(HTMLHeadElement::new_inherited(local_name, prefix, document)), + document, + ); + + n.upcast::<Node>().set_weird_parser_insertion_mode(); + n } - /// https://html.spec.whatwg.org/multipage/#meta-referrer + /// <https://html.spec.whatwg.org/multipage/#meta-referrer> pub fn set_document_referrer(&self) { let doc = document_from_node(self); - if doc.GetHead().r() != Some(self) { + if doc.GetHead().as_deref() != Some(self) { return; } let node = self.upcast::<Node>(); - let candidates = node.traverse_preorder() - .filter_map(Root::downcast::<Element>) - .filter(|elem| elem.is::<HTMLMetaElement>()) - .filter(|elem| elem.get_string_attribute(&local_name!("name")) == "referrer") - .filter(|elem| elem.get_attribute(&ns!(), &local_name!("content")).is_some()); + let candidates = node + .traverse_preorder(ShadowIncluding::No) + .filter_map(DomRoot::downcast::<Element>) + .filter(|elem| elem.is::<HTMLMetaElement>()) + .filter(|elem| elem.get_name() == Some(atom!("referrer"))) + .filter(|elem| { + elem.get_attribute(&ns!(), &local_name!("content")) + .is_some() + }); for meta in candidates { - if let Some(content) = meta.get_attribute(&ns!(), &local_name!("content")).r() { + if let Some(ref content) = meta.get_attribute(&ns!(), &local_name!("content")) { let content = content.value(); let content_val = content.trim(); if !content_val.is_empty() { @@ -69,12 +79,12 @@ impl HTMLHeadElement { } impl VirtualMethods for HTMLHeadElement { - fn super_type(&self) -> Option<&VirtualMethods> { - Some(self.upcast::<HTMLElement>() as &VirtualMethods) + fn super_type(&self) -> Option<&dyn VirtualMethods> { + Some(self.upcast::<HTMLElement>() as &dyn VirtualMethods) } - fn bind_to_tree(&self, tree_in_doc: bool) { + fn bind_to_tree(&self, context: &BindContext) { if let Some(ref s) = self.super_type() { - s.bind_to_tree(tree_in_doc); + s.bind_to_tree(context); } load_script(self); } |