From 3f8d8a3cc961f8e6be8ec2c4bf12dda3251d045f Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 22 May 2015 17:13:13 -0400 Subject: [PATCH] add back/forward/loading members to ServoCefBrowser with related browser methods --- ports/cef/browser.rs | 21 +++++++++++++++++++++ ports/cef/window.rs | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/ports/cef/browser.rs b/ports/cef/browser.rs index 98681198db2..3eb8a70c730 100644 --- a/ports/cef/browser.rs +++ b/ports/cef/browser.rs @@ -60,6 +60,18 @@ cef_class_impl! { this.downcast().host.clone() }} + fn can_go_back(&this,) -> c_int {{ + this.downcast().back.get() as c_int + }} + + fn can_go_forward(&this,) -> c_int {{ + this.downcast().forward.get() as c_int + }} + + fn is_loading(&this,) -> c_int {{ + this.downcast().loading.get() as c_int + }} + fn go_back(&this,) -> () {{ this.send_window_event(WindowEvent::Navigation(WindowNavigateMsg::Back)); }} @@ -90,6 +102,12 @@ pub struct ServoCefBrowser { pub window: Option>, /// Whether the on-created callback has fired yet. pub callback_executed: Cell, + /// whether the browser can navigate back + pub back: Cell, + /// whether the browser can navigate forward + pub forward: Cell, + /// whether the browser is loading + pub loading: Cell, /// the display system window handle: only to be used with host.get_window_handle() window_handle: cef_window_handle_t, @@ -130,6 +148,9 @@ impl ServoCefBrowser { servo_browser: RefCell::new(servo_browser), message_queue: RefCell::new(vec!()), id: id, + back: Cell::new(false), + forward: Cell::new(false), + loading: Cell::new(false), window_handle: window_handle, } } diff --git a/ports/cef/window.rs b/ports/cef/window.rs index 7fc1222efa2..af0f89f36be 100644 --- a/ports/cef/window.rs +++ b/ports/cef/window.rs @@ -322,6 +322,9 @@ impl WindowMethods for Window { None => return, Some(ref browser) => browser, }; + browser.downcast().loading.set(true); + browser.downcast().back.set(back); + browser.downcast().forward.set(forward); 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() @@ -338,6 +341,9 @@ impl WindowMethods for Window { None => return, Some(ref browser) => browser, }; + browser.downcast().loading.set(false); + browser.downcast().back.set(back); + browser.downcast().forward.set(forward); 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()