Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: docshell/test/navigation/mochitest.toml
 
<!DOCTYPE HTML>
<html>
<head>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<p id="display"></p>
<form id="form" action="file_reload_large_postdata.sjs" target="_blank" rel="opener" method="POST">
  <input id="input" name="payload" type="hidden" value=""/>
</form>
<pre id="test">
<script>
// This is derived from `kTooLargeStream` in `IPCStreamUtils.cpp`.
const kTooLargeStream = 1024 * 1024;
function waitForPopup(expected) {
  return new Promise(resolve => {
    addEventListener("message", evt => {
      info("got message!");
      is(evt.source.opener, window, "the event source's opener should be this window");
      is(evt.data, expected, "got the expected data from the popup");
      resolve(evt.source);
    }, { once: true });
  });
}
add_task(async function() {
  await SpecialPowers.pushPrefEnv({"set": [["dom.confirm_repost.testing.always_accept", true]]});
  let form = document.getElementById("form");
  let input = document.getElementById("input");
  // Create a very large value to include in the post payload. This should
  // ensure that the value isn't sent directly over IPC, and is instead sent as
  // an async inputstream.
  let payloadSize = kTooLargeStream;
  let popupReady = waitForPopup(payloadSize);
  input.value = "A".repeat(payloadSize);
  form.submit();
  let popup = await popupReady;
  try {
    let popupReady2 = waitForPopup(payloadSize);
    info("reloading popup");
    popup.location.reload();
    let popup2 = await popupReady2;
    is(popup, popup2);
  } finally {
    popup.close();
  }
});
// The .sjs server can time out processing the 1mb payload in debug builds.
SimpleTest.requestLongerTimeout(2);
</script>
</pre>
</body>
</html>