diff options
author | Josh Matthews <josh@joshmatthews.net> | 2019-01-15 15:20:25 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2019-01-15 15:20:25 -0500 |
commit | 18cfb9378df73359eae0867e01f18e7913e0e8dd (patch) | |
tree | 22b87f7c7140477e9f77f17356902192899fb262 /components/script/dom/userscripts.rs | |
parent | 2cf9a00c9983bf23eff23d56321973d36a14f977 (diff) | |
download | servo-18cfb9378df73359eae0867e01f18e7913e0e8dd.tar.gz servo-18cfb9378df73359eae0867e01f18e7913e0e8dd.zip |
Delay user script execution until DOM is stable.
Diffstat (limited to 'components/script/dom/userscripts.rs')
-rw-r--r-- | components/script/dom/userscripts.rs | 19 |
1 files 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::<Node>(); - 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::<GlobalScope>() .evaluate_js_on_global_with_result(&script_text, rval.handle_mut()); } - } + })); } |