Bug 1109388 - Delay reading data. r=jryans

This commit is contained in:
Jennifer Fong 2015-02-11 08:35:00 +01:00
parent e7acbba670
commit cd1aa45c33
13 changed files with 187 additions and 117 deletions

View File

@ -4,7 +4,6 @@
const Cu = Components.utils; const Cu = Components.utils;
const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools; const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm");
const {AppManager} = require("devtools/webide/app-manager"); const {AppManager} = require("devtools/webide/app-manager");
const {Connection} = require("devtools/client/connection-manager"); const {Connection} = require("devtools/client/connection-manager");
const ConfigView = require("devtools/webide/config-view"); const ConfigView = require("devtools/webide/config-view");
@ -74,16 +73,8 @@ function BuildUI() {
configView.kind = "Pref"; configView.kind = "Pref";
configView.includeTypeName = true; configView.includeTypeName = true;
getAllPrefs = AppManager.preferenceFront.getAllPrefs(); getAllPrefs = AppManager.preferenceFront.getAllPrefs()
getAllPrefs.then(json => { .then(json => configView.generateDisplay(json));
let deviceItems = Object.keys(json);
deviceItems.sort();
configView.keys = deviceItems;
for (let i = 0; i < configView.keys.length; i++) {
let key = configView.keys[i];
configView.generateField(key, json[key].value, json[key].hasUserValue);
}
});
} else { } else {
CloseUI(); CloseUI();
} }

View File

@ -4,7 +4,6 @@
const Cu = Components.utils; const Cu = Components.utils;
const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools; const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm");
const {AppManager} = require("devtools/webide/app-manager"); const {AppManager} = require("devtools/webide/app-manager");
const {Connection} = require("devtools/client/connection-manager"); const {Connection} = require("devtools/client/connection-manager");
const ConfigView = require("devtools/webide/config-view"); const ConfigView = require("devtools/webide/config-view");
@ -75,15 +74,7 @@ function BuildUI() {
configView.includeTypeName = false; configView.includeTypeName = false;
getAllSettings = AppManager.settingsFront.getAllSettings() getAllSettings = AppManager.settingsFront.getAllSettings()
getAllSettings.then(json => { .then(json => configView.generateDisplay(json));
let deviceItems = Object.keys(json);
deviceItems.sort();
configView.keys = deviceItems;
for (let i = 0; i < configView.keys.length; i++) {
let key = configView.keys[i];
configView.generateField(key, json[key].value, json[key].hasUserValue);
}
});
} else { } else {
CloseUI(); CloseUI();
} }

View File

