From 81eb426b04ab6d68f542fb047bb9706795d0f3a5 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 26 May 2015 21:20:33 -0400 Subject: [PATCH] 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 --- ports/cef/browser.rs | 8 ++++---- ports/cef/frame.rs | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ports/cef/browser.rs b/ports/cef/browser.rs index 2aaa926afa45..4da87e906ead 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 61ae9de2821c..e6a166be121f 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); + } }