Auto merge of #22514 - jdm:source, r=Manishearth

Implement source for postMessage events

Also make similar-origin iframes access their newly loaded document as soon as the new document is created. This should allow tests that check the event.source property to run correctly.

---
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #22499 and fix #12715 and fix #22514.
- [x] There are tests for these changes

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22514)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-01-07 22:19:45 -05:00 committed by GitHub
commit 11d1184663
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
919 changed files with 2736 additions and 1905 deletions

View file

@ -1279,8 +1279,13 @@ where
warn!("constellation got set final url message for dead pipeline");
}
},
FromScriptMsg::PostMessage(browsing_context_id, origin, data) => {
self.handle_post_message_msg(browsing_context_id, origin, data);
FromScriptMsg::PostMessage {
target: browsing_context_id,
source: source_pipeline_id,
target_origin: origin,
data,
} => {
self.handle_post_message_msg(browsing_context_id, source_pipeline_id, origin, data);
},
FromScriptMsg::Focus => {
self.handle_focus_msg(source_pipeline_id);
@ -2844,6 +2849,7 @@ where
fn handle_post_message_msg(
&mut self,
browsing_context_id: BrowsingContextId,
source_pipeline: PipelineId,
origin: Option<ImmutableOrigin>,
data: Vec<u8>,
) {
@ -2856,7 +2862,17 @@ where
},
Some(browsing_context) => browsing_context.pipeline_id,
};
let msg = ConstellationControlMsg::PostMessage(pipeline_id, origin, data);
let source_browsing_context = match self.pipelines.get(&source_pipeline) {
Some(pipeline) => pipeline.top_level_browsing_context_id,
None => return warn!("PostMessage from closed pipeline {:?}", source_pipeline),
};
let msg = ConstellationControlMsg::PostMessage {
target: pipeline_id,
source: source_pipeline,
source_browsing_context: source_browsing_context,
target_origin: origin,
data,
};
let result = match self.pipelines.get(&pipeline_id) {
Some(pipeline) => pipeline.event_loop.send(msg),
None => return warn!("postMessage to closed pipeline {}.", pipeline_id),

View file

@ -424,7 +424,7 @@ impl DedicatedWorkerGlobalScope {
JSAutoCompartment::new(scope.get_cx(), scope.reflector().get_jsobject().get());
rooted!(in(scope.get_cx()) let mut message = UndefinedValue());
data.read(scope.upcast(), message.handle_mut());
MessageEvent::dispatch_jsval(target, scope.upcast(), message.handle(), None);
MessageEvent::dispatch_jsval(target, scope.upcast(), message.handle(), None, None);
},
WorkerScriptMsg::Common(msg) => {
self.upcast::<WorkerGlobalScope>().process_event(msg);

View file

@ -203,11 +203,12 @@ impl DissimilarOriginWindow {
None => return warn!("postMessage called with no incumbent global"),
Some(incumbent) => incumbent,
};
let msg = ScriptMsg::PostMessage(
self.window_proxy.browsing_context_id(),
origin,
data.move_to_arraybuffer(),
);
let msg = ScriptMsg::PostMessage {
target: self.window_proxy.browsing_context_id(),
source: incumbent.pipeline_id(),
target_origin: origin,
data: data.move_to_arraybuffer(),
};
let _ = incumbent.script_to_constellation_chan().send(msg);
}
}

View file

@ -238,6 +238,7 @@ impl EventSourceContext {
false,
data.handle(),
DOMString::from(self.origin.clone()),
None,
event_source.last_event_id.borrow().clone(),
)
};

View file

