From 18cfb9378df73359eae0867e01f18e7913e0e8dd Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Tue, 15 Jan 2019 15:20:25 -0500 Subject: [PATCH 1/2] Delay user script execution until DOM is stable. --- components/script/dom/userscripts.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/components/script/dom/userscripts.rs b/components/script/dom/userscripts.rs index 6ae80ee8024..d9816648dec 100644 --- a/components/script/dom/userscripts.rs +++ b/components/script/dom/userscripts.rs @@ -3,9 +3,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::dom::bindings::inheritance::Castable; +use crate::dom::bindings::refcounted::Trusted; use crate::dom::globalscope::GlobalScope; use crate::dom::htmlheadelement::HTMLHeadElement; -use crate::dom::node::Node; +use crate::dom::node::document_from_node; use js::jsval::UndefinedValue; use servo_config::opts; use std::fs::{read_dir, File}; @@ -13,14 +14,18 @@ use std::io::Read; use std::path::PathBuf; pub fn load_script(head: &HTMLHeadElement) { - if let Some(ref path_str) = opts::get().userscripts { - let node = head.upcast::(); - let doc = node.owner_doc(); - let win = doc.window(); + let path_str = match opts::get().userscripts.clone() { + Some(p) => p, + None => return, + }; + let doc = document_from_node(head); + let win = Trusted::new(doc.window()); + doc.add_delayed_task(task!(UserScriptExecute: move || { + let win = win.root(); let cx = win.get_cx(); rooted!(in(cx) let mut rval = UndefinedValue()); - let path = PathBuf::from(path_str); + let path = PathBuf::from(&path_str); let mut files = read_dir(&path) .expect("Bad path passed to --userscripts") .filter_map(|e| e.ok()) @@ -37,5 +42,5 @@ pub fn load_script(head: &HTMLHeadElement) { win.upcast::() .evaluate_js_on_global_with_result(&script_text, rval.handle_mut()); } - } + })); } From 66c2e42ed9f4b07d5be2a0d5ac99e0981b1c5b8e Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Tue, 15 Jan 2019 15:22:13 -0500 Subject: [PATCH 2/2] Pass a filename when executing user scripts. --- components/script/dom/userscripts.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/components/script/dom/userscripts.rs b/components/script/dom/userscripts.rs index d9816648dec..1ba79ac5b69 100644 --- a/components/script/dom/userscripts.rs +++ b/components/script/dom/userscripts.rs @@ -40,7 +40,12 @@ pub fn load_script(head: &HTMLHeadElement) { f.read_to_end(&mut contents).unwrap(); let script_text = String::from_utf8_lossy(&contents); win.upcast::() - .evaluate_js_on_global_with_result(&script_text, rval.handle_mut()); + .evaluate_script_on_global_with_result( + &script_text, + &file.to_string_lossy(), + rval.handle_mut(), + 1, + ); } })); }