summaryrefslogtreecommitdiffstats
path: root/devtools/shared/webconsole/test/test_file_uri.html
blob: f5aada5b1f5dab84c5c95e38a8e52f3411f12e50 (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
<!DOCTYPE HTML>
<html lang="en">
<head>
  <meta charset="utf8">
  <title>Test for file activity tracking</title>
  <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript;version=1.8" 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;version=1.8">
SimpleTest.waitForExplicitFinish();

Cu.import("resource://gre/modules/NetUtil.jsm");
Cu.import("resource://gre/modules/FileUtils.jsm");

let gState;
let gTmpFile;

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

  gTmpFile = FileUtils.getFile("TmpD", ["bug798764.html"]);
  gTmpFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE);

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

  let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
                  createInstance(Ci.nsIScriptableUnicodeConverter);
  converter.charset = "UTF-8";
  let fileContentStream = converter.convertToInputStream(fileContent);

  NetUtil.asyncCopy(fileContentStream, fout, addIframe);
}

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

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

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

  attachConsole(["FileActivity"], onAttach);
}

function onAttach(aState, aResponse)
{
  gState = aState;
  gState.dbgClient.addListener("fileActivity", onFileActivity);
  doFileActivity();
}

function onFileActivity(aType, aPacket)
{
  is(aPacket.from, gState.actor, "fileActivity actor");

  gState.dbgClient.removeListener("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")) {
        // 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>