mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Push the url parsing out of Window::load_url.
This will allow the two callers to decide on the base url independently.
This commit is contained in:
parent
ec9f79067d
commit
40b5c4586e
3 changed files with 18 additions and 12 deletions
|
@ -86,7 +86,7 @@ use html5ever::tree_builder::{QuirksMode, NoQuirks, LimitedQuirks, Quirks};
|
|||
use ipc_channel::ipc;
|
||||
use layout_interface::{LayoutChan, Msg};
|
||||
use string_cache::{Atom, QualName};
|
||||
use url::Url;
|
||||
use url::{Url, UrlParser};
|
||||
use js::jsapi::{JSContext, JSObject, JSRuntime};
|
||||
|
||||
use num::ToPrimitive;
|
||||
|
@ -466,7 +466,11 @@ impl<'a> DocumentHelpers<'a> for &'a Document {
|
|||
|
||||
fn load_anchor_href(self, href: DOMString) {
|
||||
let window = self.window.root();
|
||||
window.r().load_url(href);
|
||||
let base_url = window.get_url();
|
||||
let url = UrlParser::new().base_url(&base_url).parse(&href);
|
||||
// FIXME: handle URL parse errors more gracefully.
|
||||
let url = url.unwrap();
|
||||
window.load_url(url);
|
||||
}
|
||||
|
||||
/// Attempt to find a named element in this page's document.
|
||||
|
|
|
@ -13,7 +13,7 @@ use dom::window::Window;
|
|||
use dom::window::WindowHelpers;
|
||||
|
||||
use util::str::DOMString;
|
||||
use url::Url;
|
||||
use url::{Url, UrlParser};
|
||||
|
||||
#[dom_struct]
|
||||
pub struct Location {
|
||||
|
@ -39,7 +39,14 @@ impl Location {
|
|||
impl<'a> LocationMethods for &'a Location {
|
||||
// https://html.spec.whatwg.org/multipage/#dom-location-assign
|
||||
fn Assign(self, url: DOMString) {
|
||||
self.window.root().r().load_url(url);
|
||||
let window = self.window.root();
|
||||
// TODO: per spec, we should use the _API base URL_ specified by the
|
||||
// _entry settings object_.
|
||||
let base_url = window.get_url();
|
||||
let url = UrlParser::new().base_url(&base_url).parse(&url);
|
||||
// FIXME: handle URL parse errors more gracefully.
|
||||
let url = url.unwrap();
|
||||
window.load_url(url);
|
||||
}
|
||||
|
||||
// https://url.spec.whatwg.org/#dom-urlutils-hash
|
||||
|
|
|
@ -62,7 +62,7 @@ use js::jsapi::{JS_GC, JS_GetRuntime, JSAutoCompartment, JSAutoRequest};
|
|||
use js::rust::Runtime;
|
||||
use js::rust::CompileOptionsWrapper;
|
||||
use selectors::parser::PseudoElement;
|
||||
use url::{Url, UrlParser};
|
||||
use url::Url;
|
||||
|
||||
use libc;
|
||||
use rustc_serialize::base64::{FromBase64, ToBase64, STANDARD};
|
||||
|
@ -594,7 +594,7 @@ impl<'a> WindowMethods for &'a Window {
|
|||
pub trait WindowHelpers {
|
||||
fn clear_js_runtime(self);
|
||||
fn init_browsing_context(self, doc: &Document, frame_element: Option<&Element>);
|
||||
fn load_url(self, href: DOMString);
|
||||
fn load_url(self, url: Url);
|
||||
fn handle_fire_timer(self, timer_id: TimerId);
|
||||
fn force_reflow(self, goal: ReflowGoal, query_type: ReflowQueryType, reason: ReflowReason);
|
||||
fn reflow(self, goal: ReflowGoal, query_type: ReflowQueryType, reason: ReflowReason);
|
||||
|
@ -890,12 +890,7 @@ impl<'a> WindowHelpers for &'a Window {
|
|||
}
|
||||
|
||||
/// Commence a new URL load which will either replace this window or scroll to a fragment.
|
||||
fn load_url(self, href: DOMString) {
|
||||
let base_url = self.get_url();
|
||||
debug!("current page url is {}", base_url);
|
||||
let url = UrlParser::new().base_url(&base_url).parse(&href);
|
||||
// FIXME: handle URL parse errors more gracefully.
|
||||
let url = url.unwrap();
|
||||
fn load_url(self, url: Url) {
|
||||
match url.fragment {
|
||||
Some(fragment) => {
|
||||
self.script_chan.send(ScriptMsg::TriggerFragment(self.id, fragment)).unwrap();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue