mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
move top_level_browsing_context_id out of embedder msg
This commit is contained in:
parent
d438240772
commit
4234b1252a
11 changed files with 78 additions and 97 deletions
|
@ -382,7 +382,7 @@ impl BluetoothManager {
|
|||
}
|
||||
|
||||
let (ipc_sender, ipc_receiver) = ipc::channel().expect("Failed to create IPC channel!");
|
||||
let msg = EmbedderMsg::GetSelectedBluetoothDevice(dialog_rows, ipc_sender);
|
||||
let msg = (None, EmbedderMsg::GetSelectedBluetoothDevice(dialog_rows, ipc_sender));
|
||||
self.embedder_proxy.send(msg);
|
||||
|
||||
match ipc_receiver.recv() {
|
||||
|
|
|
@ -1026,7 +1026,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
|
||||
match content {
|
||||
FromScriptMsg::ForwardToEmbedder(embedder_msg) => {
|
||||
self.embedder_proxy.send(embedder_msg);
|
||||
self.embedder_proxy.send((Some(source_top_ctx_id), embedder_msg));
|
||||
}
|
||||
FromScriptMsg::PipelineExited => {
|
||||
self.handle_pipeline_exited(source_pipeline_id);
|
||||
|
@ -1381,7 +1381,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
|
||||
let browsing_context_id = BrowsingContextId::from(top_level_browsing_context_id);
|
||||
|
||||
self.embedder_proxy.send(EmbedderMsg::Panic(top_level_browsing_context_id, reason, backtrace));
|
||||
self.embedder_proxy.send((Some(top_level_browsing_context_id), EmbedderMsg::Panic(reason, backtrace)));
|
||||
|
||||
let (window_size, pipeline_id) = {
|
||||
let browsing_context = self.browsing_contexts.get(&browsing_context_id);
|
||||
|
@ -1663,7 +1663,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
}
|
||||
|
||||
fn handle_set_cursor_msg(&mut self, cursor: CursorKind) {
|
||||
self.embedder_proxy.send(EmbedderMsg::SetCursor(cursor))
|
||||
self.embedder_proxy.send((None, EmbedderMsg::SetCursor(cursor)))
|
||||
}
|
||||
|
||||
fn handle_change_running_animations_state(&mut self,
|
||||
|
@ -1704,7 +1704,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
load_data: LoadData, replace: bool) -> Option<PipelineId> {
|
||||
// Allow the embedder to handle the url itself
|
||||
let (chan, port) = ipc::channel().expect("Failed to create IPC channel!");
|
||||
let msg = EmbedderMsg::AllowNavigation(top_level_browsing_context_id, load_data.url.clone(), chan);
|
||||
let msg = (Some(top_level_browsing_context_id), EmbedderMsg::AllowNavigation(load_data.url.clone(), chan));
|
||||
self.embedder_proxy.send(msg);
|
||||
if let Ok(false) = port.recv() {
|
||||
return None;
|
||||
|
@ -1812,7 +1812,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
pipeline_id: PipelineId) {
|
||||
if self.pipelines.get(&pipeline_id).and_then(|p| p.parent_info).is_none() {
|
||||
// Notify embedder top level document started loading.
|
||||
self.embedder_proxy.send(EmbedderMsg::LoadStart(top_level_browsing_context_id));
|
||||
self.embedder_proxy.send((Some(top_level_browsing_context_id), EmbedderMsg::LoadStart));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1846,7 +1846,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
if !current_top_level_pipeline_will_be_replaced {
|
||||
// Notify embedder and compositor top level document finished loading.
|
||||
self.compositor_proxy.send(ToCompositorMsg::LoadComplete(top_level_browsing_context_id));
|
||||
self.embedder_proxy.send(EmbedderMsg::LoadComplete(top_level_browsing_context_id));
|
||||
self.embedder_proxy.send((Some(top_level_browsing_context_id), EmbedderMsg::LoadComplete));
|
||||
}
|
||||
}
|
||||
self.handle_subframe_loaded(pipeline_id);
|
||||
|
@ -2099,7 +2099,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
}
|
||||
},
|
||||
None => {
|
||||
let event = EmbedderMsg::KeyEvent(None, ch, key, state, mods);
|
||||
let event = (None, EmbedderMsg::KeyEvent(ch, key, state, mods));
|
||||
self.embedder_proxy.clone().send(event);
|
||||
}
|
||||
}
|
||||
|
@ -2272,7 +2272,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
},
|
||||
WebDriverCommandMsg::SetWindowSize(top_level_browsing_context_id, size, reply) => {
|
||||
self.webdriver.resize_channel = Some(reply);
|
||||
self.embedder_proxy.send(EmbedderMsg::ResizeTo(top_level_browsing_context_id, size));
|
||||
self.embedder_proxy.send((Some(top_level_browsing_context_id), EmbedderMsg::ResizeTo(size)));
|
||||
},
|
||||
WebDriverCommandMsg::LoadUrl(top_level_browsing_context_id, load_data, reply) => {
|
||||
self.load_url_for_webdriver(top_level_browsing_context_id, load_data, reply, false);
|
||||
|
@ -2403,7 +2403,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
entries.extend(session_history.future.iter().rev()
|
||||
.scan(current_load_data.clone(), &resolve_load_data_future));
|
||||
let urls = entries.iter().map(|entry| entry.url.clone()).collect();
|
||||
let msg = EmbedderMsg::HistoryChanged(top_level_browsing_context_id, urls, current_index);
|
||||
let msg = (Some(top_level_browsing_context_id), EmbedderMsg::HistoryChanged(urls, current_index));
|
||||
self.embedder_proxy.send(msg);
|
||||
}
|
||||
|
||||
|
|
|
@ -33,12 +33,12 @@ pub trait EventLoopWaker : 'static + Send {
|
|||
|
||||
/// Sends messages to the embedder.
|
||||
pub struct EmbedderProxy {
|
||||
pub sender: Sender<EmbedderMsg>,
|
||||
pub sender: Sender<(Option<TopLevelBrowsingContextId>, EmbedderMsg)>,
|
||||
pub event_loop_waker: Box<EventLoopWaker>,
|
||||
}
|
||||
|
||||
impl EmbedderProxy {
|
||||
pub fn send(&self, msg: EmbedderMsg) {
|
||||
pub fn send(&self, msg: (Option<TopLevelBrowsingContextId>, EmbedderMsg)) {
|
||||
// Send a message and kick the OS event loop awake.
|
||||
if let Err(err) = self.sender.send(msg) {
|
||||
warn!("Failed to send response ({}).", err);
|
||||
|
@ -58,14 +58,14 @@ impl Clone for EmbedderProxy {
|
|||
|
||||
/// The port that the embedder receives messages on.
|
||||
pub struct EmbedderReceiver {
|
||||
pub receiver: Receiver<EmbedderMsg>
|
||||
pub receiver: Receiver<(Option<TopLevelBrowsingContextId>, EmbedderMsg)>
|
||||
}
|
||||
|
||||
impl EmbedderReceiver {
|
||||
pub fn try_recv_embedder_msg(&mut self) -> Option<EmbedderMsg> {
|
||||
pub fn try_recv_embedder_msg(&mut self) -> Option<(Option<TopLevelBrowsingContextId>, EmbedderMsg)> {
|
||||
self.receiver.try_recv().ok()
|
||||
}
|
||||
pub fn recv_embedder_msg(&mut self) -> EmbedderMsg {
|
||||
pub fn recv_embedder_msg(&mut self) -> (Option<TopLevelBrowsingContextId>, EmbedderMsg) {
|
||||
self.receiver.recv().unwrap()
|
||||
}
|
||||
}
|
||||
|
@ -73,43 +73,43 @@ impl EmbedderReceiver {
|
|||
#[derive(Deserialize, Serialize)]
|
||||
pub enum EmbedderMsg {
|
||||
/// A status message to be displayed by the browser chrome.
|
||||
Status(TopLevelBrowsingContextId, Option<String>),
|
||||
Status(Option<String>),
|
||||
/// Alerts the embedder that the current page has changed its title.
|
||||
ChangePageTitle(TopLevelBrowsingContextId, Option<String>),
|
||||
ChangePageTitle(Option<String>),
|
||||
/// Move the window to a point
|
||||
MoveTo(TopLevelBrowsingContextId, DeviceIntPoint),
|
||||
MoveTo(DeviceIntPoint),
|
||||
/// Resize the window to size
|
||||
ResizeTo(TopLevelBrowsingContextId, DeviceUintSize),
|
||||
ResizeTo(DeviceUintSize),
|
||||
// Show an alert message.
|
||||
Alert(TopLevelBrowsingContextId, String, IpcSender<()>),
|
||||
Alert(String, IpcSender<()>),
|
||||
/// Wether or not to follow a link
|
||||
AllowNavigation(TopLevelBrowsingContextId, ServoUrl, IpcSender<bool>),
|
||||
AllowNavigation(ServoUrl, IpcSender<bool>),
|
||||
/// Sends an unconsumed key event back to the embedder.
|
||||
KeyEvent(Option<TopLevelBrowsingContextId>, Option<char>, Key, KeyState, KeyModifiers),
|
||||
KeyEvent(Option<char>, Key, KeyState, KeyModifiers),
|
||||
/// Changes the cursor.
|
||||
SetCursor(CursorKind),
|
||||
/// A favicon was detected
|
||||
NewFavicon(TopLevelBrowsingContextId, ServoUrl),
|
||||
NewFavicon(ServoUrl),
|
||||
/// <head> tag finished parsing
|
||||
HeadParsed(TopLevelBrowsingContextId),
|
||||
HeadParsed,
|
||||
/// The history state has changed.
|
||||
HistoryChanged(TopLevelBrowsingContextId, Vec<ServoUrl>, usize),
|
||||
HistoryChanged(Vec<ServoUrl>, usize),
|
||||
/// Enter or exit fullscreen
|
||||
SetFullscreenState(TopLevelBrowsingContextId, bool),
|
||||
SetFullscreenState(bool),
|
||||
/// The load of a page has begun
|
||||
LoadStart(TopLevelBrowsingContextId),
|
||||
LoadStart,
|
||||
/// The load of a page has completed
|
||||
LoadComplete(TopLevelBrowsingContextId),
|
||||
LoadComplete,
|
||||
/// A pipeline panicked. First string is the reason, second one is the backtrace.
|
||||
Panic(TopLevelBrowsingContextId, String, Option<String>),
|
||||
Panic(String, Option<String>),
|
||||
/// Open dialog to select bluetooth device.
|
||||
GetSelectedBluetoothDevice(Vec<String>, IpcSender<Option<String>>),
|
||||
/// Open file dialog to select files. Set boolean flag to true allows to select multiple files.
|
||||
SelectFiles(Vec<FilterPattern>, bool, IpcSender<Option<Vec<String>>>),
|
||||
/// Request to present an IME to the user when an editable element is focused.
|
||||
ShowIME(TopLevelBrowsingContextId, InputMethodType),
|
||||
ShowIME(InputMethodType),
|
||||
/// Request to hide the IME when the editable element is blurred.
|
||||
HideIME(TopLevelBrowsingContextId),
|
||||
HideIME,
|
||||
/// Servo has shut down
|
||||
Shutdown,
|
||||
}
|
||||
|
@ -126,16 +126,16 @@ impl Debug for EmbedderMsg {
|
|||
EmbedderMsg::KeyEvent(..) => write!(f, "KeyEvent"),
|
||||
EmbedderMsg::SetCursor(..) => write!(f, "SetCursor"),
|
||||
EmbedderMsg::NewFavicon(..) => write!(f, "NewFavicon"),
|
||||
EmbedderMsg::HeadParsed(..) => write!(f, "HeadParsed"),
|
||||
EmbedderMsg::HeadParsed => write!(f, "HeadParsed"),
|
||||
EmbedderMsg::HistoryChanged(..) => write!(f, "HistoryChanged"),
|
||||
EmbedderMsg::SetFullscreenState(..) => write!(f, "SetFullscreenState"),
|
||||
EmbedderMsg::LoadStart(..) => write!(f, "LoadStart"),
|
||||
EmbedderMsg::LoadComplete(..) => write!(f, "LoadComplete"),
|
||||
EmbedderMsg::LoadStart => write!(f, "LoadStart"),
|
||||
EmbedderMsg::LoadComplete => write!(f, "LoadComplete"),
|
||||
EmbedderMsg::Panic(..) => write!(f, "Panic"),
|
||||
EmbedderMsg::GetSelectedBluetoothDevice(..) => write!(f, "GetSelectedBluetoothDevice"),
|
||||
EmbedderMsg::SelectFiles(..) => write!(f, "SelectFiles"),
|
||||
EmbedderMsg::ShowIME(..) => write!(f, "ShowIME"),
|
||||
EmbedderMsg::HideIME(..) => write!(f, "HideIME"),
|
||||
EmbedderMsg::HideIME => write!(f, "HideIME"),
|
||||
EmbedderMsg::Shutdown => write!(f, "Shutdown"),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -220,7 +220,7 @@ impl FileManagerStore {
|
|||
multiple_files: bool,
|
||||
embedder_proxy: EmbedderProxy) -> Option<Vec<String>> {
|
||||
let (ipc_sender, ipc_receiver) = ipc::channel().expect("Failed to create IPC channel!");
|
||||
let msg = EmbedderMsg::SelectFiles(patterns, multiple_files, ipc_sender);
|
||||
let msg = (None, EmbedderMsg::SelectFiles(patterns, multiple_files, ipc_sender));
|
||||
|
||||
embedder_proxy.send(msg);
|
||||
match ipc_receiver.recv() {
|
||||
|
|
|
@ -856,8 +856,7 @@ impl Document {
|
|||
|
||||
// Notify the embedder to hide the input method.
|
||||
if elem.input_method_type().is_some() {
|
||||
let top_level_browsing_context_id = self.window().top_level_browsing_context_id();
|
||||
self.send_to_embedder(EmbedderMsg::HideIME(top_level_browsing_context_id));
|
||||
self.send_to_embedder(EmbedderMsg::HideIME);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -876,8 +875,7 @@ impl Document {
|
|||
|
||||
// Notify the embedder to display an input method.
|
||||
if let Some(kind) = elem.input_method_type() {
|
||||
let top_level_browsing_context_id = self.window().top_level_browsing_context_id();
|
||||
self.send_to_embedder(EmbedderMsg::ShowIME(top_level_browsing_context_id, kind));
|
||||
self.send_to_embedder(EmbedderMsg::ShowIME(kind));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -894,8 +892,7 @@ impl Document {
|
|||
let window = self.window();
|
||||
if window.is_top_level() {
|
||||
let title = Some(String::from(self.Title()));
|
||||
let top_level_browsing_context_id = window.top_level_browsing_context_id();
|
||||
self.send_to_embedder(EmbedderMsg::ChangePageTitle(top_level_browsing_context_id, title));
|
||||
self.send_to_embedder(EmbedderMsg::ChangePageTitle(title));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1364,8 +1361,7 @@ impl Document {
|
|||
}
|
||||
|
||||
if cancel_state == EventDefault::Allowed {
|
||||
let top_level_browsing_context_id = self.window().top_level_browsing_context_id();
|
||||
let msg = EmbedderMsg::KeyEvent(Some(top_level_browsing_context_id), ch, key, state, modifiers);
|
||||
let msg = EmbedderMsg::KeyEvent(ch, key, state, modifiers);
|
||||
self.send_to_embedder(msg);
|
||||
|
||||
// This behavior is unspecced
|
||||
|
@ -2795,8 +2791,7 @@ impl Document {
|
|||
let window = self.window();
|
||||
// Step 6
|
||||
if !error {
|
||||
let top_level_browsing_context_id = self.window().top_level_browsing_context_id();
|
||||
let event = EmbedderMsg::SetFullscreenState(top_level_browsing_context_id, true);
|
||||
let event = EmbedderMsg::SetFullscreenState(true);
|
||||
self.send_to_embedder(event);
|
||||
}
|
||||
|
||||
|
@ -2831,8 +2826,7 @@ impl Document {
|
|||
|
||||
let window = self.window();
|
||||
// Step 8
|
||||
let top_level_browsing_context_id = self.window().top_level_browsing_context_id();
|
||||
let event = EmbedderMsg::SetFullscreenState(top_level_browsing_context_id, true);
|
||||
let event = EmbedderMsg::SetFullscreenState(true);
|
||||
self.send_to_embedder(event);
|
||||
|
||||
// Step 9
|
||||
|
|
|
@ -151,8 +151,7 @@ impl VirtualMethods for HTMLBodyElement {
|
|||
let document = window.Document();
|
||||
document.set_reflow_timeout(time::precise_time_ns() + INITIAL_REFLOW_DELAY);
|
||||
if window.is_top_level() {
|
||||
let top_level_browsing_context_id = window.top_level_browsing_context_id();
|
||||
let msg = EmbedderMsg::HeadParsed(top_level_browsing_context_id);
|
||||
let msg = EmbedderMsg::HeadParsed;
|
||||
window.send_to_embedder(msg);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -307,8 +307,7 @@ impl HTMLLinkElement {
|
|||
Ok(url) => {
|
||||
let window = document.window();
|
||||
if window.is_top_level() {
|
||||
let top_level_browsing_context_id = window.top_level_browsing_context_id();
|
||||
let msg = EmbedderMsg::NewFavicon(top_level_browsing_context_id, url.clone());
|
||||
let msg = EmbedderMsg::NewFavicon(url.clone());
|
||||
window.send_to_embedder(msg);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ use js::jsval::UndefinedValue;
|
|||
use js::rust::HandleValue;
|
||||
use layout_image::fetch_image_for_layout;
|
||||
use microtask::MicrotaskQueue;
|
||||
use msg::constellation_msg::{PipelineId, TopLevelBrowsingContextId};
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use net_traits::{ResourceThreads, ReferrerPolicy};
|
||||
use net_traits::image_cache::{ImageCache, ImageResponder, ImageResponse};
|
||||
use net_traits::image_cache::{PendingImageId, PendingImageResponse};
|
||||
|
@ -355,11 +355,6 @@ impl Window {
|
|||
self.parent_info
|
||||
}
|
||||
|
||||
pub fn top_level_browsing_context_id(&self) -> TopLevelBrowsingContextId {
|
||||
let window_proxy = self.window_proxy.get().unwrap();
|
||||
window_proxy.top_level_browsing_context_id()
|
||||
}
|
||||
|
||||
pub fn new_script_pair(&self) -> (Box<ScriptChan + Send>, Box<ScriptPort + Send>) {
|
||||
let (tx, rx) = channel();
|
||||
(Box::new(SendableMainThreadScriptChan(tx)), Box::new(rx))
|
||||
|
@ -534,9 +529,7 @@ impl WindowMethods for Window {
|
|||
stderr.flush().unwrap();
|
||||
}
|
||||
let (sender, receiver) = ProfiledIpc::channel(self.global().time_profiler_chan().clone()).unwrap();
|
||||
let window_proxy = self.window_proxy.get().unwrap();
|
||||
let top_level_browsing_context_id = window_proxy.top_level_browsing_context_id();
|
||||
let msg = EmbedderMsg::Alert(top_level_browsing_context_id, s.to_string(), sender);
|
||||
let msg = EmbedderMsg::Alert(s.to_string(), sender);
|
||||
self.send_to_embedder(msg);
|
||||
receiver.recv().unwrap();
|
||||
}
|
||||
|
@ -927,8 +920,7 @@ impl WindowMethods for Window {
|
|||
//TODO determine if this operation is allowed
|
||||
let dpr = self.device_pixel_ratio();
|
||||
let size = TypedSize2D::new(width, height).to_f32() * dpr;
|
||||
let top_level_browsing_context_id = self.top_level_browsing_context_id();
|
||||
self.send_to_embedder(EmbedderMsg::ResizeTo(top_level_browsing_context_id, size.to_u32()));
|
||||
self.send_to_embedder(EmbedderMsg::ResizeTo(size.to_u32()));
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom-view/#dom-window-resizeby
|
||||
|
@ -944,9 +936,7 @@ impl WindowMethods for Window {
|
|||
//TODO determine if this operation is allowed
|
||||
let dpr = self.device_pixel_ratio();
|
||||
let point = TypedPoint2D::new(x, y).to_f32() * dpr;
|
||||
let window_proxy = self.window_proxy.get().unwrap();
|
||||
let top_level_browsing_context_id = window_proxy.top_level_browsing_context_id();
|
||||
let msg = EmbedderMsg::MoveTo(top_level_browsing_context_id, point.to_i32());
|
||||
let msg = EmbedderMsg::MoveTo(point.to_i32());
|
||||
self.send_to_embedder(msg);
|
||||
}
|
||||
|
||||
|
|
|
@ -2284,7 +2284,6 @@ impl ScriptThread {
|
|||
None => return warn!("Message sent to closed pipeline {}.", pipeline_id),
|
||||
};
|
||||
let window = document.window();
|
||||
let top_level_browsing_context_id = window.top_level_browsing_context_id();
|
||||
|
||||
// Get the previous target temporarily
|
||||
let prev_mouse_over_target = self.topmost_mouse_over_target.get();
|
||||
|
@ -2313,7 +2312,7 @@ impl ScriptThread {
|
|||
let url = document.url();
|
||||
url.join(&value).map(|url| url.to_string()).ok()
|
||||
});
|
||||
let event = EmbedderMsg::Status(top_level_browsing_context_id, status);
|
||||
let event = EmbedderMsg::Status(status);
|
||||
window.send_to_embedder(event);
|
||||
|
||||
state_already_changed = true;
|
||||
|
@ -2327,7 +2326,7 @@ impl ScriptThread {
|
|||
.inclusive_ancestors()
|
||||
.filter_map(DomRoot::downcast::<HTMLAnchorElement>)
|
||||
.next() {
|
||||
let event = EmbedderMsg::Status(top_level_browsing_context_id, None);
|
||||
let event = EmbedderMsg::Status(None);
|
||||
window.send_to_embedder(event);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -124,7 +124,7 @@ pub struct Servo<Window: WindowMethods + 'static> {
|
|||
compositor: IOCompositor<Window>,
|
||||
constellation_chan: Sender<ConstellationMsg>,
|
||||
embedder_receiver: EmbedderReceiver,
|
||||
embedder_events: Vec<EmbedderMsg>,
|
||||
embedder_events: Vec<(Option<BrowserId>, EmbedderMsg)>,
|
||||
}
|
||||
|
||||
impl<Window> Servo<Window> where Window: WindowMethods + 'static {
|
||||
|
@ -357,7 +357,7 @@ impl<Window> Servo<Window> where Window: WindowMethods + 'static {
|
|||
}
|
||||
|
||||
fn receive_messages(&mut self) {
|
||||
while let Some(msg) = self.embedder_receiver.try_recv_embedder_msg() {
|
||||
while let Some((top_level_browsing_context, msg)) = self.embedder_receiver.try_recv_embedder_msg() {
|
||||
match (msg, self.compositor.shutdown_state) {
|
||||
(_, ShutdownState::FinishedShuttingDown) => {
|
||||
error!("embedder shouldn't be handling messages after compositor has shut down");
|
||||
|
@ -365,22 +365,22 @@ impl<Window> Servo<Window> where Window: WindowMethods + 'static {
|
|||
|
||||
(_, ShutdownState::ShuttingDown) => {},
|
||||
|
||||
(EmbedderMsg::KeyEvent(top_level_browsing_context, ch, key, state, modified),
|
||||
(EmbedderMsg::KeyEvent(ch, key, state, modified),
|
||||
ShutdownState::NotShuttingDown) => {
|
||||
if state == KeyState::Pressed {
|
||||
let msg = EmbedderMsg::KeyEvent(top_level_browsing_context, ch, key, state, modified);
|
||||
self.embedder_events.push(msg);
|
||||
let event = (top_level_browsing_context, EmbedderMsg::KeyEvent(ch, key, state, modified));
|
||||
self.embedder_events.push(event);
|
||||
}
|
||||
},
|
||||
|
||||
(msg, ShutdownState::NotShuttingDown) => {
|
||||
self.embedder_events.push(msg);
|
||||
self.embedder_events.push((top_level_browsing_context, msg));
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_events(&mut self) -> Vec<EmbedderMsg> {
|
||||
pub fn get_events(&mut self) -> Vec<(Option<BrowserId>, EmbedderMsg)> {
|
||||
::std::mem::replace(&mut self.embedder_events, Vec::new())
|
||||
}
|
||||
|
||||
|
@ -394,7 +394,7 @@ impl<Window> Servo<Window> where Window: WindowMethods + 'static {
|
|||
if self.compositor.shutdown_state != ShutdownState::FinishedShuttingDown {
|
||||
self.compositor.perform_updates();
|
||||
} else {
|
||||
self.embedder_events.push(EmbedderMsg::Shutdown);
|
||||
self.embedder_events.push((None, EmbedderMsg::Shutdown));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -232,13 +232,13 @@ impl Browser {
|
|||
self.event_queue.push(event);
|
||||
}
|
||||
|
||||
pub fn handle_servo_events(&mut self, events: Vec<EmbedderMsg>) {
|
||||
for event in events {
|
||||
match event {
|
||||
EmbedderMsg::Status(_browser_id, status) => {
|
||||
pub fn handle_servo_events(&mut self, events: Vec<(Option<BrowserId>, EmbedderMsg)>) {
|
||||
for (browser_id, msg) in events {
|
||||
match msg {
|
||||
EmbedderMsg::Status(status) => {
|
||||
self.status = status;
|
||||
},
|
||||
EmbedderMsg::ChangePageTitle(_browser_id, title) => {
|
||||
EmbedderMsg::ChangePageTitle(title) => {
|
||||
self.title = title;
|
||||
|
||||
let fallback_title: String = if let Some(ref current_url) = self.current_url {
|
||||
|
@ -253,52 +253,52 @@ impl Browser {
|
|||
let title = format!("{} - Servo", title);
|
||||
self.window.set_title(&title);
|
||||
}
|
||||
EmbedderMsg::MoveTo(_browser_id, point) => {
|
||||
EmbedderMsg::MoveTo(point) => {
|
||||
self.window.set_position(point);
|
||||
}
|
||||
EmbedderMsg::ResizeTo(_browser_id, size) => {
|
||||
EmbedderMsg::ResizeTo(size) => {
|
||||
self.window.set_inner_size(size);
|
||||
}
|
||||
EmbedderMsg::Alert(browser_id, message, sender) => {
|
||||
EmbedderMsg::Alert(message, sender) => {
|
||||
display_alert_dialog(message.to_owned());
|
||||
if let Err(e) = sender.send(()) {
|
||||
let reason = format!("Failed to send Alert response: {}", e);
|
||||
self.event_queue.push(WindowEvent::SendError(Some(browser_id), reason));
|
||||
self.event_queue.push(WindowEvent::SendError(browser_id, reason));
|
||||
}
|
||||
}
|
||||
EmbedderMsg::AllowNavigation(_browser_id, _url, response_chan) => {
|
||||
EmbedderMsg::AllowNavigation(_url, response_chan) => {
|
||||
if let Err(e) = response_chan.send(true) {
|
||||
warn!("Failed to send allow_navigation() response: {}", e);
|
||||
};
|
||||
}
|
||||
EmbedderMsg::KeyEvent(browser_id, ch, key, state, modified) => {
|
||||
EmbedderMsg::KeyEvent(ch, key, state, modified) => {
|
||||
self.handle_key_from_servo(browser_id, ch, key, state, modified);
|
||||
}
|
||||
EmbedderMsg::SetCursor(cursor) => {
|
||||
self.window.set_cursor(cursor);
|
||||
}
|
||||
EmbedderMsg::NewFavicon(_browser_id, url) => {
|
||||
EmbedderMsg::NewFavicon(url) => {
|
||||
self.favicon = Some(url);
|
||||
}
|
||||
EmbedderMsg::HeadParsed(_browser_id, ) => {
|
||||
EmbedderMsg::HeadParsed => {
|
||||
self.loading_state = Some(LoadingState::Loading);
|
||||
}
|
||||
EmbedderMsg::HistoryChanged(_browser_id, urls, current) => {
|
||||
EmbedderMsg::HistoryChanged(urls, current) => {
|
||||
self.current_url = Some(urls[current].clone());
|
||||
}
|
||||
EmbedderMsg::SetFullscreenState(_browser_id, state) => {
|
||||
EmbedderMsg::SetFullscreenState(state) => {
|
||||
self.window.set_fullscreen(state);
|
||||
}
|
||||
EmbedderMsg::LoadStart(_browser_id) => {
|
||||
EmbedderMsg::LoadStart => {
|
||||
self.loading_state = Some(LoadingState::Connecting);
|
||||
}
|
||||
EmbedderMsg::LoadComplete(_browser_id) => {
|
||||
EmbedderMsg::LoadComplete => {
|
||||
self.loading_state = Some(LoadingState::Loaded);
|
||||
}
|
||||
EmbedderMsg::Shutdown => {
|
||||
self.shutdown_requested = true;
|
||||
},
|
||||
EmbedderMsg::Panic(_browser_id, _reason, _backtrace) => {
|
||||
EmbedderMsg::Panic(_reason, _backtrace) => {
|
||||
},
|
||||
EmbedderMsg::GetSelectedBluetoothDevice(devices, sender) => {
|
||||
let selected = platform_get_selected_devices(devices);
|
||||
|
@ -318,10 +318,10 @@ impl Browser {
|
|||
self.event_queue.push(WindowEvent::SendError(None, reason));
|
||||
};
|
||||
}
|
||||
EmbedderMsg::ShowIME(_browser_id, _kind) => {
|
||||
EmbedderMsg::ShowIME(_kind) => {
|
||||
debug!("ShowIME received");
|
||||
}
|
||||
EmbedderMsg::HideIME(_browser_id) => {
|
||||
EmbedderMsg::HideIME => {
|
||||
debug!("HideIME received");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue