mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
add navigation state data to LoadComplete messages, finish cef load state cbs
This commit is contained in:
parent
3481c752cd
commit
0d46a3b89a
10 changed files with 27 additions and 16 deletions
|
@ -388,7 +388,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {
|
|||
self.window.load_start(back, forward);
|
||||
}
|
||||
|
||||
(Msg::LoadComplete, ShutdownState::NotShuttingDown) => {
|
||||
(Msg::LoadComplete(back, forward), ShutdownState::NotShuttingDown) => {
|
||||
self.got_load_complete_message = true;
|
||||
|
||||
// If we're painting in headless mode, schedule a recomposite.
|
||||
|
@ -399,7 +399,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {
|
|||
// Inform the embedder that the load has finished.
|
||||
//
|
||||
// TODO(pcwalton): Specify which frame's load completed.
|
||||
self.window.load_end();
|
||||
self.window.load_end(back, forward);
|
||||
}
|
||||
|
||||
(Msg::ScrollTimeout(timestamp), ShutdownState::NotShuttingDown) => {
|
||||
|
|
|
@ -162,8 +162,8 @@ pub enum Msg {
|
|||
SetFrameTree(SendableFrameTree, Sender<()>, ConstellationChan),
|
||||
/// The load of a page has begun: (can go back, can go forward).
|
||||
LoadStart(bool, bool),
|
||||
/// The load of a page has completed.
|
||||
LoadComplete,
|
||||
/// The load of a page has completed: (can go back, can go forward).
|
||||
LoadComplete(bool, bool),
|
||||
/// Indicates that the scrolling timeout with the given starting timestamp has happened and a
|
||||
/// composite should happen. (See the `scrolling` module.)
|
||||
ScrollTimeout(u64),
|
||||
|
@ -196,7 +196,7 @@ impl Debug for Msg {
|
|||
Msg::ChangePageTitle(..) => write!(f, "ChangePageTitle"),
|
||||
Msg::ChangePageUrl(..) => write!(f, "ChangePageUrl"),
|
||||
Msg::SetFrameTree(..) => write!(f, "SetFrameTree"),
|
||||
Msg::LoadComplete => write!(f, "LoadComplete"),
|
||||
Msg::LoadComplete(..) => write!(f, "LoadComplete"),
|
||||
Msg::LoadStart(..) => write!(f, "LoadStart"),
|
||||
Msg::ScrollTimeout(..) => write!(f, "ScrollTimeout"),
|
||||
Msg::RecompositeAfterScroll => write!(f, "RecompositeAfterScroll"),
|
||||
|
|
|
@ -391,9 +391,9 @@ impl<LTF: LayoutTaskFactory, STF: ScriptTaskFactory> Constellation<LTF, STF> {
|
|||
}
|
||||
// A page loaded through one of several methods above has completed all parsing,
|
||||
// script, and reflow messages have been sent.
|
||||
ConstellationMsg::LoadComplete => {
|
||||
ConstellationMsg::LoadComplete(pipeline_id) => {
|
||||
debug!("constellation got load complete message");
|
||||
self.handle_load_complete_msg()
|
||||
self.handle_load_complete_msg(&pipeline_id)
|
||||
}
|
||||
// Handle a forward or back request
|
||||
ConstellationMsg::Navigate(pipeline_info, direction) => {
|
||||
|
@ -681,8 +681,12 @@ impl<LTF: LayoutTaskFactory, STF: ScriptTaskFactory> Constellation<LTF, STF> {
|
|||
self.compositor_proxy.send(CompositorMsg::LoadStart(back, forward));
|
||||
}
|
||||
|
||||
fn handle_load_complete_msg(&mut self) {
|
||||
self.compositor_proxy.send(CompositorMsg::LoadComplete);
|
||||
fn handle_load_complete_msg(&mut self, pipeline_id: &PipelineId) {
|
||||
let frame_id = *self.pipeline_to_frame_map.get(pipeline_id).unwrap();
|
||||
|
||||
let forward = !self.mut_frame(frame_id).next.is_empty();
|
||||
let back = !self.mut_frame(frame_id).prev.is_empty();
|
||||
self.compositor_proxy.send(CompositorMsg::LoadComplete(back, forward));
|
||||
if let Some(ref reply_chan) = self.webdriver.load_channel {
|
||||
reply_chan.send(webdriver_traits::LoadComplete).unwrap();
|
||||
}
|
||||
|
|
|
@ -98,7 +98,7 @@ impl CompositorEventListener for NullCompositor {
|
|||
Msg::ChangeRunningAnimationsState(..) |
|
||||
Msg::ScrollFragmentPoint(..) |
|
||||
Msg::LoadStart(..) |
|
||||
Msg::LoadComplete |
|
||||
Msg::LoadComplete(..) |
|
||||
Msg::ScrollTimeout(..) |
|
||||
Msg::RecompositeAfterScroll |
|
||||
Msg::ChangePageTitle(..) |
|
||||
|
|
|
@ -106,7 +106,7 @@ pub trait WindowMethods {
|
|||
/// Called when the browser has started loading a frame.
|
||||
fn load_start(&self, back: bool, forward: bool);
|
||||
/// Called when the browser is done loading a frame.
|
||||
fn load_end(&self);
|
||||
fn load_end(&self, back: bool, forward: bool);
|
||||
|
||||
/// Returns the hidpi factor of the monitor.
|
||||
fn hidpi_factor(&self) -> ScaleFactor<ScreenPx, DevicePixel, f32>;
|
||||
|
|
|
@ -211,7 +211,7 @@ pub enum Msg {
|
|||
Exit,
|
||||
Failure(Failure),
|
||||
InitLoadUrl(Url),
|
||||
LoadComplete,
|
||||
LoadComplete(PipelineId),
|
||||
FrameRect(PipelineId, SubpageId, Rect<f32>),
|
||||
LoadUrl(PipelineId, LoadData),
|
||||
ScriptLoadedURLInIFrame(Url, PipelineId, SubpageId, Option<SubpageId>, IFrameSandboxState),
|
||||
|
|
|
@ -960,7 +960,7 @@ impl ScriptTask {
|
|||
self.chan.send(ScriptMsg::RunnableMsg(handler)).unwrap();
|
||||
|
||||
let ConstellationChan(ref chan) = self.constellation_chan;
|
||||
chan.send(ConstellationMsg::LoadComplete).unwrap();
|
||||
chan.send(ConstellationMsg::LoadComplete(pipeline)).unwrap();
|
||||
}
|
||||
|
||||
/// Handles a timer that fired.
|
||||
|
|
|
@ -331,13 +331,20 @@ impl WindowMethods for Window {
|
|||
}
|
||||
}
|
||||
|
||||
fn load_end(&self) {
|
||||
fn load_end(&self, back: bool, forward: bool) {
|
||||
// FIXME(pcwalton): The status code 200 is a lie.
|
||||
let browser = self.cef_browser.borrow();
|
||||
let browser = match *browser {
|
||||
None => return,
|
||||
Some(ref browser) => browser,
|
||||
};
|
||||
if check_ptr_exist!(browser.get_host().get_client(), get_load_handler) &&
|
||||
check_ptr_exist!(browser.get_host().get_client().get_load_handler(), on_loading_state_change) {
|
||||
browser.get_host()
|
||||
.get_client()
|
||||
.get_load_handler()
|
||||
.on_loading_state_change((*browser).clone(), 0i32, back as i32, forward as i32);
|
||||
}
|
||||
if check_ptr_exist!(browser.get_host().get_client(), get_load_handler) &&
|
||||
check_ptr_exist!(browser.get_host().get_client().get_load_handler(), on_load_end) {
|
||||
browser.get_host()
|
||||
|
|
|
@ -508,7 +508,7 @@ impl WindowMethods for Window {
|
|||
fn load_start(&self, _: bool, _: bool) {
|
||||
}
|
||||
|
||||
fn load_end(&self) {
|
||||
fn load_end(&self, _: bool, _: bool) {
|
||||
}
|
||||
|
||||
/// Has no effect on Android.
|
||||
|
|
|
@ -805,7 +805,7 @@ impl WindowMethods for Window {
|
|||
fn load_start(&self, _: bool, _: bool) {
|
||||
}
|
||||
|
||||
fn load_end(&self) {
|
||||
fn load_end(&self, _: bool, _: bool) {
|
||||
}
|
||||
|
||||
fn hidpi_factor(&self) -> ScaleFactor<ScreenPx, DevicePixel, f32> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue