Index: LayoutTests/imported/web-platform-tests/html/browsers/the-window-object/window-properties.html |
diff --git a/LayoutTests/imported/web-platform-tests/html/browsers/the-window-object/window-properties.html b/LayoutTests/imported/web-platform-tests/html/browsers/the-window-object/window-properties.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..04ed6ca0a3b3e8c3cc244068e824fd997e29c495 |
--- /dev/null |
+++ b/LayoutTests/imported/web-platform-tests/html/browsers/the-window-object/window-properties.html |
@@ -0,0 +1,322 @@ |
+<!doctype html> |
+<meta charset=utf-8> |
+<title>Properties of the window object</title> |
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> |
+<link rel="help" href="http://ecma-international.org/ecma-262/5.1/#sec-15.1"> |
+<link rel="help" href="https://heycam.github.io/webidl/#interface-prototype-object"> |
+<link rel="help" href="https://heycam.github.io/webidl/#es-attributes"> |
+<link rel="help" href="https://heycam.github.io/webidl/#es-operations"> |
+<link rel="help" href="https://dom.spec.whatwg.org/#eventtarget"> |
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#window"> |
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#windowtimers"> |
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#windowbase64"> |
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#windowsessionstorage"> |
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#windowlocalstorage"> |
+<link rel="help" href="https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#dom-window-getselection"> |
+<link rel="help" href="http://dev.w3.org/csswg/cssom/#widl-def-Window"> |
+<link rel="help" href="http://dev.w3.org/csswg/cssom-view/#widl-def-Window"> |
+<script src="../../../../../resources/testharness.js"></script> |
+<script src="../../../../../resources/testharnessreport.js"></script> |
+<div id=log></div> |
+<script> |
+function assert_data_propdesc(pd, Writable, Enumerable, Configurable) { |
+ assert_equals(typeof pd, "object"); |
+ assert_equals(pd.writable, Writable); |
+ assert_equals(pd.enumerable, Enumerable); |
+ assert_equals(pd.configurable, Configurable); |
+} |
+function assert_accessor_propdesc(pd, hasSetter, Enumerable, Configurable) { |
+ assert_equals(typeof pd, "object"); |
+ assert_equals(typeof pd.get, "function"); |
+ assert_true("set" in pd, |
+ "Should always have a setter property on the property descriptor"); |
+ assert_equals(typeof pd.set, hasSetter ? "function" : "undefined"); |
+ assert_equals(pd.enumerable, Enumerable); |
+ assert_equals(pd.configurable, Configurable); |
+} |
+ |
+var unforgeableAttributes = [ |
+ "window", |
+ "document", |
+ "location", |
+ "top" |
+]; |
+ |
+var replaceableAttributes = [ |
+ "self", |
+ "locationbar", |
+ "menubar", |
+ "personalbar", |
+ "scrollbars", |
+ "statusbar", |
+ "toolbar", |
+ "frames", |
+ "parent", |
+ "external", |
+ "length", |
+ |
+ // CSSOM-View |
+ "screen", |
+ "scrollX", |
+ "scrollY", |
+ "pageXOffset", |
+ "pageYOffset", |
+ "innerWidth", |
+ "innerHeight", |
+ "screenX", |
+ "screenY", |
+ "outerWidth", |
+ "outerHeight", |
+ "devicePixelRatio", |
+]; |
+ |
+var methods = [ |
+ "close", |
+ "stop", |
+ "focus", |
+ "blur", |
+ "open", |
+ "alert", |
+ "confirm", |
+ "prompt", |
+ "print", |
+ // See below: "showModalDialog", |
+ "postMessage", |
+ |
+ // WindowBase64 |
+ "btoa", |
+ "atob", |
+ |
+ // WindowTimers |
+ "setTimeout", |
+ "clearTimeout", |
+ "setInterval", |
+ "clearInterval", |
+ |
+ // HTML Editing APIs |
+ "getSelection", |
+ |
+ // CSSOM |
+ "getComputedStyle", |
+ |
+ // CSSOM-View |
+ "matchMedia", |
+ "scroll", |
+ "scrollTo", |
+ "scrollBy" |
+]; |
+ |
+// We would like to remove showModalDialog from the platform, |
+// see <https://www.w3.org/Bugs/Public/show_bug.cgi?id=26437>. |
+if ("showModalDialog" in window) { |
+ methods.push("showModalDialog"); |
+} |
+ |
+var readonlyAttributes = [ |
+ "history", |
+ "frameElement", |
+ "navigator", |
+ "applicationCache", |
+ |
+ // WindowSessionStorage |
+ "sessionStorage", |
+ |
+ // WindowLocalStorage |
+ "localStorage", |
+]; |
+ |
+var writableAttributes = [ |
+ "name", |
+ "status", |
+ "opener", |
+ "onabort", |
+ "onafterprint", |
+ "onbeforeprint", |
+ "onbeforeunload", |
+ "onblur", |
+ "oncancel", |
+ "oncanplay", |
+ "oncanplaythrough", |
+ "onchange", |
+ "onclick", |
+ "onclose", |
+ "oncontextmenu", |
+ "oncuechange", |
+ "ondblclick", |
+ "ondrag", |
+ "ondragend", |
+ "ondragenter", |
+ "ondragleave", |
+ "ondragover", |
+ "ondragstart", |
+ "ondrop", |
+ "ondurationchange", |
+ "onemptied", |
+ "onended", |
+ "onerror", |
+ "onfocus", |
+ "onhashchange", |
+ "oninput", |
+ "oninvalid", |
+ "onkeydown", |
+ "onkeypress", |
+ "onkeyup", |
+ "onload", |
+ "onloadeddata", |
+ "onloadedmetadata", |
+ "onloadstart", |
+ "onmessage", |
+ "onmousedown", |
+ "onmousemove", |
+ "onmouseout", |
+ "onmouseover", |
+ "onmouseup", |
+ "onmousewheel", |
+ "onoffline", |
+ "ononline", |
+ "onpause", |
+ "onplay", |
+ "onplaying", |
+ "onpagehide", |
+ "onpageshow", |
+ "onpopstate", |
+ "onprogress", |
+ "onratechange", |
+ "onreset", |
+ "onresize", |
+ "onscroll", |
+ "onseeked", |
+ "onseeking", |
+ "onselect", |
+ "onshow", |
+ "onstalled", |
+ "onstorage", |
+ "onsubmit", |
+ "onsuspend", |
+ "ontimeupdate", |
+ "onunload", |
+ "onvolumechange", |
+ "onwaiting" |
+]; |
+ |
+test(function() { |
+ // 15.1.1 Value Properties of the Global Object |
+ ["NaN", "Infinity", "undefined"].forEach(function(id) { |
+ test(function() { |
+ assert_true(id in window, id + " in window"); |
+ assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ false, false, false); |
+ }, "Value Property: " + id); |
+ }); |
+}, "Value Properties of the Global Object"); |
+test(function() { |
+ // 15.1.2 Function Properties of the Global Object |
+ ["eval", "parseInt", "parseFloat", "isNaN", "isFinite"].forEach(function(id) { |
+ test(function() { |
+ assert_true(id in window, id + " in window"); |
+ assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ true, false, true); |
+ }, "Function Property: " + id); |
+ }); |
+}, "Function Properties of the Global Object"); |
+test(function() { |
+ // 15.1.3 URI Handling Function Properties |
+ ["decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent"].forEach(function(id) { |
+ test(function() { |
+ assert_true(id in window, id + " in window"); |
+ assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ true, false, true); |
+ }, "URI Handling Function Property: " + id); |
+ }); |
+}, "URI Handling Function Properties"); |
+test(function() { |
+ // 15.1.4 Constructor Properties of the Global Object |
+ ["Object", "Function", "Array", "String", "Boolean", "Number", "Date", |
+ "RegExp", "Error", "EvalError", "RangeError", "ReferenceError", |
+ "SyntaxError", "TypeError", "URIError"].forEach(function(id) { |
+ test(function() { |
+ assert_true(id in window, id + " in window"); |
+ assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ true, false, true); |
+ }, "Constructor Property: " + id); |
+ }); |
+}, "Constructor Properties of the Global Object"); |
+test(function() { |
+ // 15.1.5 Other Properties of the Global Object |
+ ["Math", "JSON"].forEach(function(id) { |
+ test(function() { |
+ assert_true(id in window, id + " in window"); |
+ assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ true, false, true); |
+ }, "Other Property: " + id); |
+ }); |
+}, "Other Properties of the Global Object"); |
+test(function() { |
+ // EventTarget interface |
+ ["addEventListener", "removeEventListener", "dispatchEvent"].forEach(function(id) { |
+ test(function() { |
+ var EventTargetProto = EventTarget.prototype; |
+ assert_true(id in window, id + " in window"); |
+ assert_equals(window[id], EventTargetProto[id]); |
+ assert_data_propdesc(Object.getOwnPropertyDescriptor(EventTargetProto, id), |
+ true, true, true); |
+ assert_equals(Object.getOwnPropertyDescriptor(window, id), undefined); |
+ }, "EventTarget method: " + id); |
+ }); |
+}, "EventTarget interface"); |
+test(function() { |
+ // Window interface |
+ methods.forEach(function(id) { |
+ test(function() { |
+ var WindowProto = Window.prototype; |
+ assert_true(id in window, id + " in window"); |
+ assert_false(id in WindowProto, id + " in Window.prototype"); |
+ assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ true, true, true); |
+ }, "Window method: " + id); |
+ }); |
+ readonlyAttributes.forEach(function(id) { |
+ test(function() { |
+ var WindowProto = Window.prototype; |
+ assert_true(id in window, id + " in window"); |
+ assert_false(id in WindowProto, id + " in Window.prototype"); |
+ assert_accessor_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ false, true, true); |
+ }, "Window readonly attribute: " + id); |
+ }); |
+ writableAttributes.forEach(function(id) { |
+ test(function() { |
+ var WindowProto = Window.prototype; |
+ assert_true(id in window, id + " in window"); |
+ assert_false(id in WindowProto, id + " in Window.prototype"); |
+ assert_accessor_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ true, true, true); |
+ }, "Window attribute: " + id); |
+ }); |
+ unforgeableAttributes.forEach(function(id) { |
+ test(function() { |
+ var WindowProto = Window.prototype; |
+ assert_true(id in window, id + " in window"); |
+ assert_false(id in WindowProto, id + " in Window.prototype"); |
+ // location has a [PutForwards] extended attribute. |
+ assert_accessor_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ id === "location", true, false); |
+ }, "Window unforgeable attribute: " + id); |
+ }); |
+ replaceableAttributes.forEach(function(id) { |
+ test(function() { |
+ var WindowProto = Window.prototype; |
+ assert_true(id in window, id + " in window"); |
+ assert_false(id in WindowProto, id + " in Window.prototype"); |
+ assert_accessor_propdesc(Object.getOwnPropertyDescriptor(window, id), |
+ true, true, true); |
+ }, "Window replaceable attribute: " + id); |
+ }); |
+}, "Window interface"); |
+test(function() { |
+ assert_equals(window.constructor, Window); |
+ assert_false(window.hasOwnProperty("constructor"), "window.constructor should not be an own property."); |
+ assert_data_propdesc(Object.getOwnPropertyDescriptor(Window.prototype, "constructor"), |
+ true, false, true); |
+}, "constructor"); |
+</script> |