From 25df2776e48ec1781c185e732fe0c469062dabff Mon Sep 17 00:00:00 2001 From: "dtownsend%oxymoronical.com" Date: Fri, 23 May 2008 08:50:00 +0000 Subject: [PATCH] Bug 433371: Upgrading from Ubuntu Firefox 3.0b5 to Mozilla Firefox 3.0 breaks add-on installation. git-svn-id: svn://10.0.0.236/trunk@251773 18797224-902f-48f8-a5cc-f745e15eee43 --- .../extensions/src/nsExtensionManager.js.in | 4 +++- .../test/unit/data/test_bug356370.rdf | 14 +++++++++++++ .../test/unit/data/test_bug356370_4.rdf | 21 +++++++++++++++++++ .../extensions/test/unit/test_bug356370.js | 17 +++++++++++++-- 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 mozilla/toolkit/mozapps/extensions/test/unit/data/test_bug356370_4.rdf diff --git a/mozilla/toolkit/mozapps/extensions/src/nsExtensionManager.js.in b/mozilla/toolkit/mozapps/extensions/src/nsExtensionManager.js.in index 59c1f6bdb36..834e1538d68 100644 --- a/mozilla/toolkit/mozapps/extensions/src/nsExtensionManager.js.in +++ b/mozilla/toolkit/mozapps/extensions/src/nsExtensionManager.js.in @@ -8073,7 +8073,7 @@ ExtensionsDataSource.prototype = { if (id in this.visibleItems && this.visibleItems[id]) { var oldLocation = InstallLocations.get(this.visibleItems[id]); var newLocation = InstallLocations.get(locationKey); - if (forceReplace || newLocation.priority < oldLocation.priority) + if (forceReplace || !oldLocation || newLocation.priority < oldLocation.priority) this.visibleItems[id] = locationKey; } else @@ -8177,6 +8177,8 @@ ExtensionsDataSource.prototype = { _getThemeImageURL: function(item, fileName, fallbackURL) { var id = stripPrefix(item.Value, PREFIX_ITEM_URI); var installLocation = this._em.getInstallLocation(id); + if (!installLocation) + return fallbackURL; var file = installLocation.getItemFile(id, fileName) if (file.exists()) return gRDF.GetResource(getURLSpecFromFile(file)); diff --git a/mozilla/toolkit/mozapps/extensions/test/unit/data/test_bug356370.rdf b/mozilla/toolkit/mozapps/extensions/test/unit/data/test_bug356370.rdf index d97c2e6280e..dfda3f3ad9a 100644 --- a/mozilla/toolkit/mozapps/extensions/test/unit/data/test_bug356370.rdf +++ b/mozilla/toolkit/mozapps/extensions/test/unit/data/test_bug356370.rdf @@ -42,9 +42,23 @@ + + invalid + 1 + Bug 356370 test 4 + 4 + + + xpcshell@tests.mozilla.org + 1 + 1 + + + + diff --git a/mozilla/toolkit/mozapps/extensions/test/unit/data/test_bug356370_4.rdf b/mozilla/toolkit/mozapps/extensions/test/unit/data/test_bug356370_4.rdf new file mode 100644 index 00000000000..eb5d4d9a882 --- /dev/null +++ b/mozilla/toolkit/mozapps/extensions/test/unit/data/test_bug356370_4.rdf @@ -0,0 +1,21 @@ + + + + + + bug356370_4@tests.mozilla.org + 1 + + + + xpcshell@tests.mozilla.org + 1 + 1 + + + + Bug 356370 test 4 + 4 + + diff --git a/mozilla/toolkit/mozapps/extensions/test/unit/test_bug356370.js b/mozilla/toolkit/mozapps/extensions/test/unit/test_bug356370.js index 5347e150178..b961fe22da2 100644 --- a/mozilla/toolkit/mozapps/extensions/test/unit/test_bug356370.js +++ b/mozilla/toolkit/mozapps/extensions/test/unit/test_bug356370.js @@ -44,10 +44,12 @@ function write_cache_line(stream, location, id, mtime) { /** * This copies two extensions, a default extensions datasource into the profile * It also manufactures an extensions.cache file with invalid items. - * There are 3 test extensions: + * There are 4 test extensions: * bug356370_1@tests.mozilla.org exists in app-profile and an unused version is in invalid-lo - * bug356370_2@tests.mozilla.org exists in invalid-hi and an unusd version is in app-profile + * bug356370_2@tests.mozilla.org exists in invalid-hi and an unused version is in app-profile * bug356370_3@tests.mozilla.org exists in invalid + * bug356370_4@tests.mozilla.org is a theme existing in invalid and a new install + * will be detected in app-profile * * After startup only the first two should exist in the correct install location * and installing extensions should be successful. @@ -85,10 +87,18 @@ function setup_profile() { write_cache_line(foStream, "app-profile", "bug356370_2@tests.mozilla.org", addon.lastModifiedTime); + addon = gProfD.clone(); + addon.append("extensions"); + addon.append("bug356370_4@tests.mozilla.org"); + source = do_get_file("toolkit/mozapps/extensions/test/unit/data/test_bug356370_4.rdf"); + addon.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755); + source.copyTo(addon, "install.rdf"); + // Write out a set of invalid entries write_cache_line(foStream, "invalid-lo", "bug356370_1@tests.mozilla.org", 0); write_cache_line(foStream, "invalid-hi", "bug356370_2@tests.mozilla.org", 0); write_cache_line(foStream, "invalid", "bug356370_3@tests.mozilla.org", 0); + write_cache_line(foStream, "invalid", "bug356370_4@tests.mozilla.org", 0); foStream.close(); } @@ -105,6 +115,8 @@ function run_test() { // This should still be disabled do_check_eq(getManifestProperty("bug356370_2@tests.mozilla.org", "isDisabled"), "true"); do_check_eq(gEM.getItemForID("bug356370_3@tests.mozilla.org"), null); + do_check_neq(gEM.getItemForID("bug356370_4@tests.mozilla.org"), null); + do_check_eq(getManifestProperty("bug356370_4@tests.mozilla.org", "installLocation"), "app-profile"); gEM.installItemFromFile(do_get_addon("test_bug257155"), NS_INSTALL_LOCATION_APPPROFILE); do_check_neq(gEM.getItemForID("bug257155@tests.mozilla.org"), null); @@ -114,4 +126,5 @@ function run_test() { do_check_neq(gEM.getItemForID("bug356370_1@tests.mozilla.org"), null); do_check_neq(gEM.getItemForID("bug356370_2@tests.mozilla.org"), null); do_check_eq(gEM.getItemForID("bug356370_3@tests.mozilla.org"), null); + do_check_neq(gEM.getItemForID("bug356370_4@tests.mozilla.org"), null); }