|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 let scope = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm"); |
|
5 const XPIProvider = scope.XPIProvider; |
|
6 |
|
7 function run_test() { |
|
8 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); |
|
9 startupManager(); |
|
10 |
|
11 run_next_test(); |
|
12 } |
|
13 |
|
14 add_test(function test_experiment() { |
|
15 AddonManager.getInstallForFile(do_get_addon("test_experiment1"), (install) => { |
|
16 completeAllInstalls([install], () => { |
|
17 AddonManager.getAddonByID("experiment1@tests.mozilla.org", (addon) => { |
|
18 Assert.ok(addon, "Addon is found."); |
|
19 |
|
20 Assert.ok(addon.userDisabled, "Experiments are userDisabled by default."); |
|
21 Assert.equal(addon.isActive, false, "Add-on is not active."); |
|
22 Assert.equal(addon.updateURL, null, "No updateURL for experiments."); |
|
23 Assert.equal(addon.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DISABLE, |
|
24 "Background updates are disabled."); |
|
25 Assert.equal(addon.permissions, AddonManager.PERM_CAN_UNINSTALL, |
|
26 "Permissions are minimal."); |
|
27 |
|
28 // Setting applyBackgroundUpdates should not work. |
|
29 addon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_ENABLE; |
|
30 Assert.equal(addon.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DISABLE, |
|
31 "Setting applyBackgroundUpdates shouldn't do anything."); |
|
32 |
|
33 let noCompatibleCalled = false; |
|
34 let noUpdateCalled = false; |
|
35 let finishedCalled = false; |
|
36 |
|
37 let listener = { |
|
38 onNoCompatibilityUpdateAvailable: () => { noCompatibleCalled = true; }, |
|
39 onNoUpdateAvailable: () => { noUpdateCalled = true; }, |
|
40 onUpdateFinished: () => { finishedCalled = true; }, |
|
41 }; |
|
42 |
|
43 addon.findUpdates(listener, "testing", null, null); |
|
44 Assert.ok(noCompatibleCalled, "Listener called."); |
|
45 Assert.ok(noUpdateCalled, "Listener called."); |
|
46 Assert.ok(finishedCalled, "Listener called."); |
|
47 |
|
48 run_next_test(); |
|
49 }); |
|
50 }); |
|
51 }); |
|
52 }); |
|
53 |
|
54 // Changes to userDisabled should not be persisted to the database. |
|
55 add_test(function test_userDisabledNotPersisted() { |
|
56 AddonManager.getAddonByID("experiment1@tests.mozilla.org", (addon) => { |
|
57 Assert.ok(addon, "Add-on is found."); |
|
58 Assert.ok(addon.userDisabled, "Add-on is user disabled."); |
|
59 |
|
60 let listener = { |
|
61 onEnabled: (addon2) => { |
|
62 AddonManager.removeAddonListener(listener); |
|
63 |
|
64 Assert.equal(addon2.id, addon.id, "Changed add-on matches expected."); |
|
65 Assert.equal(addon2.userDisabled, false, "Add-on is no longer user disabled."); |
|
66 Assert.ok(addon2.isActive, "Add-on is active."); |
|
67 |
|
68 Assert.ok("experiment1@tests.mozilla.org" in XPIProvider.bootstrappedAddons, |
|
69 "Experiment add-on listed in XPIProvider bootstrapped list."); |
|
70 |
|
71 AddonManager.getAddonByID("experiment1@tests.mozilla.org", (addon) => { |
|
72 Assert.ok(addon, "Add-on retrieved."); |
|
73 Assert.equal(addon.userDisabled, false, "Add-on is still enabled after API retrieve."); |
|
74 Assert.ok(addon.isActive, "Add-on is still active."); |
|
75 |
|
76 // Now when we restart the manager the add-on should revert state. |
|
77 restartManager(); |
|
78 let persisted = JSON.parse(Services.prefs.getCharPref("extensions.bootstrappedAddons")); |
|
79 Assert.ok(!("experiment1@tests.mozilla.org" in persisted), |
|
80 "Experiment add-on not persisted to bootstrappedAddons."); |
|
81 |
|
82 AddonManager.getAddonByID("experiment1@tests.mozilla.org", (addon) => { |
|
83 Assert.ok(addon, "Add-on retrieved."); |
|
84 Assert.ok(addon.userDisabled, "Add-on is disabled after restart."); |
|
85 Assert.equal(addon.isActive, false, "Add-on is not active after restart."); |
|
86 |
|
87 run_next_test(); |
|
88 }); |
|
89 }); |
|
90 }, |
|
91 }; |
|
92 |
|
93 AddonManager.addAddonListener(listener); |
|
94 addon.userDisabled = false; |
|
95 }); |
|
96 }); |