Revision f90d3d6e1592058b51eb94b48ff06f046e8ccf74 authored by Andreas Tolfsen on 13 April 2018, 13:33:50 UTC, committed by moz-wptsync-bot on 13 April 2018, 13:46:58 UTC
Ports tests added to Marionette in bug 1284232 to WPT.  These test that
the Arguments, Array, FileList, HTMLAllCollection, HTMLCollection,
HTMLFormControlsCollection, HTMLOptionsCollection, and NodeList
collections are properly serialised when returned from an injected script.

There is one failing test that needs more investigation.  My current
suspicion is that it is a JavaScript bug.
bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1453009
gecko-commit: 172094bca9a6e2f841e629aae292647e212d92c6
gecko-integration-branch: central
gecko-reviewers: whimboo
1 parent 4c8580c
Raw File
current-realm.html
<!-- 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() {
       var obj = self[0].document[val[0]](val[1], val[2])
       assert_global(obj)

       obj = Document.prototype[val[0]].call(self[0].document, val[1], val[2])
       assert_global(obj)
     }, val[0])
   })

   // Note: these are not [NewObject] and can be cached. But across globals?
   ;[["getElementsByTagName", "x"],
     ["getElementsByTagNameNS", null, "x"],
     ["getElementsByClassName", "x"]].forEach(function(val) {
     test(function() {
       var obj = self[0].document[val[0]](val[1], val[2])
       assert_global(obj)

       var obj2 = Document.prototype[val[0]].call(self[0].document, val[1], val[2])
       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() {
       var obj = self[0].document.implementation[val[0]](val[1], val[2], val[3])
       assert_global(obj)

       obj = DOMImplementation.prototype[val[0]].call(self[0].document.implementation, val[1], val[2], val[3])
       assert_global(obj)
     }, val[0])
   })

   ;[["item", 0],
     ["getNamedItem", "test"],
     ["getNamedItemNS", null, "test"]].forEach(function(val) {
     test(function() {
       var obj = self[0].document.body.attributes[val[0]](val[1], val[2])
       assert_global(obj)

       var obj2 = NamedNodeMap.prototype[val[0]].call(self[0].document.body.attributes, val[1], val[2])
       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() {
       var c = self[0].document.createElement("canvas").getContext("2d"),
           obj = c[val[0]](val[1], val[2], val[3], val[4]);
       assert_global(obj)
       assert_global(obj.data)

       obj = CanvasRenderingContext2D.prototype[val[0]].call(c, val[1], val[2], val[3], val[4]);
       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>
back to top