Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
History: update document URL on pushState/replaceState
  • Loading branch information
talklittle committed Apr 19, 2018
1 parent 3695fc4 commit 68c4791
Show file tree
Hide file tree
Showing 11 changed files with 39 additions and 76 deletions.
44 changes: 39 additions & 5 deletions components/script/dom/history.rs
Expand Up @@ -25,6 +25,7 @@ use net_traits::{CoreResourceMsg, IpcSend};
use profile_traits::ipc;
use profile_traits::ipc::channel;
use script_traits::ScriptMsg;
use servo_url::ServoUrl;
use std::cell::Cell;

enum PushOrReplace {
Expand Down Expand Up @@ -108,7 +109,7 @@ impl History {
cx: *mut JSContext,
data: HandleValue,
_title: DOMString,
_url: Option<USVString>,
url: Option<USVString>,
push_or_replace: PushOrReplace) -> ErrorResult {
// Step 1
let document = self.window.Document();
Expand All @@ -126,8 +127,41 @@ impl History {
// Step 5
let serialized_data = StructuredCloneData::write(cx, data)?.move_to_arraybuffer();

// TODO: Steps 6-7 Url Handling
// https://github.com/servo/servo/issues/19157
let new_url: ServoUrl = match url {
// Step 6
Some(urlstring) => {
let document_url = document.url();

// Step 6.1
let new_url = match ServoUrl::parse_with_base(Some(&document_url), &urlstring.0) {
// Step 6.3
Ok(parsed_url) => parsed_url,
// Step 6.2
Err(_) => return Err(Error::Security),
};

// Step 6.4
if new_url.scheme() != document_url.scheme() ||
new_url.host() != document_url.host() ||
new_url.port() != document_url.port() ||
new_url.username() != document_url.username() ||
new_url.password() != document_url.password()
{
return Err(Error::Security);
}

// Step 6.5
if new_url.origin() != document_url.origin() {
return Err(Error::Security);
}

new_url
},
// Step 7
None => {
document.url()
}
};

// Step 8
let state_id = match push_or_replace {
Expand Down Expand Up @@ -162,8 +196,8 @@ impl History {
// TODO: Step 9 Update current entry to represent a GET request
// https://github.com/servo/servo/issues/19156

// TODO: Step 10 Set document's URL to new URL
// https://github.com/servo/servo/issues/19157
// Step 10
document.set_url(new_url);

// Step 11
let global_scope = self.window.upcast::<GlobalScope>();
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

@@ -1,8 +1,5 @@
[location_hash.html]
type: testharness
[location hash]
expected: FAIL

[Setting location.hash on srcdoc iframe]
expected: FAIL

This file was deleted.

This file was deleted.

0 comments on commit 68c4791

Please sign in to comment.