Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTML: Add tests for tokenization of noopener window.open feature #5306

Merged

Conversation

lyzadanger
Copy link
Contributor

@lyzadanger lyzadanger commented Mar 31, 2017

Attn @zcorpan on this one. Apologies in advance that the summary here is long-ish.

There's still a bunch of work to be done in this area (testing window.open features overall) but I wanted to open a smallish PR here as there are more wrinkles than usual. This series of tests chucks differently-formatted variants of the noopener feature at window.open.

First, note that this PR is for spec stuff that hasn't landed as of time of writing, but is looking like it is getting there: whatwg/html#2476 ... bit of a chicken and egg situation: I don't know whether tests need to land first here or whether that spec change needs to be merged first.

While Firefox has implemented the noopener support (disowning opener and returning null as expected in those cases), it has some not-to-spec behavior around window.close. To wit: a newly-created browser context with no opener cannot close itself. window.close in those situations will log a warning ("Scripts may not close windows that were not opened by script.") and the close will be unsuccessful. This behavior is alluded to in this bug thread but does not appear to have a bug opened specifically against it. Current spec language suggests the window in this case should be closable:

A browsing context is script-closable if it is an auxiliary browsing context that was created by a script (as opposed to by an action of the user), or if it is a top-level browsing context whose session history contains only one Document.

The current FF behavior means that for any time a window is opened and successfully disowns its opener, that window gets left behind at the end of the tests because it cannot be closed by any method I know of (automatically). Now, FF is currently failing to tokenize most variants of noopener so there aren't many windows left behind (just one for now), but, ick.

Which leads to another question: does this open too many windows for one test file? Are there performance/timeout concerns?

And also: are my assumptions for feature names that should be tokenized to noopener ultimately accurate? I tried to step through the tokenization steps and think of various valid and invalid variants.

Anyway, like I said, I wanted to get this out there before continuing on to other pieces of this in case I'm way off base.


This change is Reviewable

@wpt-pr-bot
Copy link
Collaborator

Notifying @jdm, @jgraham, @zcorpan, and @zqzhang. (Learn how reviewing works.)

@w3c-bots
Copy link

w3c-bots commented Mar 31, 2017

@w3c-bots
Copy link

w3c-bots commented Mar 31, 2017

