aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/script/html/hubbub_html_parser.rs17
-rw-r--r--src/components/script/script_task.rs6
2 files changed, 16 insertions, 7 deletions
diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs
index 081c6a1ba25..d1c0b640c1d 100644
--- a/src/components/script/html/hubbub_html_parser.rs
+++ b/src/components/script/html/hubbub_html_parser.rs
@@ -59,7 +59,12 @@ macro_rules! handle_htmlelement(
)
)
-type JSResult = ~[~[u8]];
+pub struct JSFile {
+ data: ~[u8],
+ url: Url
+}
+
+type JSResult = ~[JSFile];
enum CSSMessage {
CSSTaskNewFile(StylesheetProvenance),
@@ -145,6 +150,7 @@ fn js_script_listener(to_parent: SharedChan<HtmlDiscoveryMessage>,
JSTaskNewFile(url) => {
let (result_port, result_chan) = comm::stream();
let resource_task = resource_task.clone();
+ let url_clone = url.clone();
do task::spawn {
let (input_port, input_chan) = comm::stream();
// TODO: change copy to move once we can move into closures
@@ -168,7 +174,11 @@ fn js_script_listener(to_parent: SharedChan<HtmlDiscoveryMessage>,
}
}
}
- result_vec.push(result_port);
+
+ let bytes = result_port.recv();
+ if bytes.is_some() {
+ result_vec.push(JSFile { data: bytes.unwrap(), url: url_clone });
+ }
}
JSTaskExit => {
break;
@@ -176,8 +186,7 @@ fn js_script_listener(to_parent: SharedChan<HtmlDiscoveryMessage>,
}
}
- let js_scripts = result_vec.iter().filter_map(|result_port| result_port.recv()).collect();
- to_parent.send(HtmlDiscoveredScript(js_scripts));
+ to_parent.send(HtmlDiscoveredScript(result_vec));
}
// Silly macros to handle constructing DOM nodes. This produces bad code and should be optimized
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs
index d6531fcba8b..37d9caf242a 100644
--- a/src/components/script/script_task.rs
+++ b/src/components/script/script_task.rs
@@ -682,10 +682,10 @@ impl ScriptTask {
js_info.js_compartment.define_functions(debug_fns);
// Evaluate every script in the document.
- for bytes in js_scripts.iter() {
+ for file in js_scripts.iter() {
let _ = js_info.js_context.evaluate_script(js_info.js_compartment.global_obj,
- bytes.clone(),
- ~"???",
+ file.data.clone(),
+ file.url.to_str(),
1);
}
}