Bug 1067424 - Test for webapps actor getAppActor method. r=jryans

This commit is contained in:
Alexandre Poirot 2014-09-18 05:44:00 -04:00
parent a573319909
commit 54280cb5b3
4 changed files with 81 additions and 0 deletions

View File

@ -7,6 +7,9 @@ const Cu = Components.utils;
const { DebuggerServer } = Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
const { DebuggerClient } = Cu.import("resource://gre/modules/devtools/dbg-client.jsm");
const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
const {require} = devtools;
const { FileUtils } = Cu.import("resource://gre/modules/FileUtils.jsm");
const { Services } = Cu.import("resource://gre/modules/Services.jsm");
@ -114,9 +117,46 @@ addMessageListener("install", function (aMessage) {
}
});
addMessageListener("getAppActor", function (aMessage) {
let { manifestURL } = aMessage;
let request = {type: "getAppActor", manifestURL: manifestURL};
webappActorRequest(request, function (aResponse) {
sendAsyncMessage("appActor", aResponse);
});
});
let Frames = [];
addMessageListener("addFrame", function (aMessage) {
let win = Services.wm.getMostRecentWindow("navigator:browser");
let doc = win.document;
let frame = doc.createElementNS("http://www.w3.org/1999/xhtml", "iframe");
frame.setAttribute("mozbrowser", "true");
if (aMessage.mozapp) {
frame.setAttribute("mozapp", aMessage.mozapp);
}
if (aMessage.remote) {
frame.setAttribute("remote", aMessage.remote);
}
if (aMessage.src) {
frame.setAttribute("src", aMessage.src);
}
doc.documentElement.appendChild(frame);
Frames.push(frame);
sendAsyncMessage("frameAdded");
});
addMessageListener("cleanup", function () {
webappActorRequest({type: "unwatchApps"}, function () {
gClient.close();
});
});
let AppFramesMock = {
list: function () {
return Frames;
},
addObserver: function () {},
removeObserver: function () {}
};
require("devtools/server/actors/webapps").setAppFramesMock(AppFramesMock);

View File

@ -224,6 +224,21 @@ var steps = [
info("== SETUP == Disable certified app access");
SpecialPowers.popPrefEnv(next);
},
function() {
info("== TEST == Get packaged app actor");
addFrame(
{ mozapp: PACKAGED_APP_MANIFEST, remote: true },
function () {
getAppActor(PACKAGED_APP_MANIFEST, function (response) {
let tabActor = response.actor;
ok(!!tabActor, "TabActor is correctly instanciated in child.js");
ok("actor" in tabActor, "Tab actor is available in child");
ok("consoleActor" in tabActor, "Console actor is available in child");
next();
});
});
},
function() {
info("== TEST == Uninstall packaged app");
uninstall(PACKAGED_APP_MANIFEST);
@ -309,6 +324,22 @@ function uninstall(manifestURL) {
});
}
function getAppActor(manifestURL, callback) {
mm.addMessageListener("appActor", function onAppActor(aResponse) {
mm.removeMessageListener("appActor", onAppActor);
callback(aResponse);
});
mm.sendAsyncMessage("getAppActor", { manifestURL: manifestURL });
}
function addFrame(options, callback) {
mm.addMessageListener("frameAdded", function onFrameAdded() {
mm.removeMessageListener("frameAdded", onFrameAdded);
callback();
});
mm.sendAsyncMessage("addFrame", options);
}
</script>
</pre>
</body>

View File

@ -25,6 +25,10 @@ exports.setAppFramesMock = function (mock) {
}
DevToolsUtils.defineLazyGetter(this, "AppFrames", () => {
// Offer a way for unit test to provide a mock
if (AppFramesMock) {
return AppFramesMock;
}
try {
return Cu.import("resource://gre/modules/AppFrames.jsm", {}).AppFrames;
} catch(e) {}

View File

@ -4,6 +4,8 @@
"use strict";
try {
let chromeGlobal = this;
// Encapsulate in its own scope to allows loading this frame script
@ -64,3 +66,7 @@ let chromeGlobal = this;
});
addMessageListener("debug:disconnect", onDisconnect);
})();
} catch(e) {
dump("Exception in app child process: " + e + "\n");
}