<!DOCTYPE HTML>
<html lang="en">
<head>
  <meta charset="utf8">
  <title>Test for file activity tracking</title>
  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="common.js"></script>
  <!-- Any copyright is dedicated to the Public Domain.
     - http://creativecommons.org/publicdomain/zero/1.0/ -->
</head>
<body>
<p>Test for file activity tracking</p>

<script class="testbody" type="text/javascript">
"use strict";

SimpleTest.waitForExplicitFinish();

const {NetUtil} = ChromeUtils.import("resource://gre/modules/NetUtil.jsm");
const {FileUtils} = ChromeUtils.import("resource://gre/modules/FileUtils.jsm");

let gState;
let gTmpFile;

function doFileActivity()
{
  info("doFileActivity");
  const fileContent = "<p>hello world from bug 798764";

  gTmpFile = new FileUtils.File(PathUtils.join(PathUtils.tempDir, "bug798764.html"));
  gTmpFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE);

  const fout = FileUtils.openSafeFileOutputStream(gTmpFile,
    FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_TRUNCATE);

  const stream = Cc[
    "@mozilla.org/io/arraybuffer-input-stream;1"
  ].createInstance(Ci.nsIArrayBufferInputStream);
  const buffer = new TextEncoder().encode(fileContent).buffer;
  stream.setData(buffer, 0, buffer.byteLength);
  NetUtil.asyncCopy(stream, fout, addIframe);
}

function addIframe(aStatus)
{
  ok(Components.isSuccessCode(aStatus),
     "the temporary file was saved successfully");

  const iframe = document.createElement("iframe");
  iframe.src = NetUtil.newURI(gTmpFile).spec;
  document.body.appendChild(iframe);
}

async function startTest()
{
  removeEventListener("load", startTest);

  const {state} = await attachConsole(["FileActivity"]);
  onAttach(state);
}

function onAttach(aState)
{
  gState = aState;
  gState.webConsoleFront.on("fileActivity", onFileActivity);
  doFileActivity();
}

function onFileActivity(aPacket)
{
  gState.webConsoleFront.off("fileActivity", onFileActivity);

  info("aPacket.uri: " + aPacket.uri);
  ok(/\bbug798764\b.*\.html$/.test(aPacket.uri), "file URI match");

  testEnd();
}

function testEnd()
{
  if (gTmpFile) {
    SimpleTest.executeSoon(function() {
      try {
        gTmpFile.remove(false);
      }
      catch (ex) {
        if (ex.name != "NS_ERROR_FILE_IS_LOCKED") {
          throw ex;
        }
        // Sometimes remove() throws because the file is not unlocked soon
        // enough.
      }
      gTmpFile = null;
    });
  }

  if (gState) {
    closeDebugger(gState, function() {
      gState = null;
      SimpleTest.finish();
    });
  } else {
    SimpleTest.finish();
  }
}

addEventListener("load", startTest);
</script>
</body>
</html>
