From 14ac1ef75a52e5a0d68e8cec68c9787f047e96d7 Mon Sep 17 00:00:00 2001 From: vectorijk Date: Thu, 13 Aug 2015 06:53:25 -0700 Subject: [PATCH] remove ScriptListener ref #7175 --- components/compositing/pipeline.rs | 3 +- components/msg/compositor_msg.rs | 37 ------------------------- components/script/dom/bindings/trace.rs | 8 ------ components/script/dom/document.rs | 14 +++++----- components/script/dom/window.rs | 8 +++--- components/script/script_task.rs | 19 +++++++------ components/script_traits/lib.rs | 5 ++-- 7 files changed, 24 insertions(+), 70 deletions(-) diff --git a/components/compositing/pipeline.rs b/components/compositing/pipeline.rs index a78f606f8708..6d398b6f42b7 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 2d29256f0922..d4a38805b1ff 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); - -impl ScriptListener { - pub fn new(sender: IpcSender) -> ScriptListener { - ScriptListener(sender) - } - - pub fn scroll_fragment_point(&mut self, - pipeline_id: PipelineId, - layer_id: LayerId, - point: Point2D) { - 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) { - 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 423aa62844a9..b0e082583f89 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 JSTraceable for IpcSender where T: Deserialize + Serialize { } } -impl JSTraceable for ScriptListener { - #[inline] - fn trace(&self, _: *mut JSTracer) { - // Do nothing - } -} - impl JSTraceable for Box { #[inline] fn trace(&self, _: *mut JSTracer) { diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index dfd0024960e6..c3d81e20ba53 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); fn node_from_nodes_and_strings(self, nodes: Vec) -> Fallible>; 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) { 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 db047d7a793a..6f7b23adf138 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, + compositor: DOMRefCell>, browsing_context: DOMRefCell>, page: Rc, performance: MutNullableHeap>, @@ -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> { self.compositor.borrow_mut() } @@ -1073,7 +1073,7 @@ impl Window { script_chan: MainThreadScriptChan, image_cache_chan: ImageCacheChan, control_chan: Sender, - compositor: ScriptListener, + compositor: IpcSender, image_cache_task: ImageCacheTask, resource_task: Arc, storage_task: StorageTask, diff --git a/components/script/script_task.rs b/components/script/script_task.rs index e09513bf31cf..8960ee540387 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, + compositor: DOMRefCell>, /// The port on which we receive messages from the image cache image_cache_port: Receiver, @@ -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, layout_chan: &OpaqueScriptLayoutChannel, control_chan: Sender, control_port: Receiver, @@ -579,7 +579,7 @@ impl ScriptTask { } /// Creates a new script task. - pub fn new(compositor: ScriptListener, + pub fn new(compositor: IpcSender, port: Receiver, chan: MainThreadScriptChan, control_chan: Sender, @@ -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 60d38eb46514..637c61f74448 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, layout_chan: &OpaqueScriptLayoutChannel, control_chan: Sender, control_port: Receiver,