@ -30,6 +30,35 @@ function OnAppManagerUpdate(event, what) {
} }
} }
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);
}
}
let getRawPermissionsTablePromise; // Used by tests let getRawPermissionsTablePromise; // Used by tests
function BuildUI() { function BuildUI() {
let table = document.querySelector("table"); let table = document.querySelector("table");
@ -41,34 +70,8 @@ function BuildUI() {
if (AppManager.connection && if (AppManager.connection &&
AppManager.connection.status == Connection.Status.CONNECTED && AppManager.connection.status == Connection.Status.CONNECTED &&
AppManager.deviceFront) { AppManager.deviceFront) {
getRawPermissionsTablePromise = AppManager.deviceFront.getRawPermissionsTable(); getRawPermissionsTablePromise = AppManager.deviceFront.getRawPermissionsTable()
getRawPermissionsTablePromise.then(json => { .then(json => generateFields(json));
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);
}
});
} else { } else {
CloseUI(); CloseUI();
} }

View File

@ -41,6 +41,20 @@ function OnAppManagerUpdate(event, what) {
} }
} }
function generateFields(json) {
let table = document.querySelector("table");
for (let name in json) {
let tr = document.createElement("tr");
let td = document.createElement("td");
td.textContent = name;
tr.appendChild(td);
td = document.createElement("td");
td.textContent = json[name];
tr.appendChild(td);
table.appendChild(tr);
};
}
let getDescriptionPromise; // Used by tests let getDescriptionPromise; // Used by tests
function BuildUI() { function BuildUI() {
let table = document.querySelector("table"); let table = document.querySelector("table");
@ -48,19 +62,8 @@ function BuildUI() {
if (AppManager.connection && if (AppManager.connection &&
AppManager.connection.status == Connection.Status.CONNECTED && AppManager.connection.status == Connection.Status.CONNECTED &&
AppManager.deviceFront) { AppManager.deviceFront) {
getDescriptionPromise = AppManager.deviceFront.getDescription(); getDescriptionPromise = AppManager.deviceFront.getDescription()
getDescriptionPromise.then(json => { .then(json => generateFields(json));
for (let name in json) {
let tr = document.createElement("tr");
let td = document.createElement("td");
td.textContent = name;
tr.appendChild(td);
td = document.createElement("td");
td.textContent = json[name];
tr.appendChild(td);
table.appendChild(tr);
}
});
} else { } else {
CloseUI(); CloseUI();
} }

View File

@ -196,11 +196,11 @@
<iframe id="deck-panel-projecteditor" flex="1"/> <iframe id="deck-panel-projecteditor" flex="1"/>
<iframe id="deck-panel-addons" flex="1" src="addons.xhtml"/> <iframe id="deck-panel-addons" flex="1" src="addons.xhtml"/>
<iframe id="deck-panel-prefs" flex="1" src="prefs.xhtml"/> <iframe id="deck-panel-prefs" flex="1" src="prefs.xhtml"/>
<iframe id="deck-panel-permissionstable" flex="1" src="permissionstable.xhtml"/> <iframe id="deck-panel-permissionstable" flex="1" lazysrc="permissionstable.xhtml"/>
<iframe id="deck-panel-runtimedetails" flex="1" src="runtimedetails.xhtml"/> <iframe id="deck-panel-runtimedetails" flex="1" lazysrc="runtimedetails.xhtml"/>
<iframe id="deck-panel-monitor" flex="1" lazysrc="monitor.xhtml"/> <iframe id="deck-panel-monitor" flex="1" lazysrc="monitor.xhtml"/>
<iframe id="deck-panel-devicepreferences" flex="1" src="devicepreferences.xhtml"/> <iframe id="deck-panel-devicepreferences" flex="1" lazysrc="devicepreferences.xhtml"/>
<iframe id="deck-panel-devicesettings" flex="1" src="devicesettings.xhtml"/> <iframe id="deck-panel-devicesettings" flex="1" lazysrc="devicesettings.xhtml"/>
</deck> </deck>
<splitter hidden="true" class="devtools-horizontal-splitter" orient="vertical"/> <splitter hidden="true" class="devtools-horizontal-splitter" orient="vertical"/>
<!-- toolbox iframe will be inserted here --> <!-- toolbox iframe will be inserted here -->

View File

@ -85,6 +85,16 @@ ConfigView.prototype = {
} }
}, },
generateDisplay: function(json) {
let deviceItems = Object.keys(json);
deviceItems.sort();
this.keys = deviceItems;
for (let i = 0; i < this.keys.length; i++) {
let key = this.keys[i];
this.generateField(key, json[key].value, json[key].hasUserValue);
}
},
generateField: function(name, value, hasUserValue, customType, newRow) { generateField: function(name, value, hasUserValue, customType, newRow) {
let table = this._doc.querySelector("table"); let table = this._doc.querySelector("table");
let sResetDefault = Strings.GetStringFromName("device_reset_default"); let sResetDefault = Strings.GetStringFromName("device_reset_default");
@ -115,6 +125,10 @@ ConfigView.prototype = {
input.value = value; input.value = value;
} }
if (!(this._includeTypeName || isNaN(parseInt(value, 10)))) {
input.type = "number";
}
td.appendChild(input); td.appendChild(input);
tr.appendChild(td); tr.appendChild(td);
td = this._doc.createElement("td"); td = this._doc.createElement("td");

View File

@ -44,7 +44,8 @@ support-files =
[test_runtime.html] [test_runtime.html]
[test_manifestUpdate.html] [test_manifestUpdate.html]
[test_addons.html] [test_addons.html]
[test_deviceinfo.html] [test_device_runtime.html]
[test_device_permissions.html]
[test_autoconnect_runtime.html] [test_autoconnect_runtime.html]
[test_telemetry.html] [test_telemetry.html]
[test_device_preferences.html] [test_device_preferences.html]

View File

@ -133,7 +133,7 @@ let editFieldInteger = Task.async(function*() {
let resetExistingField = Task.async(function*(id) { let resetExistingField = Task.async(function*(id) {
let existing = doc.getElementById(id); let existing = doc.getElementById(id);
existing.click(); existing.click();
is(existing.checked, false, "Existing boolean value is correct"); is(existing.checked, true, "Existing boolean value is correct");
resetBtn = doc.getElementById("btn-" + id); resetBtn = doc.getElementById("btn-" + id);
resetBtn.click(); resetBtn.click();

View File

@ -137,6 +137,15 @@ function documentIsLoaded(doc) {
return deferred.promise; return deferred.promise;
} }
function lazyIframeIsLoaded(iframe) {
let deferred = promise.defer();
iframe.addEventListener("load", function onLoad() {
iframe.removeEventListener("load", onLoad, true);
deferred.resolve();
}, true);
return deferred.promise;
}
function addTab(aUrl, aWindow) { function addTab(aUrl, aWindow) {
info("Adding tab: " + aUrl); info("Adding tab: " + aUrl);

View File

@ -29,53 +29,26 @@
let win = yield openWebIDE(); let win = yield openWebIDE();
let permIframe = win.document.querySelector("#deck-panel-permissionstable"); let permIframe = win.document.querySelector("#deck-panel-permissionstable");
let infoIframe = win.document.querySelector("#deck-panel-runtimedetails");
yield documentIsLoaded(permIframe.contentWindow.document);
yield documentIsLoaded(infoIframe.contentWindow.document);
yield connectToLocalRuntime(win); yield connectToLocalRuntime(win);
yield nextTick();
let perm = win.document.querySelector("#cmd_showPermissionsTable"); let perm = win.document.querySelector("#cmd_showPermissionsTable");
let info = win.document.querySelector("#cmd_showRuntimeDetails");
ok(!perm.hasAttribute("disabled"), "perm cmd enabled"); ok(!perm.hasAttribute("disabled"), "perm cmd enabled");
ok(!info.hasAttribute("disabled"), "info cmd enabled");
let deck = win.document.querySelector("#deck"); let deck = win.document.querySelector("#deck");
win.Cmds.showRuntimeDetails();
is(deck.selectedPanel, infoIframe, "info iframe selected");
yield infoIframe.contentWindow.getDescriptionPromise;
yield nextTick();
// device info and permissions content is checked in other tests
// We just test one value to make sure we get something
let doc = infoIframe.contentWindow.document;
let trs = doc.querySelectorAll("tr");
let found = false;
for (let tr of trs) {
let [name,val] = tr.querySelectorAll("td");
if (name.textContent == "appid") {
found = true;
is(val.textContent, Services.appinfo.ID, "appid has the right value");
}
}
ok(found, "Found appid line");
win.Cmds.showPermissionsTable(); win.Cmds.showPermissionsTable();
is(deck.selectedPanel, permIframe, "permission iframe selected"); is(deck.selectedPanel, permIframe, "permission iframe selected");
yield permIframe.contentWindow.getRawPermissionsTablePromise; yield nextTick();
yield lazyIframeIsLoaded(permIframe);
yield nextTick(); yield nextTick();
yield permIframe.contentWindow.getRawPermissionsTablePromise;
doc = permIframe.contentWindow.document; doc = permIframe.contentWindow.document;
trs = doc.querySelectorAll(".line"); trs = doc.querySelectorAll(".line");
found = false; found = false;
@ -86,6 +59,7 @@
is(v1.className, "permprompt", "geolocation perm is valid"); is(v1.className, "permprompt", "geolocation perm is valid");
is(v2.className, "permprompt", "geolocation perm is valid"); is(v2.className, "permprompt", "geolocation perm is valid");
is(v3.className, "permprompt", "geolocation perm is valid"); is(v3.className, "permprompt", "geolocation perm is valid");
break;
} }
} }
ok(found, "Found geolocation line"); ok(found, "Found geolocation line");
@ -99,15 +73,11 @@
yield closeWebIDE(win); yield closeWebIDE(win);
SimpleTest.finish(); SimpleTest.finish();
}).then(null, e => { }).then(null, e => {
ok(false, "Exception: " + e); ok(false, "Exception: " + e);
SimpleTest.finish(); SimpleTest.finish();
}); });
} }
</script> </script>
</body> </body>
</html> </html>

