summaryrefslogtreecommitdiffstats
path: root/devtools/shared/webconsole/test/chrome/test_file_uri.html
blob: 8582a230919a226fc868d1d10165eb35ccdf6114 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<!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.importESModule(
  "resource://gre/modules/NetUtil.sys.mjs"
);
const {FileUtils} = ChromeUtils.importESModule(
  "resource://gre/modules/FileUtils.sys.mjs"
);

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>