| <!-- This tests the agreed upon outcome for https://www.w3.org/Bugs/Public/show_bug.cgi?id=24652 |
| that has not been reflected in the IDL standard yet due to lack of editing resources. |
| |
| TODO: https://github.com/w3c/webcrypto/issues/85 --> |
| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>Current Realm</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <iframe srcdoc="<body test>"></iframe> |
| <script> |
| setup({explicit_done:true}) |
| |
| function isObjectFromGlobal(object, global) { |
| return object instanceof global.Object; |
| } |
| function assert_global(obj) { |
| assert_false(isObjectFromGlobal(obj, self), obj + " should not be from top-level Realm") |
| assert_true(isObjectFromGlobal(obj, self[0]), obj + " should be from <iframe> Realm") |
| } |
| |
| onload = function() { |
| [["querySelectorAll", "test"], |
| ["createElement", "x"], |
| ["createElementNS", null, "x"], |
| ["createDocumentFragment"], |
| ["createTextNode", "test"], |
| ["createComment", "test"], |
| ["createProcessingInstruction", "x", "x"], |
| ["createAttribute", "x"], |
| ["createAttributeNS", "x", "x"], |
| ["createEvent", "Event"], |
| ["createRange"], |
| ["createNodeIterator", document.head], |
| ["createTreeWalker", document.head]].forEach(function(val) { |
| test(function() { |
| const method = val.shift(); |
| let obj = self[0].document[method](...val); |
| assert_global(obj) |
| |
| obj = Document.prototype[method].call(self[0].document, ...val); |
| assert_global(obj) |
| }, val[0]) |
| }) |
| |
| ;["Request", "Response"].forEach(val => { |
| test(() => { |
| const obj = new self[0][val]("about:blank"); |
| assert_global(obj); |
| |
| const cloneObj = obj.clone(); |
| assert_global(cloneObj); |
| |
| const involvedCloneObj = self[val].prototype["clone"].call(cloneObj); |
| assert_global(cloneObj); |
| }, val) |
| }) |
| |
| // Note: these are not [NewObject] and can be cached. But across globals? |
| ;[["getElementsByTagName", "x"], |
| ["getElementsByTagNameNS", null, "x"], |
| ["getElementsByClassName", "x"]].forEach(function(val) { |
| test(function() { |
| const method = val.shift(); |
| const obj = self[0].document[method](...val); |
| assert_global(obj) |
| |
| const obj2 = Document.prototype[method].call(self[0].document, ...val); |
| assert_global(obj) |
| |
| assert_equals(obj, obj2) // XXX this might be controversial |
| }, val[0]) |
| }) |
| |
| ;[["createDocumentType", "x", "", ""], |
| ["createDocument", null, "", null], |
| ["createHTMLDocument", "x"]].forEach(function(val) { |
| test(function() { |
| const method = val.shift(); |
| let obj = self[0].document.implementation[method](...val); |
| assert_global(obj) |
| |
| obj = DOMImplementation.prototype[method].call(self[0].document.implementation, ...val); |
| assert_global(obj) |
| }, val[0]) |
| }) |
| |
| ;[["item", 0], |
| ["getNamedItem", "test"], |
| ["getNamedItemNS", null, "test"]].forEach(function(val) { |
| test(function() { |
| const method = val.shift(); |
| const obj = self[0].document.body.attributes[method](...val); |
| assert_global(obj) |
| |
| const obj2 = NamedNodeMap.prototype[method].call(self[0].document.body.attributes, ...val); |
| assert_global(obj) |
| |
| assert_equals(obj, obj2) |
| }, "NamedNodeMap " + val[0]) |
| }) |
| |
| test(function() { |
| var c = self[0].document.createTextNode(""), |
| obj = c.splitText(0) |
| assert_global(obj) |
| |
| obj = Text.prototype.splitText.call(c, "") |
| assert_global(obj) |
| }, "splitText") |
| |
| ;["extractContents", |
| "cloneContents", |
| "cloneRange"].forEach(function(val) { |
| test(function() { |
| var c = self[0].document.createRange(), |
| obj = c[val]() |
| assert_global(obj) |
| |
| obj = Range.prototype[val].call(c) |
| assert_global(obj) |
| }, val) |
| }) |
| |
| ;["2d", "webgl"].forEach(function(val) { |
| test(function() { |
| var c = self[0].document.createElement("canvas"), |
| obj = c.getContext(val) |
| |
| // WebGL might not be enabled in this environment |
| if (!obj && val === "webgl") { |
| return; |
| } |
| |
| assert_global(obj) |
| obj = HTMLCanvasElement.prototype.getContext.call(c, val) |
| assert_global(obj) |
| }, "getContext " + val) |
| }) |
| |
| ;[["createImageData", 5, 5], |
| ["getImageData", 5, 5, 5, 5]].forEach(function(val) { |
| test(function() { |
| const method = val.shift(); |
| const c = self[0].document.createElement("canvas").getContext("2d"); |
| let obj = c[method](...val); |
| assert_global(obj) |
| assert_global(obj.data) |
| |
| obj = CanvasRenderingContext2D.prototype[method].call(c, ...val); |
| assert_global(obj) |
| assert_global(obj.data) |
| }, val[0]) |
| }) |
| |
| test(function() { |
| var c = new self[0].FontFace("test", "about:blank"), |
| obj = c.load() |
| assert_global(obj) |
| |
| obj = FontFace.prototype.load.call(c) |
| assert_global(obj) |
| }, "FontFace's load()") |
| |
| done() |
| } |
| </script> |