aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/constellation/constellation.rs150
1 files changed, 83 insertions, 67 deletions
diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs
index 1aa3650d791..dd2d78d2039 100644
--- a/components/constellation/constellation.rs
+++ b/components/constellation/constellation.rs
@@ -518,46 +518,62 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
}
};
- // Process the request.
match request {
- // Messages from compositor
-
+ Request::Compositor(message) => {
+ self.handle_request_from_compositor(message)
+ },
+ Request::Script(message) => {
+ self.handle_request_from_script(message);
+ true
+ },
+ Request::Layout(message) => {
+ self.handle_request_from_layout(message);
+ true
+ },
+ Request::Panic(message) => {
+ self.handle_request_from_panic(message);
+ true
+ },
+ }
+ }
- Request::Compositor(FromCompositorMsg::Exit) => {
+ fn handle_request_from_compositor(&mut self, message: FromCompositorMsg) -> bool {
+ match message {
+ FromCompositorMsg::Exit => {
debug!("constellation exiting");
self.handle_exit();
return false;
}
// The compositor discovered the size of a subframe. This needs to be reflected by all
// frame trees in the navigation context containing the subframe.
- Request::Compositor(FromCompositorMsg::FrameSize(pipeline_id, size)) => {
+ FromCompositorMsg::FrameSize(pipeline_id, size) => {
debug!("constellation got frame size message");
self.handle_frame_size_msg(pipeline_id, &Size2D::from_untyped(&size));
}
- Request::Compositor(FromCompositorMsg::GetFrame(pipeline_id, resp_chan)) => {
+ FromCompositorMsg::GetFrame(pipeline_id, resp_chan) => {
debug!("constellation got get root pipeline message");
self.handle_get_frame(pipeline_id, resp_chan);
}
- Request::Compositor(FromCompositorMsg::GetPipeline(frame_id, resp_chan)) => {
+ FromCompositorMsg::GetPipeline(frame_id, resp_chan) => {
debug!("constellation got get root pipeline message");
self.handle_get_pipeline(frame_id, resp_chan);
}
- Request::Compositor(FromCompositorMsg::GetPipelineTitle(pipeline_id)) => {
+ FromCompositorMsg::GetPipelineTitle(pipeline_id) => {
debug!("constellation got get-pipeline-title message");
self.handle_get_pipeline_title_msg(pipeline_id);
}
- Request::Compositor(FromCompositorMsg::KeyEvent(key, state, modifiers)) => {
+ FromCompositorMsg::KeyEvent(key, state, modifiers) => {
debug!("constellation got key event message");
self.handle_key_msg(key, state, modifiers);
}
// Load a new page from a typed url
// If there is already a pending page (self.pending_frames), it will not be overridden;
// However, if the id is not encompassed by another change, it will be.
- Request::Compositor(FromCompositorMsg::LoadUrl(source_id, load_data)) => {
+ FromCompositorMsg::LoadUrl(source_id, load_data) => {
debug!("constellation got URL load message from compositor");
self.handle_load_url_msg(source_id, load_data);
}
- Request::Compositor(FromCompositorMsg::IsReadyToSaveImage(pipeline_states)) => {
+ FromCompositorMsg::IsReadyToSaveImage(pipeline_states) => {
let is_ready = self.handle_is_ready_to_save_image(pipeline_states);
if opts::get().is_running_problem_test {
println!("got ready to save image query, result is {:?}", is_ready);
@@ -569,70 +585,72 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
}
}
// This should only be called once per constellation, and only by the browser
- Request::Compositor(FromCompositorMsg::InitLoadUrl(url)) => {
+ FromCompositorMsg::InitLoadUrl(url) => {
debug!("constellation got init load URL message");
self.handle_init_load(url);
}
// Handle a forward or back request
- Request::Compositor(FromCompositorMsg::Navigate(pipeline_info, direction)) => {
+ FromCompositorMsg::Navigate(pipeline_info, direction) => {
debug!("constellation got navigation message from compositor");
self.handle_navigate_msg(pipeline_info, direction);
}
- Request::Compositor(FromCompositorMsg::WindowSize(new_size, size_type)) => {
+ FromCompositorMsg::WindowSize(new_size, size_type) => {
debug!("constellation got window resize message");
self.handle_window_size_msg(new_size, size_type);
}
- Request::Compositor(FromCompositorMsg::TickAnimation(pipeline_id, tick_type)) => {
+ FromCompositorMsg::TickAnimation(pipeline_id, tick_type) => {
self.handle_tick_animation(pipeline_id, tick_type)
}
- Request::Compositor(FromCompositorMsg::WebDriverCommand(command)) => {
+ FromCompositorMsg::WebDriverCommand(command) => {
debug!("constellation got webdriver command message");
self.handle_webdriver_msg(command);
}
+ }
+ true
+ }
- // Messages from script
-
-
- Request::Script(FromScriptMsg::ScriptLoadedURLInIFrame(load_info)) => {
+ fn handle_request_from_script(&mut self, message: FromScriptMsg) {
+ match message {
+ FromScriptMsg::ScriptLoadedURLInIFrame(load_info) => {
debug!("constellation got iframe URL load message {:?} {:?} {:?}",
load_info.containing_pipeline_id,
load_info.old_subpage_id,
load_info.new_subpage_id);
self.handle_script_loaded_url_in_iframe_msg(load_info);
}
- Request::Script(FromScriptMsg::ChangeRunningAnimationsState(pipeline_id, animation_state)) => {
+ FromScriptMsg::ChangeRunningAnimationsState(pipeline_id, animation_state) => {
self.handle_change_running_animations_state(pipeline_id, animation_state)
}
// Load a new page from a mouse click
// If there is already a pending page (self.pending_frames), it will not be overridden;
// However, if the id is not encompassed by another change, it will be.
- Request::Script(FromScriptMsg::LoadUrl(source_id, load_data)) => {
+ FromScriptMsg::LoadUrl(source_id, load_data) => {
debug!("constellation got URL load message from script");
self.handle_load_url_msg(source_id, load_data);
}
// A page loaded has completed all parsing, script, and reflow messages have been sent.
- Request::Script(FromScriptMsg::LoadComplete(pipeline_id)) => {
+ FromScriptMsg::LoadComplete(pipeline_id) => {
debug!("constellation got load complete message");
self.handle_load_complete_msg(&pipeline_id)
}
// The DOM load event fired on a document
- Request::Script(FromScriptMsg::DOMLoad(pipeline_id)) => {
+ FromScriptMsg::DOMLoad(pipeline_id) => {
debug!("constellation got dom load message");
self.handle_dom_load(pipeline_id)
}
// Handle a forward or back request
- Request::Script(FromScriptMsg::Navigate(pipeline_info, direction)) => {
+ FromScriptMsg::Navigate(pipeline_info, direction) => {
debug!("constellation got navigation message from script");
self.handle_navigate_msg(pipeline_info, direction);
}
// Notification that the new document is ready to become active
- Request::Script(FromScriptMsg::ActivateDocument(pipeline_id)) => {
+ FromScriptMsg::ActivateDocument(pipeline_id) => {
debug!("constellation got activate document message");
self.handle_activate_document_msg(pipeline_id);
}
// Update pipeline url after redirections
- Request::Script(FromScriptMsg::SetFinalUrl(pipeline_id, final_url)) => {
+ FromScriptMsg::SetFinalUrl(pipeline_id, final_url) => {
// The script may have finished loading after we already started shutting down.
if let Some(ref mut pipeline) = self.pipelines.get_mut(&pipeline_id) {
debug!("constellation got set final url message");
@@ -641,42 +659,39 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
warn!("constellation got set final url message for dead pipeline");
}
}
- Request::Script(FromScriptMsg::MozBrowserEvent(pipeline_id,
- subpage_id,
- event)) => {
+ FromScriptMsg::MozBrowserEvent(pipeline_id, subpage_id, event) => {
debug!("constellation got mozbrowser event message");
self.handle_mozbrowser_event_msg(pipeline_id,
subpage_id,
event);
}
- Request::Script(FromScriptMsg::Focus(pipeline_id)) => {
+ FromScriptMsg::Focus(pipeline_id) => {
debug!("constellation got focus message");
self.handle_focus_msg(pipeline_id);
}
- Request::Script(FromScriptMsg::ForwardMouseButtonEvent(
- pipeline_id, event_type, button, point)) => {
+ FromScriptMsg::ForwardMouseButtonEvent(pipeline_id, event_type, button, point) => {
let event = CompositorEvent::MouseButtonEvent(event_type, button, point);
let msg = ConstellationControlMsg::SendEvent(pipeline_id, event);
let result = match self.pipelines.get(&pipeline_id) {
- None => { debug!("Pipeline {:?} got mouse button event after closure.", pipeline_id); return true; }
+ None => { debug!("Pipeline {:?} got mouse button event after closure.", pipeline_id); return; }
Some(pipeline) => pipeline.script_chan.send(msg),
};
if let Err(e) = result {
self.handle_send_error(pipeline_id, e);
}
}
- Request::Script(FromScriptMsg::ForwardMouseMoveEvent(pipeline_id, point)) => {
+ FromScriptMsg::ForwardMouseMoveEvent(pipeline_id, point) => {
let event = CompositorEvent::MouseMoveEvent(Some(point));
let msg = ConstellationControlMsg::SendEvent(pipeline_id, event);
- let result = match self.pipelines.get(&pipeline_id) {
- None => { debug!("Pipeline {:?} got mouse move event after closure.", pipeline_id); return true; }
+ let result = match self.pipelines.get(&pipeline_id) {
+ None => { debug!("Pipeline {:?} got mouse move event after closure.", pipeline_id); return; }
Some(pipeline) => pipeline.script_chan.send(msg),
};
if let Err(e) = result {
self.handle_send_error(pipeline_id, e);
}
}
- Request::Script(FromScriptMsg::GetClipboardContents(sender)) => {
+ FromScriptMsg::GetClipboardContents(sender) => {
let result = match self.clipboard_ctx {
Some(ref ctx) => match ctx.get_contents() {
Ok(result) => result,
@@ -691,14 +706,14 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
warn!("Failed to send clipboard ({})", e);
}
}
- Request::Script(FromScriptMsg::SetClipboardContents(s)) => {
+ FromScriptMsg::SetClipboardContents(s) => {
if let Some(ref mut ctx) = self.clipboard_ctx {
if let Err(e) = ctx.set_contents(s) {
warn!("Error setting clipboard contents ({})", e);
}
}
}
- Request::Script(FromScriptMsg::RemoveIFrame(pipeline_id, sender)) => {
+ FromScriptMsg::RemoveIFrame(pipeline_id, sender) => {
debug!("constellation got remove iframe message");
self.handle_remove_iframe_msg(pipeline_id);
if let Some(sender) = sender {
@@ -707,97 +722,98 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
}
}
}
- Request::Script(FromScriptMsg::NewFavicon(url)) => {
+ FromScriptMsg::NewFavicon(url) => {
debug!("constellation got new favicon message");
self.compositor_proxy.send(ToCompositorMsg::NewFavicon(url));
}
- Request::Script(FromScriptMsg::HeadParsed) => {
+ FromScriptMsg::HeadParsed => {
debug!("constellation got head parsed message");
self.compositor_proxy.send(ToCompositorMsg::HeadParsed);
}
- Request::Script(FromScriptMsg::CreateCanvasPaintThread(size, sender)) => {
+ FromScriptMsg::CreateCanvasPaintThread(size, sender) => {
debug!("constellation got create-canvas-paint-thread message");
self.handle_create_canvas_paint_thread_msg(&size, sender)
}
- Request::Script(FromScriptMsg::CreateWebGLPaintThread(size, attributes, sender)) => {
+ FromScriptMsg::CreateWebGLPaintThread(size, attributes, sender) => {
debug!("constellation got create-WebGL-paint-thread message");
self.handle_create_webgl_paint_thread_msg(&size, attributes, sender)
}
- Request::Script(FromScriptMsg::NodeStatus(message)) => {
+ FromScriptMsg::NodeStatus(message) => {
debug!("constellation got NodeStatus message");
self.compositor_proxy.send(ToCompositorMsg::Status(message));
}
- Request::Script(FromScriptMsg::SetDocumentState(pipeline_id, state)) => {
+ FromScriptMsg::SetDocumentState(pipeline_id, state) => {
debug!("constellation got SetDocumentState message");
self.document_states.insert(pipeline_id, state);
}
- Request::Script(FromScriptMsg::Alert(pipeline_id, message, sender)) => {
+ FromScriptMsg::Alert(pipeline_id, message, sender) => {
debug!("constellation got Alert message");
self.handle_alert(pipeline_id, message, sender);
}
- Request::Script(FromScriptMsg::ScrollFragmentPoint(pipeline_id, layer_id, point, smooth)) => {
+ FromScriptMsg::ScrollFragmentPoint(pipeline_id, layer_id, point, smooth) => {
self.compositor_proxy.send(ToCompositorMsg::ScrollFragmentPoint(pipeline_id,
layer_id,
point,
smooth));
}
- Request::Script(FromScriptMsg::GetClientWindow(send)) => {
+ FromScriptMsg::GetClientWindow(send) => {
self.compositor_proxy.send(ToCompositorMsg::GetClientWindow(send));
}
- Request::Script(FromScriptMsg::MoveTo(point)) => {
+ FromScriptMsg::MoveTo(point) => {
self.compositor_proxy.send(ToCompositorMsg::MoveTo(point));
}
- Request::Script(FromScriptMsg::ResizeTo(size)) => {
+ FromScriptMsg::ResizeTo(size) => {
self.compositor_proxy.send(ToCompositorMsg::ResizeTo(size));
}
- Request::Script(FromScriptMsg::Exit) => {
+ FromScriptMsg::Exit => {
self.compositor_proxy.send(ToCompositorMsg::Exit);
}
- Request::Script(FromScriptMsg::SetTitle(pipeline_id, title)) => {
+ FromScriptMsg::SetTitle(pipeline_id, title) => {
self.compositor_proxy.send(ToCompositorMsg::ChangePageTitle(pipeline_id, title))
}
- Request::Script(FromScriptMsg::SendKeyEvent(key, key_state, key_modifiers)) => {
+ FromScriptMsg::SendKeyEvent(key, key_state, key_modifiers) => {
self.compositor_proxy.send(ToCompositorMsg::KeyEvent(key, key_state, key_modifiers))
}
- Request::Script(FromScriptMsg::TouchEventProcessed(result)) => {
+ FromScriptMsg::TouchEventProcessed(result) => {
self.compositor_proxy.send(ToCompositorMsg::TouchEventProcessed(result))
}
- Request::Script(FromScriptMsg::GetScrollOffset(pid, lid, send)) => {
+ FromScriptMsg::GetScrollOffset(pid, lid, send) => {
self.compositor_proxy.send(ToCompositorMsg::GetScrollOffset(pid, lid, send));
}
+ }
+ }
-
- // Messages from layout thread
-
- Request::Layout(FromLayoutMsg::ChangeRunningAnimationsState(pipeline_id, animation_state)) => {
+ fn handle_request_from_layout(&mut self, message: FromLayoutMsg) {
+ match message {
+ FromLayoutMsg::ChangeRunningAnimationsState(pipeline_id, animation_state) => {
self.handle_change_running_animations_state(pipeline_id, animation_state)
}
- Request::Layout(FromLayoutMsg::SetCursor(cursor)) => {
+ FromLayoutMsg::SetCursor(cursor) => {
self.handle_set_cursor_msg(cursor)
}
- Request::Layout(FromLayoutMsg::ViewportConstrained(pipeline_id, constraints)) => {
+ FromLayoutMsg::ViewportConstrained(pipeline_id, constraints) => {
debug!("constellation got viewport-constrained event message");
self.handle_viewport_constrained_msg(pipeline_id, constraints);
}
+ }
+ }
-
- // Panic messages
-
- Request::Panic((pipeline_id, panic_reason, backtrace)) => {
+ fn handle_request_from_panic(&mut self, message: PanicMsg) {
+ match message {
+ (pipeline_id, panic_reason, backtrace) => {
debug!("handling panic message ({:?})", pipeline_id);
self.handle_panic(pipeline_id, panic_reason, backtrace);
}
}
- true
}
fn handle_exit(&mut self) {