michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Cu.import("resource://gre/modules/osfile.jsm"); michael@0: const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}); michael@0: const {require} = devtools; michael@0: const {installHosted, installPackaged} = require("devtools/app-actor-front"); michael@0: michael@0: let gAppId = "actor-test"; michael@0: const APP_ORIGIN = "app://" + gAppId; michael@0: michael@0: add_test(function testLaunchInexistantApp() { michael@0: let request = {type: "launch", manifestURL: "http://foo.com"}; michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_eq(aResponse.error, "NO_SUCH_APP"); michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function testCloseInexistantApp() { michael@0: let request = {type: "close", manifestURL: "http://foo.com"}; michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_eq(aResponse.error, "missingParameter"); michael@0: do_check_eq(aResponse.message, "No application for http://foo.com"); michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: // Install a test app michael@0: add_test(function testInstallPackaged() { michael@0: installTestApp("app.zip", gAppId, function () { michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: // Now check that the app appear in getAll michael@0: add_test(function testGetAll() { michael@0: let request = {type: "getAll"}; michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_true("apps" in aResponse); michael@0: let apps = aResponse.apps; michael@0: do_check_true(apps.length > 0); michael@0: for (let i = 0; i < apps.length; i++) { michael@0: let app = apps[i]; michael@0: if (app.id == gAppId) { michael@0: do_check_eq(app.name, "Test app"); michael@0: do_check_eq(app.manifest.description, "Testing webapps actor"); michael@0: do_check_eq(app.manifest.launch_path, "/index.html"); michael@0: do_check_eq(app.origin, APP_ORIGIN); michael@0: do_check_eq(app.installOrigin, app.origin); michael@0: do_check_eq(app.manifestURL, app.origin + "/manifest.webapp"); michael@0: run_next_test(); michael@0: return; michael@0: } michael@0: } michael@0: do_throw("Unable to find the test app by its id"); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function testGetApp() { michael@0: let manifestURL = APP_ORIGIN + "/manifest.webapp"; michael@0: let request = {type: "getApp", manifestURL: manifestURL}; michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_true("app" in aResponse); michael@0: let app = aResponse.app; michael@0: do_check_eq(app.id, gAppId); michael@0: do_check_eq(app.name, "Test app"); michael@0: do_check_eq(app.manifest.description, "Testing webapps actor"); michael@0: do_check_eq(app.manifest.launch_path, "/index.html"); michael@0: do_check_eq(app.origin, APP_ORIGIN); michael@0: do_check_eq(app.installOrigin, app.origin); michael@0: do_check_eq(app.manifestURL, app.origin + "/manifest.webapp"); michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function testLaunchApp() { michael@0: let manifestURL = APP_ORIGIN + "/manifest.webapp"; michael@0: let startPoint = "/index.html"; michael@0: let request = { michael@0: type: "launch", michael@0: manifestURL: manifestURL, michael@0: startPoint: startPoint michael@0: }; michael@0: Services.obs.addObserver(function observer(subject, topic, data) { michael@0: Services.obs.removeObserver(observer, topic); michael@0: let json = JSON.parse(data); michael@0: do_check_eq(json.manifestURL, manifestURL); michael@0: do_check_eq(json.startPoint, startPoint); michael@0: run_next_test(); michael@0: }, "webapps-launch", false); michael@0: michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_false("error" in aResponse); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function testCloseApp() { michael@0: let manifestURL = APP_ORIGIN + "/manifest.webapp"; michael@0: let request = { michael@0: type: "close", michael@0: manifestURL: manifestURL michael@0: }; michael@0: Services.obs.addObserver(function observer(subject, topic, data) { michael@0: Services.obs.removeObserver(observer, topic); michael@0: let json = JSON.parse(data); michael@0: do_check_eq(json.manifestURL, manifestURL); michael@0: michael@0: }, "webapps-close", false); michael@0: michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_false("error" in aResponse); michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: // The 128px icon is a single red pixel and the 64px one is a blue one michael@0: // bug 899177: there is a bug with xhr and app:// and jar:// uris michael@0: // that ends up forcing the content type to application/xml michael@0: let red1px = "data:application/xml;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4z8AAAAMBAQAY3Y2wAAAAAElFTkSuQmCC"; michael@0: let blue1px = "data:application/xml;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12MwZDgHAAFlAQBDpjhLAAAAAElFTkSuQmCC"; michael@0: michael@0: add_test(function testGetIcon() { michael@0: let manifestURL = APP_ORIGIN + "/manifest.webapp"; michael@0: let request = { michael@0: type: "getIconAsDataURL", michael@0: manifestURL: manifestURL michael@0: }; michael@0: michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_false("error" in aResponse); michael@0: michael@0: // By default, getIconAsDataURL return the 128x128 icon michael@0: do_check_eq(aResponse.url, red1px); michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function testGetIconWithCustomSize() { michael@0: let manifestURL = APP_ORIGIN + "/manifest.webapp"; michael@0: let request = { michael@0: type: "getIconAsDataURL", michael@0: manifestURL: manifestURL, michael@0: size: 64 michael@0: }; michael@0: michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_false("error" in aResponse); michael@0: michael@0: do_check_eq(aResponse.url, blue1px); michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function testUninstall() { michael@0: let manifestURL = APP_ORIGIN + "/manifest.webapp"; michael@0: let request = { michael@0: type: "uninstall", michael@0: manifestURL: manifestURL michael@0: }; michael@0: michael@0: Services.obs.addObserver(function observer(subject, topic, data) { michael@0: Services.obs.removeObserver(observer, topic); michael@0: let json = JSON.parse(data); michael@0: do_check_eq(json.manifestURL, manifestURL); michael@0: do_check_eq(json.origin, APP_ORIGIN); michael@0: do_check_eq(json.id, gAppId); michael@0: run_next_test(); michael@0: }, "webapps-uninstall", false); michael@0: michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_false("error" in aResponse); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function testFileUploadInstall() { michael@0: let packageFile = do_get_file("data/app.zip"); michael@0: installPackaged(gClient, gActor, packageFile.path, gAppId) michael@0: .then(function ({ appId }) { michael@0: do_check_eq(appId, gAppId); michael@0: run_next_test(); michael@0: }, function (e) { michael@0: do_throw("Failed install uploaded packaged app: " + e.error + ": " + e.message); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function testInstallHosted() { michael@0: gAppId = "hosted-app"; michael@0: let metadata = { michael@0: origin: "http://foo.com", michael@0: installOrigin: "http://metadata.foo.com", michael@0: manifestURL: "http://foo.com/metadata/manifest.webapp" michael@0: }; michael@0: let manifest = { michael@0: name: "My hosted app" michael@0: }; michael@0: installHosted(gClient, gActor, gAppId, metadata, manifest).then( michael@0: function ({ appId }) { michael@0: do_check_eq(appId, gAppId); michael@0: run_next_test(); michael@0: }, michael@0: function (e) { michael@0: do_throw("Failed installing hosted app: " + e.error + ": " + e.message); michael@0: } michael@0: ); michael@0: }); michael@0: michael@0: add_test(function testCheckHostedApp() { michael@0: let request = {type: "getAll"}; michael@0: webappActorRequest(request, function (aResponse) { michael@0: do_check_true("apps" in aResponse); michael@0: let apps = aResponse.apps; michael@0: do_check_true(apps.length > 0); michael@0: for (let i = 0; i < apps.length; i++) { michael@0: let app = apps[i]; michael@0: if (app.id == gAppId) { michael@0: do_check_eq(app.name, "My hosted app"); michael@0: do_check_eq(app.origin, "http://foo.com"); michael@0: do_check_eq(app.installOrigin, "http://metadata.foo.com"); michael@0: do_check_eq(app.manifestURL, "http://foo.com/metadata/manifest.webapp"); michael@0: run_next_test(); michael@0: return; michael@0: } michael@0: } michael@0: do_throw("Unable to find the test app by its id"); michael@0: }); michael@0: }); michael@0: michael@0: function run_test() { michael@0: setup(); michael@0: michael@0: run_next_test(); michael@0: } michael@0: