diff --git a/components/style/build_gecko.rs b/components/style/build_gecko.rs index 9c13780b8da..fb464c1f7b2 100644 --- a/components/style/build_gecko.rs +++ b/components/style/build_gecko.rs @@ -235,6 +235,7 @@ mod bindings { .include(add_include("mozilla/Keyframe.h")) .include(add_include("mozilla/ServoElementSnapshot.h")) .include(add_include("mozilla/dom/Element.h")) + .include(add_include("mozilla/dom/NameSpaceConstants.h")) .include(add_include("mozilla/ServoBindings.h")) .include(add_include("nsMediaFeatures.h")) .include(add_include("nsMediaList.h")) @@ -258,6 +259,7 @@ mod bindings { "BORDER_COLOR_.*", "BORDER_STYLE_.*", "mozilla::SERVO_PREF_.*", + "kNameSpaceID_.*", ]; let whitelist = [ "RawGecko.*", diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index 6456bfea90c..684e557dd26 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -25,12 +25,12 @@ use gecko::snapshot_helpers; use gecko_bindings::bindings; use gecko_bindings::bindings::{Gecko_DropStyleChildrenIterator, Gecko_MaybeCreateStyleChildrenIterator}; use gecko_bindings::bindings::{Gecko_ElementState, Gecko_GetLastChild, Gecko_GetNextStyleChild}; -use gecko_bindings::bindings::{Gecko_GetServoDeclarationBlock, Gecko_IsHTMLElementInHTMLDocument}; use gecko_bindings::bindings::{Gecko_IsLink, Gecko_IsRootElement, Gecko_MatchesElement}; use gecko_bindings::bindings::{Gecko_IsUnvisitedLink, Gecko_IsVisitedLink, Gecko_Namespace}; use gecko_bindings::bindings::{Gecko_SetNodeFlags, Gecko_UnsetNodeFlags}; use gecko_bindings::bindings::Gecko_ClassOrClassList; use gecko_bindings::bindings::Gecko_GetAnimationRule; +use gecko_bindings::bindings::Gecko_GetServoDeclarationBlock; use gecko_bindings::bindings::Gecko_GetStyleContext; use gecko_bindings::structs; use gecko_bindings::structs::{RawGeckoElement, RawGeckoNode}; @@ -88,6 +88,11 @@ impl<'ln> GeckoNode<'ln> { unsafe { &*self.0.mNodeInfo.mRawPtr } } + fn owner_doc(&self) -> &structs::nsIDocument { + debug_assert!(!self.node_info().mDocument.is_null()); + unsafe { &*self.node_info().mDocument } + } + fn first_child(&self) -> Option> { unsafe { self.0.mFirstChild.as_ref().map(GeckoNode::from_content) } } @@ -565,9 +570,10 @@ impl<'le> ::selectors::Element for GeckoElement<'le> { } fn is_html_element_in_html_document(&self) -> bool { - unsafe { - Gecko_IsHTMLElementInHTMLDocument(self.0) - } + let node = self.as_node(); + let node_info = node.node_info(); + node_info.mInner.mNamespaceID == (structs::root::kNameSpaceID_XHTML as i32) && + node.owner_doc().mType == structs::root::nsIDocument_Type::eHTML } }