docshell/test/test_bug369814.html

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

     1 <!DOCTYPE HTML>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=369814
     5 -->
     6 <head>
     7   <title>Test for Bug 369814</title>
     8   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     9   <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
    10   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    11 </head>
    12 <body>
    13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=384014">Mozilla Bug 369814</a>
    15 <p>
    17 <pre id="test">
    18 <script class="testbody" type="text/javascript">
    20 /** Tests for Bug 369814 **/
    22 SimpleTest.waitForExplicitFinish();
    24 // Because child scripts won't be able to run to tell us they're done,
    25 // we need to just wait for them.  Wait this many event loop spins before
    26 // checking the results.
    27 const gLoadEventLoopCount = 100;
    29 var gCurrentTest;
    30 var gTargetWindow;
    31 var gNumPokes;
    32 var gTestFrame;
    34 /**
    35  * Called by documents loaded from jar files to indicate that they can access
    36  * this document.
    37  */
    38 function poke(description) {
    39   ok(false, gCurrentTest['name'] + ": got unexpected poke: " + description);
    40   gNumPokes++;
    41 }
    43 function loadEvent(window, callback)
    44 {
    45   var fn = function() {
    46     window.removeEventListener("load", fn, false);
    47     callback();
    48   };
    49   window.addEventListener("load", fn, false);
    50 }
    52 function loadTestTarget(callback)
    53 {
    54   gTargetWindow = window.open("http://mochi.test:8888", "bug369814target");
    55   loadEvent(gTargetWindow, callback);
    56 }
    58 function closeTestTarget()
    59 {
    60   gTargetWindow.close();
    61   gTargetWindow = null;
    62 }
    64 function loadErrorTest(test)
    65 {
    66   // Give the frame a chance to fail at loading.
    67   // How do detect failure to load?  Error pages don't fire load
    68   // events.  But we can load another page before the error page and
    69   // then use its unload handler to know when the error page is just
    70   // about loaded; at that point a single trip through the event loop
    71   // should do the trick.
    72   loadEvent(gTestFrame, function() {
    73       gTestFrame.src = test['url'];
    74     });
    75   gTestFrame.unloading = function() {
    76     gTestFrame.unloading = null;
    77     // Go out to the event loop once so that unload processing finishes and
    78     // the new document is set up.
    79     setTimeout(function() {
    80       // XXX: There doesn't seem to be a reliable check for "got an error,"
    81       // but reaching in to an error document will throw an exception
    82       var errorPage;
    83       try {
    84         var item = gTestFrame.contentDocument.getElementById(gCurrentTest['data-iframe']);
    85         errorPage = false;
    86       } catch (e) {
    87         errorPage = true;
    88       }
    89       ok(errorPage, gCurrentTest["name"] + ": should block a suspicious JAR load.");
    91       finishTest();
    92     }, 0);
    93   }
    94   var unloadDetector = "data:text/html,<script>window.onunload = function() { frameElement.unloading(); }</" + "script>";
    95   gTestFrame.src = unloadDetector;
    96 }
    98 function iframeTest(test) {
    99   gTestFrame.src = test['url'];
   100   loadEvent(gTestFrame, function() {
   101       finishTest();
   102     });
   103 }
   106 function hitEventLoop(func, times) {
   107   if (times > 0) {
   108     SimpleTest.executeSoon(function() { hitEventLoop(func, times-1); });
   109   } else {
   110     SimpleTest.executeSoon(func);
   111   }
   112 }
   114 function refreshTest(test) {
   115   gTestFrame.src = test['url'];
   116   loadEvent(gTestFrame, function() {
   117       // Wait for the frame to try and refresh
   118       // XXX: a "blocked redirect" signal would be needed to get rid of
   119       // this timeout.
   120       hitEventLoop(function() {
   121           finishTest();
   122         }, gLoadEventLoopCount);
   123     });
   124 }
   126 function anchorTest(test) {
   127   loadTestTarget(function() {
   128       gTestFrame.src = test['url'];
   129       loadEvent(gTestFrame, function() {
   130         sendMouseEvent({type:'click'}, 'target', gTestFrame.contentWindow);
   131         sendMouseEvent({type:'click'}, 'notarget', gTestFrame.contentWindow);
   133         // Give the clicks a chance to load
   134         hitEventLoop(function() {
   135             closeTestTarget();
   136             finishTest();
   137           }, gLoadEventLoopCount);
   138         });
   139     });
   140 }
   142 var gTests = [
   143   { "name" : "iframes.html loaded from non-jar type, pref disabled",
   144     "url" : "jar:http://mochi.test:8888/tests/docshell/test/bug369814.zip!/iframes.html",
   145     "pref" : false,
   146     "pokes" : { },
   147     "func" : loadErrorTest,
   148   },
   149   { "name" : "refresh.html loaded from non-jar type, pref enabled",
   150     "url" : "jar:http://mochi.test:8888/tests/docshell/test/bug369814.zip!/refresh.html",
   151     "pref" : true,
   152     "pokes" : { },
   153     "func" : refreshTest,
   154   },
   155   { "name" : "iframes.html loaded from non-jar type, pref enabled",
   156     "url" : "jar:http://mochi.test:8888/tests/docshell/test/bug369814.zip!/iframes.html",
   157     "pref" : true,
   158     "pokes" : { },
   159     "func" : iframeTest,
   160   },
   161   { "name" : "anchors.html loaded from non-jar type, pref enabled",
   162     "url" : "jar:http://mochi.test:8888/tests/docshell/test/bug369814.zip!/anchors.html",
   163     "pref" : true,
   164     "pokes" : { },
   165     "func" : anchorTest,
   166   },
   167   { "name" : "iframes.html loaded from view-source jar type, pref disabled",
   168     "url" : "jar:view-source:http://mochi.test:8888/tests/docshell/test/bug369814.jar!/iframes.html",
   169     "pref" : false,
   170     "pokes" : { },
   171     "func" : loadErrorTest
   172   },
   173   { "name" : "iframes.html loaded from view-source jar type, pref enabled",
   174     "url" : "jar:view-source:http://mochi.test:8888/tests/docshell/test/bug369814.jar!/iframes.html",
   175     "pref" : true,
   176     "pokes" : { },
   177     "func" : loadErrorTest
   178   },
   179 ];
   181 var gNextTest = 0;
   183 function runNextTest()
   184 {
   185   if (gNextTest < gTests.length) {
   186     gCurrentTest = gTests[gNextTest++];
   187     gNumPokes = 0;
   189     SpecialPowers.pushPrefEnv({"set": [["network.jar.open-unsafe-types", gCurrentTest['pref']]]}, function() {
   191       // Create a new frame each time, so our restictions on loads in a
   192       // jar:-loaded iframe don't interfere with the test.
   193       if (gTestFrame) {
   194         document.body.removeChild(gTestFrame);
   195       }
   196       gTestFrame = document.createElement("iframe");
   197       document.body.insertBefore(gTestFrame, $("test"));
   199       gCurrentTest['func'](gCurrentTest);
   200     });
   201   } else {
   202     SimpleTest.finish();
   203   }
   204 }
   206 function finishTest()
   207 {
   208   SpecialPowers.pushPrefEnv({"set": [["network.jar.open-unsafe-types", false]]}, function() {
   209     if (gNumPokes == 0) {
   210       ok(true, gCurrentTest["name"] + ": no unexpected pokes");
   211     }
   213     runNextTest();
   214   });
   215 }
   217 addLoadEvent(runNextTest);
   219 </script>
   220 </pre>
   221 </body>
   222 </html>

mercurial