View File

@ -30,14 +30,10 @@
let prefIframe = win.document.querySelector("#deck-panel-devicepreferences"); let prefIframe = win.document.querySelector("#deck-panel-devicepreferences");
yield documentIsLoaded(prefIframe.contentWindow.document);
win.AppManager.update("runtimelist"); win.AppManager.update("runtimelist");
yield connectToLocalRuntime(win); yield connectToLocalRuntime(win);
yield nextTick();
let prefs = win.document.querySelector("#cmd_showDevicePrefs"); let prefs = win.document.querySelector("#cmd_showDevicePrefs");
ok(!prefs.hasAttribute("disabled"), "device prefs cmd enabled"); ok(!prefs.hasAttribute("disabled"), "device prefs cmd enabled");
@ -47,18 +43,24 @@
win.Cmds.showDevicePrefs(); win.Cmds.showDevicePrefs();
is(deck.selectedPanel, prefIframe, "device preferences iframe selected"); is(deck.selectedPanel, prefIframe, "device preferences iframe selected");
yield prefIframe.contentWindow.getAllPrefs;
yield nextTick(); yield nextTick();
yield lazyIframeIsLoaded(prefIframe);
yield nextTick();
yield prefIframe.contentWindow.getAllPrefs;
setDocument(prefIframe); setDocument(prefIframe);
let fields = doc.querySelectorAll(".editable"); let fields = doc.querySelectorAll(".editable");
let preference = "accessibility.blockautorefresh";
fieldChange(fields, preference);
addNewField(); addNewField();
let preference = "accessibility.accesskeycausesactivation";
fieldChange(fields, preference);
addNewFieldWithEnter(); addNewFieldWithEnter();
editExistingField(); editExistingField();

