Bug 603804: Don't include add-ons in fragment when metadata updates are disabled. r=Unfocused, a=blocks-final

This commit is contained in:
Dave Townsend 2010-11-08 09:59:20 -08:00
parent cd87e892df
commit ce648f8643
2 changed files with 155 additions and 3 deletions

View File

@ -1444,6 +1444,13 @@ var gDiscoverView = {
.getService(Ci.nsIURLFormatter)
.formatURLPref(PREF_DISCOVERURL);
var browser = gDiscoverView._browser;
if (Services.prefs.getBoolPref(PREF_BACKGROUND_UPDATE) == false) {
browser.homePage = url;
return;
}
gPendingInitializations++;
AddonManager.getAllAddons(function(aAddons) {
var list = {};
@ -1458,7 +1465,6 @@ var gDiscoverView = {
}
});
var browser = gDiscoverView._browser;
browser.homePage = url + "#" + JSON.stringify(list);
if (gDiscoverView.loaded) {

View File

@ -5,9 +5,11 @@
// Tests that the discovery view loads properly
const PREF_DISCOVERURL = "extensions.webservice.discoverURL";
const PREF_BACKGROUND_UPDATE = "extensions.update.enabled";
var gManagerWindow;
var gCategoryUtilities;
var gProvider;
function test() {
// Switch to a known url
@ -15,6 +17,34 @@ function test() {
waitForExplicitFinish();
gProvider = new MockProvider();
gProvider.createAddons([{
id: "addon1@tests.mozilla.org",
name: "Test add-on 1",
type: "extension",
version: "2.2",
isCompatible: false,
blocklistState: Ci.nsIBlocklistService.STATE_SOFTBLOCKED,
userDisabled: false
}, {
id: "addon2@tests.mozilla.org",
name: "Test add-on 2",
type: "plugin",
version: "3.1.5",
isCompatible: true,
blocklistState: Ci.nsIBlocklistService.STATE_NOT_BLOCKED,
userDisabled: false
}, {
id: "addon3@tests.mozilla.org",
name: "Test add-on 3",
type: "theme",
version: "1.2b1",
isCompatible: false,
blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED,
userDisabled: true
}]);
run_next_test();
}
@ -22,14 +52,62 @@ function end_test() {
finish();
}
function getURL(browser) {
var url = browser.currentURI.spec;
function getURL(aBrowser) {
var url = aBrowser.currentURI.spec;
var pos = url.indexOf("#");
if (pos != -1)
return url.substring(0, pos);
return url;
}
function getHash(aBrowser) {
var url = aBrowser.currentURI.spec;
var pos = url.indexOf("#");
if (pos != -1)
return decodeURIComponent(url.substring(pos + 1));
return null;
}
function testHash(aBrowser, aCallback) {
var hash = getHash(aBrowser);
isnot(hash, null, "There should be a hash");
try {
var data = JSON.parse(hash);
}
catch (e) {
ok(false, "Hash should have been valid JSON: " + e);
aCallback();
return;
}
is(typeof data, "object", "Hash should be a JS object");
// Ensure that at least the test add-ons are present
ok("addon1@tests.mozilla.org" in data, "Test add-on 1 should be listed");
ok("addon2@tests.mozilla.org" in data, "Test add-on 2 should be listed");
ok("addon3@tests.mozilla.org" in data, "Test add-on 3 should be listed");
// Test against all the add-ons the manager knows about since plugins and
// app extensions may exist
AddonManager.getAllAddons(function(aAddons) {
aAddons.forEach(function(aAddon) {
info("Testing data for add-on " + aAddon.id);
if (!aAddon.id in data) {
ok(false, "Add-on was not included in the data");
return;
}
var addonData = data[aAddon.id];
is(addonData.name, aAddon.name, "Name should be correct");
is(addonData.version, aAddon.version, "Version should be correct");
is(addonData.type, aAddon.type, "Type should be correct");
is(addonData.userDisabled, aAddon.userDisabled, "userDisabled should be correct");
is(addonData.isBlocklisted, aAddon.blocklistState == Ci.nsIBlocklistService.STATE_BLOCKED, "blocklisted should be correct");
is(addonData.isCompatible, aAddon.isCompatible, "isCompatible should be correct");
});
aCallback();
});
}
// Tests that switching to the discovery view displays the right url
add_test(function() {
open_manager("addons://list/extension", function(aWindow) {
@ -40,6 +118,72 @@ add_test(function() {
var browser = gManagerWindow.document.getElementById("discover-browser");
is(getURL(browser), TESTROOT + "releaseNotes.xhtml", "Should have loaded the right url");
testHash(browser, function() {
close_manager(gManagerWindow, run_next_test);
});
});
});
});
// Tests that loading the add-ons manager with the discovery view as the last
// selected view displays the right url
add_test(function() {
open_manager(null, function(aWindow) {
gManagerWindow = aWindow;
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
is(gCategoryUtilities.selectedCategory, "discover", "Should have loaded the right view");
var browser = gManagerWindow.document.getElementById("discover-browser");
is(getURL(browser), TESTROOT + "releaseNotes.xhtml", "Should have loaded the right url");
testHash(browser, function() {
close_manager(gManagerWindow, run_next_test);
});
});
});
// Tests that loading the add-ons manager with the discovery view as the initial
// view displays the right url
add_test(function() {
open_manager(null, function(aWindow) {
gManagerWindow = aWindow;
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
gCategoryUtilities.openType("extension", function() {
close_manager(gManagerWindow, function() {
open_manager("addons://discover/", function(aWindow) {
gManagerWindow = aWindow;
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
is(gCategoryUtilities.selectedCategory, "discover", "Should have loaded the right view");
var browser = gManagerWindow.document.getElementById("discover-browser");
is(getURL(browser), TESTROOT + "releaseNotes.xhtml", "Should have loaded the right url");
testHash(browser, function() {
close_manager(gManagerWindow, run_next_test);
});
});
});
});
});
});
// Tests that switching to the discovery view displays the right url
add_test(function() {
Services.prefs.setBoolPref(PREF_BACKGROUND_UPDATE, false);
registerCleanupFunction(function() {
Services.prefs.clearUserPref(PREF_BACKGROUND_UPDATE);
});
open_manager("addons://list/extension", function(aWindow) {
gManagerWindow = aWindow;
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
gCategoryUtilities.openType("discover", function() {
var browser = gManagerWindow.document.getElementById("discover-browser");
is(getURL(browser), TESTROOT + "releaseNotes.xhtml", "Should have loaded the right url");
is(getHash(browser), null, "Hash should not have been passed");
close_manager(gManagerWindow, run_next_test);
});
});
@ -56,6 +200,7 @@ add_test(function() {
var browser = gManagerWindow.document.getElementById("discover-browser");
is(getURL(browser), TESTROOT + "releaseNotes.xhtml", "Should have loaded the right url");
is(getHash(browser), null, "Hash should not have been passed");
close_manager(gManagerWindow, run_next_test);
});
});
@ -76,6 +221,7 @@ add_test(function() {
var browser = gManagerWindow.document.getElementById("discover-browser");
is(getURL(browser), TESTROOT + "releaseNotes.xhtml", "Should have loaded the right url");
is(getHash(browser), null, "Hash should not have been passed");
close_manager(gManagerWindow, run_next_test);
});
});