aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/html/cssparse.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/html/cssparse.rs')
-rw-r--r--src/components/script/html/cssparse.rs55
1 files changed, 33 insertions, 22 deletions
diff --git a/src/components/script/html/cssparse.rs b/src/components/script/html/cssparse.rs
index c5cad0849de..b538676edac 100644
--- a/src/components/script/html/cssparse.rs
+++ b/src/components/script/html/cssparse.rs
@@ -18,34 +18,45 @@ pub enum StylesheetProvenance {
InlineProvenance(Url, ~str),
}
+// Parses the style data and returns the stylesheet
+pub fn parse_inline_css(url: Url, data: ~str) -> Stylesheet {
+ let resource_task = ResourceTask(); // Resource task is not used for inline parsing
+ parse_css(InlineProvenance(url, data), resource_task)
+}
+
+fn parse_css(provenance: StylesheetProvenance,
+ resource_task: ResourceTask) -> Stylesheet {
+ // TODO: Get the actual value. http://dev.w3.org/csswg/css-syntax/#environment-encoding
+ let environment_encoding = UTF_8 as EncodingRef;
+
+ match provenance {
+ UrlProvenance(url) => {
+ debug!("cssparse: loading style sheet at {:s}", url.to_str());
+ let (input_chan, input_port) = channel();
+ resource_task.send(Load(url, input_chan));
+ let LoadResponse { metadata: metadata, progress_port: progress_port }
+ = input_port.recv();
+ let final_url = &metadata.final_url;
+ let protocol_encoding_label = metadata.charset.as_ref().map(|s| s.as_slice());
+ let iter = ProgressMsgPortIterator { progress_port: progress_port };
+ Stylesheet::from_bytes_iter(
+ iter, final_url.clone(),
+ protocol_encoding_label, Some(environment_encoding))
+ }
+ InlineProvenance(base_url, data) => {
+ debug!("cssparse: loading inline stylesheet {:s}", data);
+ Stylesheet::from_str(data, base_url, environment_encoding)
+ }
+ }
+}
+
pub fn spawn_css_parser(provenance: StylesheetProvenance,
resource_task: ResourceTask)
-> Receiver<Stylesheet> {
let (result_chan, result_port) = channel();
- // TODO: Get the actual value. http://dev.w3.org/csswg/css-syntax/#environment-encoding
- let environment_encoding = UTF_8 as EncodingRef;
-
spawn_named("cssparser", proc() {
- let sheet = match provenance {
- UrlProvenance(url) => {
- debug!("cssparse: loading style sheet at {:s}", url.to_str());
- let (input_chan, input_port) = channel();
- resource_task.send(Load(url, input_chan));
- let LoadResponse { metadata: metadata, progress_port: progress_port }
- = input_port.recv();
- let final_url = &metadata.final_url;
- let protocol_encoding_label = metadata.charset.as_ref().map(|s| s.as_slice());
- let iter = ProgressMsgPortIterator { progress_port: progress_port };
- Stylesheet::from_bytes_iter(
- iter, final_url.clone(),
- protocol_encoding_label, Some(environment_encoding))
- }
- InlineProvenance(base_url, data) => {
- Stylesheet::from_str(data, base_url, environment_encoding)
- }
- };
- result_chan.send(sheet);
+ result_chan.send(parse_css(provenance, resource_task));
});
return result_port;