mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-15 06:15:43 +00:00
bug 847124, bug 886300 intermittent blocklist failures
This commit is contained in:
parent
b03408087a
commit
ce13c685bd
@ -13,7 +13,6 @@ include $(DEPTH)/config/autoconf.mk
|
|||||||
MOCHITEST_BROWSER_FILES = \
|
MOCHITEST_BROWSER_FILES = \
|
||||||
head.js \
|
head.js \
|
||||||
blocklist.xml \
|
blocklist.xml \
|
||||||
blocklistEmpty.xml \
|
|
||||||
browser_blocklist.js \
|
browser_blocklist.js \
|
||||||
browser_defaults.js \
|
browser_defaults.js \
|
||||||
browser_addons.js \
|
browser_addons.js \
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist">
|
|
||||||
<emItems>
|
|
||||||
<emItem blockID="s2" id="nothing@services.mozilla.org"></emItem>
|
|
||||||
</emItems>
|
|
||||||
</blocklist>
|
|
@ -302,9 +302,10 @@ var tests = {
|
|||||||
Services.prefs.clearUserPref("social.whitelist");
|
Services.prefs.clearUserPref("social.whitelist");
|
||||||
let provider = Social._getProviderFromOrigin(addonManifest.origin);
|
let provider = Social._getProviderFromOrigin(addonManifest.origin);
|
||||||
is(provider.manifest.version, 2, "manifest version is 2");
|
is(provider.manifest.version, 2, "manifest version is 2");
|
||||||
Social.uninstallProvider(addonManifest.origin);
|
Social.uninstallProvider(addonManifest.origin, function() {
|
||||||
gBrowser.removeTab(tab);
|
gBrowser.removeTab(tab);
|
||||||
next();
|
next();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
let port = provider.getWorkerPort();
|
let port = provider.getWorkerPort();
|
||||||
|
@ -8,7 +8,6 @@ let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).So
|
|||||||
|
|
||||||
const URI_EXTENSION_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul";
|
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 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
|
let manifest = { // normal provider
|
||||||
name: "provider ok",
|
name: "provider ok",
|
||||||
@ -39,7 +38,7 @@ var tests = {
|
|||||||
setAndUpdateBlocklist(blocklistURL, function() {
|
setAndUpdateBlocklist(blocklistURL, function() {
|
||||||
ok(Services.blocklist.isAddonBlocklisted("test1.example.com@services.mozilla.org", "0", "0", "0"), "blocking 'blocked'");
|
ok(Services.blocklist.isAddonBlocklisted("test1.example.com@services.mozilla.org", "0", "0", "0"), "blocking 'blocked'");
|
||||||
ok(!Services.blocklist.isAddonBlocklisted("example.com@services.mozilla.org", "0", "0", "0"), "not blocking 'good'");
|
ok(!Services.blocklist.isAddonBlocklisted("example.com@services.mozilla.org", "0", "0", "0"), "not blocking 'good'");
|
||||||
setAndUpdateBlocklist(blocklistEmpty, function() {
|
resetBlocklist(function() {
|
||||||
ok(!Services.blocklist.isAddonBlocklisted("test1.example.com@services.mozilla.org", "0", "0", "0"), "blocklist cleared");
|
ok(!Services.blocklist.isAddonBlocklisted("test1.example.com@services.mozilla.org", "0", "0", "0"), "blocklist cleared");
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
@ -49,7 +48,7 @@ var tests = {
|
|||||||
function finish(isgood) {
|
function finish(isgood) {
|
||||||
ok(isgood, "adding non-blocked provider ok");
|
ok(isgood, "adding non-blocked provider ok");
|
||||||
Services.prefs.clearUserPref("social.manifest.good");
|
Services.prefs.clearUserPref("social.manifest.good");
|
||||||
setAndUpdateBlocklist(blocklistEmpty, next);
|
resetBlocklist(next);
|
||||||
}
|
}
|
||||||
setManifestPref("social.manifest.good", manifest);
|
setManifestPref("social.manifest.good", manifest);
|
||||||
setAndUpdateBlocklist(blocklistURL, function() {
|
setAndUpdateBlocklist(blocklistURL, function() {
|
||||||
@ -75,7 +74,7 @@ var tests = {
|
|||||||
function finish(good) {
|
function finish(good) {
|
||||||
ok(good, "Unable to add blocklisted provider");
|
ok(good, "Unable to add blocklisted provider");
|
||||||
Services.prefs.clearUserPref("social.manifest.blocked");
|
Services.prefs.clearUserPref("social.manifest.blocked");
|
||||||
setAndUpdateBlocklist(blocklistEmpty, next);
|
resetBlocklist(next);
|
||||||
}
|
}
|
||||||
setManifestPref("social.manifest.blocked", manifest_bad);
|
setManifestPref("social.manifest.blocked", manifest_bad);
|
||||||
setAndUpdateBlocklist(blocklistURL, function() {
|
setAndUpdateBlocklist(blocklistURL, function() {
|
||||||
@ -85,7 +84,7 @@ var tests = {
|
|||||||
finish(false);
|
finish(false);
|
||||||
});
|
});
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
ok(true, "SocialService.addProvider should throw blocklist exception");
|
ok(true, "SocialService.addProvider should throw blocklist exception: " + e);
|
||||||
finish(true);
|
finish(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -94,7 +93,7 @@ var tests = {
|
|||||||
function finish(good) {
|
function finish(good) {
|
||||||
ok(good, "Unable to add blocklisted provider");
|
ok(good, "Unable to add blocklisted provider");
|
||||||
Services.prefs.clearUserPref("social.whitelist");
|
Services.prefs.clearUserPref("social.whitelist");
|
||||||
setAndUpdateBlocklist(blocklistEmpty, next);
|
resetBlocklist(next);
|
||||||
}
|
}
|
||||||
let activationURL = manifest_bad.origin + "/browser/browser/base/content/test/social/social_activate.html"
|
let activationURL = manifest_bad.origin + "/browser/browser/base/content/test/social/social_activate.html"
|
||||||
addTab(activationURL, function(tab) {
|
addTab(activationURL, function(tab) {
|
||||||
@ -119,29 +118,62 @@ var tests = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
testBlockingExistingProvider: function(next) {
|
testBlockingExistingProvider: function(next) {
|
||||||
|
let windowWasClosed = false;
|
||||||
|
function finish() {
|
||||||
|
waitForCondition(function() windowWasClosed, function() {
|
||||||
|
Services.wm.removeListener(listener);
|
||||||
|
next();
|
||||||
|
}, "blocklist dialog was closed");
|
||||||
|
}
|
||||||
|
|
||||||
addWindowListener(URI_EXTENSION_BLOCKLIST_DIALOG, function(win) {
|
let listener = {
|
||||||
win.close();
|
_window: null,
|
||||||
ok(true, "window closed");
|
onOpenWindow: function(aXULWindow) {
|
||||||
});
|
Services.wm.removeListener(this);
|
||||||
|
this._window = aXULWindow;
|
||||||
|
let domwindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||||
|
.getInterface(Ci.nsIDOMWindow);
|
||||||
|
|
||||||
|
domwindow.addEventListener("unload", function _unload() {
|
||||||
|
domwindow.removeEventListener("unload", _unload, false);
|
||||||
|
windowWasClosed = true;
|
||||||
|
}, false);
|
||||||
|
info("dialog opened, waiting for focus");
|
||||||
|
waitForFocus(function() {
|
||||||
|
is(domwindow.document.location.href, URI_EXTENSION_BLOCKLIST_DIALOG, "dialog opened and focused");
|
||||||
|
executeSoon(function() {
|
||||||
|
domwindow.close();
|
||||||
|
});
|
||||||
|
}, domwindow);
|
||||||
|
},
|
||||||
|
onCloseWindow: function(aXULWindow) { },
|
||||||
|
onWindowTitleChange: function(aXULWindow, aNewTitle) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
Services.wm.addListener(listener);
|
||||||
|
|
||||||
setManifestPref("social.manifest.blocked", manifest_bad);
|
setManifestPref("social.manifest.blocked", manifest_bad);
|
||||||
SocialService.addProvider(manifest_bad, function(provider) {
|
try {
|
||||||
if (provider) {
|
SocialService.addProvider(manifest_bad, function(provider) {
|
||||||
// the act of blocking should cause a 'provider-removed' notification
|
// the act of blocking should cause a 'provider-removed' notification
|
||||||
// from SocialService.
|
// from SocialService.
|
||||||
SocialService.registerProviderListener(function providerListener() {
|
SocialService.registerProviderListener(function providerListener(topic) {
|
||||||
|
if (topic != "provider-removed")
|
||||||
|
return;
|
||||||
SocialService.unregisterProviderListener(providerListener);
|
SocialService.unregisterProviderListener(providerListener);
|
||||||
SocialService.getProvider(provider.origin, function(p) {
|
SocialService.getProvider(provider.origin, function(p) {
|
||||||
ok(p==null, "blocklisted provider removed");
|
ok(p==null, "blocklisted provider removed");
|
||||||
Services.prefs.clearUserPref("social.manifest.blocked");
|
Services.prefs.clearUserPref("social.manifest.blocked");
|
||||||
setAndUpdateBlocklist(blocklistEmpty, next);
|
resetBlocklist(finish);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
// no callback - the act of updating should cause the listener above
|
// no callback - the act of updating should cause the listener above
|
||||||
// to fire.
|
// to fire.
|
||||||
setAndUpdateBlocklist(blocklistURL);
|
setAndUpdateBlocklist(blocklistURL);
|
||||||
}
|
});
|
||||||
});
|
} catch(e) {
|
||||||
|
ok(false, "unable to add provider " + e);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,8 @@ function runSocialTests(tests, cbPreTest, cbPostTest, cbFinish) {
|
|||||||
} catch (err if err instanceof StopIteration) {
|
} catch (err if err instanceof StopIteration) {
|
||||||
// out of items:
|
// out of items:
|
||||||
(cbFinish || defaultFinishChecks)();
|
(cbFinish || defaultFinishChecks)();
|
||||||
info("runSocialTests: finish test run with " + Social.providers.length + " providers");
|
is(providersAtStart, Social.providers.length,
|
||||||
|
"runSocialTests: finish test run with " + Social.providers.length + " providers");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// We run on a timeout as the frameworker also makes use of timeouts, so
|
// We run on a timeout as the frameworker also makes use of timeouts, so
|
||||||
@ -314,26 +315,6 @@ function resetBuiltinManifestPref(name) {
|
|||||||
Services.prefs.PREF_INVALID, "default manifest removed");
|
Services.prefs.PREF_INVALID, "default manifest removed");
|
||||||
}
|
}
|
||||||
|
|
||||||
function addWindowListener(aURL, aCallback) {
|
|
||||||
Services.wm.addListener({
|
|
||||||
onOpenWindow: function(aXULWindow) {
|
|
||||||
info("window opened, waiting for focus");
|
|
||||||
Services.wm.removeListener(this);
|
|
||||||
|
|
||||||
var domwindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor)
|
|
||||||
.getInterface(Ci.nsIDOMWindow);
|
|
||||||
waitForFocus(function() {
|
|
||||||
is(domwindow.document.location.href, aURL, "window opened and focused");
|
|
||||||
executeSoon(function() {
|
|
||||||
aCallback(domwindow);
|
|
||||||
});
|
|
||||||
}, domwindow);
|
|
||||||
},
|
|
||||||
onCloseWindow: function(aXULWindow) { },
|
|
||||||
onWindowTitleChange: function(aXULWindow, aNewTitle) { }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function addTab(url, callback) {
|
function addTab(url, callback) {
|
||||||
let tab = gBrowser.selectedTab = gBrowser.addTab(url, {skipAnimation: true});
|
let tab = gBrowser.selectedTab = gBrowser.addTab(url, {skipAnimation: true});
|
||||||
tab.linkedBrowser.addEventListener("load", function tabLoad(event) {
|
tab.linkedBrowser.addEventListener("load", function tabLoad(event) {
|
||||||
|
@ -262,8 +262,8 @@ this.Social = {
|
|||||||
SocialService.installProvider(doc, data, installCallback);
|
SocialService.installProvider(doc, data, installCallback);
|
||||||
},
|
},
|
||||||
|
|
||||||
uninstallProvider: function(origin) {
|
uninstallProvider: function(origin, aCallback) {
|
||||||
SocialService.uninstallProvider(origin);
|
SocialService.uninstallProvider(origin, aCallback);
|
||||||
},
|
},
|
||||||
|
|
||||||
// Activation functionality
|
// Activation functionality
|
||||||
|
@ -676,10 +676,10 @@ this.SocialService = {
|
|||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
uninstallProvider: function(origin) {
|
uninstallProvider: function(origin, aCallback) {
|
||||||
let manifest = SocialServiceInternal.getManifestByOrigin(origin);
|
let manifest = SocialServiceInternal.getManifestByOrigin(origin);
|
||||||
let addon = new AddonWrapper(manifest);
|
let addon = new AddonWrapper(manifest);
|
||||||
addon.uninstall();
|
addon.uninstall(aCallback);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1071,12 +1071,14 @@ var SocialAddonProvider = {
|
|||||||
aCallback([new AddonWrapper(a) for each (a in SocialServiceInternal.manifests)]);
|
aCallback([new AddonWrapper(a) for each (a in SocialServiceInternal.manifests)]);
|
||||||
},
|
},
|
||||||
|
|
||||||
removeAddon: function(aAddon) {
|
removeAddon: function(aAddon, aCallback) {
|
||||||
AddonManagerPrivate.callAddonListeners("onUninstalling", aAddon, false);
|
AddonManagerPrivate.callAddonListeners("onUninstalling", aAddon, false);
|
||||||
aAddon.pendingOperations |= AddonManager.PENDING_UNINSTALL;
|
aAddon.pendingOperations |= AddonManager.PENDING_UNINSTALL;
|
||||||
Services.prefs.clearUserPref(getPrefnameFromOrigin(aAddon.manifest.origin));
|
Services.prefs.clearUserPref(getPrefnameFromOrigin(aAddon.manifest.origin));
|
||||||
aAddon.pendingOperations -= AddonManager.PENDING_UNINSTALL;
|
aAddon.pendingOperations -= AddonManager.PENDING_UNINSTALL;
|
||||||
AddonManagerPrivate.callAddonListeners("onUninstalled", aAddon);
|
AddonManagerPrivate.callAddonListeners("onUninstalled", aAddon);
|
||||||
|
if (aCallback)
|
||||||
|
schedule(aCallback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1245,16 +1247,18 @@ AddonWrapper.prototype = {
|
|||||||
return val;
|
return val;
|
||||||
},
|
},
|
||||||
|
|
||||||
uninstall: function() {
|
uninstall: function(aCallback) {
|
||||||
let prefName = getPrefnameFromOrigin(this.manifest.origin);
|
let prefName = getPrefnameFromOrigin(this.manifest.origin);
|
||||||
if (Services.prefs.prefHasUserValue(prefName)) {
|
if (Services.prefs.prefHasUserValue(prefName)) {
|
||||||
if (ActiveProviders.has(this.manifest.origin)) {
|
if (ActiveProviders.has(this.manifest.origin)) {
|
||||||
SocialService.removeProvider(this.manifest.origin, function() {
|
SocialService.removeProvider(this.manifest.origin, function() {
|
||||||
SocialAddonProvider.removeAddon(this);
|
SocialAddonProvider.removeAddon(this, aCallback);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
} else {
|
} else {
|
||||||
SocialAddonProvider.removeAddon(this);
|
SocialAddonProvider.removeAddon(this, aCallback);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
schedule(aCallback);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user