aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvectorijk <jiangkai@gmail.com>2015-08-13 06:53:25 -0700
committervectorijk <jiangkai@gmail.com>2015-08-16 01:34:55 -0700
commit14ac1ef75a52e5a0d68e8cec68c9787f047e96d7 (patch)
tree3993e114376fe7813524fa7a51214a4fe951f15c
parent7c63c7d7c109165b9584da5b31658ff89af21ef9 (diff)
downloadservo-14ac1ef75a52e5a0d68e8cec68c9787f047e96d7.tar.gz
servo-14ac1ef75a52e5a0d68e8cec68c9787f047e96d7.zip
remove ScriptListener
ref #7175
-rw-r--r--components/compositing/pipeline.rs3
-rw-r--r--components/msg/compositor_msg.rs37
-rw-r--r--components/script/dom/bindings/trace.rs8
-rw-r--r--components/script/dom/document.rs14
-rw-r--r--components/script/dom/window.rs8
-rw-r--r--components/script/script_task.rs19
-rw-r--r--components/script_traits/lib.rs5
7 files changed, 24 insertions, 70 deletions
diff --git a/components/compositing/pipeline.rs b/components/compositing/pipeline.rs
index a78f606f870..6d398b6f42b 100644
--- a/components/compositing/pipeline.rs
+++ b/components/compositing/pipeline.rs
@@ -16,7 +16,6 @@ use gfx::font_cache_task::FontCacheTask;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
use layers::geometry::DevicePixel;
-use msg::compositor_msg::ScriptListener;
use msg::constellation_msg::{ConstellationChan, Failure, FrameId, PipelineId, SubpageId};
use msg::constellation_msg::{LoadData, WindowSizeData, PipelineExitType, MozBrowserEvent};
use profile_traits::mem as profile_mem;
@@ -323,7 +322,7 @@ impl PipelineContent {
ScriptTaskFactory::create(None::<&mut STF>,
self.id,
self.parent_info,
- ScriptListener::new(script_to_compositor_chan),
+ script_to_compositor_chan,
&layout_pair,
self.script_chan.clone(),
mem::replace(&mut self.script_port, None).unwrap(),
diff --git a/components/msg/compositor_msg.rs b/components/msg/compositor_msg.rs
index 2d29256f092..d4a38805b1f 100644
--- a/components/msg/compositor_msg.rs
+++ b/components/msg/compositor_msg.rs
@@ -7,7 +7,6 @@ use constellation_msg::{Key, KeyState, KeyModifiers};
use euclid::point::Point2D;
use euclid::rect::Rect;
use euclid::Matrix4;
-use ipc_channel::ipc::IpcSender;
use layers::platform::surface::NativeDisplay;
use layers::layers::{BufferRequest, LayerBufferSet};
use std::fmt::{Formatter, Debug};
@@ -126,39 +125,3 @@ pub enum ScriptToCompositorMsg {
Exit,
}
-/// The interface used by the script task to tell the compositor to update its ready state,
-/// which is used in displaying the appropriate message in the window's title.
-#[derive(Clone)]
-pub struct ScriptListener(IpcSender<ScriptToCompositorMsg>);
-
-impl ScriptListener {
- pub fn new(sender: IpcSender<ScriptToCompositorMsg>) -> ScriptListener {
- ScriptListener(sender)
- }
-
- pub fn scroll_fragment_point(&mut self,
- pipeline_id: PipelineId,
- layer_id: LayerId,
- point: Point2D<f32>) {
- self.0
- .send(ScriptToCompositorMsg::ScrollFragmentPoint(pipeline_id, layer_id, point))
- .unwrap()
- }
-
- pub fn close(&mut self) {
- self.0.send(ScriptToCompositorMsg::Exit).unwrap()
- }
-
- pub fn dup(&mut self) -> ScriptListener {
- self.clone()
- }
-
- pub fn set_title(&mut self, pipeline_id: PipelineId, title: Option<String>) {
- self.0.send(ScriptToCompositorMsg::SetTitle(pipeline_id, title)).unwrap()
- }
-
- pub fn send_key_event(&mut self, key: Key, state: KeyState, modifiers: KeyModifiers) {
- self.0.send(ScriptToCompositorMsg::SendKeyEvent(key, state, modifiers)).unwrap()
- }
-}
-
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index 423aa62844a..b0e082583f8 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -58,7 +58,6 @@ use net_traits::storage_task::StorageType;
use script_traits::UntrustedNodeAddress;
use serde::{Serialize, Deserialize};
use smallvec::SmallVec;
-use msg::compositor_msg::ScriptListener;
use msg::constellation_msg::ConstellationChan;
use net_traits::image::base::Image;
use profile_traits::mem::ProfilerChan;
@@ -342,13 +341,6 @@ impl<T> JSTraceable for IpcSender<T> where T: Deserialize + Serialize {
}
}
-impl JSTraceable for ScriptListener {
- #[inline]
- fn trace(&self, _: *mut JSTracer) {
- // Do nothing
- }
-}
-
impl JSTraceable for Box<LayoutRPC+'static> {
#[inline]
fn trace(&self, _: *mut JSTracer) {
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index dfd0024960e..c3d81e20ba5 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -69,7 +69,7 @@ use dom::uievent::UIEvent;
use dom::window::{Window, WindowHelpers, ReflowReason};
use layout_interface::{HitTestResponse, MouseOverResponse};
-use msg::compositor_msg::ScriptListener;
+use msg::compositor_msg::ScriptToCompositorMsg;
use msg::constellation_msg::AnimationState;
use msg::constellation_msg::Msg as ConstellationMsg;
use msg::constellation_msg::{ConstellationChan, FocusType, Key, KeyState, KeyModifiers, MozBrowserEvent, SubpageId};
@@ -85,7 +85,7 @@ use layout_interface::{ReflowGoal, ReflowQueryType};
use euclid::point::Point2D;
use html5ever::tree_builder::{QuirksMode, NoQuirks, LimitedQuirks, Quirks};
-use ipc_channel::ipc;
+use ipc_channel::ipc::{self, IpcSender};
use layout_interface::{LayoutChan, Msg};
use string_cache::{Atom, QualName};
use url::Url;
@@ -272,7 +272,7 @@ pub trait DocumentHelpers<'a> {
key: Key,
state: KeyState,
modifiers: KeyModifiers,
- compositor: &mut ScriptListener);
+ compositor: &mut IpcSender<ScriptToCompositorMsg>);
fn node_from_nodes_and_strings(self, nodes: Vec<NodeOrString>)
-> Fallible<Root<Node>>;
fn get_body_attribute(self, local_name: &Atom) -> DOMString;
@@ -637,8 +637,8 @@ impl<'a> DocumentHelpers<'a> for &'a Document {
let window = self.window();
// FIXME(https://github.com/rust-lang/rust/issues/23338)
let window = window.r();
- let mut compositor = window.compositor();
- compositor.set_title(window.pipeline(), Some(self.Title()));
+ let compositor = window.compositor();
+ compositor.send(ScriptToCompositorMsg::SetTitle(window.pipeline(), Some(self.Title()))).unwrap();
}
fn dirty_all_nodes(self) {
@@ -813,7 +813,7 @@ impl<'a> DocumentHelpers<'a> for &'a Document {
key: Key,
state: KeyState,
modifiers: KeyModifiers,
- compositor: &mut ScriptListener) {
+ compositor: &mut IpcSender<ScriptToCompositorMsg>) {
let window = self.window.root();
let focused = self.get_focused_element();
let body = self.GetBody();
@@ -864,7 +864,7 @@ impl<'a> DocumentHelpers<'a> for &'a Document {
}
if !prevented {
- compositor.send_key_event(key, state, modifiers);
+ compositor.send(ScriptToCompositorMsg::SendKeyEvent(key, state, modifiers)).unwrap();
}
// This behavior is unspecced
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index db047d7a793..6f7b23adf13 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -42,7 +42,7 @@ use webdriver_handlers::jsval_to_webdriver;
use devtools_traits::{ScriptToDevtoolsControlMsg, TimelineMarker, TimelineMarkerType};
use devtools_traits::{TracingMetadata};
-use msg::compositor_msg::ScriptListener;
+use msg::compositor_msg::ScriptToCompositorMsg;
use msg::constellation_msg::{LoadData, PipelineId, SubpageId, ConstellationChan, WindowSizeData, WorkerId};
use msg::webdriver_msg::{WebDriverJSError, WebDriverJSResult};
use net_traits::ResourceTask;
@@ -121,7 +121,7 @@ pub struct Window {
#[ignore_heap_size_of = "channels are hard"]
image_cache_chan: ImageCacheChan,
#[ignore_heap_size_of = "TODO(#6911) newtypes containing unmeasurable types are hard"]
- compositor: DOMRefCell<ScriptListener>,
+ compositor: DOMRefCell<IpcSender<ScriptToCompositorMsg>>,
browsing_context: DOMRefCell<Option<BrowsingContext>>,
page: Rc<Page>,
performance: MutNullableHeap<JS<Performance>>,
@@ -273,7 +273,7 @@ impl Window {
&self.image_cache_task
}
- pub fn compositor<'a>(&'a self) -> RefMut<'a, ScriptListener> {
+ pub fn compositor<'a>(&'a self) -> RefMut<'a, IpcSender<ScriptToCompositorMsg>> {
self.compositor.borrow_mut()
}
@@ -1073,7 +1073,7 @@ impl Window {
script_chan: MainThreadScriptChan,
image_cache_chan: ImageCacheChan,
control_chan: Sender<ConstellationControlMsg>,
- compositor: ScriptListener,
+ compositor: IpcSender<ScriptToCompositorMsg>,
image_cache_task: ImageCacheTask,
resource_task: Arc<ResourceTask>,
storage_task: StorageTask,
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index e09513bf31c..8960ee54038 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -62,7 +62,7 @@ use script_traits::{CompositorEvent, MouseButton};
use script_traits::ConstellationControlMsg;
use script_traits::{NewLayoutInfo, OpaqueScriptLayoutChannel};
use script_traits::{ScriptState, ScriptTaskFactory};
-use msg::compositor_msg::{LayerId, ScriptListener};
+use msg::compositor_msg::{LayerId, ScriptToCompositorMsg};
use msg::constellation_msg::{ConstellationChan, FocusType};
use msg::constellation_msg::{LoadData, PipelineId, SubpageId, MozBrowserEvent, WorkerId};
use msg::constellation_msg::{Failure, WindowSizeData, PipelineExitType};
@@ -97,7 +97,7 @@ use url::{Url, UrlParser};
use libc;
use std::any::Any;
use std::borrow::ToOwned;
-use std::cell::{Cell, RefCell};
+use std::cell::{Cell, RefCell, RefMut};
use std::collections::HashSet;
use std::io::{stdout, Write};
use std::mem as std_mem;
@@ -361,7 +361,7 @@ pub struct ScriptTask {
constellation_chan: ConstellationChan,
/// A handle to the compositor for communicating ready state messages.
- compositor: DOMRefCell<ScriptListener>,
+ compositor: DOMRefCell<IpcSender<ScriptToCompositorMsg>>,
/// The port on which we receive messages from the image cache
image_cache_port: Receiver<ImageCacheResult>,
@@ -443,7 +443,7 @@ impl ScriptTaskFactory for ScriptTask {
fn create(_phantom: Option<&mut ScriptTask>,
id: PipelineId,
parent_info: Option<(PipelineId, SubpageId)>,
- compositor: ScriptListener,
+ compositor: IpcSender<ScriptToCompositorMsg>,
layout_chan: &OpaqueScriptLayoutChannel,
control_chan: Sender<ConstellationControlMsg>,
control_port: Receiver<ConstellationControlMsg>,
@@ -579,7 +579,7 @@ impl ScriptTask {
}
/// Creates a new script task.
- pub fn new(compositor: ScriptListener,
+ pub fn new(compositor: IpcSender<ScriptToCompositorMsg>,
port: Receiver<MainThreadScriptMsg>,
chan: MainThreadScriptChan,
control_chan: Sender<ConstellationControlMsg>,
@@ -1329,7 +1329,7 @@ impl ScriptTask {
// TODO(tkuehn): currently there is only one window,
// so this can afford to be naive and just shut down the
// compositor. In the future it'll need to be smarter.
- self.compositor.borrow_mut().close();
+ (*(RefMut::map(self.compositor.borrow_mut(), |t| t))).send(ScriptToCompositorMsg::Exit).unwrap();
}
/// We have received notification that the response associated with a load has completed.
@@ -1506,7 +1506,7 @@ impl ScriptTask {
MainThreadScriptChan(sender.clone()),
self.image_cache_channel.clone(),
self.control_chan.clone(),
- self.compositor.borrow_mut().dup(),
+ (*(RefMut::map(self.compositor.borrow_mut(), |t| t))).clone(),
self.image_cache_task.clone(),
self.resource_task.clone(),
self.storage_task.clone(),
@@ -1601,7 +1601,8 @@ impl ScriptTask {
// Really what needs to happen is that this needs to go through layout to ask which
// layer the element belongs to, and have it send the scroll message to the
// compositor.
- self.compositor.borrow_mut().scroll_fragment_point(pipeline_id, LayerId::null(), point);
+ (*(RefMut::map(self.compositor.borrow_mut(), |t| t))).send(
+ ScriptToCompositorMsg::ScrollFragmentPoint(pipeline_id, LayerId::null(), point)).unwrap();
}
/// Reflows non-incrementally, rebuilding the entire layout tree in the process.
@@ -1699,7 +1700,7 @@ impl ScriptTask {
let page = get_page(&self.root_page(), pipeline_id);
let document = page.document();
document.r().dispatch_key_event(
- key, state, modifiers, &mut *self.compositor.borrow_mut());
+ key, state, modifiers, &mut *(RefMut::map(self.compositor.borrow_mut(), |t| t)));
}
}
}
diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs
index 60d38eb4651..637c61f7444 100644
--- a/components/script_traits/lib.rs
+++ b/components/script_traits/lib.rs
@@ -24,11 +24,10 @@ extern crate url;
use devtools_traits::ScriptToDevtoolsControlMsg;
use ipc_channel::ipc::{IpcReceiver, IpcSender};
use libc::c_void;
-use msg::compositor_msg::{Epoch, LayerId};
+use msg::compositor_msg::{Epoch, LayerId, ScriptToCompositorMsg};
use msg::constellation_msg::{ConstellationChan, PipelineId, Failure, WindowSizeData};
use msg::constellation_msg::{LoadData, SubpageId, Key, KeyState, KeyModifiers};
use msg::constellation_msg::{MozBrowserEvent, PipelineExitType};
-use msg::compositor_msg::ScriptListener;
use msg::webdriver_msg::WebDriverScriptCommand;
use net_traits::ResourceTask;
use net_traits::image_cache_task::ImageCacheTask;
@@ -179,7 +178,7 @@ pub trait ScriptTaskFactory {
fn create(_phantom: Option<&mut Self>,
id: PipelineId,
parent_info: Option<(PipelineId, SubpageId)>,
- compositor: ScriptListener,
+ compositor: IpcSender<ScriptToCompositorMsg>,
layout_chan: &OpaqueScriptLayoutChannel,
control_chan: Sender<ConstellationControlMsg>,
control_port: Receiver<ConstellationControlMsg>,