1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_cacheflush.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,122 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.6 + */ 1.7 + 1.8 +// This verifies that flushing the zipreader cache happens when appropriate 1.9 + 1.10 +var gExpectedFile = null; 1.11 +var gCacheFlushed = false; 1.12 + 1.13 +var CacheFlushObserver = { 1.14 + observe: function(aSubject, aTopic, aData) { 1.15 + if (aTopic != "flush-cache-entry") 1.16 + return; 1.17 + 1.18 + do_check_true(gExpectedFile != null); 1.19 + do_check_true(aSubject instanceof AM_Ci.nsIFile); 1.20 + do_check_eq(aSubject.path, gExpectedFile.path); 1.21 + gCacheFlushed = true; 1.22 + gExpectedFile = null; 1.23 + } 1.24 +}; 1.25 + 1.26 +function run_test() { 1.27 + // This test only makes sense when leaving extensions packed 1.28 + if (Services.prefs.getBoolPref("extensions.alwaysUnpack")) 1.29 + return; 1.30 + 1.31 + do_test_pending(); 1.32 + Services.obs.addObserver(CacheFlushObserver, "flush-cache-entry", false); 1.33 + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "2"); 1.34 + 1.35 + startupManager(); 1.36 + 1.37 + run_test_1(); 1.38 +} 1.39 + 1.40 +// Tests that the cache is flushed when cancelling a pending install 1.41 +function run_test_1() { 1.42 + AddonManager.getInstallForFile(do_get_addon("test_cacheflush1"), function(aInstall) { 1.43 + completeAllInstalls([aInstall], function() { 1.44 + // We should flush the staged XPI when cancelling the install 1.45 + gExpectedFile = gProfD.clone(); 1.46 + gExpectedFile.append("extensions"); 1.47 + gExpectedFile.append("staged"); 1.48 + gExpectedFile.append("addon1@tests.mozilla.org.xpi"); 1.49 + aInstall.cancel(); 1.50 + 1.51 + do_check_true(gCacheFlushed); 1.52 + gCacheFlushed = false; 1.53 + 1.54 + run_test_2(); 1.55 + }); 1.56 + }); 1.57 +} 1.58 + 1.59 +// Tests that the cache is flushed when uninstalling an add-on 1.60 +function run_test_2() { 1.61 + installAllFiles([do_get_addon("test_cacheflush1")], function() { 1.62 + // Installing will flush the staged XPI during startup 1.63 + gExpectedFile = gProfD.clone(); 1.64 + gExpectedFile.append("extensions"); 1.65 + gExpectedFile.append("staged"); 1.66 + gExpectedFile.append("addon1@tests.mozilla.org.xpi"); 1.67 + restartManager(); 1.68 + do_check_true(gCacheFlushed); 1.69 + gCacheFlushed = false; 1.70 + 1.71 + AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) { 1.72 + // We should flush the installed XPI when uninstalling 1.73 + gExpectedFile = gProfD.clone(); 1.74 + gExpectedFile.append("extensions"); 1.75 + gExpectedFile.append("addon1@tests.mozilla.org.xpi"); 1.76 + 1.77 + do_check_true(a1 != null); 1.78 + a1.uninstall(); 1.79 + do_check_false(gCacheFlushed); 1.80 + do_execute_soon(run_test_3); 1.81 + }); 1.82 + }); 1.83 +} 1.84 + 1.85 +// Tests that the cache is flushed when installing a restartless add-on 1.86 +function run_test_3() { 1.87 + restartManager(); 1.88 + 1.89 + AddonManager.getInstallForFile(do_get_addon("test_cacheflush2"), function(aInstall) { 1.90 + aInstall.addListener({ 1.91 + onInstallStarted: function(aInstall) { 1.92 + // We should flush the staged XPI when completing the install 1.93 + gExpectedFile = gProfD.clone(); 1.94 + gExpectedFile.append("extensions"); 1.95 + gExpectedFile.append("staged"); 1.96 + gExpectedFile.append("addon2@tests.mozilla.org.xpi"); 1.97 + }, 1.98 + 1.99 + onInstallEnded: function(aInstall) { 1.100 + do_check_true(gCacheFlushed); 1.101 + gCacheFlushed = false; 1.102 + 1.103 + do_execute_soon(run_test_4); 1.104 + } 1.105 + }); 1.106 + 1.107 + aInstall.install(); 1.108 + }); 1.109 +} 1.110 + 1.111 +// Tests that the cache is flushed when uninstalling a restartless add-on 1.112 +function run_test_4() { 1.113 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.114 + // We should flush the installed XPI when uninstalling 1.115 + gExpectedFile = gProfD.clone(); 1.116 + gExpectedFile.append("extensions"); 1.117 + gExpectedFile.append("addon2@tests.mozilla.org.xpi"); 1.118 + 1.119 + a2.uninstall(); 1.120 + do_check_true(gCacheFlushed); 1.121 + gCacheFlushed = false; 1.122 + 1.123 + do_execute_soon(do_test_finished); 1.124 + }); 1.125 +}