|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 // This verifies that flushing the zipreader cache happens when appropriate |
|
6 |
|
7 var gExpectedFile = null; |
|
8 var gCacheFlushed = false; |
|
9 |
|
10 var CacheFlushObserver = { |
|
11 observe: function(aSubject, aTopic, aData) { |
|
12 if (aTopic != "flush-cache-entry") |
|
13 return; |
|
14 |
|
15 do_check_true(gExpectedFile != null); |
|
16 do_check_true(aSubject instanceof AM_Ci.nsIFile); |
|
17 do_check_eq(aSubject.path, gExpectedFile.path); |
|
18 gCacheFlushed = true; |
|
19 gExpectedFile = null; |
|
20 } |
|
21 }; |
|
22 |
|
23 function run_test() { |
|
24 // This test only makes sense when leaving extensions packed |
|
25 if (Services.prefs.getBoolPref("extensions.alwaysUnpack")) |
|
26 return; |
|
27 |
|
28 do_test_pending(); |
|
29 Services.obs.addObserver(CacheFlushObserver, "flush-cache-entry", false); |
|
30 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "2"); |
|
31 |
|
32 startupManager(); |
|
33 |
|
34 run_test_1(); |
|
35 } |
|
36 |
|
37 // Tests that the cache is flushed when cancelling a pending install |
|
38 function run_test_1() { |
|
39 AddonManager.getInstallForFile(do_get_addon("test_cacheflush1"), function(aInstall) { |
|
40 completeAllInstalls([aInstall], function() { |
|
41 // We should flush the staged XPI when cancelling the install |
|
42 gExpectedFile = gProfD.clone(); |
|
43 gExpectedFile.append("extensions"); |
|
44 gExpectedFile.append("staged"); |
|
45 gExpectedFile.append("addon1@tests.mozilla.org.xpi"); |
|
46 aInstall.cancel(); |
|
47 |
|
48 do_check_true(gCacheFlushed); |
|
49 gCacheFlushed = false; |
|
50 |
|
51 run_test_2(); |
|
52 }); |
|
53 }); |
|
54 } |
|
55 |
|
56 // Tests that the cache is flushed when uninstalling an add-on |
|
57 function run_test_2() { |
|
58 installAllFiles([do_get_addon("test_cacheflush1")], function() { |
|
59 // Installing will flush the staged XPI during startup |
|
60 gExpectedFile = gProfD.clone(); |
|
61 gExpectedFile.append("extensions"); |
|
62 gExpectedFile.append("staged"); |
|
63 gExpectedFile.append("addon1@tests.mozilla.org.xpi"); |
|
64 restartManager(); |
|
65 do_check_true(gCacheFlushed); |
|
66 gCacheFlushed = false; |
|
67 |
|
68 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) { |
|
69 // We should flush the installed XPI when uninstalling |
|
70 gExpectedFile = gProfD.clone(); |
|
71 gExpectedFile.append("extensions"); |
|
72 gExpectedFile.append("addon1@tests.mozilla.org.xpi"); |
|
73 |
|
74 do_check_true(a1 != null); |
|
75 a1.uninstall(); |
|
76 do_check_false(gCacheFlushed); |
|
77 do_execute_soon(run_test_3); |
|
78 }); |
|
79 }); |
|
80 } |
|
81 |
|
82 // Tests that the cache is flushed when installing a restartless add-on |
|
83 function run_test_3() { |
|
84 restartManager(); |
|
85 |
|
86 AddonManager.getInstallForFile(do_get_addon("test_cacheflush2"), function(aInstall) { |
|
87 aInstall.addListener({ |
|
88 onInstallStarted: function(aInstall) { |
|
89 // We should flush the staged XPI when completing the install |
|
90 gExpectedFile = gProfD.clone(); |
|
91 gExpectedFile.append("extensions"); |
|
92 gExpectedFile.append("staged"); |
|
93 gExpectedFile.append("addon2@tests.mozilla.org.xpi"); |
|
94 }, |
|
95 |
|
96 onInstallEnded: function(aInstall) { |
|
97 do_check_true(gCacheFlushed); |
|
98 gCacheFlushed = false; |
|
99 |
|
100 do_execute_soon(run_test_4); |
|
101 } |
|
102 }); |
|
103 |
|
104 aInstall.install(); |
|
105 }); |
|
106 } |
|
107 |
|
108 // Tests that the cache is flushed when uninstalling a restartless add-on |
|
109 function run_test_4() { |
|
110 AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { |
|
111 // We should flush the installed XPI when uninstalling |
|
112 gExpectedFile = gProfD.clone(); |
|
113 gExpectedFile.append("extensions"); |
|
114 gExpectedFile.append("addon2@tests.mozilla.org.xpi"); |
|
115 |
|
116 a2.uninstall(); |
|
117 do_check_true(gCacheFlushed); |
|
118 gCacheFlushed = false; |
|
119 |
|
120 do_execute_soon(do_test_finished); |
|
121 }); |
|
122 } |