|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 // This test verifies that removing a listener during a callback for that type |
|
6 // of listener still results in all listeners being called. |
|
7 |
|
8 var addon1 = { |
|
9 id: "addon1@tests.mozilla.org", |
|
10 version: "2.0", |
|
11 name: "Test 1", |
|
12 bootstrap: "true", |
|
13 targetApplications: [{ |
|
14 id: "xpcshell@tests.mozilla.org", |
|
15 minVersion: "1", |
|
16 maxVersion: "1" |
|
17 }] |
|
18 }; |
|
19 |
|
20 var listener1 = { |
|
21 sawEvent: false, |
|
22 onDisabling: function() { |
|
23 this.sawEvent = true; |
|
24 AddonManager.removeAddonListener(this); |
|
25 }, |
|
26 onNewInstall: function() { |
|
27 this.sawEvent = true; |
|
28 AddonManager.removeInstallListener(this); |
|
29 } |
|
30 }; |
|
31 var listener2 = { |
|
32 sawEvent: false, |
|
33 onDisabling: function() { |
|
34 this.sawEvent = true; |
|
35 }, |
|
36 onNewInstall: function() { |
|
37 this.sawEvent = true; |
|
38 } |
|
39 }; |
|
40 var listener3 = { |
|
41 sawEvent: false, |
|
42 onDisabling: function() { |
|
43 this.sawEvent = true; |
|
44 }, |
|
45 onNewInstall: function() { |
|
46 this.sawEvent = true; |
|
47 } |
|
48 }; |
|
49 |
|
50 const profileDir = gProfD.clone(); |
|
51 profileDir.append("extensions"); |
|
52 |
|
53 |
|
54 function run_test() { |
|
55 do_test_pending(); |
|
56 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); |
|
57 |
|
58 writeInstallRDFForExtension(addon1, profileDir); |
|
59 startupManager(); |
|
60 |
|
61 run_test_1(); |
|
62 } |
|
63 |
|
64 function run_test_1() { |
|
65 AddonManager.addAddonListener(listener1); |
|
66 AddonManager.addAddonListener(listener2); |
|
67 AddonManager.addAddonListener(listener3); |
|
68 |
|
69 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org"], function([a1]) { |
|
70 do_check_neq(a1, null); |
|
71 do_check_false(a1.userDisabled); |
|
72 do_check_true(a1.isActive); |
|
73 |
|
74 a1.userDisabled = true; |
|
75 |
|
76 do_check_true(listener1.sawEvent); |
|
77 listener1.sawEvent = false; |
|
78 do_check_true(listener2.sawEvent); |
|
79 listener2.sawEvent = false; |
|
80 do_check_true(listener3.sawEvent); |
|
81 listener3.sawEvent = false; |
|
82 |
|
83 AddonManager.removeAddonListener(listener1); |
|
84 AddonManager.removeAddonListener(listener2); |
|
85 AddonManager.removeAddonListener(listener3); |
|
86 |
|
87 a1.uninstall(); |
|
88 run_test_2(); |
|
89 }); |
|
90 } |
|
91 |
|
92 function run_test_2() { |
|
93 AddonManager.addInstallListener(listener1); |
|
94 AddonManager.addInstallListener(listener2); |
|
95 AddonManager.addInstallListener(listener3); |
|
96 |
|
97 AddonManager.getInstallForFile(do_get_addon("test_bug757663"), function(aInstall) { |
|
98 |
|
99 do_check_true(listener1.sawEvent); |
|
100 listener1.sawEvent = false; |
|
101 do_check_true(listener2.sawEvent); |
|
102 listener2.sawEvent = false; |
|
103 do_check_true(listener3.sawEvent); |
|
104 listener3.sawEvent = false; |
|
105 |
|
106 AddonManager.removeInstallListener(listener1); |
|
107 AddonManager.removeInstallListener(listener2); |
|
108 AddonManager.removeInstallListener(listener3); |
|
109 |
|
110 do_execute_soon(do_test_finished); |
|
111 }); |
|
112 } |