michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: // This verifies that flushing the zipreader cache happens when appropriate michael@0: michael@0: var gExpectedFile = null; michael@0: var gCacheFlushed = false; michael@0: michael@0: var CacheFlushObserver = { michael@0: observe: function(aSubject, aTopic, aData) { michael@0: if (aTopic != "flush-cache-entry") michael@0: return; michael@0: michael@0: do_check_true(gExpectedFile != null); michael@0: do_check_true(aSubject instanceof AM_Ci.nsIFile); michael@0: do_check_eq(aSubject.path, gExpectedFile.path); michael@0: gCacheFlushed = true; michael@0: gExpectedFile = null; michael@0: } michael@0: }; michael@0: michael@0: function run_test() { michael@0: // This test only makes sense when leaving extensions packed michael@0: if (Services.prefs.getBoolPref("extensions.alwaysUnpack")) michael@0: return; michael@0: michael@0: do_test_pending(); michael@0: Services.obs.addObserver(CacheFlushObserver, "flush-cache-entry", false); michael@0: createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "2"); michael@0: michael@0: startupManager(); michael@0: michael@0: run_test_1(); michael@0: } michael@0: michael@0: // Tests that the cache is flushed when cancelling a pending install michael@0: function run_test_1() { michael@0: AddonManager.getInstallForFile(do_get_addon("test_cacheflush1"), function(aInstall) { michael@0: completeAllInstalls([aInstall], function() { michael@0: // We should flush the staged XPI when cancelling the install michael@0: gExpectedFile = gProfD.clone(); michael@0: gExpectedFile.append("extensions"); michael@0: gExpectedFile.append("staged"); michael@0: gExpectedFile.append("addon1@tests.mozilla.org.xpi"); michael@0: aInstall.cancel(); michael@0: michael@0: do_check_true(gCacheFlushed); michael@0: gCacheFlushed = false; michael@0: michael@0: run_test_2(); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: // Tests that the cache is flushed when uninstalling an add-on michael@0: function run_test_2() { michael@0: installAllFiles([do_get_addon("test_cacheflush1")], function() { michael@0: // Installing will flush the staged XPI during startup michael@0: gExpectedFile = gProfD.clone(); michael@0: gExpectedFile.append("extensions"); michael@0: gExpectedFile.append("staged"); michael@0: gExpectedFile.append("addon1@tests.mozilla.org.xpi"); michael@0: restartManager(); michael@0: do_check_true(gCacheFlushed); michael@0: gCacheFlushed = false; michael@0: michael@0: AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) { michael@0: // We should flush the installed XPI when uninstalling michael@0: gExpectedFile = gProfD.clone(); michael@0: gExpectedFile.append("extensions"); michael@0: gExpectedFile.append("addon1@tests.mozilla.org.xpi"); michael@0: michael@0: do_check_true(a1 != null); michael@0: a1.uninstall(); michael@0: do_check_false(gCacheFlushed); michael@0: do_execute_soon(run_test_3); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: // Tests that the cache is flushed when installing a restartless add-on michael@0: function run_test_3() { michael@0: restartManager(); michael@0: michael@0: AddonManager.getInstallForFile(do_get_addon("test_cacheflush2"), function(aInstall) { michael@0: aInstall.addListener({ michael@0: onInstallStarted: function(aInstall) { michael@0: // We should flush the staged XPI when completing the install michael@0: gExpectedFile = gProfD.clone(); michael@0: gExpectedFile.append("extensions"); michael@0: gExpectedFile.append("staged"); michael@0: gExpectedFile.append("addon2@tests.mozilla.org.xpi"); michael@0: }, michael@0: michael@0: onInstallEnded: function(aInstall) { michael@0: do_check_true(gCacheFlushed); michael@0: gCacheFlushed = false; michael@0: michael@0: do_execute_soon(run_test_4); michael@0: } michael@0: }); michael@0: michael@0: aInstall.install(); michael@0: }); michael@0: } michael@0: michael@0: // Tests that the cache is flushed when uninstalling a restartless add-on michael@0: function run_test_4() { michael@0: AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { michael@0: // We should flush the installed XPI when uninstalling michael@0: gExpectedFile = gProfD.clone(); michael@0: gExpectedFile.append("extensions"); michael@0: gExpectedFile.append("addon2@tests.mozilla.org.xpi"); michael@0: michael@0: a2.uninstall(); michael@0: do_check_true(gCacheFlushed); michael@0: gCacheFlushed = false; michael@0: michael@0: do_execute_soon(do_test_finished); michael@0: }); michael@0: }