Removed some sources of panic from script thread and devtools, using Option values instead to indicate when a pipeline context is missing where appropriate. Additionally, removed erroneous method get_browsing_context.

This commit is contained in:
David Raifaizen 2016-07-25 20:34:47 -04:00
parent 4b78b9adab
commit 2475dc1d21
7 changed files with 89 additions and 54 deletions

View file

@ -34,7 +34,6 @@ use msg::constellation_msg::PipelineId;
use net_traits::CookieSource::{HTTP, NonHTTP};
use net_traits::CoreResourceMsg::{GetCookiesDataForUrl, SetCookiesForUrlWithData};
use net_traits::IpcSend;
use script_thread::get_browsing_context;
use script_traits::webdriver_msg::WebDriverCookieError;
use script_traits::webdriver_msg::{WebDriverFrameId, WebDriverJSError, WebDriverJSResult, WebDriverJSValue};
use url::Url;
@ -43,7 +42,11 @@ fn find_node_by_unique_id(context: &BrowsingContext,
pipeline: PipelineId,
node_id: String)
-> Option<Root<Node>> {
let context = get_browsing_context(&context, pipeline);
let context = match context.find(pipeline) {
Some(context) => context,
None => return None
};
let document = context.active_document();
document.upcast::<Node>().traverse_preorder().find(|candidate| candidate.unique_id() == node_id)
}
@ -72,7 +75,11 @@ pub fn handle_execute_script(context: &BrowsingContext,
pipeline: PipelineId,
eval: String,
reply: IpcSender<WebDriverJSResult>) {
let context = get_browsing_context(&context, pipeline);
let context = match context.find(pipeline) {
Some(context) => context,
None => return reply.send(Err(WebDriverJSError::BrowsingContextNotFound)).unwrap()
};
let window = context.active_window();
let result = unsafe {
let cx = window.get_cx();
@ -87,7 +94,11 @@ pub fn handle_execute_async_script(context: &BrowsingContext,
pipeline: PipelineId,
eval: String,
reply: IpcSender<WebDriverJSResult>) {
let context = get_browsing_context(&context, pipeline);
let context = match context.find(pipeline) {
Some(context) => context,
None => return reply.send(Err(WebDriverJSError::BrowsingContextNotFound)).unwrap()
};
let window = context.active_window();
let cx = window.get_cx();
window.set_webdriver_script_chan(Some(reply));