content/base/test/test_mozfiledataurl.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
     5   <title>Test for File urls</title>
     6   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>        
     7   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     8 </head>
     9 <body onload="gen.next()">
    10 <p id="display">
    11 <iframe id=inner></iframe>
    12 <iframe id=iframe></iframe>
    13 <img id=img onload="gen.send(event);">
    14 <audio id=audio onloadeddata="gen.send(event);">
    15 <input type=file id=fileList>
    16 </p>
    17 <div id="content" style="display: none">
    19 </div>
    20 <pre id="test">
    21 <script class="testbody" type="application/javascript;version=1.8">
    23 try {
    24   URL.createObjectURL(undefined);
    25 } catch(e) { }
    27 window.addEventListener("message", function(e) {
    28   gen.send(JSON.parse(e.data));
    29 }, false);
    31 const innerSameSiteURI = "file_mozfiledataurl_inner.html";
    32 const innerCrossSiteURI = "http://example.com/tests/content/base/test/file_mozfiledataurl_inner.html"
    34 gen = runTest();
    35 SimpleTest.waitForExplicitFinish();
    37 function runTest() {
    38   inner = document.getElementById('inner');
    39   img = document.getElementById('img');
    40   audio = document.getElementById('audio');
    41   iframe = document.getElementById('iframe');
    42   inner.onload = function() { gen.send("inner loaded"); };
    44   // Attempt to load a image in this document
    45   var file = getFile("file_mozfiledataurl_img.jpg");
    46   var fileurl = URL.createObjectURL(file);
    47   img.src = fileurl;
    48   var e = (yield);
    49   is(e.type, "load", "loaded successfully");
    50   is(img.width, 120, "correct width");
    51   is(img.height, 90, "correct height");
    53   // Revoke url and attempt to load a image in this document
    54   img.src = "file_mozfiledataurl_img.jpg";
    55   is((yield).type, "load", "successfull reset image");
    56   URL.revokeObjectURL(fileurl);
    57   todo(false, "urls need to act like 404s, not fail to parse");
    58 /*  img.src = fileurl;
    59   var e = (yield);
    60   is(e.type, "error", "failed successfully");
    61   isnot(img.width, 120, "correct error width");
    62   isnot(img.height, 90, "correct error height");
    63 */
    64   // Generate new fileurl and make sure it's different from the old
    65   var oldFileurl = fileurl;
    66   var fileurl = URL.createObjectURL(file);
    67   isnot(fileurl, oldFileurl, "URL.createObjectURL generated the same url twice");
    69   // Attempt to load an image in a different same-origin document
    70   inner.src = innerSameSiteURI;
    71   yield undefined;
    72   inner.contentWindow.postMessage(JSON.stringify({img:fileurl}), "*");
    73   var res = (yield);
    74   is(res.type, "load", "loaded successfully");
    75   is(res.width, 120, "correct width");
    76   is(res.height, 90, "correct height");
    78   // Attempt to load an image in a different cross-origin document
    79   inner.src = innerCrossSiteURI;
    80   yield undefined;
    81   inner.contentWindow.postMessage(JSON.stringify({img:fileurl}), "*");
    82   var res = (yield);
    83   is(res.type, "error", "failed successfully");
    84   isnot(res.width, 120, "correct error width");
    85   isnot(res.height, 90, "correct error height");
    87   // Attempt to load an audio in this document
    88   var file = getFile("file_mozfiledataurl_audio.ogg");
    89   var fileurl = URL.createObjectURL(file);
    90   audio.src = fileurl;
    91   var e = (yield);
    92   is(e.type, "loadeddata", "loaded successfully");
    94   // Revoke url and attempt to load a audio in this document
    95   audio.src = "file_mozfiledataurl_audio.ogg";
    96   is((yield).type, "loadeddata", "successfully reset audio");
    97   URL.revokeObjectURL(fileurl);
    98   todo(false, "urls need to act like 404s, not fail to parse");
    99 /*  img.src = fileurl;
   100   var e = (yield);
   101   is(e.type, "error", "failed successfully");
   102   isnot(img.width, 120, "correct error width");
   103   isnot(img.height, 90, "correct error height");
   104 */
   105   // Generate new fileurl and make sure it's different from the old
   106   var oldFileurl = fileurl;
   107   var fileurl = URL.createObjectURL(file);
   108   isnot(fileurl, oldFileurl, "URL.createObjectURL generated the same url twice");
   110   // Attempt to load an audio in a different same-origin document
   111   inner.src = innerSameSiteURI;
   112   yield undefined;
   113   inner.contentWindow.postMessage(JSON.stringify({audio:fileurl}), "*");
   114   var res = (yield);
   115   is(res.type, "loadeddata", "loaded successfully");
   117   // Attempt to load an audio in a different cross-origin document
   118   inner.src = innerCrossSiteURI;
   119   yield undefined;
   120   inner.contentWindow.postMessage(JSON.stringify({audio:fileurl}), "*");
   121   var res = (yield);
   122   is(res.type, "error", "failed successfully");
   124   // Attempt to load a HTML document in an iframe in this document
   125   iframe.onload = function() { gen.next(); };
   126   iframe.src = "file_mozfiledataurl_doc.html";
   127   yield undefined;
   128   is(iframe.contentDocument.getElementsByTagName("p")[0].textContent,
   129      "This here is a document!",
   130      "iframe loaded successfully");
   131   is(iframe.contentDocument.getElementById("img").width, 120,
   132      "image in iframe width");
   133   is(iframe.contentDocument.getElementById("img").height, 90,
   134      "image in iframe height");
   136   // Attempt to load a HTML document in an iframe in this document, using file url
   137   file = getFile("file_mozfiledataurl_doc.html");
   138   fileurl = URL.createObjectURL(file);
   139   iframe.src = fileurl;
   140   yield undefined;
   141   is(iframe.contentDocument.getElementsByTagName("p")[0].textContent,
   142      "This here is a document!",
   143      "iframe loaded successfully");
   144   isnot(iframe.contentDocument.getElementById("img").width, 120,
   145         "failed image in iframe width");
   146   isnot(iframe.contentDocument.getElementById("img").height, 90,
   147         "failed image in iframe height");
   149   // Attempt to load a HTML document in an iframe in inner document
   150   inner.src = innerSameSiteURI;
   151   is((yield), "inner loaded", "correct gen.next()");
   152   inner.contentWindow.postMessage(JSON.stringify({iframe:"file_mozfiledataurl_doc.html"}), "*");
   153   var res = (yield);
   154   is(res.type, "load", "loaded successfully");
   155   is(res.text, "This here is a document!", "loaded successfully");
   156   is(res.imgWidth, 120, "correct width");
   158   // Attempt to load a HTML document in an iframe in inner document, using file url
   159   inner.contentWindow.postMessage(JSON.stringify({iframe:fileurl}), "*");
   160   var res = (yield);
   161   is(res.type, "load", "loaded successfully");
   162   is(res.text, "This here is a document!", "loaded successfully");
   163   isnot(res.imgWidth, 120, "correct width");
   165   // Attempt to load a HTML document in an iframe in inner cross-site document, using file url
   166   inner.src = innerCrossSiteURI;
   167   is((yield), "inner loaded", "correct gen.next()");
   168   inner.contentWindow.postMessage(JSON.stringify({iframe:fileurl}), "*");
   169   var res = (yield);
   170   is(res.type, "error", "load failed successfully");
   172   // Attempt to load file url using XHR
   173   file = getFile("file_mozfiledataurl_text.txt");
   174   fileurl = URL.createObjectURL(file);
   175   xhr = new XMLHttpRequest;
   176   xhr.onload = function() { gen.send("XHR finished"); };
   177   xhr.open("GET", fileurl);
   178   xhr.send();
   179   is((yield), "XHR finished", "correct gen.next()");
   180   xhr.responseText == "Yarr, here be plaintext file, ya landlubber\n";
   182   // Attempt to load file url using XHR in inner document
   183   inner.src = innerSameSiteURI;
   184   is((yield), "inner loaded", "correct gen.next()");
   185   inner.contentWindow.postMessage(JSON.stringify({xhr:fileurl}), "*");
   186   var res = (yield);
   187   is(res.didThrow, undefined, "load successful");
   188   is(res.text, "Yarr, here be plaintext file, ya landlubber\n", "load successful");
   190   // Attempt to load file url using XHR
   191   inner.src = innerCrossSiteURI;
   192   is((yield), "inner loaded", "correct gen.next()");
   193   inner.contentWindow.postMessage(JSON.stringify({xhr:fileurl}), "*");
   194   var res = (yield);
   195   is(res.didThrow, true, "load failed successfully");
   197   SimpleTest.finish();
   199   yield undefined;
   200 }
   203 var basePath = "";
   204 function getFile(name) {
   205   if (!basePath) {
   206     let xhr = new XMLHttpRequest;
   207     xhr.open("GET", "/dynamic/getMyDirectory.sjs", false);
   208     xhr.send();
   209     basePath = xhr.responseText;
   210   }
   212   var fileList = document.getElementById('fileList');
   213   SpecialPowers.wrap(fileList).value = basePath + name;
   215   return fileList.files[0];
   216 }
   218 </script>
   219 </pre>
   220 </body>
   221 </html>

mercurial