mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 16:58:38 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
179
browser/experiments/test/xpcshell/test_previous_provider.js
Normal file
179
browser/experiments/test/xpcshell/test_previous_provider.js
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
Cu.import("resource://gre/modules/Promise.jsm");
|
||||
Cu.import("resource:///modules/experiments/Experiments.jsm");
|
||||
Cu.import("resource://testing-common/httpd.js");
|
||||
|
||||
var gDataRoot;
|
||||
var gHttpServer;
|
||||
var gManifestObject;
|
||||
|
||||
function run_test() {
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
add_task(function test_setup() {
|
||||
loadAddonManager();
|
||||
do_get_profile();
|
||||
|
||||
gHttpServer = new HttpServer();
|
||||
gHttpServer.start(-1);
|
||||
let httpRoot = "http://localhost:" + gHttpServer.identity.primaryPort + "/";
|
||||
gDataRoot = httpRoot + "data/";
|
||||
gHttpServer.registerDirectory("/data/", do_get_cwd());
|
||||
gHttpServer.registerPathHandler("/manifests/handler", (req, res) => {
|
||||
res.setStatusLine(null, 200, "OK");
|
||||
res.write(JSON.stringify(gManifestObject));
|
||||
res.processAsync();
|
||||
res.finish();
|
||||
});
|
||||
do_register_cleanup(() => gHttpServer.stop(() => {}));
|
||||
|
||||
Services.prefs.setBoolPref("experiments.enabled", true);
|
||||
Services.prefs.setCharPref("experiments.manifest.uri",
|
||||
httpRoot + "manifests/handler");
|
||||
Services.prefs.setBoolPref("experiments.logging.dump", true);
|
||||
Services.prefs.setCharPref("experiments.logging.level", "Trace");
|
||||
});
|
||||
|
||||
add_task(function* test_provider_basic() {
|
||||
let e = Experiments.instance();
|
||||
|
||||
let provider = new Experiments.PreviousExperimentProvider(e);
|
||||
e._setPreviousExperimentsProvider(provider);
|
||||
|
||||
let deferred = Promise.defer();
|
||||
provider.getAddonsByTypes(["experiment"], (addons) => {
|
||||
deferred.resolve(addons);
|
||||
});
|
||||
let experimentAddons = yield deferred.promise;
|
||||
Assert.ok(Array.isArray(experimentAddons), "getAddonsByTypes returns an Array.");
|
||||
Assert.equal(experimentAddons.length, 0, "No previous add-ons returned.");
|
||||
|
||||
gManifestObject = {
|
||||
version: 1,
|
||||
experiments: [
|
||||
{
|
||||
id: EXPERIMENT1_ID,
|
||||
xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME,
|
||||
xpiHash: EXPERIMENT1_XPI_SHA1,
|
||||
startTime: Date.now() / 1000 - 60,
|
||||
endTime: Date.now() / 1000 + 60,
|
||||
maxActiveSeconds: 60,
|
||||
appName: ["XPCShell"],
|
||||
channel: [e._policy.updatechannel()],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
yield e.updateManifest();
|
||||
|
||||
deferred = Promise.defer();
|
||||
provider.getAddonsByTypes(["experiment"], (addons) => {
|
||||
deferred.resolve(addons);
|
||||
});
|
||||
experimentAddons = yield deferred.promise;
|
||||
Assert.equal(experimentAddons.length, 0, "Still no previous experiment.");
|
||||
|
||||
let experiments = yield e.getExperiments();
|
||||
Assert.equal(experiments.length, 1, "1 experiment present.");
|
||||
Assert.ok(experiments[0].active, "It is active.");
|
||||
|
||||
// Deactivate it.
|
||||
defineNow(e._policy, new Date(gManifestObject.experiments[0].endTime * 1000 + 1000));
|
||||
yield e.updateManifest();
|
||||
|
||||
experiments = yield e.getExperiments();
|
||||
Assert.equal(experiments.length, 1, "1 experiment present.");
|
||||
Assert.equal(experiments[0].active, false, "It isn't active.");
|
||||
|
||||
deferred = Promise.defer();
|
||||
provider.getAddonsByTypes(["experiment"], (addons) => {
|
||||
deferred.resolve(addons);
|
||||
});
|
||||
experimentAddons = yield deferred.promise;
|
||||
Assert.equal(experimentAddons.length, 1, "1 previous add-on known.");
|
||||
Assert.equal(experimentAddons[0].id, EXPERIMENT1_ID, "ID matches expected.");
|
||||
|
||||
deferred = Promise.defer();
|
||||
provider.getAddonByID(EXPERIMENT1_ID, (addon) => {
|
||||
deferred.resolve(addon);
|
||||
});
|
||||
let addon = yield deferred.promise;
|
||||
Assert.ok(addon, "We got an add-on from its ID.");
|
||||
Assert.equal(addon.id, EXPERIMENT1_ID, "ID matches expected.");
|
||||
Assert.ok(addon.appDisabled, "Add-on is a previous experiment.");
|
||||
Assert.ok(addon.userDisabled, "Add-on is disabled.");
|
||||
Assert.equal(addon.type, "experiment", "Add-on is an experiment.");
|
||||
Assert.equal(addon.isActive, false, "Add-on is not active.");
|
||||
Assert.equal(addon.permissions, 0, "Add-on has no permissions.");
|
||||
|
||||
deferred = Promise.defer();
|
||||
AddonManager.getAddonsByTypes(["experiment"], (addons) => {
|
||||
deferred.resolve(addons);
|
||||
});
|
||||
experimentAddons = yield deferred.promise;
|
||||
Assert.equal(experimentAddons.length, 1, "Got 1 experiment from add-on manager.");
|
||||
Assert.equal(experimentAddons[0].id, EXPERIMENT1_ID, "ID matches expected.");
|
||||
Assert.ok(experimentAddons[0].appDisabled, "It is a previous experiment add-on.");
|
||||
});
|
||||
|
||||
add_task(function* test_active_and_previous() {
|
||||
// Building on the previous test, activate experiment 2.
|
||||
let e = Experiments.instance();
|
||||
let provider = new Experiments.PreviousExperimentProvider(e);
|
||||
e._setPreviousExperimentsProvider(provider);
|
||||
|
||||
gManifestObject = {
|
||||
version: 1,
|
||||
experiments: [
|
||||
{
|
||||
id: EXPERIMENT2_ID,
|
||||
xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME,
|
||||
xpiHash: EXPERIMENT2_XPI_SHA1,
|
||||
startTime: Date.now() / 1000 - 60,
|
||||
endTime: Date.now() / 1000 + 60,
|
||||
maxActiveSeconds: 60,
|
||||
appName: ["XPCShell"],
|
||||
channel: [e._policy.updatechannel()],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
defineNow(e._policy, new Date());
|
||||
yield e.updateManifest();
|
||||
|
||||
let experiments = yield e.getExperiments();
|
||||
Assert.equal(experiments.length, 2, "2 experiments known.");
|
||||
|
||||
let deferred = Promise.defer();
|
||||
provider.getAddonsByTypes(["experiment"], (addons) => {
|
||||
deferred.resolve(addons);
|
||||
});
|
||||
let experimentAddons = yield deferred.promise;
|
||||
Assert.equal(experimentAddons.length, 1, "1 previous experiment.");
|
||||
|
||||
deferred = Promise.defer();
|
||||
AddonManager.getAddonsByTypes(["experiment"], (addons) => {
|
||||
deferred.resolve(addons);
|
||||
});
|
||||
experimentAddons = yield deferred.promise;
|
||||
Assert.equal(experimentAddons.length, 2, "2 experiment add-ons known.");
|
||||
|
||||
for (let addon of experimentAddons) {
|
||||
if (addon.id == EXPERIMENT1_ID) {
|
||||
Assert.equal(addon.isActive, false, "Add-on is not active.");
|
||||
Assert.ok(addon.appDisabled, "Should be a previous experiment.");
|
||||
}
|
||||
else if (addon.id == EXPERIMENT2_ID) {
|
||||
Assert.ok(addon.isActive, "Add-on is active.");
|
||||
Assert.ok(!addon.appDisabled, "Should not be a previous experiment.");
|
||||
}
|
||||
else {
|
||||
throw new Error("Unexpected add-on ID: " + addon.id);
|
||||
}
|
||||
}
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue