mirror of
https://github.com/servo/servo.git
synced 2025-08-02 04:00:32 +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);
|
self.window.load_start(back, forward);
|
||||||
}
|
}
|
||||||
|
|
||||||
(Msg::LoadComplete, ShutdownState::NotShuttingDown) => {
|
(Msg::LoadComplete(back, forward), ShutdownState::NotShuttingDown) => {
|
||||||
self.got_load_complete_message = true;
|
self.got_load_complete_message = true;
|
||||||
|
|
||||||
// If we're painting in headless mode, schedule a recomposite.
|
// 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.
|
// Inform the embedder that the load has finished.
|
||||||
//
|
//
|
||||||
// TODO(pcwalton): Specify which frame's load completed.
|
// TODO(pcwalton): Specify which frame's load completed.
|
||||||
self.window.load_end();
|
self.window.load_end(back, forward);
|
||||||
}
|
}
|
||||||
|
|
||||||
(Msg::ScrollTimeout(timestamp), ShutdownState::NotShuttingDown) => {
|
(Msg::ScrollTimeout(timestamp), ShutdownState::NotShuttingDown) => {
|
||||||
|
|
|
@ -162,8 +162,8 @@ pub enum Msg {
|
||||||
SetFrameTree(SendableFrameTree, Sender<()>, ConstellationChan),
|
SetFrameTree(SendableFrameTree, Sender<()>, ConstellationChan),
|
||||||
/// The load of a page has begun: (can go back, can go forward).
|
/// The load of a page has begun: (can go back, can go forward).
|
||||||
LoadStart(bool, bool),
|
LoadStart(bool, bool),
|
||||||
/// The load of a page has completed.
|
/// The load of a page has completed: (can go back, can go forward).
|
||||||
LoadComplete,
|
LoadComplete(bool, bool),
|
||||||
/// Indicates that the scrolling timeout with the given starting timestamp has happened and a
|
/// Indicates that the scrolling timeout with the given starting timestamp has happened and a
|
||||||
/// composite should happen. (See the `scrolling` module.)
|
/// composite should happen. (See the `scrolling` module.)
|
||||||
ScrollTimeout(u64),
|
ScrollTimeout(u64),
|
||||||
|
@ -196,7 +196,7 @@ impl Debug for Msg {
|
||||||
Msg::ChangePageTitle(..) => write!(f, "ChangePageTitle"),
|
Msg::ChangePageTitle(..) => write!(f, "ChangePageTitle"),
|
||||||
Msg::ChangePageUrl(..) => write!(f, "ChangePageUrl"),
|
Msg::ChangePageUrl(..) => write!(f, "ChangePageUrl"),
|
||||||
Msg::SetFrameTree(..) => write!(f, "SetFrameTree"),
|
Msg::SetFrameTree(..) => write!(f, "SetFrameTree"),
|
||||||
Msg::LoadComplete => write!(f, "LoadComplete"),
|
Msg::LoadComplete(..) => write!(f, "LoadComplete"),
|
||||||
Msg::LoadStart(..) => write!(f, "LoadStart"),
|
Msg::LoadStart(..) => write!(f, "LoadStart"),
|
||||||
Msg::ScrollTimeout(..) => write!(f, "ScrollTimeout"),
|
Msg::ScrollTimeout(..) => write!(f, "ScrollTimeout"),
|
||||||
Msg::RecompositeAfterScroll => write!(f, "RecompositeAfterScroll"),
|
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,
|
// A page loaded through one of several methods above has completed all parsing,
|
||||||
// script, and reflow messages have been sent.
|
// script, and reflow messages have been sent.
|
||||||
ConstellationMsg::LoadComplete => {
|
ConstellationMsg::LoadComplete(pipeline_id) => {
|
||||||
debug!("constellation got load complete message");
|
debug!("constellation got load complete message");
|
||||||
self.handle_load_complete_msg()
|
self.handle_load_complete_msg(&pipeline_id)
|
||||||
}
|
}
|
||||||
// Handle a forward or back request
|
// Handle a forward or back request
|
||||||
ConstellationMsg::Navigate(pipeline_info, direction) => {
|
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));
|
self.compositor_proxy.send(CompositorMsg::LoadStart(back, forward));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_load_complete_msg(&mut self) {
|
fn handle_load_complete_msg(&mut self, pipeline_id: &PipelineId) {
|
||||||
self.compositor_proxy.send(CompositorMsg::LoadComplete);
|
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 {
|
if let Some(ref reply_chan) = self.webdriver.load_channel {
|
||||||
reply_chan.send(webdriver_traits::LoadComplete).unwrap();
|
reply_chan.send(webdriver_traits::LoadComplete).unwrap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ impl CompositorEventListener for NullCompositor {
|
||||||
Msg::ChangeRunningAnimationsState(..) |
|
Msg::ChangeRunningAnimationsState(..) |
|
||||||
Msg::ScrollFragmentPoint(..) |
|
Msg::ScrollFragmentPoint(..) |
|
||||||
Msg::LoadStart(..) |
|
Msg::LoadStart(..) |
|
||||||
Msg::LoadComplete |
|
Msg::LoadComplete(..) |
|
||||||
Msg::ScrollTimeout(..) |
|
Msg::ScrollTimeout(..) |
|
||||||
Msg::RecompositeAfterScroll |
|
Msg::RecompositeAfterScroll |
|
||||||
Msg::ChangePageTitle(..) |
|
Msg::ChangePageTitle(..) |
|
||||||
|
|
|
@ -106,7 +106,7 @@ pub trait WindowMethods {
|
||||||
/// Called when the browser has started loading a frame.
|
/// Called when the browser has started loading a frame.
|
||||||
fn load_start(&self, back: bool, forward: bool);
|
fn load_start(&self, back: bool, forward: bool);
|
||||||
/// Called when the browser is done loading a frame.
|
/// 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.
|
/// Returns the hidpi factor of the monitor.
|
||||||
fn hidpi_factor(&self) -> ScaleFactor<ScreenPx, DevicePixel, f32>;
|
fn hidpi_factor(&self) -> ScaleFactor<ScreenPx, DevicePixel, f32>;
|
||||||
|
|
|
@ -211,7 +211,7 @@ pub enum Msg {
|
||||||
Exit,
|
Exit,
|
||||||
Failure(Failure),
|
Failure(Failure),
|
||||||
InitLoadUrl(Url),
|
InitLoadUrl(Url),
|
||||||
LoadComplete,
|
LoadComplete(PipelineId),
|
||||||
FrameRect(PipelineId, SubpageId, Rect<f32>),
|
FrameRect(PipelineId, SubpageId, Rect<f32>),
|
||||||
LoadUrl(PipelineId, LoadData),
|
LoadUrl(PipelineId, LoadData),
|
||||||
ScriptLoadedURLInIFrame(Url, PipelineId, SubpageId, Option<SubpageId>, IFrameSandboxState),
|
ScriptLoadedURLInIFrame(Url, PipelineId, SubpageId, Option<SubpageId>, IFrameSandboxState),
|
||||||
|
|
|
@ -960,7 +960,7 @@ impl ScriptTask {
|
||||||
self.chan.send(ScriptMsg::RunnableMsg(handler)).unwrap();
|
self.chan.send(ScriptMsg::RunnableMsg(handler)).unwrap();
|
||||||
|
|
||||||
let ConstellationChan(ref chan) = self.constellation_chan;
|
let ConstellationChan(ref chan) = self.constellation_chan;
|
||||||
chan.send(ConstellationMsg::LoadComplete).unwrap();
|
chan.send(ConstellationMsg::LoadComplete(pipeline)).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handles a timer that fired.
|
/// 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.
|
// FIXME(pcwalton): The status code 200 is a lie.
|
||||||
let browser = self.cef_browser.borrow();
|
let browser = self.cef_browser.borrow();
|
||||||
let browser = match *browser {
|
let browser = match *browser {
|
||||||
None => return,
|
None => return,
|
||||||
Some(ref browser) => browser,
|
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) &&
|
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) {
|
check_ptr_exist!(browser.get_host().get_client().get_load_handler(), on_load_end) {
|
||||||
browser.get_host()
|
browser.get_host()
|
||||||
|
|
|
@ -508,7 +508,7 @@ impl WindowMethods for Window {
|
||||||
fn load_start(&self, _: bool, _: bool) {
|
fn load_start(&self, _: bool, _: bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_end(&self) {
|
fn load_end(&self, _: bool, _: bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Has no effect on Android.
|
/// Has no effect on Android.
|
||||||
|
|
|
@ -805,7 +805,7 @@ impl WindowMethods for Window {
|
||||||
fn load_start(&self, _: bool, _: bool) {
|
fn load_start(&self, _: bool, _: bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_end(&self) {
|
fn load_end(&self, _: bool, _: bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hidpi_factor(&self) -> ScaleFactor<ScreenPx, DevicePixel, f32> {
|
fn hidpi_factor(&self) -> ScaleFactor<ScreenPx, DevicePixel, f32> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue