aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2015-05-26 21:20:33 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2015-05-27 14:45:58 -0400
commit81eb426b04ab6d68f542fb047bb9706795d0f3a5 (patch)
treea742573045d958a1e0b6f4b2620807d81f3b79cc
parentb1ae5e7523461390d332e39a98a847b243afab3b (diff)
downloadservo-81eb426b04ab6d68f542fb047bb9706795d0f3a5.tar.gz
servo-81eb426b04ab6d68f542fb047bb9706795d0f3a5.zip
when creating a cef browser, setup the url to load but don't load it
cef apps will expect to enter their main loops before this happens due to various callbacks being hit, so it's necessary to punt this loading off until a later time
-rw-r--r--ports/cef/browser.rs8
-rw-r--r--ports/cef/frame.rs10
2 files changed, 14 insertions, 4 deletions
diff --git a/ports/cef/browser.rs b/ports/cef/browser.rs
index 2aaa926afa4..4da87e906ea 100644
--- a/ports/cef/browser.rs
+++ b/ports/cef/browser.rs
@@ -264,7 +264,7 @@ pub fn browser_callback_after_created(browser: CefBrowser) {
life_span_handler.on_after_created(browser.clone());
}
browser.downcast().callback_executed.set(true);
- browser.downcast().host.was_resized();
+ browser.downcast().frame.load();
}
fn browser_host_create(window_info: &cef_window_info_t,
@@ -274,12 +274,12 @@ fn browser_host_create(window_info: &cef_window_info_t,
-> CefBrowser {
let browser = ServoCefBrowser::new(window_info, client).as_cef_interface();
browser.init(window_info);
+ if url != ptr::null() {
+ unsafe { browser.downcast().frame.set_url(CefWrap::to_rust(url)); }
+ }
if callback_executed {
browser_callback_after_created(browser.clone());
}
- if url != ptr::null() {
- unsafe { browser.downcast().frame.load_url(CefWrap::to_rust(url)); }
- }
BROWSERS.with(|browsers| {
browsers.borrow_mut().push(browser.clone());
});
diff --git a/ports/cef/frame.rs b/ports/cef/frame.rs
index 61ae9de2821..e6a166be121 100644
--- a/ports/cef/frame.rs
+++ b/ports/cef/frame.rs
@@ -53,10 +53,20 @@ full_cef_class_impl! {
pub trait ServoCefFrameExtensions {
fn set_browser(&self, browser: CefBrowser);
+ fn set_url(&self, url: &[u16]);
+ fn load(&self);
}
impl ServoCefFrameExtensions for CefFrame {
fn set_browser(&self, browser: CefBrowser) {
*self.downcast().browser.borrow_mut() = Some(browser)
}
+ fn set_url(&self, url: &[u16]) {
+ let frame = self.downcast();
+ *frame.url.borrow_mut() = String::from_utf16(url).unwrap();
+ }
+ fn load(&self) {
+ let event = WindowEvent::LoadUrl(self.downcast().url.borrow().clone());
+ self.downcast().browser.borrow_mut().as_mut().unwrap().send_window_event(event);
+ }
}