View File

@ -0,0 +1,85 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf8">
<title></title>
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
<script type="application/javascript;version=1.8" src="head.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
</head>
<body>
<script type="application/javascript;version=1.8">
window.onload = function() {
SimpleTest.waitForExplicitFinish();
Task.spawn(function* () {
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
let win = yield openWebIDE();
let detailsIframe = win.document.querySelector("#deck-panel-runtimedetails");
yield connectToLocalRuntime(win);
let details = win.document.querySelector("#cmd_showRuntimeDetails");
ok(!details.hasAttribute("disabled"), "info cmd enabled");
let deck = win.document.querySelector("#deck");
win.Cmds.showRuntimeDetails();
is(deck.selectedPanel, detailsIframe, "info iframe selected");
yield nextTick();
yield lazyIframeIsLoaded(detailsIframe);
yield nextTick();
yield detailsIframe.contentWindow.getDescriptionPromise;
// device info and permissions content is checked in other tests
// We just test one value to make sure we get something
let doc = detailsIframe.contentWindow.document;
let trs = doc.querySelectorAll("tr");
let found = false;
for (let tr of trs) {
let [name,val] = tr.querySelectorAll("td");
if (name.textContent == "appid") {
found = true;
is(val.textContent, Services.appinfo.ID, "appid has the right value");
break;
}
}
ok(found, "Found appid line");
doc.querySelector("#close").click();
ok(!deck.selectedPanel, "No panel selected");
DebuggerServer.destroy();
yield closeWebIDE(win);
SimpleTest.finish();
}).then(null, e => {
ok(false, "Exception: " + e);
SimpleTest.finish();
});
}
</script>
</body>
</html>

View File

@ -34,14 +34,10 @@
let settingIframe = win.document.querySelector("#deck-panel-devicesettings"); let settingIframe = win.document.querySelector("#deck-panel-devicesettings");
yield documentIsLoaded(settingIframe.contentWindow.document);
win.AppManager.update("runtimelist"); win.AppManager.update("runtimelist");
yield connectToLocalRuntime(win); yield connectToLocalRuntime(win);
yield nextTick();
let settings = win.document.querySelector("#cmd_showSettings"); let settings = win.document.querySelector("#cmd_showSettings");
ok(!settings.hasAttribute("disabled"), "device settings cmd enabled"); ok(!settings.hasAttribute("disabled"), "device settings cmd enabled");
@ -51,9 +47,14 @@
win.Cmds.showSettings(); win.Cmds.showSettings();
is(deck.selectedPanel, settingIframe, "device settings iframe selected"); is(deck.selectedPanel, settingIframe, "device settings iframe selected");
yield settingIframe.contentWindow.getAllSettings;
yield nextTick(); yield nextTick();
yield lazyIframeIsLoaded(settingIframe);
yield nextTick();
yield settingIframe.contentWindow.getAllSettings;
setDocument(settingIframe); setDocument(settingIframe);
let fields = doc.querySelectorAll(".editable"); let fields = doc.querySelectorAll(".editable");