mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Used rust-url directly instead of servo_util::url
The latter now only calls the former.
This commit is contained in:
parent
779cb44a44
commit
6917fbf28e
13 changed files with 78 additions and 71 deletions
|
@ -42,12 +42,13 @@ use servo_util::geometry::{DevicePixel, PagePx, ScreenPx, ViewportPx};
|
||||||
use servo_util::memory::MemoryProfilerChan;
|
use servo_util::memory::MemoryProfilerChan;
|
||||||
use servo_util::opts::Opts;
|
use servo_util::opts::Opts;
|
||||||
use servo_util::time::{profile, TimeProfilerChan};
|
use servo_util::time::{profile, TimeProfilerChan};
|
||||||
use servo_util::{memory, time, url};
|
use servo_util::{memory, time};
|
||||||
use std::io::timer::sleep;
|
use std::io::timer::sleep;
|
||||||
use std::collections::hashmap::HashMap;
|
use std::collections::hashmap::HashMap;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use time::precise_time_s;
|
use time::precise_time_s;
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
|
|
||||||
pub struct IOCompositor {
|
pub struct IOCompositor {
|
||||||
|
@ -626,7 +627,7 @@ impl IOCompositor {
|
||||||
layers"),
|
layers"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let msg = LoadUrlMsg(root_pipeline_id, url::parse_url(url_string.as_slice(), None));
|
let msg = LoadUrlMsg(root_pipeline_id, Url::parse(url_string.as_slice()).unwrap());
|
||||||
let ConstellationChan(ref chan) = self.constellation_chan;
|
let ConstellationChan(ref chan) = self.constellation_chan;
|
||||||
chan.send(msg);
|
chan.send(msg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ use servo_net::resource_task;
|
||||||
use servo_util::geometry::PagePx;
|
use servo_util::geometry::PagePx;
|
||||||
use servo_util::opts::Opts;
|
use servo_util::opts::Opts;
|
||||||
use servo_util::time::TimeProfilerChan;
|
use servo_util::time::TimeProfilerChan;
|
||||||
use servo_util::url::parse_url;
|
|
||||||
use servo_util::task::spawn_named;
|
use servo_util::task::spawn_named;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::kinds::marker;
|
use std::kinds::marker;
|
||||||
|
@ -446,7 +445,7 @@ impl<LTF: LayoutTaskFactory> Constellation<LTF> {
|
||||||
debug!("creating replacement pipeline for about:failure");
|
debug!("creating replacement pipeline for about:failure");
|
||||||
|
|
||||||
let new_id = self.get_next_pipeline_id();
|
let new_id = self.get_next_pipeline_id();
|
||||||
let pipeline = self.new_pipeline(new_id, subpage_id, parse_url("about:failure", None));
|
let pipeline = self.new_pipeline(new_id, subpage_id, Url::parse("about:failure").unwrap());
|
||||||
pipeline.load();
|
pipeline.load();
|
||||||
|
|
||||||
let pipeline_wrapped = Rc::new(pipeline);
|
let pipeline_wrapped = Rc::new(pipeline);
|
||||||
|
|
|
@ -59,7 +59,6 @@ use script::dom::node::{TextNodeTypeId};
|
||||||
use script::dom::htmlobjectelement::is_image_data;
|
use script::dom::htmlobjectelement::is_image_data;
|
||||||
use servo_util::namespace;
|
use servo_util::namespace;
|
||||||
use servo_util::range::Range;
|
use servo_util::range::Range;
|
||||||
use servo_util::url::parse_url;
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::sync::atomics::Relaxed;
|
use std::sync::atomics::Relaxed;
|
||||||
use style::ComputedValues;
|
use style::ComputedValues;
|
||||||
|
@ -250,7 +249,7 @@ impl<'a> FlowConstructor<'a> {
|
||||||
IframeFragment(IframeFragmentInfo::new(node))
|
IframeFragment(IframeFragmentInfo::new(node))
|
||||||
}
|
}
|
||||||
Some(ElementNodeTypeId(HTMLObjectElementTypeId)) => {
|
Some(ElementNodeTypeId(HTMLObjectElementTypeId)) => {
|
||||||
let data = node.get_object_data(&self.layout_context.url);
|
let data = node.get_object_data();
|
||||||
self.build_fragment_info_for_image(node, data)
|
self.build_fragment_info_for_image(node, data)
|
||||||
}
|
}
|
||||||
Some(ElementNodeTypeId(HTMLTableElementTypeId)) => TableWrapperFragment,
|
Some(ElementNodeTypeId(HTMLTableElementTypeId)) => TableWrapperFragment,
|
||||||
|
@ -1008,7 +1007,7 @@ trait ObjectElement {
|
||||||
fn has_object_data(&self) -> bool;
|
fn has_object_data(&self) -> bool;
|
||||||
|
|
||||||
/// Returns the "data" attribute value parsed as a URL
|
/// Returns the "data" attribute value parsed as a URL
|
||||||
fn get_object_data(&self, base_url: &Url) -> Option<Url>;
|
fn get_object_data(&self) -> Option<Url>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'ln> ObjectElement for ThreadSafeLayoutNode<'ln> {
|
impl<'ln> ObjectElement for ThreadSafeLayoutNode<'ln> {
|
||||||
|
@ -1024,9 +1023,9 @@ impl<'ln> ObjectElement for ThreadSafeLayoutNode<'ln> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_object_data(&self, base_url: &Url) -> Option<Url> {
|
fn get_object_data(&self) -> Option<Url> {
|
||||||
match self.get_type_and_data() {
|
match self.get_type_and_data() {
|
||||||
(None, Some(uri)) if is_image_data(uri) => Some(parse_url(uri, Some(base_url.clone()))),
|
(None, Some(uri)) if is_image_data(uri) => Url::parse(uri).ok(),
|
||||||
_ => None
|
_ => None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -493,8 +493,8 @@ mod tests {
|
||||||
use resource_task;
|
use resource_task;
|
||||||
use resource_task::{ResourceTask, Metadata, start_sending};
|
use resource_task::{ResourceTask, Metadata, start_sending};
|
||||||
use image::base::test_image_bin;
|
use image::base::test_image_bin;
|
||||||
use servo_util::url::parse_url;
|
|
||||||
use std::comm;
|
use std::comm;
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
trait Closure {
|
trait Closure {
|
||||||
fn invoke(&self, _response: Sender<resource_task::ProgressMsg>) { }
|
fn invoke(&self, _response: Sender<resource_task::ProgressMsg>) { }
|
||||||
|
@ -567,7 +567,8 @@ mod tests {
|
||||||
loop {
|
loop {
|
||||||
match port.recv() {
|
match port.recv() {
|
||||||
resource_task::Load(_, response) => {
|
resource_task::Load(_, response) => {
|
||||||
let chan = start_sending(response, Metadata::default(parse_url("file:///fake", None)));
|
let chan = start_sending(response, Metadata::default(
|
||||||
|
Url::parse("file:///fake").unwrap()));
|
||||||
on_load.invoke(chan);
|
on_load.invoke(chan);
|
||||||
}
|
}
|
||||||
resource_task::Exit => break
|
resource_task::Exit => break
|
||||||
|
@ -581,7 +582,6 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box DoesNothing);
|
let mock_resource_task = mock_resource_task(box DoesNothing);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let _url = parse_url("file", None);
|
|
||||||
|
|
||||||
image_cache_task.exit();
|
image_cache_task.exit();
|
||||||
mock_resource_task.send(resource_task::Exit);
|
mock_resource_task.send(resource_task::Exit);
|
||||||
|
@ -593,7 +593,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box DoesNothing);
|
let mock_resource_task = mock_resource_task(box DoesNothing);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
let (chan, port) = channel();
|
let (chan, port) = channel();
|
||||||
image_cache_task.send(GetImage(url, chan));
|
image_cache_task.send(GetImage(url, chan));
|
||||||
|
@ -607,7 +607,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan});
|
let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan});
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
image_cache_task.send(Prefetch(url));
|
image_cache_task.send(Prefetch(url));
|
||||||
url_requested.recv();
|
url_requested.recv();
|
||||||
|
@ -622,7 +622,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan});
|
let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan});
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
image_cache_task.send(Prefetch(url.clone()));
|
image_cache_task.send(Prefetch(url.clone()));
|
||||||
image_cache_task.send(Prefetch(url));
|
image_cache_task.send(Prefetch(url));
|
||||||
|
@ -642,7 +642,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box WaitSendTestImage{wait_port: wait_port});
|
let mock_resource_task = mock_resource_task(box WaitSendTestImage{wait_port: wait_port});
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
image_cache_task.send(Prefetch(url.clone()));
|
image_cache_task.send(Prefetch(url.clone()));
|
||||||
image_cache_task.send(Decode(url.clone()));
|
image_cache_task.send(Decode(url.clone()));
|
||||||
|
@ -659,7 +659,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box SendTestImage);
|
let mock_resource_task = mock_resource_task(box SendTestImage);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
let join_port = image_cache_task.wait_for_store();
|
let join_port = image_cache_task.wait_for_store();
|
||||||
|
|
||||||
|
@ -685,7 +685,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box SendTestImage);
|
let mock_resource_task = mock_resource_task(box SendTestImage);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
let join_port = image_cache_task.wait_for_store();
|
let join_port = image_cache_task.wait_for_store();
|
||||||
|
|
||||||
|
@ -718,7 +718,8 @@ mod tests {
|
||||||
loop {
|
loop {
|
||||||
match port.recv() {
|
match port.recv() {
|
||||||
resource_task::Load(_, response) => {
|
resource_task::Load(_, response) => {
|
||||||
let chan = start_sending(response, Metadata::default(parse_url("file:///fake", None)));
|
let chan = start_sending(response, Metadata::default(
|
||||||
|
Url::parse("file:///fake").unwrap()));
|
||||||
chan.send(resource_task::Payload(test_image_bin()));
|
chan.send(resource_task::Payload(test_image_bin()));
|
||||||
chan.send(resource_task::Done(Ok(())));
|
chan.send(resource_task::Done(Ok(())));
|
||||||
image_bin_sent_chan.send(());
|
image_bin_sent_chan.send(());
|
||||||
|
@ -732,7 +733,7 @@ mod tests {
|
||||||
});
|
});
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
image_cache_task.send(Prefetch(url.clone()));
|
image_cache_task.send(Prefetch(url.clone()));
|
||||||
|
|
||||||
|
@ -764,7 +765,8 @@ mod tests {
|
||||||
loop {
|
loop {
|
||||||
match port.recv() {
|
match port.recv() {
|
||||||
resource_task::Load(_, response) => {
|
resource_task::Load(_, response) => {
|
||||||
let chan = start_sending(response, Metadata::default(parse_url("file:///fake", None)));
|
let chan = start_sending(response, Metadata::default(
|
||||||
|
Url::parse("file:///fake").unwrap()));
|
||||||
chan.send(resource_task::Payload(test_image_bin()));
|
chan.send(resource_task::Payload(test_image_bin()));
|
||||||
chan.send(resource_task::Done(Err("".to_string())));
|
chan.send(resource_task::Done(Err("".to_string())));
|
||||||
image_bin_sent_chan.send(());
|
image_bin_sent_chan.send(());
|
||||||
|
@ -778,7 +780,7 @@ mod tests {
|
||||||
});
|
});
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
image_cache_task.send(Prefetch(url.clone()));
|
image_cache_task.send(Prefetch(url.clone()));
|
||||||
image_cache_task.send(Decode(url.clone()));
|
image_cache_task.send(Decode(url.clone()));
|
||||||
|
@ -807,7 +809,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box SendTestImageErr);
|
let mock_resource_task = mock_resource_task(box SendTestImageErr);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
let join_port = image_cache_task.wait_for_store_prefetched();
|
let join_port = image_cache_task.wait_for_store_prefetched();
|
||||||
|
|
||||||
|
@ -833,7 +835,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box SendTestImageErr);
|
let mock_resource_task = mock_resource_task(box SendTestImageErr);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
let join_port = image_cache_task.wait_for_store_prefetched();
|
let join_port = image_cache_task.wait_for_store_prefetched();
|
||||||
|
|
||||||
|
@ -867,7 +869,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box SendBogusImage);
|
let mock_resource_task = mock_resource_task(box SendBogusImage);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
let join_port = image_cache_task.wait_for_store();
|
let join_port = image_cache_task.wait_for_store();
|
||||||
|
|
||||||
|
@ -895,7 +897,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box SendTestImage);
|
let mock_resource_task = mock_resource_task(box SendTestImage);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
let join_port = image_cache_task.wait_for_store();
|
let join_port = image_cache_task.wait_for_store();
|
||||||
|
|
||||||
|
@ -923,7 +925,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box WaitSendTestImage {wait_port: wait_port});
|
let mock_resource_task = mock_resource_task(box WaitSendTestImage {wait_port: wait_port});
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
image_cache_task.send(Prefetch(url.clone()));
|
image_cache_task.send(Prefetch(url.clone()));
|
||||||
image_cache_task.send(Decode(url.clone()));
|
image_cache_task.send(Decode(url.clone()));
|
||||||
|
@ -949,7 +951,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box WaitSendTestImageErr{wait_port: wait_port});
|
let mock_resource_task = mock_resource_task(box WaitSendTestImageErr{wait_port: wait_port});
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
image_cache_task.send(Prefetch(url.clone()));
|
image_cache_task.send(Prefetch(url.clone()));
|
||||||
image_cache_task.send(Decode(url.clone()));
|
image_cache_task.send(Decode(url.clone()));
|
||||||
|
@ -973,7 +975,7 @@ mod tests {
|
||||||
let mock_resource_task = mock_resource_task(box SendTestImage);
|
let mock_resource_task = mock_resource_task(box SendTestImage);
|
||||||
|
|
||||||
let image_cache_task = ImageCacheTask::new_sync(mock_resource_task.clone());
|
let image_cache_task = ImageCacheTask::new_sync(mock_resource_task.clone());
|
||||||
let url = parse_url("file", None);
|
let url = Url::parse("file:///").unwrap();
|
||||||
|
|
||||||
image_cache_task.send(Prefetch(url.clone()));
|
image_cache_task.send(Prefetch(url.clone()));
|
||||||
image_cache_task.send(Decode(url.clone()));
|
image_cache_task.send(Decode(url.clone()));
|
||||||
|
|
|
@ -21,11 +21,10 @@ use servo_msg::constellation_msg::{IFrameSandboxed, IFrameUnsandboxed};
|
||||||
use servo_msg::constellation_msg::{ConstellationChan, LoadIframeUrlMsg};
|
use servo_msg::constellation_msg::{ConstellationChan, LoadIframeUrlMsg};
|
||||||
use servo_util::namespace::Null;
|
use servo_util::namespace::Null;
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
use servo_util::url::try_parse_url;
|
|
||||||
|
|
||||||
use std::ascii::StrAsciiExt;
|
use std::ascii::StrAsciiExt;
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use url::Url;
|
use url::{Url, UrlParser};
|
||||||
|
|
||||||
enum SandboxAllowance {
|
enum SandboxAllowance {
|
||||||
AllowNothing = 0x00,
|
AllowNothing = 0x00,
|
||||||
|
@ -70,8 +69,8 @@ impl<'a> HTMLIFrameElementHelpers for JSRef<'a, HTMLIFrameElement> {
|
||||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||||
element.get_attribute(Null, "src").root().and_then(|src| {
|
element.get_attribute(Null, "src").root().and_then(|src| {
|
||||||
let window = window_from_node(self).root();
|
let window = window_from_node(self).root();
|
||||||
try_parse_url(src.deref().value().as_slice(),
|
UrlParser::new().base_url(&window.deref().page().get_url())
|
||||||
Some(window.deref().page().get_url())).ok()
|
.parse(src.deref().value().as_slice()).ok()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,9 @@ use dom::node::{Node, ElementNodeTypeId, NodeHelpers, window_from_node};
|
||||||
use dom::virtualmethods::VirtualMethods;
|
use dom::virtualmethods::VirtualMethods;
|
||||||
use servo_util::geometry::to_px;
|
use servo_util::geometry::to_px;
|
||||||
use servo_net::image_cache_task;
|
use servo_net::image_cache_task;
|
||||||
use servo_util::url::parse_url;
|
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use url::Url;
|
use url::{Url, UrlParser};
|
||||||
|
|
||||||
#[deriving(Encodable)]
|
#[deriving(Encodable)]
|
||||||
pub struct HTMLImageElement {
|
pub struct HTMLImageElement {
|
||||||
|
@ -35,13 +34,13 @@ impl HTMLImageElementDerived for EventTarget {
|
||||||
}
|
}
|
||||||
|
|
||||||
trait PrivateHTMLImageElementHelpers {
|
trait PrivateHTMLImageElementHelpers {
|
||||||
fn update_image(&self, value: Option<DOMString>, url: Option<Url>);
|
fn update_image(&self, value: Option<(DOMString, &Url)>);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> PrivateHTMLImageElementHelpers for JSRef<'a, HTMLImageElement> {
|
impl<'a> PrivateHTMLImageElementHelpers for JSRef<'a, HTMLImageElement> {
|
||||||
/// Makes the local `image` member match the status of the `src` attribute and starts
|
/// Makes the local `image` member match the status of the `src` attribute and starts
|
||||||
/// prefetching the image. This method must be called after `src` is changed.
|
/// prefetching the image. This method must be called after `src` is changed.
|
||||||
fn update_image(&self, value: Option<DOMString>, url: Option<Url>) {
|
fn update_image(&self, value: Option<(DOMString, &Url)>) {
|
||||||
let node: &JSRef<Node> = NodeCast::from_ref(self);
|
let node: &JSRef<Node> = NodeCast::from_ref(self);
|
||||||
let document = node.owner_doc().root();
|
let document = node.owner_doc().root();
|
||||||
let window = document.deref().window.root();
|
let window = document.deref().window.root();
|
||||||
|
@ -50,8 +49,10 @@ impl<'a> PrivateHTMLImageElementHelpers for JSRef<'a, HTMLImageElement> {
|
||||||
None => {
|
None => {
|
||||||
*self.image.deref().borrow_mut() = None;
|
*self.image.deref().borrow_mut() = None;
|
||||||
}
|
}
|
||||||
Some(src) => {
|
Some((src, base_url)) => {
|
||||||
let img_url = parse_url(src.as_slice(), url);
|
let img_url = UrlParser::new().base_url(base_url).parse(src.as_slice());
|
||||||
|
// FIXME: handle URL parse errors more gracefully.
|
||||||
|
let img_url = img_url.unwrap();
|
||||||
*self.image.deref().borrow_mut() = Some(img_url.clone());
|
*self.image.deref().borrow_mut() = Some(img_url.clone());
|
||||||
|
|
||||||
// inform the image cache to load this, but don't store a
|
// inform the image cache to load this, but don't store a
|
||||||
|
@ -254,8 +255,8 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLImageElement> {
|
||||||
|
|
||||||
if "src" == name.as_slice() {
|
if "src" == name.as_slice() {
|
||||||
let window = window_from_node(self).root();
|
let window = window_from_node(self).root();
|
||||||
let url = Some(window.deref().get_url());
|
let url = window.deref().get_url();
|
||||||
self.update_image(Some(value), url);
|
self.update_image(Some((value, &url)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,7 +267,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLImageElement> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if "src" == name.as_slice() {
|
if "src" == name.as_slice() {
|
||||||
self.update_image(None, None);
|
self.update_image(None);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ use servo_util::str::DOMString;
|
||||||
|
|
||||||
use servo_net::image_cache_task;
|
use servo_net::image_cache_task;
|
||||||
use servo_net::image_cache_task::ImageCacheTask;
|
use servo_net::image_cache_task::ImageCacheTask;
|
||||||
use servo_util::url::parse_url;
|
|
||||||
use servo_util::namespace::Null;
|
use servo_util::namespace::Null;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
|
@ -49,13 +48,13 @@ impl HTMLObjectElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
trait ProcessDataURL {
|
trait ProcessDataURL {
|
||||||
fn process_data_url(&self, image_cache: ImageCacheTask, url: Option<Url>);
|
fn process_data_url(&self, image_cache: ImageCacheTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> ProcessDataURL for JSRef<'a, HTMLObjectElement> {
|
impl<'a> ProcessDataURL for JSRef<'a, HTMLObjectElement> {
|
||||||
// Makes the local `data` member match the status of the `data` attribute and starts
|
// Makes the local `data` member match the status of the `data` attribute and starts
|
||||||
/// prefetching the image. This method must be called after `data` is changed.
|
/// prefetching the image. This method must be called after `data` is changed.
|
||||||
fn process_data_url(&self, image_cache: ImageCacheTask, url: Option<Url>) {
|
fn process_data_url(&self, image_cache: ImageCacheTask) {
|
||||||
let elem: &JSRef<Element> = ElementCast::from_ref(self);
|
let elem: &JSRef<Element> = ElementCast::from_ref(self);
|
||||||
|
|
||||||
// TODO: support other values
|
// TODO: support other values
|
||||||
|
@ -63,7 +62,7 @@ impl<'a> ProcessDataURL for JSRef<'a, HTMLObjectElement> {
|
||||||
elem.get_attribute(Null, "data").map(|x| x.root().Value())) {
|
elem.get_attribute(Null, "data").map(|x| x.root().Value())) {
|
||||||
(None, Some(uri)) => {
|
(None, Some(uri)) => {
|
||||||
if is_image_data(uri.as_slice()) {
|
if is_image_data(uri.as_slice()) {
|
||||||
let data_url = parse_url(uri.as_slice(), url);
|
let data_url = Url::parse(uri.as_slice()).unwrap();
|
||||||
// Issue #84
|
// Issue #84
|
||||||
image_cache.send(image_cache_task::Prefetch(data_url));
|
image_cache.send(image_cache_task::Prefetch(data_url));
|
||||||
}
|
}
|
||||||
|
@ -103,8 +102,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLObjectElement> {
|
||||||
|
|
||||||
if "data" == name.as_slice() {
|
if "data" == name.as_slice() {
|
||||||
let window = window_from_node(self).root();
|
let window = window_from_node(self).root();
|
||||||
let url = Some(window.deref().get_url());
|
self.process_data_url(window.deref().image_cache_task.clone());
|
||||||
self.process_data_url(window.deref().image_cache_task.clone(), url);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,6 @@ use servo_msg::compositor_msg::ScriptListener;
|
||||||
use servo_net::image_cache_task::ImageCacheTask;
|
use servo_net::image_cache_task::ImageCacheTask;
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
use servo_util::task::{spawn_named};
|
use servo_util::task::{spawn_named};
|
||||||
use servo_util::url::parse_url;
|
|
||||||
|
|
||||||
use js::jsapi::JS_CallFunctionValue;
|
use js::jsapi::JS_CallFunctionValue;
|
||||||
use js::jsapi::JSContext;
|
use js::jsapi::JSContext;
|
||||||
|
@ -46,7 +45,7 @@ use std::rc::Rc;
|
||||||
use time;
|
use time;
|
||||||
|
|
||||||
use serialize::{Encoder, Encodable};
|
use serialize::{Encoder, Encodable};
|
||||||
use url::Url;
|
use url::{Url, UrlParser};
|
||||||
|
|
||||||
#[deriving(PartialEq, Encodable, Eq)]
|
#[deriving(PartialEq, Encodable, Eq)]
|
||||||
pub struct TimerId(i32);
|
pub struct TimerId(i32);
|
||||||
|
@ -316,9 +315,11 @@ impl<'a> WindowHelpers for JSRef<'a, Window> {
|
||||||
|
|
||||||
/// Commence a new URL load which will either replace this window or scroll to a fragment.
|
/// Commence a new URL load which will either replace this window or scroll to a fragment.
|
||||||
fn load_url(&self, href: DOMString) {
|
fn load_url(&self, href: DOMString) {
|
||||||
let base_url = Some(self.page().get_url());
|
let base_url = self.page().get_url();
|
||||||
debug!("current page url is {:?}", base_url);
|
debug!("current page url is {:?}", base_url);
|
||||||
let url = parse_url(href.as_slice(), base_url);
|
let url = UrlParser::new().base_url(&base_url).parse(href.as_slice());
|
||||||
|
// FIXME: handle URL parse errors more gracefully.
|
||||||
|
let url = url.unwrap();
|
||||||
let ScriptChan(ref script_chan) = self.script_chan;
|
let ScriptChan(ref script_chan) = self.script_chan;
|
||||||
if href.as_slice().starts_with("#") {
|
if href.as_slice().starts_with("#") {
|
||||||
script_chan.send(TriggerFragmentMsg(self.page.id, url));
|
script_chan.send(TriggerFragmentMsg(self.page.id, url));
|
||||||
|
|
|
@ -12,7 +12,7 @@ use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope;
|
||||||
use dom::eventtarget::{EventTarget, WorkerTypeId};
|
use dom::eventtarget::{EventTarget, WorkerTypeId};
|
||||||
|
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
use servo_util::url::try_parse_url;
|
use url::UrlParser;
|
||||||
|
|
||||||
#[deriving(Encodable)]
|
#[deriving(Encodable)]
|
||||||
pub struct Worker {
|
pub struct Worker {
|
||||||
|
@ -37,7 +37,8 @@ impl Worker {
|
||||||
// http://www.whatwg.org/html/#dom-worker
|
// http://www.whatwg.org/html/#dom-worker
|
||||||
pub fn Constructor(global: &GlobalRef, scriptURL: DOMString) -> Fallible<Temporary<Worker>> {
|
pub fn Constructor(global: &GlobalRef, scriptURL: DOMString) -> Fallible<Temporary<Worker>> {
|
||||||
// Step 2-4.
|
// Step 2-4.
|
||||||
let worker_url = match try_parse_url(scriptURL.as_slice(), Some(global.get_url())) {
|
let worker_url = match UrlParser::new().base_url(&global.get_url())
|
||||||
|
.parse(scriptURL.as_slice()) {
|
||||||
Ok(url) => url,
|
Ok(url) => url,
|
||||||
Err(_) => return Err(Syntax),
|
Err(_) => return Err(Syntax),
|
||||||
};
|
};
|
||||||
|
|
|
@ -46,7 +46,6 @@ use net::resource_task::{ResourceTask, Load, LoadData, Payload, Done};
|
||||||
use script_task::{ScriptChan, XHRProgressMsg};
|
use script_task::{ScriptChan, XHRProgressMsg};
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
use servo_util::task::spawn_named;
|
use servo_util::task::spawn_named;
|
||||||
use servo_util::url::{parse_url, try_parse_url};
|
|
||||||
|
|
||||||
use std::ascii::StrAsciiExt;
|
use std::ascii::StrAsciiExt;
|
||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
@ -56,7 +55,7 @@ use std::from_str::FromStr;
|
||||||
use std::path::BytesContainer;
|
use std::path::BytesContainer;
|
||||||
use std::task::TaskBuilder;
|
use std::task::TaskBuilder;
|
||||||
use time;
|
use time;
|
||||||
use url::Url;
|
use url::{Url, UrlParser};
|
||||||
|
|
||||||
use dom::bindings::codegen::UnionTypes::StringOrURLSearchParams::{eString, eURLSearchParams, StringOrURLSearchParams};
|
use dom::bindings::codegen::UnionTypes::StringOrURLSearchParams::{eString, eURLSearchParams, StringOrURLSearchParams};
|
||||||
pub type SendParam = StringOrURLSearchParams;
|
pub type SendParam = StringOrURLSearchParams;
|
||||||
|
@ -113,7 +112,7 @@ pub struct XMLHttpRequest {
|
||||||
|
|
||||||
// Associated concepts
|
// Associated concepts
|
||||||
request_method: Untraceable<RefCell<Method>>,
|
request_method: Untraceable<RefCell<Method>>,
|
||||||
request_url: Untraceable<RefCell<Url>>,
|
request_url: Untraceable<RefCell<Option<Url>>>,
|
||||||
request_headers: Untraceable<RefCell<RequestHeaderCollection>>,
|
request_headers: Untraceable<RefCell<RequestHeaderCollection>>,
|
||||||
request_body_len: Traceable<Cell<uint>>,
|
request_body_len: Traceable<Cell<uint>>,
|
||||||
sync: Traceable<Cell<bool>>,
|
sync: Traceable<Cell<bool>>,
|
||||||
|
@ -146,7 +145,7 @@ impl XMLHttpRequest {
|
||||||
response_headers: Untraceable::new(RefCell::new(ResponseHeaderCollection::new())),
|
response_headers: Untraceable::new(RefCell::new(ResponseHeaderCollection::new())),
|
||||||
|
|
||||||
request_method: Untraceable::new(RefCell::new(Get)),
|
request_method: Untraceable::new(RefCell::new(Get)),
|
||||||
request_url: Untraceable::new(RefCell::new(parse_url("", None))),
|
request_url: Untraceable::new(RefCell::new(None)),
|
||||||
request_headers: Untraceable::new(RefCell::new(RequestHeaderCollection::new())),
|
request_headers: Untraceable::new(RefCell::new(RequestHeaderCollection::new())),
|
||||||
request_body_len: Traceable::new(Cell::new(0)),
|
request_body_len: Traceable::new(Cell::new(0)),
|
||||||
sync: Traceable::new(Cell::new(false)),
|
sync: Traceable::new(Cell::new(false)),
|
||||||
|
@ -293,7 +292,6 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
|
||||||
Method::from_str_or_new(s.as_slice())
|
Method::from_str_or_new(s.as_slice())
|
||||||
});
|
});
|
||||||
// Step 2
|
// Step 2
|
||||||
let base: Option<Url> = Some(self.global.root().root_ref().get_url());
|
|
||||||
match maybe_method {
|
match maybe_method {
|
||||||
// Step 4
|
// Step 4
|
||||||
Some(Connect) | Some(Trace) => Err(Security),
|
Some(Connect) | Some(Trace) => Err(Security),
|
||||||
|
@ -303,7 +301,8 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
|
||||||
*self.request_method.deref().borrow_mut() = maybe_method.unwrap();
|
*self.request_method.deref().borrow_mut() = maybe_method.unwrap();
|
||||||
|
|
||||||
// Step 6
|
// Step 6
|
||||||
let parsed_url = match try_parse_url(url.as_slice(), base) {
|
let base = self.global.root().root_ref().get_url();
|
||||||
|
let parsed_url = match UrlParser::new().base_url(&base).parse(url.as_slice()) {
|
||||||
Ok(parsed) => parsed,
|
Ok(parsed) => parsed,
|
||||||
Err(_) => return Err(Syntax) // Step 7
|
Err(_) => return Err(Syntax) // Step 7
|
||||||
};
|
};
|
||||||
|
@ -316,7 +315,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
|
||||||
}
|
}
|
||||||
// XXXManishearth abort existing requests
|
// XXXManishearth abort existing requests
|
||||||
// Step 12
|
// Step 12
|
||||||
*self.request_url.deref().borrow_mut() = parsed_url;
|
*self.request_url.deref().borrow_mut() = Some(parsed_url);
|
||||||
*self.request_headers.deref().borrow_mut() = RequestHeaderCollection::new();
|
*self.request_headers.deref().borrow_mut() = RequestHeaderCollection::new();
|
||||||
self.send_flag.deref().set(false);
|
self.send_flag.deref().set(false);
|
||||||
*self.status_text.deref().borrow_mut() = ByteString::new(vec!());
|
*self.status_text.deref().borrow_mut() = ByteString::new(vec!());
|
||||||
|
@ -487,7 +486,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
|
||||||
|
|
||||||
let global = self.global.root();
|
let global = self.global.root();
|
||||||
let resource_task = global.root_ref().resource_task();
|
let resource_task = global.root_ref().resource_task();
|
||||||
let mut load_data = LoadData::new(self.request_url.deref().borrow().clone());
|
let mut load_data = LoadData::new(self.request_url.deref().borrow().clone().unwrap());
|
||||||
load_data.data = extracted;
|
load_data.data = extracted;
|
||||||
|
|
||||||
// Default headers
|
// Default headers
|
||||||
|
|
|
@ -23,13 +23,12 @@ use servo_util::namespace;
|
||||||
use servo_util::namespace::{Namespace, Null};
|
use servo_util::namespace::{Namespace, Null};
|
||||||
use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS};
|
use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS};
|
||||||
use servo_util::task::spawn_named;
|
use servo_util::task::spawn_named;
|
||||||
use servo_util::url::try_parse_url;
|
|
||||||
use std::ascii::StrAsciiExt;
|
use std::ascii::StrAsciiExt;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::comm::{channel, Sender, Receiver};
|
use std::comm::{channel, Sender, Receiver};
|
||||||
use style::Stylesheet;
|
use style::Stylesheet;
|
||||||
use url::Url;
|
use url::{Url, UrlParser};
|
||||||
|
|
||||||
macro_rules! handle_element(
|
macro_rules! handle_element(
|
||||||
($document: expr,
|
($document: expr,
|
||||||
|
@ -421,8 +420,9 @@ pub fn parse_html(page: &Page,
|
||||||
s.as_slice().eq_ignore_ascii_case("stylesheet")
|
s.as_slice().eq_ignore_ascii_case("stylesheet")
|
||||||
}) => {
|
}) => {
|
||||||
debug!("found CSS stylesheet: {:s}", *href);
|
debug!("found CSS stylesheet: {:s}", *href);
|
||||||
match try_parse_url(href.as_slice(), Some(url2.clone())) {
|
match UrlParser::new().base_url(&url2).parse(href.as_slice()) {
|
||||||
Ok(url) => css_chan2.send(CSSTaskNewFile(UrlProvenance(url, resource_task.clone()))),
|
Ok(url) => css_chan2.send(CSSTaskNewFile(
|
||||||
|
UrlProvenance(url, resource_task.clone()))),
|
||||||
Err(e) => debug!("Parsing url {:s} failed: {:s}", *href, e)
|
Err(e) => debug!("Parsing url {:s} failed: {:s}", *href, e)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -504,7 +504,8 @@ pub fn parse_html(page: &Page,
|
||||||
match script.get_attribute(Null, "src").root() {
|
match script.get_attribute(Null, "src").root() {
|
||||||
Some(src) => {
|
Some(src) => {
|
||||||
debug!("found script: {:s}", src.deref().Value());
|
debug!("found script: {:s}", src.deref().Value());
|
||||||
match try_parse_url(src.deref().value().as_slice(), Some(url3.clone())) {
|
match UrlParser::new().base_url(&url3)
|
||||||
|
.parse(src.deref().value().as_slice()) {
|
||||||
Ok(new_url) => js_chan2.send(JSTaskNewFile(new_url)),
|
Ok(new_url) => js_chan2.send(JSTaskNewFile(new_url)),
|
||||||
Err(e) => debug!("Parsing url {:s} failed: {:s}", src.deref().Value(), e)
|
Err(e) => debug!("Parsing url {:s} failed: {:s}", src.deref().Value(), e)
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#![allow(non_camel_case_types)]
|
#![allow(non_camel_case_types)]
|
||||||
|
|
||||||
|
use url::{Url, UrlParser};
|
||||||
|
|
||||||
pub use servo_util::geometry::Au;
|
pub use servo_util::geometry::Au;
|
||||||
|
|
||||||
pub type CSSFloat = f64;
|
pub type CSSFloat = f64;
|
||||||
|
@ -253,3 +255,8 @@ pub mod computed {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn parse_url(input: &str, base_url: &Url) -> Url {
|
||||||
|
UrlParser::new().base_url(base_url).parse(input)
|
||||||
|
.unwrap_or_else(|_| Url::parse("about:invalid").unwrap())
|
||||||
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
pub use std::ascii::StrAsciiExt;
|
pub use std::ascii::StrAsciiExt;
|
||||||
use serialize::{Encodable, Encoder};
|
use serialize::{Encodable, Encoder};
|
||||||
|
|
||||||
pub use servo_util::url::parse_url;
|
|
||||||
use servo_util::logical_geometry::{WritingMode, LogicalMargin};
|
use servo_util::logical_geometry::{WritingMode, LogicalMargin};
|
||||||
use sync::Arc;
|
use sync::Arc;
|
||||||
pub use url::Url;
|
pub use url::Url;
|
||||||
|
@ -597,7 +596,7 @@ pub mod longhands {
|
||||||
pub fn from_component_value(component_value: &ComponentValue, base_url: &Url) -> Option<SpecifiedValue> {
|
pub fn from_component_value(component_value: &ComponentValue, base_url: &Url) -> Option<SpecifiedValue> {
|
||||||
match component_value {
|
match component_value {
|
||||||
&ast::URL(ref url) => {
|
&ast::URL(ref url) => {
|
||||||
let image_url = parse_url(url.as_slice(), Some(base_url.clone()));
|
let image_url = parse_url(url.as_slice(), base_url);
|
||||||
Some(Some(image_url))
|
Some(Some(image_url))
|
||||||
},
|
},
|
||||||
&ast::Ident(ref value) if value.as_slice().eq_ignore_ascii_case("none") => Some(None),
|
&ast::Ident(ref value) if value.as_slice().eq_ignore_ascii_case("none") => Some(None),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue