Navigation Menu

Skip to content

Commit

Permalink
Rewrite CefBrowser::send_window_event with try_borrow
Browse files Browse the repository at this point in the history
  • Loading branch information
nox committed Aug 20, 2016
1 parent 2e310f8 commit 3bfeaf0
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 19 deletions.
30 changes: 12 additions & 18 deletions ports/cef/browser.rs
Expand Up @@ -17,7 +17,7 @@ use wrappers::CefWrap;
use compositing::windowing::{WindowNavigateMsg, WindowEvent};
use glutin_app;
use libc::c_int;
use std::cell::{Cell, RefCell, BorrowState};
use std::cell::{Cell, RefCell};
use std::ptr;
use std::rc::Rc;
use std::sync::atomic::{AtomicIsize, Ordering};
Expand Down Expand Up @@ -183,24 +183,18 @@ impl ServoCefBrowserExtensions for CefBrowser {
}

fn send_window_event(&self, event: WindowEvent) {
self.downcast().message_queue.borrow_mut().push(event);

loop {
match self.downcast().servo_browser.borrow_state() {
BorrowState::Unused => {
let event = match self.downcast().message_queue.borrow_mut().pop() {
None => return,
Some(event) => event,
};
self.downcast().servo_browser.borrow_mut().handle_event(event);
}
_ => {
// We're trying to send an event while processing another one. This will
// cause general badness, so queue up that event instead of immediately
// processing it.
break
}
let browser = self.downcast();

if let Ok(mut servo_browser) = browser.servo_browser.try_borrow_mut() {
servo_browser.handle_event(event);
while let Some(event) = browser.message_queue.borrow_mut().pop() {
servo_browser.handle_event(event);
}
} else {
// If we fail to borrow mutably, this means we're trying to send an
// event while processing another one. This will cause general badness,
// we just queue up that event instead of immediately processing it.
browser.message_queue.borrow_mut().push(event);
}
}

Expand Down
2 changes: 1 addition & 1 deletion ports/cef/lib.rs
Expand Up @@ -2,12 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#![feature(borrow_state)]
#![feature(box_syntax)]
#![feature(core_intrinsics)]
#![feature(filling_drop)]
#![feature(link_args)]
#![feature(plugin)]
#![feature(try_borrow)]
#![feature(unicode)]
#![feature(unsafe_no_drop_flag)]

Expand Down

0 comments on commit 3bfeaf0

Please sign in to comment.