aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorMs2ger <Ms2ger@gmail.com>2016-06-16 12:28:43 +0100
committerMs2ger <Ms2ger@gmail.com>2016-06-20 19:08:12 +0200
commit9e2e0ff98c7c42b6bfb24f0846dc0c82e36e7d2c (patch)
treeaa32e333a8bc0c11895213251a226d5b818a4541 /components/script
parent2c50318ee7c05ab926e27d225a3409c8da86c991 (diff)
downloadservo-9e2e0ff98c7c42b6bfb24f0846dc0c82e36e7d2c.tar.gz
servo-9e2e0ff98c7c42b6bfb24f0846dc0c82e36e7d2c.zip
Move the remainder of layout_interface into script_layout_interface.
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/document.rs2
-rw-r--r--components/script/dom/htmliframeelement.rs2
-rw-r--r--components/script/dom/htmllinkelement.rs2
-rw-r--r--components/script/dom/htmlstyleelement.rs2
-rw-r--r--components/script/dom/node.rs2
-rw-r--r--components/script/dom/window.rs2
-rw-r--r--components/script/layout_interface.rs152
-rw-r--r--components/script/lib.rs1
-rw-r--r--components/script/script_thread.rs22
9 files changed, 17 insertions, 170 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 4dfb484a301..a69537d3c1c 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -92,7 +92,6 @@ use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks, QuirksMode};
use ipc_channel::ipc::{self, IpcSender};
use js::jsapi::JS_GetRuntime;
use js::jsapi::{JSContext, JSObject, JSRuntime};
-use layout_interface::{Msg, ReflowQueryType};
use msg::constellation_msg::{ALT, CONTROL, SHIFT, SUPER};
use msg::constellation_msg::{Key, KeyModifiers, KeyState};
use msg::constellation_msg::{PipelineId, ReferrerPolicy, SubpageId};
@@ -103,6 +102,7 @@ use net_traits::{AsyncResponseTarget, PendingAsyncLoad, IpcSend};
use num_traits::ToPrimitive;
use origin::Origin;
use parse::{ParserRoot, ParserRef, MutNullableParserField};
+use script_layout_interface::message::{Msg, ReflowQueryType};
use script_thread::{MainThreadScriptMsg, Runnable};
use script_traits::UntrustedNodeAddress;
use script_traits::{AnimationState, MouseButton, MouseEventType, MozBrowserEvent};
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index 86146b8e915..22e67d162d9 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -38,9 +38,9 @@ use dom::window::{ReflowReason, Window};
use ipc_channel::ipc;
use js::jsapi::{JSAutoCompartment, RootedValue, JSContext, MutableHandleValue};
use js::jsval::{UndefinedValue, NullValue};
-use layout_interface::ReflowQueryType;
use msg::constellation_msg::{FrameType, LoadData, NavigationDirection, PipelineId, SubpageId};
use net_traits::response::HttpsState;
+use script_layout_interface::message::ReflowQueryType;
use script_traits::IFrameSandboxState::{IFrameSandboxed, IFrameUnsandboxed};
use script_traits::{IFrameLoadInfo, MozBrowserEvent, ScriptMsg as ConstellationMsg};
use std::cell::Cell;
diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs
index 79b6ed32f0b..ab2c2a99887 100644
--- a/components/script/dom/htmllinkelement.rs
+++ b/components/script/dom/htmllinkelement.rs
@@ -25,9 +25,9 @@ use hyper::header::ContentType;
use hyper::mime::{Mime, TopLevel, SubLevel};
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
-use layout_interface::Msg;
use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata, NetworkError};
use network_listener::{NetworkListener, PreInvoke};
+use script_layout_interface::message::Msg;
use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg};
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs
index c972cb77bb5..47409402855 100644
--- a/components/script/dom/htmlstyleelement.rs
+++ b/components/script/dom/htmlstyleelement.rs
@@ -14,7 +14,7 @@ use dom::element::Element;
use dom::htmlelement::HTMLElement;
use dom::node::{ChildrenMutation, Node, document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
-use layout_interface::Msg;
+use script_layout_interface::message::Msg;
use std::sync::Arc;
use string_cache::Atom;
use style::media_queries::parse_media_query_list;
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index fdb9deed87b..53a3f355b9d 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -56,11 +56,11 @@ use euclid::size::Size2D;
use heapsize::{HeapSizeOf, heap_size_of};
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_layout_interface::message::Msg;
use script_layout_interface::{HTMLCanvasData, OpaqueStyleAndLayoutData};
use script_layout_interface::{LayoutNodeType, LayoutElementType, TrustedNodeAddress};
use script_traits::UntrustedNodeAddress;
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 6dc43f8b925..eab2e31c907 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -42,7 +42,6 @@ use js::jsapi::{Evaluate2, HandleObject, HandleValue, JSAutoCompartment, JSConte
use js::jsapi::{JS_GetRuntime, JS_GC, MutableHandleValue, SetWindowProxy};
use js::rust::CompileOptionsWrapper;
use js::rust::Runtime;
-use layout_interface::{Msg, Reflow, ReflowQueryType, ScriptReflow};
use libc;
use msg::constellation_msg::{FrameType, LoadData, PanicMsg, PipelineId, SubpageId};
use msg::constellation_msg::{WindowSizeData, WindowSizeType};
@@ -59,6 +58,7 @@ use profile_traits::time::{ProfilerChan, TimerMetadataReflowType, profile};
use reporter::CSSErrorReporter;
use rustc_serialize::base64::{FromBase64, STANDARD, ToBase64};
use script_layout_interface::TrustedNodeAddress;
+use script_layout_interface::message::{Msg, Reflow, ReflowQueryType, ScriptReflow};
use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse, LayoutRPC};
use script_layout_interface::rpc::{MarginStyleResponse, ResolvedStyleResponse};
use script_runtime::{ScriptChan, ScriptPort};
diff --git a/components/script/layout_interface.rs b/components/script/layout_interface.rs
deleted file mode 100644
index 350c8150109..00000000000
--- a/components/script/layout_interface.rs
+++ /dev/null
@@ -1,152 +0,0 @@
-/* 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/. */
-
-//! The high-level interface from script to layout. Using this abstract
-//! interface helps reduce coupling between these two components, and enables
-//! the DOM to be placed in a separate crate from layout.
-
-use app_units::Au;
-use euclid::point::Point2D;
-use euclid::rect::Rect;
-use gfx_traits::{Epoch, LayerId};
-use ipc_channel::ipc::{IpcReceiver, IpcSender};
-use msg::constellation_msg::{PanicMsg, PipelineId, WindowSizeData};
-use net_traits::image_cache_thread::ImageCacheThread;
-use profile_traits::mem::ReportsChan;
-use script_layout_interface::rpc::LayoutRPC;
-use script_layout_interface::{OpaqueStyleAndLayoutData, TrustedNodeAddress};
-use script_traits::{ConstellationControlMsg, LayoutControlMsg};
-use script_traits::{LayoutMsg as ConstellationMsg, StackingContextScrollState};
-use std::sync::Arc;
-use std::sync::mpsc::{Receiver, Sender};
-use string_cache::Atom;
-use style::context::ReflowGoal;
-use style::selector_impl::PseudoElement;
-use style::servo::Stylesheet;
-use url::Url;
-use util::ipc::OptionalOpaqueIpcSender;
-
-/// Asynchronous messages that script can send to layout.
-pub enum Msg {
- /// Adds the given stylesheet to the document.
- AddStylesheet(Arc<Stylesheet>),
-
- /// Puts a document into quirks mode, causing the quirks mode stylesheet to be loaded.
- SetQuirksMode,
-
- /// Requests a reflow.
- Reflow(ScriptReflow),
-
- /// Get an RPC interface.
- GetRPC(Sender<Box<LayoutRPC + Send>>),
-
- /// Requests that the layout thread render the next frame of all animations.
- TickAnimations,
-
- /// Requests that the layout thread reflow with a newly-loaded Web font.
- ReflowWithNewlyLoadedWebFont,
-
- /// Updates the layout visible rects, affecting the area that display lists will be constructed
- /// for.
- SetVisibleRects(Vec<(LayerId, Rect<Au>)>),
-
- /// Destroys layout data associated with a DOM node.
- ///
- /// TODO(pcwalton): Maybe think about batching to avoid message traffic.
- ReapStyleAndLayoutData(OpaqueStyleAndLayoutData),
-
- /// Requests that the layout thread measure its memory usage. The resulting reports are sent back
- /// via the supplied channel.
- CollectReports(ReportsChan),
-
- /// Requests that the layout thread enter a quiescent state in which no more messages are
- /// accepted except `ExitMsg`. A response message will be sent on the supplied channel when
- /// this happens.
- PrepareToExit(Sender<()>),
-
- /// Requests that the layout thread immediately shut down. There must be no more nodes left after
- /// this, or layout will crash.
- ExitNow,
-
- /// Get the last epoch counter for this layout thread.
- GetCurrentEpoch(IpcSender<Epoch>),
-
- /// Asks the layout thread whether any Web fonts have yet to load (if true, loads are pending;
- /// false otherwise).
- GetWebFontLoadState(IpcSender<bool>),
-
- /// Creates a new layout thread.
- ///
- /// This basically exists to keep the script-layout dependency one-way.
- CreateLayoutThread(NewLayoutThreadInfo),
-
- /// Set the final Url.
- SetFinalUrl(Url),
-
- /// Tells layout about the new scrolling offsets of each scrollable stacking context.
- SetStackingContextScrollStates(Vec<StackingContextScrollState>),
-}
-
-
-/// Any query to perform with this reflow.
-#[derive(PartialEq)]
-pub enum ReflowQueryType {
- NoQuery,
- ContentBoxQuery(TrustedNodeAddress),
- ContentBoxesQuery(TrustedNodeAddress),
- NodeOverflowQuery(TrustedNodeAddress),
- HitTestQuery(Point2D<f32>, bool),
- NodeGeometryQuery(TrustedNodeAddress),
- NodeLayerIdQuery(TrustedNodeAddress),
- NodeScrollGeometryQuery(TrustedNodeAddress),
- ResolvedStyleQuery(TrustedNodeAddress, Option<PseudoElement>, Atom),
- OffsetParentQuery(TrustedNodeAddress),
- MarginStyleQuery(TrustedNodeAddress),
-}
-
-/// Information needed for a reflow.
-pub struct Reflow {
- /// The goal of reflow: either to render to the screen or to flush layout info for script.
- pub goal: ReflowGoal,
- /// A clipping rectangle for the page, an enlarged rectangle containing the viewport.
- pub page_clip_rect: Rect<Au>,
-}
-
-/// Information needed for a script-initiated reflow.
-pub struct ScriptReflow {
- /// General reflow data.
- pub reflow_info: Reflow,
- /// The document node.
- pub document: TrustedNodeAddress,
- /// The document's list of stylesheets.
- pub document_stylesheets: Vec<Arc<Stylesheet>>,
- /// Whether the document's stylesheets have changed since the last script reflow.
- pub stylesheets_changed: bool,
- /// The current window size.
- pub window_size: WindowSizeData,
- /// The channel that we send a notification to.
- pub script_join_chan: Sender<()>,
- /// The type of query if any to perform during this reflow.
- pub query_type: ReflowQueryType,
-}
-
-impl Drop for ScriptReflow {
- fn drop(&mut self) {
- self.script_join_chan.send(()).unwrap();
- }
-}
-
-pub struct NewLayoutThreadInfo {
- pub id: PipelineId,
- pub url: Url,
- pub is_parent: bool,
- pub layout_pair: (Sender<Msg>, Receiver<Msg>),
- pub pipeline_port: IpcReceiver<LayoutControlMsg>,
- pub constellation_chan: IpcSender<ConstellationMsg>,
- pub panic_chan: IpcSender<PanicMsg>,
- pub script_chan: IpcSender<ConstellationControlMsg>,
- pub image_cache_thread: ImageCacheThread,
- pub paint_chan: OptionalOpaqueIpcSender,
- pub content_process_shutdown_chan: IpcSender<()>,
-}
diff --git a/components/script/lib.rs b/components/script/lib.rs
index c191c203889..33467a5dd34 100644
--- a/components/script/lib.rs
+++ b/components/script/lib.rs
@@ -94,7 +94,6 @@ mod devtools;
pub mod document_loader;
#[macro_use]
pub mod dom;
-pub mod layout_interface;
pub mod layout_wrapper;
mod mem;
mod network_listener;
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 3459e5ddcfa..8418071e908 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -61,7 +61,6 @@ use js::jsapi::{JSAutoCompartment, JSContext, JS_SetWrapObjectCallbacks};
use js::jsapi::{JSTracer, SetWindowProxyClass};
use js::jsval::UndefinedValue;
use js::rust::Runtime;
-use layout_interface::{self, NewLayoutThreadInfo, ReflowQueryType};
use mem::heap_size_of_self_and_children;
use msg::constellation_msg::{FrameType, LoadData, PanicMsg, PipelineId, PipelineNamespace};
use msg::constellation_msg::{SubpageId, WindowSizeData, WindowSizeType};
@@ -77,6 +76,7 @@ use parse::html::{ParseContext, parse_html};
use parse::xml::{self, parse_xml};
use profile_traits::mem::{self, OpaqueSender, Report, ReportKind, ReportsChan};
use profile_traits::time::{self, ProfilerCategory, profile};
+use script_layout_interface::message::{self, NewLayoutThreadInfo, ReflowQueryType};
use script_runtime::{CommonScriptMsg, ScriptChan, ScriptThreadEventCategory};
use script_runtime::{ScriptPort, StackRootTLS, new_rt_and_cx, get_reports};
use script_traits::CompositorEvent::{KeyEvent, MouseButtonEvent, MouseMoveEvent, ResizeEvent};
@@ -135,7 +135,7 @@ struct InProgressLoad {
/// The current window size associated with this pipeline.
window_size: Option<WindowSizeData>,
/// Channel to the layout thread associated with this pipeline.
- layout_chan: Sender<layout_interface::Msg>,
+ layout_chan: Sender<message::Msg>,
/// The current viewport clipping rectangle applying to this pipeline, if any.
clip_rect: Option<Rect<f32>>,
/// Window is frozen (navigated away while loading for example).
@@ -150,7 +150,7 @@ impl InProgressLoad {
/// Create a new InProgressLoad object.
fn new(id: PipelineId,
parent_info: Option<(PipelineId, SubpageId, FrameType)>,
- layout_chan: Sender<layout_interface::Msg>,
+ layout_chan: Sender<message::Msg>,
window_size: Option<WindowSizeData>,
url: Url) -> InProgressLoad {
InProgressLoad {
@@ -438,11 +438,11 @@ impl<'a> Drop for ScriptMemoryFailsafe<'a> {
}
impl ScriptThreadFactory for ScriptThread {
- type Message = layout_interface::Msg;
+ type Message = message::Msg;
fn create(state: InitialScriptState,
load_data: LoadData)
- -> (Sender<layout_interface::Msg>, Receiver<layout_interface::Msg>) {
+ -> (Sender<message::Msg>, Receiver<message::Msg>) {
let panic_chan = state.panic_chan.clone();
let (script_chan, script_port) = channel();
@@ -1184,7 +1184,7 @@ impl ScriptThread {
// Tell layout to actually spawn the thread.
parent_window.layout_chan()
- .send(layout_interface::Msg::CreateLayoutThread(layout_creation_info))
+ .send(message::Msg::CreateLayoutThread(layout_creation_info))
.unwrap();
// Kick off the fetch for the new resource.
@@ -1462,10 +1462,10 @@ impl ScriptThread {
// processed this message.
let (response_chan, response_port) = channel();
let chan = &load.layout_chan;
- if chan.send(layout_interface::Msg::PrepareToExit(response_chan)).is_ok() {
+ if chan.send(message::Msg::PrepareToExit(response_chan)).is_ok() {
debug!("shutting down layout for page {:?}", id);
response_port.recv().unwrap();
- chan.send(layout_interface::Msg::ExitNow).ok();
+ chan.send(message::Msg::ExitNow).ok();
}
let has_pending_loads = self.incomplete_loads.borrow().len() > 0;
@@ -1523,7 +1523,7 @@ impl ScriptThread {
{
// send the final url to the layout thread.
incomplete.layout_chan
- .send(layout_interface::Msg::SetFinalUrl(final_url.clone()))
+ .send(message::Msg::SetFinalUrl(final_url.clone()))
.unwrap();
// update the pipeline url
@@ -2126,7 +2126,7 @@ fn shut_down_layout(context_tree: &BrowsingContext) {
let (response_chan, response_port) = channel();
let window = context.active_window();
let chan = window.layout_chan().clone();
- if chan.send(layout_interface::Msg::PrepareToExit(response_chan)).is_ok() {
+ if chan.send(message::Msg::PrepareToExit(response_chan)).is_ok() {
channels.push(chan);
response_port.recv().unwrap();
}
@@ -2143,7 +2143,7 @@ fn shut_down_layout(context_tree: &BrowsingContext) {
// Destroy the layout thread. If there were node leaks, layout will now crash safely.
for chan in channels {
- chan.send(layout_interface::Msg::ExitNow).ok();
+ chan.send(message::Msg::ExitNow).ok();
}
}