aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/webdriver_handlers.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-07-26 00:44:28 -0500
committerGitHub <noreply@github.com>2016-07-26 00:44:28 -0500
commita94b92f8c4f3e3edbc8db7c106fe2b6d3a5d82ae (patch)
tree679ec85563ddd03d2792c31d2b24babef5b60d56 /components/script/webdriver_handlers.rs
parent4e18c230d031388570780ea0382eb5f7c6567a96 (diff)
parent2475dc1d21343e7cdda8b77be87be4484ee0f15a (diff)
downloadservo-a94b92f8c4f3e3edbc8db7c106fe2b6d3a5d82ae.tar.gz
servo-a94b92f8c4f3e3edbc8db7c106fe2b6d3a5d82ae.zip
Auto merge of #11791 - craftytrickster:11712/pipeline-lookup, r=asajeffrey
Pipeline lookup in webdriver Fixes #11712 <!-- Please describe your changes on the following line: --> Removed a method that seemed to duplicate already existing functionality, and returned BrowsingContextErrors in the web_handler file where panics were previously occurring. I am not sure if I like all the unwrapping that occurs in the script thread, but the current methods are not set up to return Option/Result. Also, should line the method on line 37 `find_node_by_unique_id` of components/script/webdriver_handlers.rs return None if the context is not found like I have it currently? Or should it return a `Result<Option...>` instead? <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #11712 . <!-- Either: --> - [ ] There are tests for these changes OR - [X] These changes do not require tests because I simply removed a method that duplicated already existing functionality. On the other part, I added better error sending instead of forcing a panic, which does not require testing to my knowledge. <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11791) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/webdriver_handlers.rs')
-rw-r--r--components/script/webdriver_handlers.rs19
1 files changed, 15 insertions, 4 deletions
diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs
index 2711cfb1225..74a754c36ce 100644
--- a/components/script/webdriver_handlers.rs
+++ b/components/script/webdriver_handlers.rs
@@ -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));