gecko/browser/base/content/test/social/browser_addons.js

134 lines
4.6 KiB
JavaScript
Raw Normal View History

let AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm", {}).AddonManager;
let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
const ADDON_TYPE_SERVICE = "service";
const ID_SUFFIX = "@services.mozilla.org";
const STRING_TYPE_NAME = "type.%ID%.name";
let manifest = { // normal provider
name: "provider 1",
origin: "https://example.com",
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
};
function test() {
waitForExplicitFinish();
Services.prefs.setCharPref("social.manifest.good", JSON.stringify(manifest));
runSocialTests(tests, undefined, undefined, function () {
Services.prefs.clearUserPref("social.manifest.good");
finish();
});
}
var tests = {
testInstalledProviders: function(next) {
// tests that our builtin manfests are actually available to the addon
// manager. We may have interference from the real builtin providers, so
// we will expect our test provider above to be in the list
AddonManager.getAddonsByTypes([ADDON_TYPE_SERVICE], function(addons) {
for (let addon of addons) {
if (addon.manifest.origin == manifest.origin) {
ok(true, "test addon is installed");
next();
return;
}
}
// failure state
ok(false, "test addon is not installed");
next();
});
},
testAddonEnableToggle: function(next) {
// take the first addon in the list, and toggle its enabled state via the
// addon interface to see that we get events. restore the enabled state at
// the end.
let expectEvent;
let listener = {
onEnabled: function(addon) {
is(expectEvent, "onEnabled", "provider onEnabled");
ok(!addon.userDisabled, "provider enabled");
executeSoon(function() {
// restore previous state
expectEvent = "onDisabling";
addon.userDisabled = !addon.userDisabled;
});
},
onEnabling: function(addon) {
is(expectEvent, "onEnabling", "provider onEnabling");
expectEvent = "onEnabled";
},
onDisabled: function(addon) {
is(expectEvent, "onDisabled", "provider onDisabled");
ok(addon.userDisabled, "provider disabled");
executeSoon(function() {
// restore previous state
AddonManager.removeAddonListener(listener);
addon.userDisabled = !addon.userDisabled;
next();
});
},
onDisabling: function(addon) {
is(expectEvent, "onDisabling", "provider onDisabling");
expectEvent = "onDisabled";
}
};
AddonManager.addAddonListener(listener);
AddonManager.getAddonsByTypes([ADDON_TYPE_SERVICE], function(addons) {
for (let addon of addons) {
expectEvent = addon.userDisabled ? "onEnabling" : "onDisabling";
addon.userDisabled = !addon.userDisabled;
// only test with one addon
return;
}
ok(false, "no addons toggled");
next();
});
},
testProviderEnableToggle: function(next) {
// enable and disabel a provider from the SocialService interface, check
// that the addon manager is updated
let expectEvent;
let listener = {
onEnabled: function(addon) {
is(expectEvent, "onEnabled", "provider onEnabled");
is(addon.manifest.origin, manifest.origin, "provider enabled");
ok(!addon.userDisabled, "provider !userDisabled");
},
onEnabling: function(addon) {
is(expectEvent, "onEnabling", "provider onEnabling");
is(addon.manifest.origin, manifest.origin, "provider about to be enabled");
expectEvent = "onEnabled";
},
onDisabled: function(addon) {
is(expectEvent, "onDisabled", "provider onDisabled");
is(addon.manifest.origin, manifest.origin, "provider disabled");
ok(addon.userDisabled, "provider userDisabled");
},
onDisabling: function(addon) {
is(expectEvent, "onDisabling", "provider onDisabling");
is(addon.manifest.origin, manifest.origin, "provider about to be disabled");
expectEvent = "onDisabled";
}
};
AddonManager.addAddonListener(listener);
expectEvent = "onEnabling";
SocialService.addBuiltinProvider(manifest.origin, function(provider) {
expectEvent = "onDisabling";
SocialService.removeProvider(provider.origin, function() {
AddonManager.removeAddonListener(listener);
next();
});
});
}
}