Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
5 // This verifies that add-ons distributed with the application get installed
6 // correctly
8 // Allow distributed add-ons to install
9 Services.prefs.setBoolPref("extensions.installDistroAddons", true);
11 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
13 const profileDir = gProfD.clone();
14 profileDir.append("extensions");
15 const distroDir = gProfD.clone();
16 distroDir.append("distribution");
17 distroDir.append("extensions");
18 registerDirectory("XREAppDist", distroDir.parent);
20 var addon1_1 = {
21 id: "addon1@tests.mozilla.org",
22 version: "1.0",
23 name: "Test version 1",
24 targetApplications: [{
25 id: "xpcshell@tests.mozilla.org",
26 minVersion: "1",
27 maxVersion: "5"
28 }]
29 };
31 var addon1_2 = {
32 id: "addon1@tests.mozilla.org",
33 version: "2.0",
34 name: "Test version 2",
35 targetApplications: [{
36 id: "xpcshell@tests.mozilla.org",
37 minVersion: "1",
38 maxVersion: "5"
39 }]
40 };
42 var addon1_3 = {
43 id: "addon1@tests.mozilla.org",
44 version: "3.0",
45 name: "Test version 3",
46 targetApplications: [{
47 id: "xpcshell@tests.mozilla.org",
48 minVersion: "1",
49 maxVersion: "5"
50 }]
51 };
53 function getActiveVersion() {
54 return Services.prefs.getIntPref("bootstraptest.active_version");
55 }
57 function getInstalledVersion() {
58 return Services.prefs.getIntPref("bootstraptest.installed_version");
59 }
61 function setOldModificationTime() {
62 // Make sure the installed extension has an old modification time so any
63 // changes will be detected
64 shutdownManager()
65 let extension = gProfD.clone();
66 extension.append("extensions");
67 if (Services.prefs.getBoolPref("extensions.alwaysUnpack"))
68 extension.append("addon1@tests.mozilla.org");
69 else
70 extension.append("addon1@tests.mozilla.org.xpi");
71 setExtensionModifiedTime(extension, Date.now - 10000);
72 startupManager(false);
73 }
75 function run_test() {
76 do_test_pending();
78 run_test_1();
79 }
81 // Tests that on the first startup the add-on gets installed
82 function run_test_1() {
83 writeInstallRDFForExtension(addon1_1, distroDir);
85 startupManager();
87 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
88 do_check_neq(a1, null);
89 do_check_eq(a1.version, "1.0");
90 do_check_true(a1.isActive);
91 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
92 do_check_false(a1.foreignInstall);
94 do_execute_soon(run_test_2);
95 });
96 }
98 // Tests that starting with a newer version in the distribution dir doesn't
99 // install it yet
100 function run_test_2() {
101 setOldModificationTime();
103 writeInstallRDFForExtension(addon1_2, distroDir);
105 restartManager();
107 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
108 do_check_neq(a1, null);
109 do_check_eq(a1.version, "1.0");
110 do_check_true(a1.isActive);
111 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
113 do_execute_soon(run_test_3);
114 });
115 }
117 // Test that an app upgrade installs the newer version
118 function run_test_3() {
119 restartManager("2");
121 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
122 do_check_neq(a1, null);
123 do_check_eq(a1.version, "2.0");
124 do_check_true(a1.isActive);
125 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
126 do_check_false(a1.foreignInstall);
128 do_execute_soon(run_test_4);
129 });
130 }
132 // Test that an app upgrade doesn't downgrade the extension
133 function run_test_4() {
134 setOldModificationTime();
136 writeInstallRDFForExtension(addon1_1, distroDir);
138 restartManager("3");
140 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
141 do_check_neq(a1, null);
142 do_check_eq(a1.version, "2.0");
143 do_check_true(a1.isActive);
144 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
146 do_execute_soon(run_test_5);
147 });
148 }
150 // Tests that after uninstalling a restart doesn't re-install the extension
151 function run_test_5() {
152 AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) {
153 a1.uninstall();
155 restartManager();
157 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
158 do_check_eq(a1, null);
160 do_execute_soon(run_test_6);
161 });
162 }));
163 }
165 // Tests that upgrading the application still doesn't re-install the uninstalled
166 // extension
167 function run_test_6() {
168 restartManager("4");
170 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
171 do_check_eq(a1, null);
173 do_execute_soon(run_test_7);
174 });
175 }
177 // Tests that a pending install of a newer version of a distributed add-on
178 // at app change still gets applied
179 function run_test_7() {
180 Services.prefs.clearUserPref("extensions.installedDistroAddon.addon1@tests.mozilla.org");
182 installAllFiles([do_get_addon("test_distribution1_2")], function() {
183 restartManager(2);
185 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
186 do_check_neq(a1, null);
187 do_check_eq(a1.version, "2.0");
188 do_check_true(a1.isActive);
189 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
191 a1.uninstall();
192 do_execute_soon(run_test_8);
193 });
194 });
195 }
197 // Tests that a pending install of a older version of a distributed add-on
198 // at app change gets replaced by the distributed version
199 function run_test_8() {
200 restartManager();
202 writeInstallRDFForExtension(addon1_3, distroDir);
204 installAllFiles([do_get_addon("test_distribution1_2")], function() {
205 restartManager(3);
207 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
208 do_check_neq(a1, null);
209 do_check_eq(a1.version, "3.0");
210 do_check_true(a1.isActive);
211 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
213 a1.uninstall();
214 do_execute_soon(run_test_9);
215 });
216 });
217 }
219 // Tests that bootstrapped add-ons distributed start up correctly, also that
220 // add-ons with multiple directories get copied fully
221 function run_test_9() {
222 restartManager();
224 // Copy the test add-on to the distro dir
225 let addon = do_get_file("data/test_distribution2_2");
226 addon.copyTo(distroDir, "addon2@tests.mozilla.org");
228 restartManager("5");
230 AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
231 do_check_neq(a2, null);
232 do_check_true(a2.isActive);
234 do_check_eq(getInstalledVersion(), 2);
235 do_check_eq(getActiveVersion(), 2);
237 do_check_true(a2.hasResource("bootstrap.js"));
238 do_check_true(a2.hasResource("subdir/dummy.txt"));
239 do_check_true(a2.hasResource("subdir/subdir2/dummy2.txt"));
241 // Currently installs are unpacked if the source is a directory regardless
242 // of the install.rdf property or the global preference
244 let addonDir = profileDir.clone();
245 addonDir.append("addon2@tests.mozilla.org");
246 do_check_true(addonDir.exists());
247 do_check_true(addonDir.isDirectory());
248 addonDir.append("subdir");
249 do_check_true(addonDir.exists());
250 do_check_true(addonDir.isDirectory());
251 addonDir.append("subdir2");
252 do_check_true(addonDir.exists());
253 do_check_true(addonDir.isDirectory());
254 addonDir.append("dummy2.txt");
255 do_check_true(addonDir.exists());
256 do_check_true(addonDir.isFile());
258 a2.uninstall();
260 do_execute_soon(do_test_finished);
261 });
262 }