<!DOCTYPE html>
<html>
<head>
  <script>
    function loadFrames() {
      window.A = document.getElementById('A').contentWindow;
      window.B = document.getElementById('B').contentWindow;
      window.C = document.getElementById('C').contentWindow;
      window.D = document.getElementById('D').contentWindow;

      var path = location.pathname.substring(0, location.pathname.lastIndexOf('/')) + '/file_crossOriginObjects.html';
      A.location = 'file_crossOriginObjects.html';
      B.location = frameURI = 'http://test2.mochi.test:' + location.port + path;
      C.location = frameURI = 'http://test1.mochi.test:' + location.port + path;
      D.location = frameURI = 'http://test1.mochi.test:' + location.port + path;

      var loadCount = 0;
      function frameLoaded() {
        if (++loadCount == 4)
          go();
      }
      Array.forEach(document.getElementsByTagName('iframe'), function(ifr) { ifr.onload = frameLoaded; });
    }


    var results = [];
    function assert(cond, msg) {
      results.push({pass: !!cond, message: msg});
    }

    function go() {
      window.onmessage = function() {
        assert(B.checkWindowReferences(), "B's Window references are still self-consistent after document.domain");
        for (var i = 0; i < window.length; ++i) {
          assert(window[i] === B.windowReferences[i],
                 "Window reference " + i + " consistent between globals after document.domain");
          assert(window[i].location === B.locationReferences[i],
                 "Location reference " + i + " consistent between globals after document.domain");
        }
        opener.postMessage(results, '*');
      };
      A.document.domain = A.document.domain;
      document.domain = document.domain;
      B.postMessage('', '*');
    }

  </script>
</head>
<body onload="loadFrames()">
  <iframe id="A"></iframe>
  <iframe id="B"></iframe>
  <iframe id="C"></iframe>
  <iframe id="D"></iframe>
</body>
</html>