@ -7,24 +7,27 @@ use crate::dom::bindings::codegen::Bindings::MessageEventBinding;
use crate::dom::bindings::codegen::Bindings::MessageEventBinding::MessageEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox;
use crate::dom::event::Event;
use crate::dom::eventtarget::EventTarget;
use crate::dom::globalscope::GlobalScope;
use crate::dom::windowproxy::WindowProxy;
use dom_struct::dom_struct;
use js::jsapi::{Heap, JSContext};
use js::jsapi::{Heap, JSContext, JSObject};
use js::jsval::JSVal;
use js::rust::HandleValue;
use servo_atoms::Atom;
use std::ptr::NonNull;
#[dom_struct]
pub struct MessageEvent {
event: Event,
data: Heap<JSVal>,
origin: DOMString,
source: Option<Dom<WindowProxy>>,
lastEventId: DOMString,
}
@ -34,6 +37,7 @@ impl MessageEvent {
global,
HandleValue::undefined(),
DOMString::new(),
None,
DOMString::new(),
)
}
@ -42,12 +46,14 @@ impl MessageEvent {
global: &GlobalScope,
data: HandleValue,
origin: DOMString,
source: Option<&WindowProxy>,
lastEventId: DOMString,
) -> DomRoot<MessageEvent> {
let ev = Box::new(MessageEvent {
event: Event::new_inherited(),
data: Heap::default(),
origin: origin,
source: source.map(Dom::from_ref),
lastEventId: lastEventId,
});
let ev = reflect_dom_object(ev, global, MessageEventBinding::Wrap);
@ -63,9 +69,10 @@ impl MessageEvent {
cancelable: bool,
data: HandleValue,
origin: DOMString,
source: Option<&WindowProxy>,
lastEventId: DOMString,
) -> DomRoot<MessageEvent> {
let ev = MessageEvent::new_initialized(global, data, origin, lastEventId);
let ev = MessageEvent::new_initialized(global, data, origin, source, lastEventId);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@ -78,6 +85,10 @@ impl MessageEvent {
type_: DOMString,
init: RootedTraceableBox<MessageEventBinding::MessageEventInit>,
) -> Fallible<DomRoot<MessageEvent>> {
let source = init
.source
.as_ref()
.and_then(|inner| inner.as_ref().map(|source| source.window_proxy()));
let ev = MessageEvent::new(
global,
Atom::from(type_),
@ -85,6 +96,7 @@ impl MessageEvent {
init.parent.cancelable,
init.data.handle(),
init.origin.clone(),
source.as_ref().map(|source| &**source),
init.lastEventId.clone(),
);
Ok(ev)
@ -97,6 +109,7 @@ impl MessageEvent {
scope: &GlobalScope,
message: HandleValue,
origin: Option<&str>,
source: Option<&WindowProxy>,
) {
let messageevent = MessageEvent::new(
scope,
@ -105,6 +118,7 @@ impl MessageEvent {
false,
message,
DOMString::from(origin.unwrap_or("")),
source,
DOMString::new(),
);
messageevent.upcast::<Event>().fire(target);
@ -123,6 +137,14 @@ impl MessageEventMethods for MessageEvent {
self.origin.clone()
}
// https://html.spec.whatwg.org/multipage/#dom-messageevent-source
#[allow(unsafe_code)]
unsafe fn GetSource(&self, _cx: *mut JSContext) -> Option<NonNull<JSObject>> {
self.source
.as_ref()
.and_then(|source| NonNull::new(source.reflector().get_jsobject().get()))
}
// https://html.spec.whatwg.org/multipage/#dom-messageevent-lasteventid
fn LastEventId(&self) -> DOMString {
self.lastEventId.clone()

View file

@ -8,6 +8,8 @@ interface MessageEvent : Event {
readonly attribute any data;
readonly attribute DOMString origin;
readonly attribute DOMString lastEventId;
// FIXME(#22617): WindowProxy is not exposed in Worker globals
readonly attribute object? source;
//readonly attribute (WindowProxy or MessagePort)? source;
//readonly attribute MessagePort[]? ports;
};
@ -17,6 +19,7 @@ dictionary MessageEventInit : EventInit {
DOMString origin = "";
DOMString lastEventId = "";
//DOMString channel;
Window? source;
//(WindowProxy or MessagePort)? source;
//sequence<MessagePort> ports;
};

View file

@ -599,6 +599,7 @@ impl TaskOnce for MessageReceivedTask {
&global,
message.handle(),
Some(&ws.origin().ascii_serialization()),
None,
);
}
}

View file

@ -859,14 +859,13 @@ impl WindowMethods for Window {
message: HandleValue,
origin: DOMString,
) -> ErrorResult {
let source_global = GlobalScope::incumbent().expect("no incumbent global??");
let source = source_global.as_window();
// Step 3-5.
let origin = match &origin[..] {
"*" => None,
"/" => {
// TODO(#12715): Should be the origin of the incumbent settings
// object, not self's.
Some(self.Document().origin().immutable().clone())
},
"/" => Some(source.Document().origin().immutable().clone()),
url => match ServoUrl::parse(&url) {
Ok(url) => Some(url.origin().clone()),
Err(_) => return Err(Error::Syntax),
@ -878,7 +877,7 @@ impl WindowMethods for Window {
let data = StructuredCloneData::write(cx, message)?;
// Step 9.
self.post_message(origin, data);
self.post_message(origin, &*source.window_proxy(), data);
Ok(())
}
@ -2194,11 +2193,14 @@ impl Window {
pub fn post_message(
&self,
target_origin: Option<ImmutableOrigin>,
source: &WindowProxy,
serialize_with_transfer_result: StructuredCloneData,
) {
let this = Trusted::new(self);
let source = Trusted::new(source);
let task = task!(post_serialised_message: move || {
let this = this.root();
let source = source.root();
// Step 7.1.
if let Some(target_origin) = target_origin {
@ -2226,7 +2228,8 @@ impl Window {
this.upcast(),
this.upcast(),
message_clone.handle(),
None
None,
Some(&*source),
);
});
// FIXME(nox): Why are errors silenced here?

View file

@ -140,7 +140,7 @@ impl Worker {
let _ac = JSAutoCompartment::new(global.get_cx(), target.reflector().get_jsobject().get());
rooted!(in(global.get_cx()) let mut message = UndefinedValue());
data.read(&global, message.handle_mut());
MessageEvent::dispatch_jsval(target, &global, message.handle(), None);
MessageEvent::dispatch_jsval(target, &global, message.handle(), None, None);
}
pub fn dispatch_simple_error(address: TrustedWorkerAddress) {

View file

@ -1419,7 +1419,7 @@ impl ScriptThread {
ChangeFrameVisibilityStatus(id, ..) => Some(id),
NotifyVisibilityChange(id, ..) => Some(id),
Navigate(id, ..) => Some(id),
PostMessage(id, ..) => Some(id),
PostMessage { target: id, .. } => Some(id),
UpdatePipelineId(_, _, id, _) => Some(id),
UpdateHistoryState(id, ..) => Some(id),
RemoveHistoryStates(id, ..) => Some(id),
@ -1592,9 +1592,19 @@ impl ScriptThread {
browsing_context_id,
visible,
),
ConstellationControlMsg::PostMessage(pipeline_id, origin, data) => {
self.handle_post_message_msg(pipeline_id, origin, data)
},
ConstellationControlMsg::PostMessage {
target: target_pipeline_id,
source: source_pipeline_id,
source_browsing_context,
target_origin: origin,
data,
} => self.handle_post_message_msg(
target_pipeline_id,
source_pipeline_id,
source_browsing_context,
origin,
data,
),
ConstellationControlMsg::UpdatePipelineId(
parent_pipeline_id,
browsing_context_id,
@ -2080,12 +2090,33 @@ impl ScriptThread {
fn handle_post_message_msg(
&self,
pipeline_id: PipelineId,
source_pipeline_id: PipelineId,
source_browsing_context: TopLevelBrowsingContextId,
origin: Option<ImmutableOrigin>,
data: Vec<u8>,
) {
match { self.documents.borrow().find_window(pipeline_id) } {
None => return warn!("postMessage after pipeline {} closed.", pipeline_id),
Some(window) => window.post_message(origin, StructuredCloneData::Vector(data)),
None => return warn!("postMessage after target pipeline {} closed.", pipeline_id),
Some(window) => {
// FIXME: synchronously talks to constellation.
// send the required info as part of postmessage instead.
let source = match self.remote_window_proxy(
&*window.global(),
source_browsing_context,
source_pipeline_id,
None,
) {
None => {
return warn!(
"postMessage after source pipeline {} closed.",
source_pipeline_id,
);
},
Some(source) => source,
};
// FIXME(#22512): enqueues a task; unnecessary delay.
window.post_message(origin, &*source, StructuredCloneData::Vector(data))
},
}
}
@ -2820,6 +2851,21 @@ impl ScriptThread {
window.init_document(&document);
// For any similar-origin iframe, ensure that the contentWindow/contentDocument
// APIs resolve to the new window/document as soon as parsing starts.
if let Some(frame) = window_proxy
.frame_element()
.and_then(|e| e.downcast::<HTMLIFrameElement>())
{
let parent_pipeline = frame.global().pipeline_id();
self.handle_update_pipeline_id(
parent_pipeline,
window_proxy.browsing_context_id(),
incomplete.pipeline_id,
UpdatePipelineIdReason::Navigation,
);
}
self.script_sender
.send((incomplete.pipeline_id, ScriptMsg::ActivateDocument))
.unwrap();

View file

@ -284,7 +284,18 @@ pub enum ConstellationControlMsg {
/// PipelineId is for the parent, BrowsingContextId is for the nested browsing context
Navigate(PipelineId, BrowsingContextId, LoadData, bool),
/// Post a message to a given window.
PostMessage(PipelineId, Option<ImmutableOrigin>, Vec<u8>),
PostMessage {
/// The target of the message.
target: PipelineId,
/// The source of the message.
source: PipelineId,
/// The top level browsing context associated with the source pipeline.
source_browsing_context: TopLevelBrowsingContextId,
/// The expected origin of the target.
target_origin: Option<ImmutableOrigin>,
/// The data to be posted.
data: Vec<u8>,
},
/// Updates the current pipeline ID of a given iframe.
/// First PipelineId is for the parent, second is the new PipelineId for the frame.
UpdatePipelineId(
@ -358,7 +369,7 @@ impl fmt::Debug for ConstellationControlMsg {
ChangeFrameVisibilityStatus(..) => "ChangeFrameVisibilityStatus",
NotifyVisibilityChange(..) => "NotifyVisibilityChange",
Navigate(..) => "Navigate",
PostMessage(..) => "PostMessage",
PostMessage { .. } => "PostMessage",
UpdatePipelineId(..) => "UpdatePipelineId",
UpdateHistoryState(..) => "UpdateHistoryState",
RemoveHistoryStates(..) => "RemoveHistoryStates",

View file

@ -134,7 +134,16 @@ pub enum ScriptMsg {
/// Abort loading after sending a LoadUrl message.
AbortLoadUrl,
/// Post a message to the currently active window of a given browsing context.
PostMessage(BrowsingContextId, Option<ImmutableOrigin>, Vec<u8>),
PostMessage {
/// The target of the posted message.
target: BrowsingContextId,
/// The source of the posted message.
source: PipelineId,
/// The expected origin of the target.
target_origin: Option<ImmutableOrigin>,
/// The data to be posted.
data: Vec<u8>,
},
/// Inform the constellation that a fragment was navigated to and whether or not it was a replacement navigation.
NavigatedToFragment(ServoUrl, bool),
/// HTMLIFrameElement Forward or Back traversal.
@ -209,7 +218,7 @@ impl fmt::Debug for ScriptMsg {
LoadComplete => "LoadComplete",
LoadUrl(..) => "LoadUrl",
AbortLoadUrl => "AbortLoadUrl",
PostMessage(..) => "PostMessage",
PostMessage { .. } => "PostMessage",
NavigatedToFragment(..) => "NavigatedToFragment",
TraverseHistory(..) => "TraverseHistory",
PushHistoryState(..) => "PushHistoryState",

View file

@ -4,7 +4,7 @@ skip: true
[mozilla]
skip: false
[referrer-policy]
skip: true
skip: false
[_webgl]
skip: false
[2dcontext]
@ -106,7 +106,7 @@ skip: true
[quirks]
skip: false
[referrer-policy]
skip: true
skip: false
[resource-timing]
skip: false
[subresource-integrity]

View file

@ -1,8 +0,0 @@
[cross-global-revoke.sub.html]
expected: TIMEOUT
[It is possible to revoke same-origin blob URLs from different frames.]
expected: TIMEOUT
[It is not possible to revoke cross-origin blob URLs.]
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[unicode-origin.sub.html]
expected: TIMEOUT
[Verify serialization of non-ascii origin in Blob URLs]
expected: TIMEOUT
expected: FAIL

View file

@ -1,8 +1,7 @@
[url-lifetime.html]
expected: TIMEOUT
[Terminating worker revokes its URLs]
expected: FAIL
[Removing an iframe revokes its URLs]
expected: TIMEOUT
expected: FAIL

View file

@ -650092,67 +650092,67 @@
"support"
],
"referrer-policy/css-integration/child-css/external-import-stylesheet.html": [
"a2d3e8ced0412b97422847d4d81c1403cf9ae52c",
"40f4234ad48d19162cefae933fd0f53a72ff0c19",
"testharness"
],
"referrer-policy/css-integration/child-css/internal-import-stylesheet.html": [
"aebf5031484b799989d6b6a9dd72a5bc28575214",
"30c5ea2903094af38dea9a7a565255d178069178",
"testharness"
],
"referrer-policy/css-integration/child-css/processing-instruction.html": [
"b6333e2c7b248c3f3b863bd06f1c99abd472f162",
"52a0ded42a185ed5ff6f449879e0ce50f8255868",
"testharness"
],
"referrer-policy/css-integration/css-test-helper.js": [
"f5886dbbcbe358438dfbac45c5a0127e9e990ad4",
"788df16a456b83a23de662b710c200042a1e7254",
"support"
],
"referrer-policy/css-integration/font-face/external-import-stylesheet.html": [
"c344c56c5bf322f35e8d8c74427d80391e6637d3",
"80e3587ad62f040f2cfb28645437fcbc0e66b415",
"testharness"
],
"referrer-policy/css-integration/font-face/external-stylesheet.html": [
"24e4bb99900a556cb0b44144a25c9f8249224eb7",
"a91eb3fe758299229040466deb2d1b0263f77197",
"testharness"
],
"referrer-policy/css-integration/font-face/internal-import-stylesheet.html": [
"54e2383423cab8679635d05c256c32e27a94c024",
"a637082a4ce7dff612b223fc8a4c2195db300013",
"testharness"
],
"referrer-policy/css-integration/font-face/internal-stylesheet.html": [
"b3869bcebdcdadea3e50d7e8713c853d46ba4816",
"eebd864bc56725b79c1f29c0597466574e2af091",
"testharness"
],
"referrer-policy/css-integration/font-face/processing-instruction.html": [
"89ee918e24e14b8ea5d35a7dfaf09610eb89ee11",
"bfc42d9fcbe355514c7bf72ac087d7159439824e",
"testharness"
],
"referrer-policy/css-integration/image/external-import-stylesheet.html": [
"0023af31b17ee883e6e9fe6cdd8f09b8eacf83d1",
"80c71b0e215b547d664aee8757d70188c012a9c0",
"testharness"
],
"referrer-policy/css-integration/image/external-stylesheet.html": [
"d14769db4a1221bb6e220aa594c4a3b6bab97aa1",
"ba7497b97de6911c149b423bf25305123e97150e",
"testharness"
],
"referrer-policy/css-integration/image/inline-style.html": [
"42128ae062093c0e8feb5d90ab62a6cb281cf8e9",
"758b6d91852f67d4e47726815804a5e366fe534d",
"testharness"
],
"referrer-policy/css-integration/image/internal-import-stylesheet.html": [
"90003547f4d4e2048cc33f7125d756d42507140d",
"24aa1858304a2130624589b0a64c6f9ec9cac5a1",
"testharness"
],
"referrer-policy/css-integration/image/internal-stylesheet.html": [
"943108d66e4b273a6d3be30b2ea8a0edb0490c7b",
"f4567885e1f1e215487a11f1023d117517cd88b8",
"testharness"
],
"referrer-policy/css-integration/image/presentation-attribute.html": [
"78401d3ec16866f1e51618bdb5cb028f5eea8490",
"d0a4d96f84c8e48ea5daf5699c7b04bbc877ba86",
"testharness"
],
"referrer-policy/css-integration/image/processing-instruction.html": [
"1ca18547dd54c4707250f400999a041f16f77ddf",
"926147be489a85164758dcf644c715e4a5c02de6",
"testharness"
],
"referrer-policy/css-integration/svg/external-stylesheet.html": [
@ -650176,7 +650176,7 @@
"testharness"
],
"referrer-policy/generic/common.js": [
"f9bbe42b914c46822ec8b74aacd849789723dd72",
"a16691bccb2543ad68b81e9a16fa261d3cce6a9f",
"support"
],
"referrer-policy/generic/iframe-inheritance.html": [
@ -650228,11 +650228,11 @@
"support"
],
"referrer-policy/generic/referrer-policy-test-case.js": [
"4641683cd850da86279dcd062aaf868d346aa2bd",
"2385cc2a1c4e51a2855299e42b69ac12362cd699",
"support"
],
"referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html": [
"8fee77f836378ec137c3bf0d554f4def83a5caba",
"1b2b12bf6910e075338462de577dc4228f52a21f",
"testharness"
],
"referrer-policy/generic/sanity-checker.js": [
@ -650240,7 +650240,7 @@
"support"
],
"referrer-policy/generic/subresource-test/area-navigate.html": [
"bca7e479fa2ca41505bc73cf74c6e518efa7e947",
"3eb824521b7801c518a7b36218075eb3d74bd639",
"testharness"
],
"referrer-policy/generic/subresource-test/attr-referrer-invalid-value.html": [
@ -650248,31 +650248,31 @@
"testharness"
],
"referrer-policy/generic/subresource-test/fetch-messaging.html": [
"046b29e9a3e94753c1a552732b0f44d2883a011d",
"edb159d9eb1cf5eed6af249a40f70d9ecd079d68",
"testharness"
],
"referrer-policy/generic/subresource-test/iframe-messaging.html": [
"a3e55707c26f95624baaa54b8778d641cd756d72",
"606e18b281f6c3498573dc9bfaefefca1390026a",
"testharness"
],
"referrer-policy/generic/subresource-test/image-decoding.html": [
"448f12b1348fa77aaaebd52b2c3ee6ae9c73a5f6",
"9c50ea6619389dad8ad81c4c2afbeb8030b176db",
"testharness"
],
"referrer-policy/generic/subresource-test/link-navigate.html": [
"45e502004d4b640d0b2194e48d060b8d3cc3f120",
"95582f65bac8a3b478cc8cd4fe9b883fb507237f",
"testharness"
],
"referrer-policy/generic/subresource-test/script-messaging.html": [
"09c5db6193fed52c60edc2526609c3d501c45da8",
"f73f4406df20694480f82570ed8674fe283ea375",
"testharness"
],
"referrer-policy/generic/subresource-test/worker-messaging.html": [
"6d34366b943ad2b3b15f08179a58ef5227c675d0",
"fd7591882e91e7265fd740b9018248d21f13b5b9",
"testharness"
],
"referrer-policy/generic/subresource-test/xhr-messaging.html": [
"09f69140098a16bd66a117cf6187fedc862d9233",
"6ef4a9cfd4b98c3562fe7ef6e04eb931073166de",
"testharness"
],
"referrer-policy/generic/subresource/__init__.py": [
@ -650400,7 +650400,7 @@
"support"
],
"referrer-policy/generic/unsupported-csp-referrer-directive.html": [
"9627d16559903b5202f842f3c3355a2e7005f65c",
"475efa55091778e747fa36030f7b422b89d6d4b9",
"testharness"
],
"referrer-policy/no-referrer-when-downgrade/attr-referrer/cross-origin/http-http/a-tag/no-redirect/insecure-protocol.http.html": [

View file

@ -1,2 +0,0 @@
[floats-in-table-caption-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[line-height-204.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mix-blend-mode-paragraph.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[background-repeat-round-roundup.xht]
expected: FAIL

View file

@ -1,2 +0,0 @@
[line-break-normal-018.xht]
expected: FAIL

View file

@ -1,2 +0,0 @@
[line-break-strict-018.xht]
expected: FAIL

View file

@ -1,2 +0,0 @@
[text-transform-full-size-kana-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[trailing-ideographic-space-004.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[word-break-keep-all-006.html]
expected: FAIL

View file

@ -1,4 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -2,3 +2,6 @@
[The root element is the last element returned for valid queries]
expected: FAIL
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -1,2 +1,2 @@
[parser-sets-attributes-and-children.html]
expected: TIMEOUT
expected: CRASH

View file

@ -1,11 +1,10 @@
[iframe.tentative.https.sub.html]
expected: TIMEOUT
[Same-origin iframe]
expected: TIMEOUT
expected: FAIL
[Same-site iframe]
expected: TIMEOUT
expected: FAIL
[Cross-site iframe]
expected: TIMEOUT
expected: FAIL

View file

@ -1,2 +1,10 @@
[xslt.tentative.https.sub.html]
expected: TIMEOUT
[Same-Origin xslt]
expected: FAIL
[Cross-site xslt]
expected: FAIL
[Same-site xslt]
expected: FAIL

View file

@ -8,7 +8,7 @@
expected: FAIL
[Embedded credentials are treated as network errors in new windows.]
expected: TIMEOUT
expected: FAIL
[Embedded credentials matching the top-level are not treated as network errors for relative URLs.]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[006.html]
[Link with onclick form submit and href navigation ]
expected: FAIL

View file

@ -1,11 +1,4 @@
[document_domain_feature_policy.tentative.sub.html]
expected: TIMEOUT
[Default "document-domain" feature policy ["*"\] allows cross-origin iframes.]
expected: TIMEOUT
[Default "document-domain" feature policy ["*"\] allows same-origin iframes.]
expected: TIMEOUT
[Feature policy "document-domain" can be disabled in cross-origin iframes using "allow" attribute.]
expected: FAIL

View file

@ -1,15 +1,14 @@
[document_domain_setter_null.tentative.html]
type: testharness
expected: TIMEOUT
[Access allowed with no 'document.domain' modification. (Sanity check)]
expected: TIMEOUT
expected: FAIL
[No access when frame sets a `null` 'document.domain'.]
expected: NOTRUN
expected: FAIL
[No access when parent sets a `null` 'document.domain'.]
expected: NOTRUN
expected: FAIL
[No access when both sides set a `null` 'document.domain'.]
expected: NOTRUN
expected: FAIL

View file

@ -3,3 +3,30 @@
[HTML: window.open `features`: non-integer values for feature `height`]
expected: FAIL
[features "height=405*3" should set "height=405"]
expected: FAIL
[features "height=405.32" should set "height=405"]
expected: FAIL
[features "height=405e1" should set "height=405"]
expected: FAIL
[features "height=405/5" should set "height=405"]
expected: FAIL
[features "height=405^4" should set "height=405"]
expected: FAIL
[features "height=405.5" should set "height=405"]
expected: FAIL
[features "height=405e-1" should set "height=405"]
expected: FAIL
[features "height=405 " should set "height=405"]
expected: FAIL
[features "height=405LLl" should set "height=405"]
expected: FAIL

View file

@ -3,3 +3,30 @@
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
expected: FAIL
[features "innerheight=405e-1" should set "height=405"]
expected: FAIL
[features "innerheight=405LLl" should set "height=405"]
expected: FAIL
[features "innerheight=405^4" should set "height=405"]
expected: FAIL
[features "innerheight=405e1" should set "height=405"]
expected: FAIL
[features "innerheight=405 " should set "height=405"]
expected: FAIL
[features "innerheight=405/5" should set "height=405"]
expected: FAIL
[features "innerheight=405.32" should set "height=405"]
expected: FAIL
[features "innerheight=405.5" should set "height=405"]
expected: FAIL
[features "innerheight=405*3" should set "height=405"]
expected: FAIL

View file

@ -3,3 +3,30 @@
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
expected: FAIL
[features "innerwidth=405e-1" should set "width=405"]
expected: FAIL
[features "innerwidth=405*3" should set "width=405"]
expected: FAIL
[features "innerwidth=405.5" should set "width=405"]
expected: FAIL
[features "innerwidth=405e1" should set "width=405"]
expected: FAIL
[features "innerwidth=405.32" should set "width=405"]
expected: FAIL
[features "innerwidth=405 " should set "width=405"]
expected: FAIL
[features "innerwidth=405LLl" should set "width=405"]
expected: FAIL
[features "innerwidth=405/5" should set "width=405"]
expected: FAIL
[features "innerwidth=405^4" should set "width=405"]
expected: FAIL

View file

@ -3,3 +3,30 @@
[HTML: window.open `features`: non-integer values for feature `left`]
expected: FAIL
[features "left=105e1" should set "left=105"]
expected: FAIL
[features "left=105 " should set "left=105"]
expected: FAIL
[features "left=105/5" should set "left=105"]
expected: FAIL
[features "left=105e-1" should set "left=105"]
expected: FAIL
[features "left=105^4" should set "left=105"]
expected: FAIL
[features "left=105LLl" should set "left=105"]
expected: FAIL
[features "left=105.32" should set "left=105"]
expected: FAIL
[features "left=105*3" should set "left=105"]
expected: FAIL
[features "left=105.5" should set "left=105"]
expected: FAIL

View file

@ -3,3 +3,30 @@
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
expected: FAIL
[features "screenx=105.5" should set "left=105"]
expected: FAIL
[features "screenx=105e1" should set "left=105"]
expected: FAIL
[features "screenx=105 " should set "left=105"]
expected: FAIL
[features "screenx=105*3" should set "left=105"]
expected: FAIL
[features "screenx=105e-1" should set "left=105"]
expected: FAIL
[features "screenx=105^4" should set "left=105"]
expected: FAIL
[features "screenx=105LLl" should set "left=105"]
expected: FAIL
[features "screenx=105/5" should set "left=105"]
expected: FAIL
[features "screenx=105.32" should set "left=105"]
expected: FAIL

View file

@ -3,3 +3,30 @@
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
expected: FAIL
[features "screeny=405^4" should set "height=405"]
expected: FAIL
[features "screeny=405e-1" should set "height=405"]
expected: FAIL
[features "screeny=405LLl" should set "height=405"]
expected: FAIL
[features "screeny=405e1" should set "height=405"]
expected: FAIL
[features "screeny=405 " should set "height=405"]
expected: FAIL
[features "screeny=405/5" should set "height=405"]
expected: FAIL
[features "screeny=405*3" should set "height=405"]
expected: FAIL
[features "screeny=405.32" should set "height=405"]
expected: FAIL
[features "screeny=405.5" should set "height=405"]
expected: FAIL

View file

@ -3,3 +3,30 @@
[HTML: window.open `features`: non-integer values for feature `top`]
expected: FAIL
[features "top=105/5" should set "top=105"]
expected: FAIL
[features "top=105*3" should set "top=105"]
expected: FAIL
[features "top=105LLl" should set "top=105"]
expected: FAIL
[features "top=105e-1" should set "top=105"]
expected: FAIL
[features "top=105.32" should set "top=105"]
expected: FAIL
[features "top=105e1" should set "top=105"]
expected: FAIL
[features "top=105 " should set "top=105"]
expected: FAIL
[features "top=105^4" should set "top=105"]
expected: FAIL
[features "top=105.5" should set "top=105"]
expected: FAIL

View file

@ -3,3 +3,30 @@
[HTML: window.open `features`: non-integer values for feature `width`]
expected: FAIL
[features "width=405^4" should set "width=405"]
expected: FAIL
[features "width=405.5" should set "width=405"]
expected: FAIL
[features "width=405e1" should set "width=405"]
expected: FAIL
[features "width=405 " should set "width=405"]
expected: FAIL
[features "width=405.32" should set "width=405"]
expected: FAIL
[features "width=405LLl" should set "width=405"]
expected: FAIL
[features "width=405*3" should set "width=405"]
expected: FAIL
[features "width=405e-1" should set "width=405"]
expected: FAIL
[features "width=405/5" should set "width=405"]
expected: FAIL

View file

@ -1,11 +1,7 @@
[frameElement.sub.html]
expected: TIMEOUT
[The window's frameElement attribute must return its container element if it is a nested browsing context]
expected: FAIL
[The SecurityError must be thrown if the window accesses to frameElement attribute of a Window which does not have the same effective script origin]
expected: FAIL
[The window's frameElement attribute must return null if the container's document does not have the same effective script origin]
expected: NOTRUN

View file

@ -1,4 +0,0 @@
[targeting-with-embedded-null-in-target.html]
[Targeting with embedded null in target]
expected: FAIL

View file

@ -6792,9 +6792,6 @@
[HTMLMediaElement interface: document.createElement("video") must inherit property "controls" with the proper type]
expected: FAIL
[HTMLMediaElement interface: document.createElement("video") must inherit property "volume" with the proper type]
expected: PASS
[HTMLMediaElement interface: document.createElement("video") must inherit property "muted" with the proper type]
expected: FAIL
@ -6837,9 +6834,6 @@
[HTMLMediaElement interface: document.createElement("audio") must inherit property "controls" with the proper type]
expected: FAIL
[HTMLMediaElement interface: document.createElement("audio") must inherit property "volume" with the proper type]
expected: PASS
[HTMLMediaElement interface: document.createElement("audio") must inherit property "muted" with the proper type]
expected: FAIL
@ -6882,9 +6876,6 @@
[HTMLMediaElement interface: new Audio() must inherit property "controls" with the proper type]
expected: FAIL
[HTMLMediaElement interface: new Audio() must inherit property "volume" with the proper type]
expected: PASS
[HTMLMediaElement interface: new Audio() must inherit property "muted" with the proper type]
expected: FAIL
@ -7005,9 +6996,6 @@
[HTMLMediaElement interface: attribute controls]
expected: FAIL
[HTMLMediaElement interface: attribute volume]
expected: PASS
[HTMLMediaElement interface: attribute muted]
expected: FAIL
@ -10730,9 +10718,6 @@
[ImageBitmap interface: operation close()]
expected: FAIL
[MessageEvent interface: attribute source]
expected: FAIL
[MessageEvent interface: attribute ports]
expected: FAIL

View file

@ -3,6 +3,3 @@
[Check that sandboxed iframe cannot perform navigation on the top\n frame when allow-top-navigation is not set]
expected: FAIL
[Frames without `allow-top-navigation` should not be able to navigate the top frame.]
expected: FAIL

View file

@ -1,5 +1,6 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: FAIL
expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: FAIL
expected: TIMEOUT

View file

@ -1,5 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL
expected: NOTRUN

View file

@ -1,10 +0,0 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
[createHTMLDocument]
expected: FAIL
[<template>]
expected: FAIL

View file

@ -0,0 +1,4 @@
[077.html]
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
expected: FAIL

View file

@ -12,6 +12,3 @@
[document.open should throw a SecurityError with cross-origin document even when the ignore-opens-during-unload counter is greater than 0 (during pagehide event)]
expected: FAIL
[document.open should throw a SecurityError with cross-origin document even when there is an active parser executing script]
expected: FAIL

View file

@ -9,6 +9,3 @@
[document.open should throw an InvalidStateError with XML document even when the ignore-opens-during-unload counter is greater than 0 (during pagehide event)]
expected: FAIL
[document.open should throw an InvalidStateError with XML document even when there is an active parser executing script]
expected: FAIL

View file

@ -1,4 +0,0 @@
[bailout-side-effects-synchronous-script.window.html]
[document.open bailout should not have any side effects (active parser whose script nesting level is greater than 0)]
expected: FAIL

View file

@ -1,5 +1,4 @@
[processing-instruction.html]
expected: ERROR
[Child css via a ProcessingInstruction.]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[external-import-stylesheet.html]
expected: ERROR
[Font from imported stylesheet (external).]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[internal-import-stylesheet.html]
expected: ERROR
[Font from imported stylesheet (internal).]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[processing-instruction.html]
expected: ERROR
[Font from external stylesheet (from ProcessingInstruction).]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[external-import-stylesheet.html]
expected: ERROR
[Image from imported stylesheet (external).]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[external-stylesheet.html]
expected: ERROR
[Image from external stylesheet.]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[inline-style.html]
expected: ERROR
[Image from inline styles.]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[internal-import-stylesheet.html]
expected: ERROR
[Image from imported stylesheet (internal).]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[internal-stylesheet.html]
expected: ERROR
[Image from internal stylesheet.]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[processing-instruction.html]
expected: ERROR
[Image from external stylesheet (from ProcessingInstruction).]
expected: TIMEOUT
expected: FAIL

View file

@ -1,8 +1,28 @@
[external-stylesheet.html]
expected: ERROR
[Test styling SVG from external style fill]
expected: TIMEOUT
expected: FAIL
[Test styling SVG from external style stroke]
expected: NOTRUN
expected: FAIL
[Test styling SVG from external style mask]
expected: FAIL
[Test styling SVG from external style marker-start]
expected: FAIL
[Test styling SVG from external style filter]
expected: FAIL
[Test styling SVG from external style clip-path]
expected: FAIL
[Test styling SVG from external style marker-end]
expected: FAIL
[Test styling SVG from external style marker-mid]
expected: FAIL
[Test styling SVG from external style mask-image]
expected: FAIL

View file

@ -1,8 +1,28 @@
[inline-style.html]
expected: ERROR
[Styling SVG from inline styles stroke]
expected: NOTRUN
expected: FAIL
[Styling SVG from inline styles fill]
expected: TIMEOUT
expected: FAIL
[Styling SVG from inline styles marker-start]
expected: FAIL
[Styling SVG from inline styles mask-image]
expected: FAIL
[Styling SVG from inline styles filter]
expected: FAIL
[Styling SVG from inline styles marker-mid]
expected: FAIL
[Styling SVG from inline styles clip-path]
expected: FAIL
[Styling SVG from inline styles mask]
expected: FAIL
[Styling SVG from inline styles marker-end]
expected: FAIL

View file

@ -1,8 +1,28 @@
[internal-stylesheet.html]
expected: ERROR
[Styling SVG from internal styles stroke]
expected: NOTRUN
expected: FAIL
[Styling SVG from internal styles fill]
expected: TIMEOUT
expected: FAIL
[Styling SVG from internal styles clip-path]
expected: FAIL
[Styling SVG from internal styles marker-mid]
expected: FAIL
[Styling SVG from internal styles mask-image]
expected: FAIL
[Styling SVG from internal styles marker-end]
expected: FAIL
[Styling SVG from internal styles filter]
expected: FAIL
[Styling SVG from internal styles marker-start]
expected: FAIL
[Styling SVG from internal styles mask]
expected: FAIL

View file

@ -1,8 +1,25 @@
[presentation-attribute.html]
expected: ERROR
[Styling SVG from presentation attributes fill]
expected: TIMEOUT
expected: FAIL
[Styling SVG from presentation attributes stroke]
expected: NOTRUN
expected: FAIL
[Styling SVG from presentation attributes marker-start]
expected: FAIL
[Styling SVG from presentation attributes filter]
expected: FAIL
[Styling SVG from presentation attributes mask]
expected: FAIL
[Styling SVG from presentation attributes marker-end]
expected: FAIL
[Styling SVG from presentation attributes marker-mid]
expected: FAIL
[Styling SVG from presentation attributes clip-path]
expected: FAIL

View file

@ -1,8 +1,28 @@
[processing-instruction.html]
expected: ERROR
[Styling SVG from ProcessingInstruction stroke]
expected: NOTRUN
expected: FAIL
[Styling SVG from ProcessingInstruction fill]
expected: TIMEOUT
expected: FAIL
[Styling SVG from ProcessingInstruction mask-image]
expected: FAIL
[Styling SVG from ProcessingInstruction marker-end]
expected: FAIL
[Styling SVG from ProcessingInstruction marker-mid]
expected: FAIL
[Styling SVG from ProcessingInstruction clip-path]
expected: FAIL
[Styling SVG from ProcessingInstruction marker-start]
expected: FAIL
[Styling SVG from ProcessingInstruction filter]
expected: FAIL
[Styling SVG from ProcessingInstruction mask]
expected: FAIL

View file

@ -1,5 +1,4 @@
[multiple-headers-and-values.html]
expected: ERROR
[Image uses the last recognized Referrer-Policy header value]
expected: NOTRUN
expected: FAIL

View file

@ -1,5 +1,4 @@
[multiple-headers-combined.html]
expected: ERROR
[Image uses the last recognized Referrer-Policy header value]
expected: NOTRUN
expected: FAIL

View file

@ -1,5 +1,4 @@
[multiple-headers-one-invalid.html]
expected: ERROR
[Referrer policy header parsing fails if one header is invalid]
expected: NOTRUN
expected: FAIL

View file

@ -1,5 +1,4 @@
[multiple-headers-one-unknown-token.html]
expected: ERROR
[Image uses last recognized referrer policy token from Referrer-Policy headers]
expected: NOTRUN
expected: FAIL

View file

@ -1,5 +1,4 @@
[multiple-headers.html]
expected: ERROR
[Image uses the last recognized Referrer-Policy header]
expected: NOTRUN
expected: FAIL

View file

@ -2,8 +2,8 @@
type: testharness
expected: TIMEOUT
[Sandboxed iframe with opaque origin doesn't send referrers.]
expected: NOTRUN
expected: TIMEOUT
[Sandboxed iframe with tuple origin sends referrers.]
expected: NOTRUN
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[area-navigate.html]
expected: TIMEOUT
[Area is responding with HTTP headers]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[attr-referrer-invalid-value.html]
[Invalid referrerpolicy values not reflected]
expected: FAIL

View file

@ -0,0 +1,4 @@
[fetch-messaging.html]
[Fetch is responding with HTTP headers]
expected: FAIL

View file

@ -0,0 +1,4 @@
[iframe-messaging.html]
[Iframe is responding with HTTP headers]
expected: FAIL

View file

@ -0,0 +1,4 @@
[image-decoding.html]
[Image is encoding headers as JSON.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[link-navigate.html]
[Link is responding with HTTP headers]
expected: FAIL

View file

@ -0,0 +1,4 @@
[script-messaging.html]
[Script is responding with HTTP headers]
expected: FAIL

View file

@ -0,0 +1,4 @@
[worker-messaging.html]
[Worker is responding with HTTP headers]
expected: FAIL

View file

@ -0,0 +1,4 @@
[xhr-messaging.html]
[XHR is responding with HTTP headers]
expected: FAIL

View file

@ -1,3 +1,4 @@
[unsupported-csp-referrer-directive.html]
type: testharness
disabled: https://github.com/servo/servo/issues/4767
[Image has a referrer despite CSP 'referrer' directive]
expected: FAIL

View file

@ -0,0 +1,4 @@
[insecure-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an http\n sub-resource via a-tag using the attr-referrer\n delivery method with no-redirect and when\n the target request is cross-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[insecure-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an http\n sub-resource via img-tag using the attr-referrer\n delivery method with keep-origin-redirect and when\n the target request is cross-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[insecure-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an http\n sub-resource via img-tag using the attr-referrer\n delivery method with no-redirect and when\n the target request is cross-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[insecure-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an http\n sub-resource via img-tag using the attr-referrer\n delivery method with swap-origin-redirect and when\n the target request is cross-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[upgrade-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an https\n sub-resource via a-tag using the attr-referrer\n delivery method with no-redirect and when\n the target request is cross-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[upgrade-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an https\n sub-resource via img-tag using the attr-referrer\n delivery method with keep-origin-redirect and when\n the target request is cross-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[upgrade-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an https\n sub-resource via img-tag using the attr-referrer\n delivery method with no-redirect and when\n the target request is cross-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[upgrade-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an https\n sub-resource via img-tag using the attr-referrer\n delivery method with swap-origin-redirect and when\n the target request is cross-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[insecure-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an http\n sub-resource via a-tag using the attr-referrer\n delivery method with no-redirect and when\n the target request is same-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[insecure-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an http\n sub-resource via img-tag using the attr-referrer\n delivery method with keep-origin-redirect and when\n the target request is same-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[insecure-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an http\n sub-resource via img-tag using the attr-referrer\n delivery method with no-redirect and when\n the target request is same-origin.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[insecure-protocol.http.html]
[The referrer URL is stripped-referrer when a\n document served over http requires an http\n sub-resource via img-tag using the attr-referrer\n delivery method with swap-origin-redirect and when\n the target request is same-origin.]
expected: FAIL

Some files were not shown because too many files have changed in this diff Show more