Implement setter for document.domain

This commit is contained in:
Alan Jeffrey 2017-02-10 17:24:44 -06:00
parent 1f61a549a3
commit 5348b63e38
68 changed files with 217 additions and 736 deletions

View file

@ -600,6 +600,8 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
None => self.root_frame_id, None => self.root_frame_id,
}; };
debug!("Creating new pipeline {} in top-level frame {}.", pipeline_id, top_level_frame_id);
let (event_loop, host) = match sandbox { let (event_loop, host) = match sandbox {
IFrameSandboxState::IFrameSandboxed => (None, None), IFrameSandboxState::IFrameSandboxed => (None, None),
IFrameSandboxState::IFrameUnsandboxed => match reg_host(&load_data.url) { IFrameSandboxState::IFrameUnsandboxed => match reg_host(&load_data.url) {
@ -673,6 +675,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
}; };
if let Some(host) = host { if let Some(host) = host {
debug!("Adding new host entry {} for top-level frame {}.", host, top_level_frame_id);
self.event_loops.entry(top_level_frame_id) self.event_loops.entry(top_level_frame_id)
.or_insert_with(HashMap::new) .or_insert_with(HashMap::new)
.insert(host, Rc::downgrade(&pipeline.event_loop)); .insert(host, Rc::downgrade(&pipeline.event_loop));

View file

@ -146,11 +146,10 @@ pub fn is_reg_domain(domain: &str) -> bool {
/// Returns None if the URL has no host name. /// Returns None if the URL has no host name.
/// Returns the registered suffix for the host name if it is a domain. /// Returns the registered suffix for the host name if it is a domain.
/// Leaves the host name alone if it is an IP address. /// Leaves the host name alone if it is an IP address.
pub fn reg_host<'a>(url: &'a ServoUrl) -> Option<Host> { pub fn reg_host(url: &ServoUrl) -> Option<Host> {
match url.origin() { match url.origin() {
ImmutableOrigin::Tuple(_, Host::Domain(domain), _) => Some(Host::Domain(String::from(reg_suffix(&*domain)))), ImmutableOrigin::Tuple(_, Host::Domain(domain), _) => Some(Host::Domain(String::from(reg_suffix(&*domain)))),
ImmutableOrigin::Tuple(_, Host::Ipv4(address), _) => Some(Host::Ipv4(address)), ImmutableOrigin::Tuple(_, ip, _) => Some(ip),
ImmutableOrigin::Tuple(_, Host::Ipv6(address), _) => Some(Host::Ipv6(address)),
ImmutableOrigin::Opaque(_) => None, ImmutableOrigin::Opaque(_) => None,
} }
} }

View file

@ -103,6 +103,7 @@ use msg::constellation_msg::{FrameId, Key, KeyModifiers, KeyState};
use net_traits::{FetchResponseMsg, IpcSend, ReferrerPolicy}; use net_traits::{FetchResponseMsg, IpcSend, ReferrerPolicy};
use net_traits::CookieSource::NonHTTP; use net_traits::CookieSource::NonHTTP;
use net_traits::CoreResourceMsg::{GetCookiesForUrl, SetCookiesForUrl}; use net_traits::CoreResourceMsg::{GetCookiesForUrl, SetCookiesForUrl};
use net_traits::pub_domains::is_pub_domain;
use net_traits::request::RequestInit; use net_traits::request::RequestInit;
use net_traits::response::HttpsState; use net_traits::response::HttpsState;
use num_traits::ToPrimitive; use num_traits::ToPrimitive;
@ -1988,6 +1989,55 @@ impl LayoutDocumentHelpers for LayoutJS<Document> {
} }
} }
// https://html.spec.whatwg.org/multipage/#is-a-registrable-domain-suffix-of-or-is-equal-to
// The spec says to return a bool, we actually return an Option<Host> containing
// the parsed host in the successful case, to avoid having to re-parse the host.
fn get_registrable_domain_suffix_of_or_is_equal_to(host_suffix_string: &str, original_host: Host) -> Option<Host> {
// Step 1
if host_suffix_string.is_empty() {
return None;
}
// Step 2-3.
let host = match Host::parse(host_suffix_string) {
Ok(host) => host,
Err(_) => return None,
};
// Step 4.
if host != original_host {
// Step 4.1
let host = match host {
Host::Domain(ref host) => host,
_ => return None,
};
let original_host = match original_host {
Host::Domain(ref original_host) => original_host,
_ => return None,
};
// Step 4.2
let (prefix, suffix) = match original_host.len().checked_sub(host.len()) {
Some(index) => original_host.split_at(index),
None => return None,
};
if !prefix.ends_with(".") {
return None;
}
if suffix != host {
return None;
}
// Step 4.3
if is_pub_domain(host) {
return None;
}
}
// Step 5
Some(host)
}
/// https://url.spec.whatwg.org/#network-scheme /// https://url.spec.whatwg.org/#network-scheme
fn url_has_network_scheme(url: &ServoUrl) -> bool { fn url_has_network_scheme(url: &ServoUrl) -> bool {
match url.scheme() { match url.scheme() {
@ -2472,7 +2522,7 @@ impl DocumentMethods for Document {
false false
} }
// https://html.spec.whatwg.org/multipage/#relaxing-the-same-origin-restriction // https://html.spec.whatwg.org/multipage/#dom-document-domain
fn Domain(&self) -> DOMString { fn Domain(&self) -> DOMString {
// Step 1. // Step 1.
if !self.has_browsing_context { if !self.has_browsing_context {
@ -2489,6 +2539,35 @@ impl DocumentMethods for Document {
} }
} }
// https://html.spec.whatwg.org/multipage/#dom-document-domain
fn SetDomain(&self, value: DOMString) -> ErrorResult {
// Step 1.
if !self.has_browsing_context {
return Err(Error::Security);
}
// TODO: Step 2. "If this Document object's active sandboxing
// flag set has its sandboxed document.domain browsing context
// flag set, then throw a "SecurityError" DOMException."
// Steps 3-4.
let effective_domain = match self.origin.effective_domain() {
Some(effective_domain) => effective_domain,
None => return Err(Error::Security),
};
// Step 5
let host = match get_registrable_domain_suffix_of_or_is_equal_to(&*value, effective_domain) {
None => return Err(Error::Security),
Some(host) => host,
};
// Step 6
self.origin.set_domain(host);
Ok(())
}
// https://html.spec.whatwg.org/multipage/#dom-document-referrer // https://html.spec.whatwg.org/multipage/#dom-document-referrer
fn Referrer(&self) -> DOMString { fn Referrer(&self) -> DOMString {
match self.referrer { match self.referrer {
@ -3396,10 +3475,10 @@ impl DocumentMethods for Document {
let entry_responsible_document = GlobalScope::entry().as_window().Document(); let entry_responsible_document = GlobalScope::entry().as_window().Document();
// This check should probably be same-origin-domain // This check is same-origin not same-origin-domain.
// https://github.com/whatwg/html/issues/2282 // https://github.com/whatwg/html/issues/2282
// https://github.com/whatwg/html/pull/2288 // https://github.com/whatwg/html/pull/2288
if !self.origin.same_origin_domain(&entry_responsible_document.origin) { if !self.origin.same_origin(&entry_responsible_document.origin) {
// Step 4. // Step 4.
return Err(Error::Security); return Err(Error::Security);
} }

View file

@ -4,7 +4,9 @@
use dom::bindings::codegen::Bindings::HistoryBinding; use dom::bindings::codegen::Bindings::HistoryBinding;
use dom::bindings::codegen::Bindings::HistoryBinding::HistoryMethods; use dom::bindings::codegen::Bindings::HistoryBinding::HistoryMethods;
use dom::bindings::codegen::Bindings::LocationBinding::LocationBinding::LocationMethods;
use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use dom::bindings::error::Fallible;
use dom::bindings::inheritance::Castable; use dom::bindings::inheritance::Castable;
use dom::bindings::js::{JS, Root}; use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::bindings::reflector::{Reflector, reflect_dom_object};
@ -58,17 +60,17 @@ impl HistoryMethods for History {
} }
// https://html.spec.whatwg.org/multipage/#dom-history-go // https://html.spec.whatwg.org/multipage/#dom-history-go
fn Go(&self, delta: i32) { fn Go(&self, delta: i32) -> Fallible<()> {
let direction = if delta > 0 { let direction = if delta > 0 {
TraversalDirection::Forward(delta as usize) TraversalDirection::Forward(delta as usize)
} else if delta < 0 { } else if delta < 0 {
TraversalDirection::Back(-delta as usize) TraversalDirection::Back(-delta as usize)
} else { } else {
self.window.Location().reload_without_origin_check(); return self.window.Location().Reload();
return;
}; };
self.traverse_history(direction); self.traverse_history(direction);
Ok(())
} }
// https://html.spec.whatwg.org/multipage/#dom-history-back // https://html.spec.whatwg.org/multipage/#dom-history-back

View file

@ -498,11 +498,7 @@ impl HTMLIFrameElementMethods for HTMLIFrameElement {
// https://html.spec.whatwg.org/multipage/#dom-iframe-contentwindow // https://html.spec.whatwg.org/multipage/#dom-iframe-contentwindow
fn GetContentWindow(&self) -> Option<Root<BrowsingContext>> { fn GetContentWindow(&self) -> Option<Root<BrowsingContext>> {
if self.pipeline_id.get().is_some() { self.pipeline_id.get().and_then(|_| ScriptThread::find_browsing_context(self.frame_id))
ScriptThread::find_browsing_context(self.frame_id)
} else {
None
}
} }
// https://html.spec.whatwg.org/multipage/#dom-iframe-contentdocument // https://html.spec.whatwg.org/multipage/#dom-iframe-contentdocument
@ -514,6 +510,8 @@ impl HTMLIFrameElementMethods for HTMLIFrameElement {
Some(pipeline_id) => pipeline_id, Some(pipeline_id) => pipeline_id,
}; };
// Step 2-3. // Step 2-3.
// Note that this lookup will fail if the document is dissimilar-origin,
// so we should return None in that case.
let document = match ScriptThread::find_document(pipeline_id) { let document = match ScriptThread::find_document(pipeline_id) {
None => return None, None => return None,
Some(document) => document, Some(document) => document,

View file

@ -65,7 +65,7 @@ impl Location {
impl LocationMethods for Location { impl LocationMethods for Location {
// https://html.spec.whatwg.org/multipage/#dom-location-assign // https://html.spec.whatwg.org/multipage/#dom-location-assign
fn Assign(&self, url: USVString) -> ErrorResult { fn Assign(&self, url: USVString) -> ErrorResult {
// Note: no call to self.check_same_origin_domain() try!(self.check_same_origin_domain());
// TODO: per spec, we should use the _API base URL_ specified by the // TODO: per spec, we should use the _API base URL_ specified by the
// _entry settings object_. // _entry settings object_.
let base_url = self.window.get_url(); let base_url = self.window.get_url();

View file

@ -81,7 +81,7 @@ partial /*sealed*/ interface Document {
// resource metadata management // resource metadata management
[/*PutForwards=href, */Unforgeable] [/*PutForwards=href, */Unforgeable]
readonly attribute Location? location; readonly attribute Location? location;
readonly attribute DOMString domain; [SetterThrows] attribute DOMString domain;
readonly attribute DOMString referrer; readonly attribute DOMString referrer;
[Throws] [Throws]
attribute DOMString cookie; attribute DOMString cookie;

View file

@ -10,7 +10,7 @@ interface History {
readonly attribute unsigned long length; readonly attribute unsigned long length;
// attribute ScrollRestoration scrollRestoration; // attribute ScrollRestoration scrollRestoration;
// readonly attribute any state; // readonly attribute any state;
void go(optional long delta = 0); [Throws] void go(optional long delta = 0);
void back(); void back();
void forward(); void forward();
// void pushState(any data, DOMString title, optional USVString? url = null); // void pushState(any data, DOMString title, optional USVString? url = null);

View file

@ -42,7 +42,7 @@ use dom::location::Location;
use dom::mediaquerylist::{MediaQueryList, WeakMediaQueryListVec}; use dom::mediaquerylist::{MediaQueryList, WeakMediaQueryListVec};
use dom::messageevent::MessageEvent; use dom::messageevent::MessageEvent;
use dom::navigator::Navigator; use dom::navigator::Navigator;
use dom::node::{Node, from_untrusted_node_address, document_from_node, window_from_node, NodeDamage}; use dom::node::{Node, NodeDamage, document_from_node, from_untrusted_node_address, window_from_node};
use dom::performance::Performance; use dom::performance::Performance;
use dom::promise::Promise; use dom::promise::Promise;
use dom::screen::Screen; use dom::screen::Screen;
@ -529,19 +529,23 @@ impl WindowMethods for Window {
// https://html.spec.whatwg.org/multipage/#dom-frameelement // https://html.spec.whatwg.org/multipage/#dom-frameelement
fn GetFrameElement(&self) -> Option<Root<Element>> { fn GetFrameElement(&self) -> Option<Root<Element>> {
// Steps 1-3. // Steps 1-3.
if let Some(context) = self.browsing_context.get() { let context = match self.browsing_context.get() {
// Step 4-5. None => return None,
if let Some(container) = context.frame_element() { Some(context) => context,
// Step 6. };
let container_doc = document_from_node(container); // Step 4-5.
let current_doc = GlobalScope::current().as_window().Document(); let container = match context.frame_element() {
if current_doc.origin().same_origin_domain(container_doc.origin()) { None => return None,
// Step 7. Some(container) => container,
return Some(Root::from_ref(container)); };
} // Step 6.
} let container_doc = document_from_node(container);
let current_doc = GlobalScope::current().as_window().Document();
if !current_doc.origin().same_origin_domain(container_doc.origin()) {
return None;
} }
None // Step 7.
Some(Root::from_ref(container))
} }
// https://html.spec.whatwg.org/multipage/#dom-navigator // https://html.spec.whatwg.org/multipage/#dom-navigator

View file

@ -1355,7 +1355,7 @@ impl ScriptThread {
/// Handles activity change message /// Handles activity change message
fn handle_set_document_activity_msg(&self, id: PipelineId, activity: DocumentActivity) { fn handle_set_document_activity_msg(&self, id: PipelineId, activity: DocumentActivity) {
debug!("Setting activity of {} to be {:?}.", id, activity); debug!("Setting activity of {} to be {:?} in {:?}.", id, activity, thread::current().name());
let document = self.documents.borrow().find_document(id); let document = self.documents.borrow().find_document(id);
if let Some(document) = document { if let Some(document) = document {
document.set_activity(activity); document.set_activity(activity);

View file

@ -45200,6 +45200,11 @@
{} {}
] ]
], ],
"html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_iframe.html": [
[
{}
]
],
"html/browsers/sandboxing/.gitkeep": [ "html/browsers/sandboxing/.gitkeep": [
[ [
{} {}
@ -89305,6 +89310,12 @@
{} {}
] ]
], ],
"html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html": [
[
"/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html",
{}
]
],
"html/browsers/sandboxing/sandbox-allow-same-origin.html": [ "html/browsers/sandboxing/sandbox-allow-same-origin.html": [
[ [
"/html/browsers/sandboxing/sandbox-allow-same-origin.html", "/html/browsers/sandboxing/sandbox-allow-same-origin.html",
@ -166892,6 +166903,14 @@
"9839a9c24ce78ec42da8a60d2175df06e19983c1", "9839a9c24ce78ec42da8a60d2175df06e19983c1",
"testharness" "testharness"
], ],
"html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html": [
"1f0408464d8d98341c9537c3e3356cacbcf2f489",
"testharness"
],
"html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_iframe.html": [
"d33427abcc87693bce1f5610f460aad12cb99759",
"support"
],
"html/browsers/sandboxing/.gitkeep": [ "html/browsers/sandboxing/.gitkeep": [
"da39a3ee5e6b4b0d3255bfef95601890afd80709", "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"support" "support"

View file

@ -1,8 +1,5 @@
[interfaces.html] [interfaces.html]
type: testharness type: testharness
[Document interface: attribute domain]
expected: FAIL
[Document interface: attribute dir] [Document interface: attribute dir]
expected: FAIL expected: FAIL

View file

@ -1,6 +1,7 @@
[iframe_sandbox_allow_script.html] [iframe_sandbox_allow_script.html]
type: testharness type: testharness
expected: TIMEOUT expected: ERROR
bug: https://github.com/servo/servo/issues/14368
[iframe_sandbox_allow_scripts] [iframe_sandbox_allow_scripts]
expected: NOTRUN expected: NOTRUN

View file

@ -1,11 +0,0 @@
[html5lib_adoption02.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_adoption02.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_adoption02.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_comments01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_comments01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_comments01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_doctype01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_doctype01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_doctype01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_domjs-unsafe.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_domjs-unsafe.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_domjs-unsafe.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_entities01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_entities01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_entities01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_entities02.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_entities02.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_entities02.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_html5test-com.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_html5test-com.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_html5test-com.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_inbody01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_inbody01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_inbody01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,14 +0,0 @@
[html5lib_innerHTML_tests4.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests4.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests4.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests4.html]
type: testharness

View file

@ -1,14 +0,0 @@
[html5lib_innerHTML_tests6.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests6.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests6.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests6.html]
type: testharness

View file

@ -1,14 +0,0 @@
[html5lib_innerHTML_tests7.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests7.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests7.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests7.html]
type: testharness

View file

@ -1,14 +0,0 @@
[html5lib_innerHTML_tests_innerHTML_1.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests_innerHTML_1.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests_innerHTML_1.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_innerHTML_tests_innerHTML_1.html]
type: testharness

View file

@ -1,11 +0,0 @@
[html5lib_isindex.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_isindex.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_isindex.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_main-element.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_main-element.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_main-element.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,68 +0,0 @@
[html5lib_menuitem-element.html?run_type=uri]
type: testharness
[html5lib_menuitem-element.html e61b5db0435eb768ec21c1aa7355c649e7969c17]
expected: FAIL
[html5lib_menuitem-element.html 9c975c544402eed521499270b0e97cfa78f155b0]
expected: FAIL
[html5lib_menuitem-element.html d46fa11c0107d59c84778beae84f388f55bffc31]
expected: FAIL
[html5lib_menuitem-element.html afcd3b1e3317ac609ddab924d836ba1e3873b80f]
expected: FAIL
[html5lib_menuitem-element.html 95c0c6923fe609297c1592f2cb82bb9f2d0f5aed]
expected: FAIL
[html5lib_menuitem-element.html e2772fe779cbcefb4458f169a0cd495cf7115845]
expected: FAIL
[html5lib_menuitem-element.html 7a9fa28f6207f045ebb0aa49938debd0c1e7123e]
expected: FAIL
[html5lib_menuitem-element.html 798bb352d9f256153340661e1277e44674f1026d]
expected: FAIL
[html5lib_menuitem-element.html f2b5a63d94f108207a7a998216222dc24bea4850]
expected: FAIL
[html5lib_menuitem-element.html 778c027d06495eb361dd83baa561feb3a21ec3ea]
expected: FAIL
[html5lib_menuitem-element.html e4670bee2ce790e82c26a33319b7fe082fbbdaea]
expected: FAIL
[html5lib_menuitem-element.html 79307be24287ca5d0533dfa81b91dd826f5f5e0e]
expected: FAIL
[html5lib_menuitem-element.html 9b995cb730b12529e8e755e4a0b0a2e73d1dfcfa]
expected: FAIL
[html5lib_menuitem-element.html d4586cd7706bbb3a5b127c52c1f2861d1a3fb781]
expected: FAIL
[html5lib_menuitem-element.html e2adbd7bf4c7480343cfb8f69289c824be613853]
expected: FAIL
[html5lib_menuitem-element.html b56d35c73f38f04ad6fdf51aa88f4b70a93ddc48]
expected: FAIL
[html5lib_menuitem-element.html 0f95585196dae2b1b5164e8c27897699c464c35f]
expected: FAIL
[html5lib_menuitem-element.html 03664aa93a55daceccc26d99c0aef841d8862af5]
expected: FAIL
[html5lib_menuitem-element.html 6d596b9e342db2306365fbdfb7615377c5b26347]
expected: FAIL
[html5lib_menuitem-element.html 4b712b488be9ee047c139c1b0cd955bae990b8e5]
expected: FAIL
[html5lib_menuitem-element.html?run_type=write_single]
type: testharness
[html5lib_menuitem-element.html?run_type=write]
type: testharness

View file

@ -1,11 +0,0 @@
[html5lib_namespace-sensitivity.html?run_type=write]
type: testharness
[html5lib_namespace-sensitivity.html?run_type=write_single]
type: testharness
[html5lib_namespace-sensitivity.html?run_type=uri]
type: testharness
[html5lib_namespace-sensitivity.html de0a2051123e97a540e3aeb58375103bda021122]
expected: FAIL

View file

@ -1,11 +0,0 @@
[html5lib_pending-spec-changes-plain-text-unsafe.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_pending-spec-changes-plain-text-unsafe.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_pending-spec-changes-plain-text-unsafe.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_pending-spec-changes.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_pending-spec-changes.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_pending-spec-changes.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_plain-text-unsafe.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_plain-text-unsafe.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_plain-text-unsafe.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,71 +0,0 @@
[html5lib_ruby.html?run_type=write]
type: testharness
[html5lib_ruby.html?run_type=write_single]
type: testharness
[html5lib_ruby.html?run_type=uri]
type: testharness
[html5lib_ruby.html 6ee9e8955aa3a8a3af1838c1b728d8392e1cccca]
expected: FAIL
[html5lib_ruby.html 03bbba49b30ec908e06e3c84e1fcede1ac7508ff]
expected: FAIL
[html5lib_ruby.html de7c3ce0c3484dc3a111d00c34c68f7dea8a013a]
expected: FAIL
[html5lib_ruby.html 720c6bad03d4e4fd5ec7cb06bf4ec8ba5f277486]
expected: FAIL
[html5lib_ruby.html b3640f1eae210be30f138bbc6dc71e0864240224]
expected: FAIL
[html5lib_ruby.html 3179776aceeadf1740d71e2d2e6385bb84ab97c0]
expected: FAIL
[html5lib_ruby.html d26f2542fc6fcee4e737b578c8db716a96a22ade]
expected: FAIL
[html5lib_ruby.html 17d5c46418a50b35d893516440b0e091c31bd581]
expected: FAIL
[html5lib_ruby.html da1e119d0642e3b82a3537326a3fbc3b8c4e9706]
expected: FAIL
[html5lib_ruby.html bb2028f026500e8f77bd3b8e1f906c28045e6f20]
expected: FAIL
[html5lib_ruby.html c78f8740b860a39eb27035e19e29b240d0bfa4a8]
expected: FAIL
[html5lib_ruby.html 9e880cf547d015ef52c3377064a9afd92ba26afe]
expected: FAIL
[html5lib_ruby.html 9ed529d1072800af3fcccf268b41d6594480b749]
expected: FAIL
[html5lib_ruby.html 42a6c56b0abc484cbc3d2b7517551c4aa3efc5d3]
expected: FAIL
[html5lib_ruby.html 139a1e8af17546b7964354779331960096481b3c]
expected: FAIL
[html5lib_ruby.html 0050f08d71e8dd050d8129afe674b580387468d9]
expected: FAIL
[html5lib_ruby.html 5f9f25a089e72b4a4e5d7ebbacb440349c53f52f]
expected: FAIL
[html5lib_ruby.html 099a0a617119e858c8e716e0ea9854ed1198ccf1]
expected: FAIL
[html5lib_ruby.html 2cca13809bffb5fa34d03ad73d5727b75d2f96b5]
expected: FAIL
[html5lib_ruby.html f08a5ba63069cc6eb3804d94ec59b8b33e6f9b91]
expected: FAIL
[html5lib_ruby.html 606924ac3b043141563d94141973a11eda8015ab]
expected: FAIL

View file

@ -1,11 +0,0 @@
[html5lib_scriptdata01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_scriptdata01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_scriptdata01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_scripted_adoption01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_scripted_adoption01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_scripted_adoption01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_scripted_ark.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_scripted_ark.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_scripted_ark.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_scripted_webkit01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_scripted_webkit01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_scripted_webkit01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tables01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tables01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tables01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests1.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests1.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests1.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests10.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests10.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests10.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests11.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests11.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests11.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests12.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests12.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests12.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests14.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests14.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests14.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests15.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests15.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests15.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests16.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests16.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests16.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests17.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests17.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests17.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests18.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests18.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests18.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests19.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests19.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests19.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests2.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests2.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests2.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests21.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests21.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests21.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests22.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests22.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests22.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests23.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests23.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests23.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests24.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests24.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests24.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests25.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests25.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests25.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests26.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests26.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests26.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests3.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests3.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests3.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests5.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests5.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests5.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests6.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests6.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests6.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests7.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests7.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests7.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests8.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests8.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests8.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tests9.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests9.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tests9.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_tricky01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tricky01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_tricky01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_webkit01.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_webkit01.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_webkit01.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,11 +0,0 @@
[html5lib_webkit02.html?run_type=uri]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_webkit02.html?run_type=write]
type: testharness
disabled: https://github.com/servo/servo/issues/9329
[html5lib_webkit02.html?run_type=write_single]
type: testharness
disabled: https://github.com/servo/servo/issues/9329

View file

@ -1,5 +0,0 @@
[origin-check-in-document-open-same-origin-domain.sub.html]
type: testharness
[It should not be possible to open same origin-domain (but not same origin) documents.]
expected: FAIL

View file

@ -1,6 +0,0 @@
[data-url.html]
type: testharness
expected: ERROR
[worker has opaque origin]
expected: FAIL

View file

@ -0,0 +1,68 @@
<!doctype html>
<html>
<head>
<title></title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
</head>
<body>
<iframe id="iframe"></iframe>
<script>
var host_info = get_host_info();
var HTTP_PORT = host_info.HTTP_PORT;
var ORIGINAL_HOST = host_info.ORIGINAL_HOST; // e.g. "web-platform.test"
var SUFFIX_HOST = ORIGINAL_HOST.substring(ORIGINAL_HOST.lastIndexOf('.') + 1); // e.g. "test"
var PREFIX_HOST = "www1." + ORIGINAL_HOST; // e.g. "www1.web-platform.test"
var iframe = document.getElementById("iframe");
var iframe_url = new URL("document_domain_setter_iframe.html", document.location);
iframe_url.hostname = PREFIX_HOST;
iframe.src = iframe_url;
test(function() {
assert_throws("SecurityError", function() { document.domain = SUFFIX_HOST; });
assert_throws("SecurityError", function() { document.domain = "." + SUFFIX_HOST; });
assert_throws("SecurityError", function() { document.domain = PREFIX_HOST; });
assert_throws("SecurityError", function() { document.domain = "example.com"; });
}, "failed setting of document.domain");
async_test(function(t) {
iframe.addEventListener("load", t.step_func(function() {
// Before setting document.domain, the iframe is not
// same-origin-domain, so security checks fail.
assert_equals(iframe.contentDocument, null);
assert_equals(iframe.contentWindow.frameElement, null);
assert_throws("SecurityError", function() { iframe.contentWindow.location.origin; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.href; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.protocol; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.host; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.port; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.hostname; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.pathname; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.hash; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.search; });
assert_throws("SecurityError", function() { iframe.contentWindow.location.toString(); });
// Set document.domain
document.domain = ORIGINAL_HOST;
// After setting document.domain, the iframe is
// same-origin-domain, so security checks pass.
assert_equals(iframe.contentDocument.domain, document.domain);
assert_equals(iframe.contentWindow.frameElement, iframe)
assert_equals(iframe.contentWindow.origin, window.origin);
assert_equals(iframe.contentWindow.location.href, iframe_url.href);
assert_equals(iframe.contentWindow.location.protocol, iframe_url.protocol);
assert_equals(iframe.contentWindow.location.host, iframe_url.host);
assert_equals(iframe.contentWindow.location.port, iframe_url.port);
assert_equals(iframe.contentWindow.location.hostname, iframe_url.hostname);
assert_equals(iframe.contentWindow.location.pathname, iframe_url.pathname);
assert_equals(iframe.contentWindow.location.hash, iframe_url.hash);
assert_equals(iframe.contentWindow.location.search, iframe_url.search);
assert_equals(iframe.contentWindow.location.search, iframe_url.search);
assert_equals(iframe.contentWindow.location.toString(), iframe_url.toString());
// document.open checks for same-origin, not same-origin-domain,
// https://github.com/whatwg/html/issues/2282
assert_throws("SecurityError", function() { iframe.contentDocument.open(); });
t.done();
}));
}, "same-origin-domain iframe");
</script>
</body>
</html>

View file

@ -0,0 +1,12 @@
<!doctype html>
<html>
<head>
<title></title>
<script src="/common/get-host-info.sub.js"></script>
<script>
document.domain = get_host_info().ORIGINAL_HOST;
</script>
</head>
<body>
</body>
</html>