Basic testing for the window returning window.open() becoming remote when navigating cross-origin.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS w.location.href is "about:blank"
PASS w.name threw exception SecurityError: The operation is insecure..
FAIL w.location.href should throw a SecurityError. Threw a TypeError.
PASS w.document threw exception SecurityError: The operation is insecure..
PASS w.history threw exception SecurityError: The operation is insecure..
PASS w.locationbar threw exception SecurityError: The operation is insecure..
PASS w.status threw exception SecurityError: The operation is insecure..
PASS w.frameElement threw exception SecurityError: The operation is insecure..
PASS w.navigator threw exception SecurityError: The operation is insecure..
PASS w.alert threw exception SecurityError: The operation is insecure..
PASS w.localStorage threw exception SecurityError: The operation is insecure..
PASS w.sessionStorage threw exception SecurityError: The operation is insecure..
PASS w.event threw exception SecurityError: The operation is insecure..
PASS w.window is w
PASS w.self is w
PASS w.top is w
PASS w.parent is w
PASS w.frames is w
PASS w.closed is false
PASS w.length is 0
PASS w.opener is window
PASS w.close is an instance of Function
PASS w.focus is an instance of Function
PASS w.blur is an instance of Function
PASS w.postMessage is an instance of Function
PASS w.close is w.close
PASS w.focus is w.focus
PASS w.blur is w.blur
PASS w.postMessage is w.postMessage
PASS w.postMessage.length is 1
PASS w.postMessage('test', '*') did not throw exception.
PASS w.focus() did not throw exception.
PASS w.blur() did not throw exception.
PASS w.then is undefined
PASS w.location did not throw exception.
FAIL w.location should not be null.
PASS areArraysEqual(actual_properties, expected_property_names) is true
PASS Object.getPrototype(w) threw exception TypeError: Object.getPrototype is not a function. (In 'Object.getPrototype(w)', 'Object.getPrototype' is undefined).
PASS Object.setPrototype(w, {}) threw exception TypeError: Object.setPrototype is not a function. (In 'Object.setPrototype(w, {})', 'Object.setPrototype' is undefined).
PASS Object.preventExtensions(w) threw exception TypeError: Cannot prevent extensions on this object.
PASS Object.defineProperty(w, 'foo', {value: 1}) threw exception SecurityError: The operation is insecure..
PASS delete w.closed threw exception SecurityError: The operation is insecure..
PASS w.foo = 1 threw exception SecurityError: The operation is insecure..
PASS successfullyParsed is true
Some tests failed.

TEST COMPLETE

