summaryrefslogtreecommitdiffstats
path: root/devtools/client/webide/content/permissionstable.js
blob: 22c74bd0d7e56dcee564e8e259b592f869f4307b (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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

var Cu = Components.utils;
const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
const Services = require("Services");
const {AppManager} = require("devtools/client/webide/modules/app-manager");
const {Connection} = require("devtools/shared/client/connection-manager");

window.addEventListener("load", function onLoad() {
  window.removeEventListener("load", onLoad);
  document.querySelector("#close").onclick = CloseUI;
  AppManager.on("app-manager-update", OnAppManagerUpdate);
  BuildUI();
}, true);

window.addEventListener("unload", function onUnload() {
  window.removeEventListener("unload", onUnload);
  AppManager.off("app-manager-update", OnAppManagerUpdate);
});

function CloseUI() {
  window.parent.UI.openProject();
}

function OnAppManagerUpdate(event, what) {
  if (what == "connection" || what == "runtime-global-actors") {
    BuildUI();
  }
}

function generateFields(json) {
  let table = document.querySelector("table");
  let permissionsTable = json.rawPermissionsTable;
  for (let name in permissionsTable) {
    let tr = document.createElement("tr");
    tr.className = "line";
    let td = document.createElement("td");
    td.textContent = name;
    tr.appendChild(td);
    for (let type of ["app", "privileged", "certified"]) {
      let td = document.createElement("td");
      if (permissionsTable[name][type] == json.ALLOW_ACTION) {
        td.textContent = "✓";
        td.className = "permallow";
      }
      if (permissionsTable[name][type] == json.PROMPT_ACTION) {
        td.textContent = "!";
        td.className = "permprompt";
      }
      if (permissionsTable[name][type] == json.DENY_ACTION) {
        td.textContent = "✕";
        td.className = "permdeny";
      }
      tr.appendChild(td);
    }
    table.appendChild(tr);
  }
}

var getRawPermissionsTablePromise; // Used by tests
function BuildUI() {
  let table = document.querySelector("table");
  let lines = table.querySelectorAll(".line");
  for (let line of lines) {
    line.remove();
  }

  if (AppManager.connection &&
      AppManager.connection.status == Connection.Status.CONNECTED &&
      AppManager.deviceFront) {
    getRawPermissionsTablePromise = AppManager.deviceFront.getRawPermissionsTable()
                                    .then(json => generateFields(json));
  } else {
    CloseUI();
  }
}