var featureVariants = [
' noopener',
'noopener = ',
' no opener',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is wrong. Per the proposed spec as it stands right now this is equivalent to no=opener, but that's wrong also (https://github.com/whatwg/html/pull/2476/files#r109389922). I think this should result in name no opener and empty value (so unknown feature name). Let me try to fix the spec...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I must've misread the steps about ignoring whitespace in the tokenization: is it the case that whitespace inside/within of a name is not ignored? Only "trimmed" from start/end, as it were? I saw some comments in the HTML spec thread about white space and specific handling of characters. That's helpful information! Keep it coming and I'll get the right tests in place.

test (t => {
var featureVariants = [
'noopener=false',
',noopener=0, ',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking a bit about this case the other day. Maybe we should specify noopener to use the same logic as other "boolean" features like toolbar. They're set to true if the value is empty string or "yes" or parses to a non-zero integer (not sure about the range, I think short in chromium), otherwise false.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mikewest any opinion about this one? I think it is somewhat surprising that the noopener feature is enabled in toolbar=0,status=0,noopener=0...

@zcorpan
Copy link
Member

zcorpan commented Apr 3, 2017

The general approach looks good. We can merge the tests and the changes to the standard at the same time when they're ready.

@w3c-bots
Copy link

w3c-bots commented Apr 3, 2017

These tests are now available on w3c-test.org

@lyzadanger
Copy link
Contributor Author

@zcorpan Adjusted the bad whitespace-ish test. I'd like to keep this open and watch the specifics of the spec change PR for a bit so I can add more specific tests as language changes...

@lyzadanger
Copy link
Contributor Author

lyzadanger commented Apr 4, 2017

@zcorpan Updated significantly with details from updated spec PR. Locally Chrome is passing every single test, which is remarkable.

Still open:

  • u+0000, u+0001 or u+000c as window features separators (or not). Current tests are going by current spec language, which indicate ASCII whitespace ('\r', '\n', '\t', ' ') as well as '=' and ','.
  • Any changes to spec making value of noopener feature relevant. Tests right now assume value is ignored (per spec, which only references "key" of feature at present).

@lyzadanger
Copy link
Contributor Author

Opened a Mozilla bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1353466

@w3c-bots
Copy link

w3c-bots commented Apr 4, 2017

*This report has been truncated because the total content is 69155 characters in length, which is in excess of GitHub.com's limit for comments (65536 characters).

View the complete job log.

Firefox (nightly channel)

Testing web-platform-tests at revision ef14bd8

Firefox (nightly channel)

Testing web-platform-tests at revision ef14bd8
Using browser at version BuildID 20170404100210; SourceStamp b5d8b27a753725c1de41ffae2e338798f3b5cacd
Starting 10 test iterations
Using browser at version BuildID 20170404100210; SourceStamp b5d8b27a753725c1de41ffae2e338798f3b5cacd
Starting 10 test iterations
All results were stable

All results

10 tests ran
/IndexedDB/idbdatabase-transaction-exception-order.html
Subtest Results Messages
OK
IDBDatabase.transaction exception order: InvalidStateError vs. NotFoundError PASS
IDBDatabase.transaction exception order: InvalidStateError vs. InvalidAccessError PASS
IDBDatabase.transaction exception order: NotFoundError vs. TypeError PASS
/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-001.html

| Subtest | Results | y>10 tests ran

/IndexedDB/idbdatabase-transaction-exception-order.html
Subtest Results Messages
OK
IDBDatabase.transaction exception order: InvalidStateError vs. NotFoundError PASS
IDBDatabase.transaction exception order: InvalidStateError vs. InvalidAccessError PASS
IDBDatabase.transaction exception order: NotFoundError vs. TypeError PASS
/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-001.html
Subtest Results Messages
OK
tokenization should skip window features separators before name FAIL assert_equals: "=noopener" should activate feature "noopener" expected null but got object "[object Window]"
feature name should be converted to ASCII lowercase FAIL assert_equals: "NOOPENER" should activate feature "noopener" expected null but got object "[object Window]"
after name, tokenization should skip window features separators that are not "=" or "," FAIL assert_equals: "noopener\n =" should activate feature "noopener" expected null but got object "[object Window]"
Tokenizing should ignore window feature separators except "," after initial "=" and before value FAIL assert_equals: "noopener= yes" should activate feature "noopener" expected null but got object "[object Window]"
`Tokenizing Messages
---------------------------------------------------------------------------------------------------- --------- ---------------------------------------------------------------------------------------------------------------------
OK
tokenization should skip window features separators before name FAIL assert_equals: "=noopener" should activate feature "noopener" expected null but got object "[object Window]"
feature name should be converted to ASCII lowercase FAIL assert_equals: "NOOPENER" should activate feature "noopener" expected null but got object "[object Window]"
after name, tokenization should skip window features separators that are not "=" or "," FAIL assert_equals: "noopener\n =" should activate feature "noopener" expected null but got object "[object Window]"
Tokenizing should ignore window feature separators except "," after initial "=" and before value FAIL assert_equals: "noopener= yes" should activate feature "noopener" expected null but got object "[object Window]"
Tokenizing should read characters until first window feature separator as value FAIL assert_equals: "noopener=noopener" should set "noopener" expected null but got object "[object Window]"
"noopener" should be based on name (key), not value FAIL assert_equals: "noopener=false" should activate feature "noopener" expected null but got object "[object Window]"
invalid feature names should not tokenize as "noopener" PASS
/html/webappapis/timers/type-long-setinterval.html
Subtest Results Messages
OK
Type long timeout for setInterval PASS
/html/webappapis/timers/type-long-settimeout.html should read characters until first window feature separator as value` | FAIL | `assert_equals: "noopener=noopener" should set "noopener" expected null but got object "[object Window]"` | | `"noopener" should be based on name (key), not value` | FAIL | `assert_equals: "noopener=false" should activate feature "noopener" expected null but got object "[object Window]"` | | `invalid feature names should not tokenize as "noopener"` | PASS | |
/html/webappapis/timers/type-long-setinterval.html
Subtest Results Messages
OK
Type long timeout for setInterval PASS
/html/webappapis/timers/type-long-settimeout.html
Subtest Results Messages
OK
Type long timeout for setTimeout PASS
/streams/piping/pipe-through.dedicatedworker.html
Subtest Results Messages
OK
Piping through a duck-typed pass-through transform stream should work FAIL ReadableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL ReadableStream is not defined
Subtest Results Messages
OK
Type long timeout for setTimeout PASS
/streams/piping/pipe-through.dedicatedworker.html
Subtest Results Messages
OK
Piping through a duck-typed pass-through transform stream should work FAIL ReadableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL ReadableStream is not defined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL ReadableStream is not defined
/streams/piping/pipe-through.html
Subtest Results Messages
OK
Piping through a duck-typed pass-through transform stream should work FAIL ReadableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
`pipeThrough pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL ReadableStream is not defined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL ReadableStream is not defined
/streams/piping/pipe-through.html
Subtest Results Messages
OK
Piping through a duck-typed pass-through transform stream should work FAIL ReadableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL ReadableStream is not defined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL ReadableStream is not defined
/streams/piping/pipe-through.serviceworker.https.html
Subtest Results Messages
OK
Service worker test setup PASS
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL ReadableStream is not defined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL ReadableStream is not defined
/streams/piping/pipe-through.serviceworker.https.html
Subtest Results Messages
OK
Service worker test setup PASS
Piping through a duck-typed pass-through transform stream should work FAIL ReadableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL ReadableStream is not defined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL ReadableStream is not defined
/streams/piping/pipe-through.sharedworker.html

| Subtest | Results | Messages |
|--------------------------------------------------------------------------------------------------------|---------|--------------------------------ck_stability:| Piping through a duck-typed pass-through transform stream should work | FAIL | ReadableStream is not defined |
| Piping through a transform errored on the writable end does not cause an unhandled promise rejection | FAIL | WritableStream is not defined |
| pipeThrough generically calls pipeTo with the appropriate args | FAIL | ReadableStream is not defined |
| pipeThrough can handle calling a pipeTo that returns a non-promise object | FAIL | ReadableStream is not defined |
| pipeThrough can handle calling a pipeTo that returns a non-promise thenable object | FAIL | ReadableStream is not defined |
| pipeThrough should correct mark a real promise from a fake readable as handled | FAIL | ReadableStream is not defined |

/streams/piping/pipe-through.sharedworker.html
Subtest Results Messages
OK
Piping through a duck-typed pass-through transform stream should work FAIL ReadableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL ReadableStream is not defined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL ReadableStream is not defined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL ReadableStream is not defined
/webrtc/rtcpeerconnection/canTrickleIceCandidates.html

| Subtest | Results | Messa-|
| | OK | |
| Piping through a duck-typed pass-through transform stream should work | FAIL | ReadableStream is not defined |
| Piping through a transform errored on the writable end does not cause an unhandled promise rejection | FAIL | WritableStream is not defined |
| pipeThrough generically calls pipeTo with the appropriate args | FAIL | ReadableStream is not defined |
| pipeThrough can handle calling a pipeTo that returns a non-promise object | FAIL | ReadableStream is not defined |
| pipeThrough can handle calling a pipeTo that returns a non-promise thenable object | FAIL | ReadableStream is not defined |
| pipeThrough should correct mark a real promise from a fake readable as handled | FAIL | ReadableStream is not defined |

/webrtc/rtcpeerconnection/canTrickleIceCandidates.html
Subtest Results Messages
OK
canTrickleIceCandidates property is null prior to setRemoteDescription PASS
canTrickleIceCandidates property is true after setRemoteDescription with a=ice-options:trickle PASS
canTrickleIceCandidates property is false after setRemoteDescription without a=ice-options:trickle PASS
/webvr/idlharness.html
Subtest Results Messages
ges
------------------------------------------------------------------------------------------------------ --------- ----------
OK
canTrickleIceCandidates property is null prior to setRemoteDescription PASS
canTrickleIceCandidates property is true after setRemoteDescription with a=ice-options:trickle PASS
canTrickleIceCandidates property is false after setRemoteDescription without a=ice-options:trickle PASS
/webvr/idlharness.html
Subtest Results Messages
OK
Window interface: attribute onvrdisplayconnect PASS
Window interface: attribute onvrdisplaydisconnect PASS
Window interface: attribute onvrdisplayactivate PASS
Window interface: attribute onvrdisplaydeactivate PASS
Window interface: attribute onvrdisplayblur FAIL assert_own_property: The global object must have a property "onvrdisplayblur" expected property "onvrdisplayblur" missing
Window interface: attribute onvrdisplayfocus OK
Window interface: attribute onvrdisplayconnect PASS
Window interface: attribute onvrdisplaydisconnect PASS
Window interface: attribute onvrdisplayactivate PASS
Window interface: attribute onvrdisplaydeactivate PASS
Window interface: attribute onvrdisplayblur FAIL assert_own_property: The global object must have a property "onvrdisplayblur" expected property "onvrdisplayblur" missing
Window interface: attribute onvrdisplayfocus FAIL assert_own_property: The global object must have a property "onvrdisplayfocus" expected property "onvrdisplayfocus" missing
Window interface: attribute onvrdisplaypresentchange PASS
Navigator interface: operation getVRDisplays() PASS
Navigator interface: attribute activeVRDisplays PASS
Navigator interface: attribute vrEnabled FAIL assert_true: The prototype object must have a property "vrEnabled" expected true got false
HTMLIFrameElement interface: attribute allowvr FAIL assert_true: The prototype object must have a property "allowvr" expected true got false
Gamepad interface: attribute displayId FAIL assert_own_property: The global object must have a property "onvrdisplayfocus" expected property "onvrdisplayfocus" missing
Window interface: attribute onvrdisplaypresentchange PASS
Navigator interface: operation getVRDisplays() PASS
Navigator interface: attribute activeVRDisplays PASS
Navigator interface: attribute vrEnabled FAIL assert_true: The prototype object must have a property "vrEnabled" expected true got false
HTMLIFrameElement interface: attribute allowvr FAIL assert_true: The prototype object must have a property "allowvr" expected true got false
Gamepad interface: attribute displayId FAIL assert_true: The prototype object must have a property "displayId" expected true got false
VRDisplay interface: existence and properties of interface object PASS
VRDisplay interface object length PASS
VRDisplay interface object name PASS
VRDisplay interface: existence and properties of interface prototype object PASS
VRDisplay interface: existence and properties of interface prototype object's "constructor" property PASS
`VRDisplay interface: attribu FAIL assert_true: The prototype object must have a property "displayId" expected true got false
VRDisplay interface: existence and properties of interface object PASS
VRDisplay interface object length PASS
VRDisplay interface object name PASS
VRDisplay interface: existence and properties of interface prototype object PASS
VRDisplay interface: existence and properties of interface prototype object's "constructor" property PASS
VRDisplay interface: attribute isPresenting PASS
VRDisplay interface: attribute capabilities PASS
VRDisplay interface: attribute stageParameters PASS
VRDisplay interface: operation getEyeParameters(VREye) PASS
VRDisplay interface: attribute displayId PASS
VRDisplay interface: attribute displayName PASS
VRDisplte isPresenting PASS
VRDisplay interface: attribute capabilities PASS
VRDisplay interface: attribute stageParameters PASS
VRDisplay interface: operation getEyeParameters(VREye) PASS
VRDisplay interface: attribute displayId PASS
VRDisplay interface: attribute displayName PASS
VRDisplay interface: operation getFrameData(VRFrameData) PASS
VRDisplay interface: attribute depthNear PASS
VRDisplay interface: attribute depthFar PASS
VRDisplay interface: operation requestAnimationFrame(FrameRequestCallback) PASS
VRDisplay interface: operation cancelAnimationFrame(long) PASS
VRDisplay interface: operation requestPresent([object Object]) PASS
VRDisplay interface: attribute depthNear PASS
VRDisplay interface: attribute depthFar PASS
VRDisplay interface: operation requestAnimationFrame(FrameRequestCallback) PASS
VRDisplay interface: operation cancelAnimationFrame(long) PASS
VRDisplay interface: operation requestPresent([object Object]) PASS
VRDisplay interface: operation exitPresent() PASS
VRDisplay interface: operation getLayers() PASS
VRDisplay interface: operation submitFrame() PASS
VRDisplayCapabilities interface: existence and properties of interface object PASS
VRDisplayCapabilities interface object length PASS
VRDisplayCapabilities interface object name PASS _stability:
VRDisplay interface: operation getLayers() PASS
VRDisplay interface: operation submitFrame() PASS
VRDisplayCapabilities interface: existence and properties of interface object PASS
VRDisplayCapabilities interface object length PASS
VRDisplayCapabilities interface object name PASS
VRDisplayCapabilities interface: existence and properties of interface prototype object PASS
VRDisplayCapabilities interface: existence and properties of interface prototype object's "constructor" property PASS
VRDisplayCapabilities interface: attribute hasPosition PASS
VRDisplayCapabilities interface: attribute hasExternalDisplay PASS
VRDisplayCapabilities interface: attribute canPresent PASS
VRDisplayCapabilities interface: attribute maxLayers PASS
VRDisplayCapabilities interface: existence and properties of interface prototype object PASS
VRDisplayCapabilities interface: existence and properties of interface prototype object's "constructor" property PASS
VRDisplayCapabilities interface: attribute hasPosition PASS
VRDisplayCapabilities interface: attribute hasExternalDisplay PASS
VRDisplayCapabilities interface: attribute canPresent PASS
VRDisplayCapabilities interface: attribute maxLayers PASS
VRPose interface: existence and properties of interface object PASS
VRPose interface object length PASS
VRPose interface object name PASS
VRPose interface: existence and properties of interface prototype object PASS
VRPose interface: existence and properties of interface prototype object's "constructor" property PASS
VRPose interface: attribute position PASS
VRPose interface: existence and properties of interface object PASS
VRPose interface object length PASS
VRPose interface object name PASS
VRPose interface: existence and properties of interface prototype object PASS
VRPose interface: existence and properties of interface prototype object's "constructor" property PASS
VRPose interface: attribute position PASS
VRPose interface: attribute linearVelocity PASS
VRPose interface: attribute linearAcceleration PASS
VRPose interface: attribute orientation PASS
VRPose interface: attribute angularVelocity PASS
VRPose interface: attribute angularAcceleration PASS
VRFrameData interface: existence and properties of interface object PASS
VRPose interface: attribute linearVelocity PASS
VRPose interface: attribute linearAcceleration PASS
VRPose interface: attribute orientation PASS
VRPose interface: attribute angularVelocity PASS
VRPose interface: attribute angularAcceleration PASS
VRFrameData interface: existence and properties of interface object PASS
VRFrameData interface object length PASS
VRFrameData interface object name PASS
VRFrameData interface: existence and properties of interface prototype object PASS
VRFrameData interface: existence and properties of interface prototype object's "constructor" property PASS
VRFrameData interface: attribute leftProjectionMatrix PASS
VRFrameData interface: attribute leftViewMatrix PASS
VRFrameData interface object length PASS
VRFrameData interface object name PASS
VRFrameData interface: existence and properties of interface prototype object PASS
VRFrameData interface: existence and properties of interface prototype object's "constructor" property PASS
VRFrameData interface: attribute leftProjectionMatrix PASS
VRFrameData interface: attribute leftViewMatrix PASS
VRFrameData interface: attribute rightProjectionMatrix PASS
VRFrameData interface: attribute rightViewMatrix PASS
VRFrameData interface: attribute pose PASS
VREyeParameters interface: existence and properties of interface object PASS
VREyeParameters interface object length PASS
VREyeParameters interface object name PASS
VRFrameData interface: attribute rightProjectionMatrix PASS
VRFrameData interface: attribute rightViewMatrix PASS
VRFrameData interface: attribute pose PASS
VREyeParameters interface: existence and properties of interface object PASS
VREyeParameters interface object length PASS
VREyeParameters interface object name PASS
VREyeParameters interface: existence and properties of interface prototype object PASS
VREyeParameters interface: existence and properties of interface prototype object's "constructor" property PASS
VREyeParameters interface: attribute offset PASS
VREyeParameters interface: attribute renderWidth PASS
VREyeParameters interface: attribute renderHeight PASS
VRStageParameters interface: existence and properties of interface object PA
VREyeParameters interface: existence and properties of interface prototype object PASS
VREyeParameters interface: existence and properties of interface prototype object's "constructor" property PASS
VREyeParameters interface: attribute offset PASS
VREyeParameters interface: attribute renderWidth PASS
VREyeParameters interface: attribute renderHeight PASS
VRStageParameters interface: existence and properties of interface object PASS
VRStageParameters interface object length PASS
VRStageParameters interface object name PASS
VRStageParameters interface: existence and properties of interface prototype object PASS
VRStageParameters interface: existence and properties of interface prototype object's "constructor" property PASS
VRStageParameters interface: attribute sittingToStandingTransform PASS
VRStageParameters interface: attribute sizeX SS
VRStageParameters interface object length PASS
VRStageParameters interface object name PASS
VRStageParameters interface: existence and properties of interface prototype object PASS
VRStageParameters interface: existence and properties of interface prototype object's "constructor" property PASS
VRStageParameters interface: attribute sittingToStandingTransform PASS
VRStageParameters interface: attribute sizeX PASS
VRStageParameters interface: attribute sizeZ PASS
VRDisplayEvent interface: existence and properties of interface object

@w3c-bots
Copy link

w3c-bots commented Apr 4, 2017

View the complete job log.

Chrome (unstable channel)

Testing web-platform-tests at revision ef14bd8
Using browser at version 59.0.3053.3 dev
Starting 10 test iterations
All results were stable

All results

10 tests ran
/IndexedDB/idbdatabase-transaction-exception-order.html
Subtest Results Messages
OK
IDBDatabase.transaction exception order: InvalidStateError vs. NotFoundError PASS
IDBDatabase.transaction exception order: InvalidStateError vs. InvalidAccessError PASS
IDBDatabase.transaction exception order: NotFoundError vs. TypeError PASS
/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-001.html
Subtest Results Messages
OK
tokenization should skip window features separators before name FAIL `assert_equals: "
feature name should be converted to ASCII lowercase PASS
after name, tokenization should skip window features separators that are not "=" or "," FAIL assert_equals: "foo noopener=1" should activate feature "noopener" expected null but got object "[object Window]"
Tokenizing should ignore window feature separators except "," after initial "=" and before value PASS
Tokenizing should read characters until first window feature separator as value PASS
"noopener" should be based on name (key), not value PASS
invalid feature names should not tokenize as "noopener" FAIL assert_not_equals: "noopener" should NOT activate feature "noopener" got disallowed value null
/html/webappapis/timers/type-long-setinterval.html
Subtest Results Messages
OK
Type long timeout for setInterval PASS
/html/webappapis/timers/type-long-settimeout.html
Subtest Results Messages
OK
Type long timeout for setTimeout PASS
/streams/piping/pipe-through.dedicatedworker.html
Subtest Results Messages
OK
Piping through a duck-typed pass-through transform stream should work FAIL WritableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL Cannot read property 'call' of undefined
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL Cannot read property 'call' of undefined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL Cannot read property 'call' of undefined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL Cannot read property 'call' of undefined
/streams/piping/pipe-through.html
Subtest Results Messages
OK
Piping through a duck-typed pass-through transform stream should work FAIL WritableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL Cannot read property 'call' of undefined
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL Cannot read property 'call' of undefined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL Cannot read property 'call' of undefined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL Cannot read property 'call' of undefined
/streams/piping/pipe-through.serviceworker.https.html
Subtest Results Messages
OK
Service worker test setup PASS
Piping through a duck-typed pass-through transform stream should work FAIL WritableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL Cannot read property 'call' of undefined
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL Cannot read property 'call' of undefined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL Cannot read property 'call' of undefined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL Cannot read property 'call' of undefined
/streams/piping/pipe-through.sharedworker.html
Subtest Results Messages
OK
Piping through a duck-typed pass-through transform stream should work FAIL WritableStream is not defined
Piping through a transform errored on the writable end does not cause an unhandled promise rejection FAIL WritableStream is not defined
pipeThrough generically calls pipeTo with the appropriate args FAIL Cannot read property 'call' of undefined
pipeThrough can handle calling a pipeTo that returns a non-promise object FAIL Cannot read property 'call' of undefined
pipeThrough can handle calling a pipeTo that returns a non-promise thenable object FAIL Cannot read property 'call' of undefined
pipeThrough should correct mark a real promise from a fake readable as handled FAIL Cannot read property 'call' of undefined
/webrtc/rtcpeerconnection/canTrickleIceCandidates.html
Subtest Results Messages
OK
canTrickleIceCandidates property is null prior to setRemoteDescription FAIL assert_equals: canTrickleIceCandidates property is null expected (object) null but got (undefined) undefined
canTrickleIceCandidates property is true after setRemoteDescription with a=ice-options:trickle FAIL assert_true: canTrickleIceCandidates property is true after setRemoteDescription expected true got undefined
canTrickleIceCandidates property is false after setRemoteDescription without a=ice-options:trickle FAIL assert_false: canTrickleIceCandidates property is false after setRemoteDescription expected false got undefined
/webvr/idlharness.html
Subtest Results Messages
OK
Window interface: attribute onvrdisplayconnect FAIL assert_own_property: The global object must have a property "onvrdisplayconnect" expected property "onvrdisplayconnect" missing
Window interface: attribute onvrdisplaydisconnect FAIL assert_own_property: The global object must have a property "onvrdisplaydisconnect" expected property "onvrdisplaydisconnect" missing
Window interface: attribute onvrdisplayactivate FAIL assert_own_property: The global object must have a property "onvrdisplayactivate" expected property "onvrdisplayactivate" missing
Window interface: attribute onvrdisplaydeactivate FAIL assert_own_property: The global object must have a property "onvrdisplaydeactivate" expected property "onvrdisplaydeactivate" missing
Window interface: attribute onvrdisplayblur FAIL assert_own_property: The global object must have a property "onvrdisplayblur" expected property "onvrdisplayblur" missing
Window interface: attribute onvrdisplayfocus FAIL assert_own_property: The global object must have a property "onvrdisplayfocus" expected property "onvrdisplayfocus" missing
Window interface: attribute onvrdisplaypresentchange FAIL assert_own_property: The global object must have a property "onvrdisplaypresentchange" expected property "onvrdisplaypresentchange" missing
Navigator interface: operation getVRDisplays() FAIL assert_own_property: interface prototype object missing non-static operation expected property "getVRDisplays" missing
Navigator interface: attribute activeVRDisplays FAIL assert_true: The prototype object must have a property "activeVRDisplays" expected true got false
Navigator interface: attribute vrEnabled FAIL assert_true: The prototype object must have a property "vrEnabled" expected true got false
HTMLIFrameElement interface: attribute allowvr FAIL assert_true: The prototype object must have a property "allowvr" expected true got false
Gamepad interface: attribute displayId FAIL assert_true: The prototype object must have a property "displayId" expected true got false
VRDisplay interface: existence and properties of interface object FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface object length FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface object name FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: existence and properties of interface prototype object FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: existence and properties of interface prototype object's "constructor" property FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: attribute isPresenting FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: attribute capabilities FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: attribute stageParameters FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: operation getEyeParameters(VREye) FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: attribute displayId FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: attribute displayName FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: operation getFrameData(VRFrameData) FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: attribute depthNear FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: attribute depthFar FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: operation requestAnimationFrame(FrameRequestCallback) FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: operation cancelAnimationFrame(long) FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: operation requestPresent([object Object]) FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: operation exitPresent() FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: operation getLayers() FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplay interface: operation submitFrame() FAIL assert_own_property: self does not have own property "VRDisplay" expected property "VRDisplay" missing
VRDisplayCapabilities interface: existence and properties of interface object FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRDisplayCapabilities interface object length FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRDisplayCapabilities interface object name FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRDisplayCapabilities interface: existence and properties of interface prototype object FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRDisplayCapabilities interface: existence and properties of interface prototype object's "constructor" property FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRDisplayCapabilities interface: attribute hasPosition FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRDisplayCapabilities interface: attribute hasExternalDisplay FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRDisplayCapabilities interface: attribute canPresent FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRDisplayCapabilities interface: attribute maxLayers FAIL assert_own_property: self does not have own property "VRDisplayCapabilities" expected property "VRDisplayCapabilities" missing
VRPose interface: existence and properties of interface object FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface object length FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface object name FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface: existence and properties of interface prototype object FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface: existence and properties of interface prototype object's "constructor" property FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface: attribute position FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface: attribute linearVelocity FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface: attribute linearAcceleration FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface: attribute orientation FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface: attribute angularVelocity FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRPose interface: attribute angularAcceleration FAIL assert_own_property: self does not have own property "VRPose" expected property "VRPose" missing
VRFrameData interface: existence and properties of interface object FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface object length FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface object name FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface: existence and properties of interface prototype object FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface: existence and properties of interface prototype object's "constructor" property FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface: attribute leftProjectionMatrix FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface: attribute leftViewMatrix FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface: attribute rightProjectionMatrix FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface: attribute rightViewMatrix FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VRFrameData interface: attribute pose FAIL assert_own_property: self does not have own property "VRFrameData" expected property "VRFrameData" missing
VREyeParameters interface: existence and properties of interface object FAIL assert_own_property: self does not have own property "VREyeParameters" expected property "VREyeParameters" missing
VREyeParameters interface object length FAIL assert_own_property: self does not have own property "VREyeParameters" expected property "VREyeParameters" missing
VREyeParameters interface object name FAIL assert_own_property: self does not have own property "VREyeParameters" expected property "VREyeParameters" missing
VREyeParameters interface: existence and properties of interface prototype object FAIL assert_own_property: self does not have own property "VREyeParameters" expected property "VREyeParameters" missing
VREyeParameters interface: existence and properties of interface prototype object's "constructor" property FAIL assert_own_property: self does not have own property "VREyeParameters" expected property "VREyeParameters" missing
VREyeParameters interface: attribute offset FAIL assert_own_property: self does not have own property "VREyeParameters" expected property "VREyeParameters" missing
VREyeParameters interface: attribute renderWidth FAIL assert_own_property: self does not have own property "VREyeParameters" expected property "VREyeParameters" missing
VREyeParameters interface: attribute renderHeight FAIL assert_own_property: self does not have own property "VREyeParameters" expected property "VREyeParameters" missing
VRStageParameters interface: existence and properties of interface object FAIL assert_own_property: self does not have own property "VRStageParameters" expected property "VRStageParameters" missing
VRStageParameters interface object length FAIL assert_own_property: self does not have own property "VRStageParameters" expected property "VRStageParameters" missing
VRStageParameters interface object name FAIL assert_own_property: self does not have own property "VRStageParameters" expected property "VRStageParameters" missing
VRStageParameters interface: existence and properties of interface prototype object FAIL assert_own_property: self does not have own property "VRStageParameters" expected property "VRStageParameters" missing
VRStageParameters interface: existence and properties of interface prototype object's "constructor" property FAIL assert_own_property: self does not have own property "VRStageParameters" expected property "VRStageParameters" missing
VRStageParameters interface: attribute sittingToStandingTransform FAIL assert_own_property: self does not have own property "VRStageParameters" expected property "VRStageParameters" missing
VRStageParameters interface: attribute sizeX FAIL assert_own_property: self does not have own property "VRStageParameters" expected property "VRStageParameters" missing
VRStageParameters interface: attribute sizeZ FAIL assert_own_property: self does not have own property "VRStageParameters" expected property "VRStageParameters" missing
VRDisplayEvent interface: existence and properties of interface object FAIL assert_own_property: self does not have own property "VRDisplayEvent" expected property "VRDisplayEvent" missing
VRDisplayEvent interface object length FAIL assert_own_property: self does not have own property "VRDisplayEvent" expected property "VRDisplayEvent" missing
VRDisplayEvent interface object name FAIL assert_own_property: self does not have own property "VRDisplayEvent" expected property "VRDisplayEvent" missing
VRDisplayEvent interface: existence and properties of interface prototype object FAIL assert_own_property: self does not have own property "VRDisplayEvent" expected property "VRDisplayEvent" missing
VRDisplayEvent interface: existence and properties of interface prototype object's "constructor" property FAIL assert_own_property: self does not have own property "VRDisplayEvent" expected property "VRDisplayEvent" missing
VRDisplayEvent interface: attribute display FAIL assert_own_property: self does not have own property "VRDisplayEvent" expected property "VRDisplayEvent" missing
VRDisplayEvent interface: attribute reason FAIL assert_own_property: self does not have own property "VRDisplayEvent" expected property "VRDisplayEvent" missing

@zcorpan
Copy link
Member

zcorpan commented Apr 4, 2017

I think something like foo noopener=1 ought to fail in chromium/webkit

@lyzadanger
Copy link
Contributor Author

@zcorpan: Improved tests around breaking on separators, like the foo noopener=1 example you gave.

@@ -79,6 +81,7 @@
'noopener = \t ,',
'noopener\n=\r noopener,', // => ('noopener', 'noopener')
'noopener=,yes', // => ('noopener'), ('yes')
'noopener= foo=,' // => ('noopener', ''), ('foo', '')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually ('noopener', 'foo')

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😊 willfix.

@zcorpan
Copy link
Member

zcorpan commented Apr 4, 2017

This is looking pretty good!

Again @w3c-bots is confused about the commit range. -_-

It would be good with tests for U+0000 and U+000C as well. After that I think this and the spec change are ready to go. We can deal with noopener=0 as a new issue in whatwg/html.

@lyzadanger
Copy link
Contributor Author

@zcorpan You want I should do some rebasing to make this less chattery, history-wise?

@zcorpan
Copy link
Member

zcorpan commented Apr 4, 2017

Sure, a squash and rebase from latest master might also bring sanity to the stability checker.

@lyzadanger lyzadanger force-pushed the window-open-feature-noopener branch from 16c744b to 6e1b23b Compare April 4, 2017 20:41
'\n=noopener=',
'\tnoopener',
'\r,,,=noopener',
'\u0000noopener',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wait, this one is wrong. U+0000 is not a separator; ('\0noopener', '') is not a supported feature.

zcorpan added a commit to w3c/csswg-drafts that referenced this pull request Apr 6, 2017
See whatwg/html#2476

Also change the behavior for left=foo to act as if left=0 to align
with the behavior of at least WebKit and Chromium.

Tests:
web-platform-tests/wpt#5306
web-platform-tests/wpt#5390
zcorpan added a commit to whatwg/html that referenced this pull request Apr 6, 2017
This was specified in CSSOM View but the "noopener" feature did
not use the same tokenizer as the legacy features. Fixes #2474.

Also specify the aliases screenx, screeny, innerwidth, innerheight
for left, top, width, and height, respectively. Part of #2464.
Closes w3c/csswg-drafts#1128.

The tokenizer specified here closely follows Edge.
Chromium and WebKit are also very similar to Edge.
Difference from Edge: U+0000 does not end the string.
Difference from Chromium: U+0000 is not a separator.
Difference from WebKit/Chromium/Edge: U+000C is a separator.

For the input `width toolbar=450, height=450`,
Edge tokenizes like `width, toolbar=450, height=450` while
WebKit/Chromium like `width=450, height=450`.
The Edge behavior seems better.

Tests:
web-platform-tests/wpt#5306
web-platform-tests/wpt#5390
@zcorpan zcorpan merged commit e9c860b into web-platform-tests:master Apr 6, 2017
'noopener,=',
'noopener foo', // => ('noopener', ''), ('foo', '')
'foo noopener=1', // => ('foo', ''), ('noopener', '1')
'foo=\u000Cnoopener' // => ('foo', ''), ('noopener', '')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am unclear why this should activate noopener feature. I personally would have expected the result to be ('foo', 'noopener'). I would think the loop at 7.1 (https://html.spec.whatwg.org/#concept-window-open-features-tokenize) would skip past both the '=' and the '\u000C' since both are feature separators. Could someone please clarify?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bug in the test. Oops! I can fix.

http://software.hixie.ch/utilities/js/live-dom-viewer/saved/5061

zcorpan added a commit that referenced this pull request Apr 27, 2017
annevk pushed a commit that referenced this pull request Apr 27, 2017
inikulin pushed a commit to HTMLParseErrorWG/html that referenced this pull request May 9, 2017
This was specified in CSSOM View but the "noopener" feature did
not use the same tokenizer as the legacy features. Fixes whatwg#2474.

Also specify the aliases screenx, screeny, innerwidth, innerheight
for left, top, width, and height, respectively. Part of whatwg#2464.
Closes w3c/csswg-drafts#1128.

The tokenizer specified here closely follows Edge.
Chromium and WebKit are also very similar to Edge.
Difference from Edge: U+0000 does not end the string.
Difference from Chromium: U+0000 is not a separator.
Difference from WebKit/Chromium/Edge: U+000C is a separator.

For the input `width toolbar=450, height=450`,
Edge tokenizes like `width, toolbar=450, height=450` while
WebKit/Chromium like `width=450, height=450`.
The Edge behavior seems better.

Tests:
web-platform-tests/wpt#5306
web-platform-tests/wpt#5390
inikulin pushed a commit to HTMLParseErrorWG/html that referenced this pull request May 9, 2017
This was specified in CSSOM View but the "noopener" feature did
not use the same tokenizer as the legacy features. Fixes whatwg#2474.

Also specify the aliases screenx, screeny, innerwidth, innerheight
for left, top, width, and height, respectively. Part of whatwg#2464.
Closes w3c/csswg-drafts#1128.

The tokenizer specified here closely follows Edge.
Chromium and WebKit are also very similar to Edge.
Difference from Edge: U+0000 does not end the string.
Difference from Chromium: U+0000 is not a separator.
Difference from WebKit/Chromium/Edge: U+000C is a separator.

For the input `width toolbar=450, height=450`,
Edge tokenizes like `width, toolbar=450, height=450` while
WebKit/Chromium like `width=450, height=450`.
The Edge behavior seems better.

Tests:
web-platform-tests/wpt#5306
web-platform-tests/wpt#5390
alice pushed a commit to alice/html that referenced this pull request Jan 8, 2019
This was specified in CSSOM View but the "noopener" feature did
not use the same tokenizer as the legacy features. Fixes whatwg#2474.

Also specify the aliases screenx, screeny, innerwidth, innerheight
for left, top, width, and height, respectively. Part of whatwg#2464.
Closes w3c/csswg-drafts#1128.

The tokenizer specified here closely follows Edge.
Chromium and WebKit are also very similar to Edge.
Difference from Edge: U+0000 does not end the string.
Difference from Chromium: U+0000 is not a separator.
Difference from WebKit/Chromium/Edge: U+000C is a separator.

For the input `width toolbar=450, height=450`,
Edge tokenizes like `width, toolbar=450, height=450` while
WebKit/Chromium like `width=450, height=450`.
The Edge behavior seems better.

Tests:
web-platform-tests/wpt#5306
web-platform-tests/wpt#5390
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants