aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/node.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-06-07 11:09:14 -0500
committerbors-servo <lbergstrom+bors@mozilla.com>2016-06-07 11:09:14 -0500
commit1e3edf3ca454b91dfdc267c5b2f4347eda9b7cb6 (patch)
tree3f9cbdf968bf83453f8f0ee5bb3c26495925346c /components/script/dom/node.rs
parentf56848a0e8a9137f128088d1dd0f86e11fad841a (diff)
parentaea03b2f921a41bf78791a877539f1fafab887dd (diff)
downloadservo-1e3edf3ca454b91dfdc267c5b2f4347eda9b7cb6.tar.gz
servo-1e3edf3ca454b91dfdc267c5b2f4347eda9b7cb6.zip
Auto merge of #11656 - Ms2ger:reduce-dom-exposure, r=nox
Reduce the amount of dom code used outside the script crate. <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11656) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r--components/script/dom/node.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 384465a8039..d3e6a955284 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -38,8 +38,11 @@ use dom::documenttype::DocumentType;
use dom::element::{Element, ElementCreator};
use dom::eventtarget::EventTarget;
use dom::htmlbodyelement::HTMLBodyElement;
+use dom::htmlcanvaselement::{LayoutHTMLCanvasElementHelpers, HTMLCanvasData};
use dom::htmlcollection::HTMLCollection;
use dom::htmlelement::HTMLElement;
+use dom::htmliframeelement::{HTMLIFrameElement, HTMLIFrameElementLayoutMethods};
+use dom::htmlimageelement::{HTMLImageElement, LayoutHTMLImageElementHelpers};
use dom::htmlinputelement::{HTMLInputElement, LayoutHTMLInputElementHelpers};
use dom::htmltextareaelement::{HTMLTextAreaElement, LayoutHTMLTextAreaElementHelpers};
use dom::nodelist::NodeList;
@@ -56,6 +59,7 @@ use html5ever::tree_builder::QuirksMode;
use js::jsapi::{JSContext, JSObject, JSRuntime};
use layout_interface::Msg;
use libc::{self, c_void, uintptr_t};
+use msg::constellation_msg::PipelineId;
use parse::html::parse_html_fragment;
use ref_slice::ref_slice;
use script_traits::UntrustedNodeAddress;
@@ -68,8 +72,10 @@ use std::cmp::max;
use std::default::Default;
use std::iter::{self, FilterMap, Peekable};
use std::mem;
+use std::ops::Range;
use string_cache::{Atom, Namespace, QualName};
use style::selector_impl::ServoSelectorImpl;
+use url::Url;
use util::thread_state;
use uuid::Uuid;
@@ -960,6 +966,10 @@ pub trait LayoutNodeHelpers {
unsafe fn init_style_and_layout_data(&self, OpaqueStyleAndLayoutData);
fn text_content(&self) -> String;
+ fn selection(&self) -> Option<Range<usize>>;
+ fn image_url(&self) -> Option<Url>;
+ fn canvas_data(&self) -> Option<HTMLCanvasData>;
+ fn iframe_pipeline_id(&self) -> PipelineId;
}
impl LayoutNodeHelpers for LayoutJS<Node> {
@@ -1067,6 +1077,39 @@ impl LayoutNodeHelpers for LayoutJS<Node> {
panic!("not text!")
}
+
+ #[allow(unsafe_code)]
+ fn selection(&self) -> Option<Range<usize>> {
+ if let Some(area) = self.downcast::<HTMLTextAreaElement>() {
+ return unsafe { area.selection_for_layout() };
+ }
+
+ if let Some(input) = self.downcast::<HTMLInputElement>() {
+ return unsafe { input.selection_for_layout() };
+ }
+
+ None
+ }
+
+ #[allow(unsafe_code)]
+ fn image_url(&self) -> Option<Url> {
+ unsafe {
+ self.downcast::<HTMLImageElement>()
+ .expect("not an image!")
+ .image_url()
+ }
+ }
+
+ fn canvas_data(&self) -> Option<HTMLCanvasData> {
+ self.downcast()
+ .map(|canvas| canvas.data())
+ }
+
+ fn iframe_pipeline_id(&self) -> PipelineId {
+ let iframe_element = self.downcast::<HTMLIFrameElement>()
+ .expect("not an iframe element!");
+ iframe_element.pipeline_id().unwrap()
+ }
}