aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/script/dom/document.rs25
-rw-r--r--components/script/dom/documentorshadowroot.rs21
-rw-r--r--components/script/dom/shadowroot.rs24
3 files changed, 39 insertions, 31 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 3ed7082e4b5..31778542466 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -488,9 +488,14 @@ impl Document {
self.has_browsing_context
}
+ /// <https://html.spec.whatwg.org/multipage/#concept-document-bc>
#[inline]
pub fn browsing_context(&self) -> Option<DomRoot<WindowProxy>> {
- self.document_or_shadow_root.browsing_context()
+ if self.has_browsing_context {
+ self.window.undiscarded_window_proxy()
+ } else {
+ None
+ }
}
#[inline]
@@ -2622,7 +2627,7 @@ impl Document {
let has_browsing_context = has_browsing_context == HasBrowsingContext::Yes;
Document {
node: Node::new_document_node(),
- document_or_shadow_root: DocumentOrShadowRootImpl::new(window, has_browsing_context),
+ document_or_shadow_root: DocumentOrShadowRootImpl::new(window),
window: Dom::from_ref(window),
has_browsing_context,
implementation: Default::default(),
@@ -4263,14 +4268,22 @@ impl DocumentMethods for Document {
// https://drafts.csswg.org/cssom-view/#dom-document-elementfrompoint
fn ElementFromPoint(&self, x: Finite<f64>, y: Finite<f64>) -> Option<DomRoot<Element>> {
- self.document_or_shadow_root
- .element_from_point(x, y, self.GetDocumentElement())
+ self.document_or_shadow_root.element_from_point(
+ x,
+ y,
+ self.GetDocumentElement(),
+ self.has_browsing_context,
+ )
}
// https://drafts.csswg.org/cssom-view/#dom-document-elementsfrompoint
fn ElementsFromPoint(&self, x: Finite<f64>, y: Finite<f64>) -> Vec<DomRoot<Element>> {
- self.document_or_shadow_root
- .elements_from_point(x, y, self.GetDocumentElement())
+ self.document_or_shadow_root.elements_from_point(
+ x,
+ y,
+ self.GetDocumentElement(),
+ self.has_browsing_context,
+ )
}
// https://html.spec.whatwg.org/multipage/#dom-document-open
diff --git a/components/script/dom/documentorshadowroot.rs b/components/script/dom/documentorshadowroot.rs
index 91ce83af659..5e413c5cc89 100644
--- a/components/script/dom/documentorshadowroot.rs
+++ b/components/script/dom/documentorshadowroot.rs
@@ -13,7 +13,6 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node;
use crate::dom::shadowroot::ShadowRoot;
use crate::dom::window::Window;
-use crate::dom::windowproxy::WindowProxy;
use euclid::Point2D;
use js::jsapi::JS_GetRuntime;
use script_layout_interface::message::{NodesFromPointQueryType, QueryMsg};
@@ -55,28 +54,16 @@ impl DocumentOrShadowRoot {
#[must_root]
#[derive(JSTraceable, MallocSizeOf)]
pub struct DocumentOrShadowRootImpl {
- has_browsing_context: bool,
window: Dom<Window>,
}
impl DocumentOrShadowRootImpl {
- pub fn new(window: &Window, has_browsing_context: bool) -> Self {
+ pub fn new(window: &Window) -> Self {
Self {
- has_browsing_context,
window: Dom::from_ref(window),
}
}
- /// <https://html.spec.whatwg.org/multipage/#concept-document-bc>
- #[inline]
- pub fn browsing_context(&self) -> Option<DomRoot<WindowProxy>> {
- if self.has_browsing_context {
- self.window.undiscarded_window_proxy()
- } else {
- None
- }
- }
-
pub fn nodes_from_point(
&self,
client_point: &Point2D<f32>,
@@ -99,13 +86,14 @@ impl DocumentOrShadowRootImpl {
x: Finite<f64>,
y: Finite<f64>,
document_element: Option<DomRoot<Element>>,
+ has_browsing_context: bool,
) -> Option<DomRoot<Element>> {
let x = *x as f32;
let y = *y as f32;
let point = &Point2D::new(x, y);
let viewport = self.window.window_size().initial_viewport;
- if self.browsing_context().is_none() {
+ if has_browsing_context {
return None;
}
@@ -138,13 +126,14 @@ impl DocumentOrShadowRootImpl {
x: Finite<f64>,
y: Finite<f64>,
document_element: Option<DomRoot<Element>>,
+ has_browsing_context: bool,
) -> Vec<DomRoot<Element>> {
let x = *x as f32;
let y = *y as f32;
let point = &Point2D::new(x, y);
let viewport = self.window.window_size().initial_viewport;
- if self.browsing_context().is_none() {
+ if has_browsing_context {
return vec![];
}
diff --git a/components/script/dom/shadowroot.rs b/components/script/dom/shadowroot.rs
index a7a3bb693e5..e64401ab494 100644
--- a/components/script/dom/shadowroot.rs
+++ b/components/script/dom/shadowroot.rs
@@ -23,7 +23,7 @@ use dom_struct::dom_struct;
pub struct ShadowRoot {
document_fragment: DocumentFragment,
document_or_shadow_root: DocumentOrShadowRootImpl,
- has_browsing_context: bool,
+ document: Dom<Document>,
host: Dom<Element>,
stylesheet_list: MutNullableDom<StyleSheetList>,
window: Dom<Window>,
@@ -32,18 +32,14 @@ pub struct ShadowRoot {
impl ShadowRoot {
#[allow(unrooted_must_root)]
fn new_inherited(host: &Element, document: &Document) -> ShadowRoot {
- let has_browsing_context = true;
let document_fragment = DocumentFragment::new_inherited(document);
document_fragment
.upcast::<Node>()
.set_flag(NodeFlags::IS_IN_SHADOW_TREE, true);
ShadowRoot {
document_fragment,
- document_or_shadow_root: DocumentOrShadowRootImpl::new(
- document.window(),
- has_browsing_context,
- ),
- has_browsing_context,
+ document_or_shadow_root: DocumentOrShadowRootImpl::new(document.window()),
+ document: Dom::from_ref(document),
host: Dom::from_ref(host),
stylesheet_list: MutNullableDom::new(None),
window: Dom::from_ref(document.window()),
@@ -85,14 +81,24 @@ impl ShadowRootMethods for ShadowRoot {
fn ElementFromPoint(&self, x: Finite<f64>, y: Finite<f64>) -> Option<DomRoot<Element>> {
// XXX return the result of running the retargeting algorithm with context object
// and the original result as input
- self.document_or_shadow_root.element_from_point(x, y, None)
+ self.document_or_shadow_root.element_from_point(
+ x,
+ y,
+ None,
+ self.document.has_browsing_context(),
+ )
}
// https://drafts.csswg.org/cssom-view/#dom-document-elementsfrompoint
fn ElementsFromPoint(&self, x: Finite<f64>, y: Finite<f64>) -> Vec<DomRoot<Element>> {
// XXX return the result of running the retargeting algorithm with context object
// and the original result as input
- self.document_or_shadow_root.elements_from_point(x, y, None)
+ self.document_or_shadow_root.elements_from_point(
+ x,
+ y,
+ None,
+ self.document.has_browsing_context(),
+ )
}
/// https://dom.spec.whatwg.org/#dom-shadowroot-mode