|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 // Tests that we recover gracefully from an extension directory disappearing |
|
6 // when we were expecting to uninstall it. |
|
7 |
|
8 var addon1 = { |
|
9 id: "addon1@tests.mozilla.org", |
|
10 version: "1.0", |
|
11 name: "Test 1", |
|
12 targetApplications: [{ |
|
13 id: "xpcshell@tests.mozilla.org", |
|
14 minVersion: "1", |
|
15 maxVersion: "1" |
|
16 }] |
|
17 }; |
|
18 |
|
19 var addon2 = { |
|
20 id: "addon2@tests.mozilla.org", |
|
21 version: "2.0", |
|
22 name: "Test 2", |
|
23 targetApplications: [{ |
|
24 id: "toolkit@mozilla.org", |
|
25 minVersion: "1", |
|
26 maxVersion: "1" |
|
27 }] |
|
28 }; |
|
29 |
|
30 const profileDir = gProfD.clone(); |
|
31 profileDir.append("extensions"); |
|
32 |
|
33 function run_test() { |
|
34 do_test_pending(); |
|
35 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "2"); |
|
36 |
|
37 writeInstallRDFForExtension(addon1, profileDir); |
|
38 |
|
39 startupManager(); |
|
40 |
|
41 AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) { |
|
42 a1.uninstall(); |
|
43 |
|
44 shutdownManager(); |
|
45 |
|
46 var dest = profileDir.clone(); |
|
47 dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org")); |
|
48 dest.remove(true); |
|
49 |
|
50 writeInstallRDFForExtension(addon2, profileDir); |
|
51 |
|
52 startupManager(); |
|
53 |
|
54 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", |
|
55 "addon2@tests.mozilla.org"], |
|
56 function([a1, a2]) { |
|
57 // Addon1 should no longer be installed |
|
58 do_check_eq(a1, null); |
|
59 |
|
60 // Addon2 should have been detected |
|
61 do_check_neq(a2, null); |
|
62 |
|
63 do_execute_soon(do_test_finished); |
|
64 }); |
|
65 })); |
|
66 } |