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); + } }