dom/ipc/tests/test_child_docshell.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/ipc/tests/test_child_docshell.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,85 @@
     1.4 +<!DOCTYPE HTML>
     1.5 +<html>
     1.6 +<!--
     1.7 +-->
     1.8 +<head>
     1.9 +  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    1.10 +  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
    1.11 +</head>
    1.12 +<body>
    1.13 +
    1.14 +<script type="application/javascript;version=1.7">
    1.15 +"use strict";
    1.16 +
    1.17 +SimpleTest.waitForExplicitFinish();
    1.18 +SpecialPowers.addPermission("browser", true, document);
    1.19 +SpecialPowers.pushPrefEnv({'set':[
    1.20 +  ["dom.mozBrowserFramesEnabled", true],
    1.21 +  ["dom.ipc.tabs.disabled", false]
    1.22 +]}, function () {
    1.23 +
    1.24 +  var iframe =  document.createElementNS('http://www.w3.org/1999/xhtml', 'iframe');
    1.25 +  iframe.setAttribute("remote", "true");
    1.26 +  SpecialPowers.wrap(iframe).mozbrowser = true;
    1.27 +  document.documentElement.appendChild(iframe);
    1.28 +
    1.29 +  var mm = SpecialPowers.getBrowserFrameMessageManager(iframe);
    1.30 +  mm.addMessageListener("chromeEventHandler", function (msg) {
    1.31 +    msg = SpecialPowers.wrap(msg);
    1.32 +    var result = msg.json;
    1.33 +    is(result.processType, SpecialPowers.Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT,
    1.34 +       "The frame script is running in a real distinct child process");
    1.35 +    ok(result.hasCorrectInterface,
    1.36 +       "docshell.chromeEventHandler has nsIDOMEventTarget interface");
    1.37 +  });
    1.38 +
    1.39 +
    1.40 +  mm.addMessageListener("DOMWindowCreatedReceived", function (msg) {
    1.41 +    msg = SpecialPowers.wrap(msg);
    1.42 +    ok(true, "the chrome event handler looks functional");
    1.43 +    var result = msg.json;
    1.44 +    ok(result.stableChromeEventHandler, "docShell.chromeEventHandler is stable");
    1.45 +    ok(result.iframeHasNewDocShell, "iframe spawns a new docShell");
    1.46 +    ok(result.iframeHasSameChromeEventHandler, "but iframe has the same chrome event handler");
    1.47 +    SimpleTest.finish();
    1.48 +  });
    1.49 +  // Inject a frame script in the child process:
    1.50 +  mm.loadFrameScript('data:,new ' + function ContentScriptScope() {
    1.51 +    var processType = Components.classes["@mozilla.org/xre/runtime;1"]
    1.52 +                                .getService(Components.interfaces.nsIXULRuntime)
    1.53 +                                .processType;
    1.54 +    var chromeEventHandler = docShell.chromeEventHandler;
    1.55 +    sendAsyncMessage("chromeEventHandler", {
    1.56 +      processType: Services.appinfo.processType,
    1.57 +      hasCorrectInterface: chromeEventHandler instanceof Components.interfaces.nsIDOMEventTarget
    1.58 +    });
    1.59 +
    1.60 +    /*
    1.61 +      Ensure that this chromeEventHandler actually works,
    1.62 +      by creating a new window and listening for its DOMWindowCreated event
    1.63 +    */
    1.64 +    chromeEventHandler.addEventListener("DOMWindowCreated", function listener(evt) {
    1.65 +      if (evt.target == content.document) {
    1.66 +        return;
    1.67 +      }
    1.68 +      chromeEventHandler.removeEventListener("DOMWindowCreated", listener);
    1.69 +      let new_win = evt.target.defaultView;
    1.70 +      let new_docShell = new_win.QueryInterface(Ci.nsIInterfaceRequestor)
    1.71 +                                .getInterface(Ci.nsIWebNavigation)
    1.72 +                                .QueryInterface(Ci.nsIDocShell);
    1.73 +      sendAsyncMessage("DOMWindowCreatedReceived", {
    1.74 +        stableChromeEventHandler: chromeEventHandler === docShell.chromeEventHandler,
    1.75 +        iframeHasNewDocShell: new_docShell !== docShell,
    1.76 +        iframeHasSameChromeEventHandler: new_docShell.chromeEventHandler === chromeEventHandler
    1.77 +      });
    1.78 +    });
    1.79 +
    1.80 +    let i = content.document.createElement("iframe");
    1.81 +    i.setAttribute("src", "data:text/html,foo");
    1.82 +    content.document.documentElement.appendChild(i);
    1.83 +  }, false);
    1.84 +});
    1.85 +
    1.86 +</script>
    1.87 +</body>
    1.88 +</html>

mercurial