mirror of
https://github.com/servo/servo.git
synced 2025-07-28 17:50:37 +01:00
* Add multiple concurrent top-level browsing contexts Co-authored-by: Delan Azabani <dazabani@igalia.com> * Rename variables and comments There are some variable and comments still use browser as names. This commit renames them to webview. * Update log message from web view to webview * Revert offscreen_framebuffer_id rename * Rename all web view to webview * Cargo fmt * Fix viewport/event/clear coordinates when multiview is disabled * Only deprecate things when multiview is enabled * Update WebViewManger with shown and invisible sets Replace visible_webviews and native_window_is_visible with shown_webviews and invisible_webviews. Add 4 more methods to set them accordingly. The behavior of is_effectively_visible will return true if the wbview is in shown_webviews set but not in invisible_webviews. * Update variant behaviors * Rename WebViewVisibilityChanged to MarkWebViewInvisible * Fix unit test by marking id 3 visible again * Update MarkWebViewInvisible and add UnmarkWebViewInvisible * Update format and doc comments * Clean up doc comments * Address style and naming changes * Rename UpdateWebView to UpdateFrameTreeForWebView * constellation: send frame tree unconditionally over focus and feature * Clarify shown and invisible sets in constellation WebViewManager * Eliminate forward_to_constellation!() * Actually remove the unused macro * Don’t gate compositor changes on multiview feature flag * Update todo in mouse event dispatch * Pass all visible webview ids in a single ReadyToPresent message * Fix compile and lint errors * servoshell: fix gap between minibrowser toolbar and webview * Fix failure in /_mozilla/mozilla/window_resizeTo.html * Fix compile warnings * Remove stray dbg!() * Remove confusing “effectively visible” logic (see #31815, #31816) * Allow embedder to show/hide/raise webviews without ipc * Update root pipeline only when painting order actually changes * Stop gating old focus and SetFrameTree behaviour behind Cargo feature * Use webview_id and WebViewId in webview-related code * Improve logging of webview-related embedder events * Allow webview Show and Raise events to optionally hide all others * Don’t do anything in response to WebViewPaintingOrder * Remove WebViewPaintingOrder, since its payload is unreliable * On MoveResizeWebView, only update root pipeline if rect changed * Rename IOCompositor methods for clarity * compositor: add event tracing; log webview ops even without ipc * Add temporary debug logging * Add more temporary debug logging * Remove temporary logging in compositor * Remove temporary debug logging * Add temporary debug logging, but defer I/O until panic * Capture a backtrace with each crash log entry * Proper error handling without panicking in WebViewManager * Clean up imports in constellation --------- Co-authored-by: Delan Azabani <dazabani@igalia.com> Co-authored-by: Martin Robinson <mrobinson@igalia.com>
145 lines
6.5 KiB
Rust
145 lines
6.5 KiB
Rust
/* 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 https://mozilla.org/MPL/2.0/. */
|
|
|
|
use std::collections::HashMap;
|
|
use std::fmt;
|
|
use std::time::Duration;
|
|
|
|
use embedder_traits::Cursor;
|
|
use gfx_traits::Epoch;
|
|
use ipc_channel::ipc::IpcSender;
|
|
use keyboard_types::KeyboardEvent;
|
|
use msg::constellation_msg::{
|
|
BrowsingContextId, PipelineId, TopLevelBrowsingContextId, TraversalDirection, WebViewId,
|
|
};
|
|
use script_traits::{
|
|
AnimationTickType, CompositorEvent, GamepadEvent, LogEntry, MediaSessionActionType,
|
|
WebDriverCommandMsg, WindowSizeData, WindowSizeType,
|
|
};
|
|
use servo_url::ServoUrl;
|
|
use webrender_api::units::DeviceRect;
|
|
|
|
/// Messages to the constellation.
|
|
pub enum ConstellationMsg {
|
|
/// Exit the constellation.
|
|
Exit,
|
|
/// Request that the constellation send the BrowsingContextId corresponding to the document
|
|
/// with the provided pipeline id
|
|
GetBrowsingContext(PipelineId, IpcSender<Option<BrowsingContextId>>),
|
|
/// Request that the constellation send the current pipeline id for the provided
|
|
/// browsing context id, over a provided channel.
|
|
GetPipeline(BrowsingContextId, IpcSender<Option<PipelineId>>),
|
|
/// Request that the constellation send the current focused top-level browsing context id,
|
|
/// over a provided channel.
|
|
GetFocusTopLevelBrowsingContext(IpcSender<Option<TopLevelBrowsingContextId>>),
|
|
/// Query the constellation to see if the current compositor output is stable
|
|
IsReadyToSaveImage(HashMap<PipelineId, Epoch>),
|
|
/// Inform the constellation of a key event.
|
|
Keyboard(KeyboardEvent),
|
|
/// Whether to allow script to navigate.
|
|
AllowNavigationResponse(PipelineId, bool),
|
|
/// Request to load a page.
|
|
LoadUrl(TopLevelBrowsingContextId, ServoUrl),
|
|
/// Clear the network cache.
|
|
ClearCache,
|
|
/// Request to traverse the joint session history of the provided browsing context.
|
|
TraverseHistory(TopLevelBrowsingContextId, TraversalDirection),
|
|
/// Inform the constellation of a window being resized.
|
|
WindowSize(TopLevelBrowsingContextId, WindowSizeData, WindowSizeType),
|
|
/// Requests that the constellation instruct layout to begin a new tick of the animation.
|
|
TickAnimation(PipelineId, AnimationTickType),
|
|
/// Dispatch a webdriver command
|
|
WebDriverCommand(WebDriverCommandMsg),
|
|
/// Reload a top-level browsing context.
|
|
Reload(TopLevelBrowsingContextId),
|
|
/// A log entry, with the top-level browsing context id and thread name
|
|
LogEntry(Option<TopLevelBrowsingContextId>, Option<String>, LogEntry),
|
|
/// Create a new top level browsing context.
|
|
NewWebView(ServoUrl, TopLevelBrowsingContextId),
|
|
/// Close a top level browsing context.
|
|
CloseWebView(TopLevelBrowsingContextId),
|
|
/// Panic a top level browsing context.
|
|
SendError(Option<TopLevelBrowsingContextId>, String),
|
|
/// Move and/or resize a webview to the given rect.
|
|
MoveResizeWebView(TopLevelBrowsingContextId, DeviceRect),
|
|
/// Start painting a webview, and optionally stop painting all others.
|
|
ShowWebView(TopLevelBrowsingContextId, bool),
|
|
/// Stop painting a webview.
|
|
HideWebView(TopLevelBrowsingContextId),
|
|
/// Start painting a webview on top of all others, and optionally stop painting all others.
|
|
RaiseWebViewToTop(TopLevelBrowsingContextId, bool),
|
|
/// Make a webview focused.
|
|
FocusWebView(TopLevelBrowsingContextId),
|
|
/// Make none of the webviews focused.
|
|
BlurWebView,
|
|
/// Forward an event to the script task of the given pipeline.
|
|
ForwardEvent(PipelineId, CompositorEvent),
|
|
/// Requesting a change to the onscreen cursor.
|
|
SetCursor(Cursor),
|
|
/// Enable the sampling profiler, with a given sampling rate and max total sampling duration.
|
|
EnableProfiler(Duration, Duration),
|
|
/// Disable the sampling profiler.
|
|
DisableProfiler,
|
|
/// Request to exit from fullscreen mode
|
|
ExitFullScreen(TopLevelBrowsingContextId),
|
|
/// Media session action.
|
|
MediaSessionAction(MediaSessionActionType),
|
|
/// Set whether to use less resources, by stopping animations and running timers at a heavily limited rate.
|
|
SetWebViewThrottled(TopLevelBrowsingContextId, bool),
|
|
/// Virtual keyboard was dismissed
|
|
IMEDismissed,
|
|
/// Notify the embedder that it needs to present a new frame.
|
|
ReadyToPresent(Vec<WebViewId>),
|
|
/// Gamepad state has changed
|
|
Gamepad(GamepadEvent),
|
|
}
|
|
|
|
impl fmt::Debug for ConstellationMsg {
|
|
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
|
write!(formatter, "ConstellationMsg::{}", self.variant_name())
|
|
}
|
|
}
|
|
|
|
impl ConstellationMsg {
|
|
/// Return the variant name, for error logging that happens after the message is consumed.
|
|
pub fn variant_name(&self) -> &'static str {
|
|
use self::ConstellationMsg::*;
|
|
match *self {
|
|
Exit => "Exit",
|
|
GetBrowsingContext(..) => "GetBrowsingContext",
|
|
GetPipeline(..) => "GetPipeline",
|
|
GetFocusTopLevelBrowsingContext(..) => "GetFocusTopLevelBrowsingContext",
|
|
IsReadyToSaveImage(..) => "IsReadyToSaveImage",
|
|
Keyboard(..) => "Keyboard",
|
|
AllowNavigationResponse(..) => "AllowNavigationResponse",
|
|
LoadUrl(..) => "LoadUrl",
|
|
TraverseHistory(..) => "TraverseHistory",
|
|
WindowSize(..) => "WindowSize",
|
|
TickAnimation(..) => "TickAnimation",
|
|
WebDriverCommand(..) => "WebDriverCommand",
|
|
Reload(..) => "Reload",
|
|
LogEntry(..) => "LogEntry",
|
|
NewWebView(..) => "NewWebView",
|
|
CloseWebView(..) => "CloseWebView",
|
|
MoveResizeWebView(..) => "MoveResizeWebView",
|
|
ShowWebView(..) => "ShowWebView",
|
|
HideWebView(..) => "HideWebView",
|
|
RaiseWebViewToTop(..) => "RaiseWebViewToTop",
|
|
FocusWebView(..) => "FocusWebView",
|
|
BlurWebView => "BlurWebView",
|
|
SendError(..) => "SendError",
|
|
ForwardEvent(..) => "ForwardEvent",
|
|
SetCursor(..) => "SetCursor",
|
|
EnableProfiler(..) => "EnableProfiler",
|
|
DisableProfiler => "DisableProfiler",
|
|
ExitFullScreen(..) => "ExitFullScreen",
|
|
MediaSessionAction(..) => "MediaSessionAction",
|
|
SetWebViewThrottled(..) => "SetWebViewThrottled",
|
|
IMEDismissed => "IMEDismissed",
|
|
ClearCache => "ClearCache",
|
|
ReadyToPresent(..) => "ReadyToPresent",
|
|
Gamepad(..) => "Gamepad",
|
|
}
|
|
}
|
|
}
|