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

125 lines
4.5 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// a place for miscellaneous social tests
let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
const URI_EXTENSION_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul";
let blocklistURL = "http://test:80/browser/browser/base/content/test/social/blocklist.xml";
let blocklistEmpty = "http://test:80/browser/browser/base/content/test/social/blocklistEmpty.xml";
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"
};
let manifest_bad = { // normal provider
name: "provider 1",
origin: "https://bad.com",
sidebarURL: "https://bad.com/browser/browser/base/content/test/social/social_sidebar.html",
workerURL: "https://bad.com/browser/browser/base/content/test/social/social_worker.js",
iconURL: "https://bad.com/browser/browser/base/content/test/moz.png"
};
function test() {
waitForExplicitFinish();
runSocialTests(tests, undefined, undefined, function () {
resetBlocklist(); //restore to original pref
finish();
});
}
var tests = {
testSimpleBlocklist: function(next) {
// this really just tests adding and clearing our blocklist for later tests
var blocklist = Components.classes["@mozilla.org/extensions/blocklist;1"]
.getService(Components.interfaces.nsIBlocklistService);
setAndUpdateBlocklist(blocklistURL, function() {
ok(blocklist.isAddonBlocklisted("bad.com@services.mozilla.org", "0", "0", "0"), "blocking 'blocked'");
ok(!blocklist.isAddonBlocklisted("good.cpm@services.mozilla.org", "0", "0", "0"), "not blocking 'good'");
setAndUpdateBlocklist(blocklistEmpty, function() {
ok(!blocklist.isAddonBlocklisted("bad.com@services.mozilla.org", "0", "0", "0"), "blocklist cleared");
next();
});
});
},
testAddingNonBlockedProvider: function(next) {
function finish(isgood) {
ok(isgood, "adding non-blocked provider ok");
Services.prefs.clearUserPref("social.manifest.good");
setAndUpdateBlocklist(blocklistEmpty, next);
}
Services.prefs.setCharPref("social.manifest.good", JSON.stringify(manifest));
setAndUpdateBlocklist(blocklistURL, function() {
try {
SocialService.addProvider(manifest, function(provider) {
if (provider) {
SocialService.removeProvider(provider.origin, function() {
ok(true, "added and removed provider");
finish(true);
});
} else {
finish(false);
}
});
} catch(e) {
dump(e+" - "+e.stack+"\n");
finish(false);
}
});
},
testAddingBlockedProvider: function(next) {
function finish(good) {
ok(good, "Unable to add blocklisted provider");
Services.prefs.clearUserPref("social.manifest.blocked");
setAndUpdateBlocklist(blocklistEmpty, next);
}
Services.prefs.setCharPref("social.manifest.blocked", JSON.stringify(manifest_bad));
setAndUpdateBlocklist(blocklistURL, function() {
try {
SocialService.addProvider(manifest_bad, function(provider) {
if (provider) {
SocialService.removeProvider(provider.origin, function() {
finish(false);
});
} else {
finish(true);
}
});
} catch(e) {
finish(true);
}
});
},
testBlockingExistingProvider: function(next) {
addWindowListener(URI_EXTENSION_BLOCKLIST_DIALOG, function(win) {
win.close();
ok(true, "window closed");
});
function finish(good) {
ok(good, "blocklisted provider removed");
Services.prefs.clearUserPref("social.manifest.blocked");
setAndUpdateBlocklist(blocklistEmpty, next);
}
Services.prefs.setCharPref("social.manifest.blocked", JSON.stringify(manifest_bad));
SocialService.addProvider(manifest_bad, function(provider) {
if (provider) {
setAndUpdateBlocklist(blocklistURL, function() {
SocialService.getProvider(provider.origin, function(p) {
finish(p==null);
})
});
} else {
finish(false);
}
});
}
}