diff options
Diffstat (limited to 'src/components/script/html/cssparse.rs')
-rw-r--r-- | src/components/script/html/cssparse.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/components/script/html/cssparse.rs b/src/components/script/html/cssparse.rs index 6d9d0d18a5a..9111f517c12 100644 --- a/src/components/script/html/cssparse.rs +++ b/src/components/script/html/cssparse.rs @@ -10,7 +10,7 @@ use std::comm::Port; use std::task; use newcss::stylesheet::Stylesheet; use newcss::util::DataStream; -use servo_net::resource_task::{ResourceTask, ProgressMsg, Load, Payload, Done}; +use servo_net::resource_task::{ResourceTask, ProgressMsg, Load, Payload, Done, UrlChange}; use extra::url::Url; /// Where a style sheet comes from. @@ -57,10 +57,19 @@ fn data_stream(provenance: StylesheetProvenance, resource_task: ResourceTask) -> fn resource_port_to_data_stream(input_port: Port<ProgressMsg>) -> DataStream { return || { - match input_port.recv() { - Payload(data) => Some(data), - Done(*) => None + // Can't just 'return' the value since we're inside a lambda + let mut result = None; + loop { + match input_port.recv() { + UrlChange(*) => (), // don't care that URL changed + Payload(data) => { + result = Some(data); + break; + } + Done(*) => break + } } + result } } |