1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Make sure we don't accidentally start a background update while the prefs
// are enabled.
disableBackgroundUpdateTimer();
registerCleanupFunction(() => {
enableBackgroundUpdateTimer();
});
const { AddonTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/AddonTestUtils.sys.mjs"
);
const PREF_UPDATE_ENABLED = "extensions.update.enabled";
const PREF_AUTOUPDATE_DEFAULT = "extensions.update.autoUpdateDefault";
add_task(async function testUpdateAutomaticallyButton() {
SpecialPowers.pushPrefEnv({
set: [
[PREF_UPDATE_ENABLED, true],
[PREF_AUTOUPDATE_DEFAULT, true],
],
});
let win = await loadInitialView("extension");
let toggleAutomaticButton = win.document.querySelector(
'#page-options [action="set-update-automatically"]'
);
info("Verify the checked state reflects the update state");
ok(toggleAutomaticButton.checked, "Automatic updates button is checked");
AddonManager.autoUpdateDefault = false;
ok(!toggleAutomaticButton.checked, "Automatic updates button is unchecked");
AddonManager.autoUpdateDefault = true;
ok(toggleAutomaticButton.checked, "Automatic updates button is re-checked");
info("Verify that clicking the button changes the update state");
ok(AddonManager.autoUpdateDefault, "Auto updates are default");
ok(AddonManager.updateEnabled, "Updates are enabled");
toggleAutomaticButton.click();
ok(!AddonManager.autoUpdateDefault, "Auto updates are disabled");
ok(AddonManager.updateEnabled, "Updates are enabled");
toggleAutomaticButton.click();
ok(AddonManager.autoUpdateDefault, "Auto updates are enabled again");
ok(AddonManager.updateEnabled, "Updates are enabled");
await closeView(win);
});
add_task(async function testResetUpdateStates() {
let id = "update-state@mochi.test";
let extension = ExtensionTestUtils.loadExtension({
manifest: {
browser_specific_settings: { gecko: { id } },
},
useAddonManager: "permanent",
});
await extension.startup();
let win = await loadInitialView("extension");
let resetStateButton = win.document.querySelector(
'#page-options [action="reset-update-states"]'
);
info("Changing add-on update state");
let addon = await AddonManager.getAddonByID(id);
let setAddonUpdateState = async updateState => {
let changed = AddonTestUtils.promiseAddonEvent("onPropertyChanged");
addon.applyBackgroundUpdates = updateState;
await changed;
let addonState = addon.applyBackgroundUpdates;
is(addonState, updateState, `Add-on updates are ${updateState}`);
};
await setAddonUpdateState(AddonManager.AUTOUPDATE_DISABLE);
let propertyChanged = AddonTestUtils.promiseAddonEvent("onPropertyChanged");
resetStateButton.click();
await propertyChanged;
is(
addon.applyBackgroundUpdates,
AddonManager.AUTOUPDATE_DEFAULT,
"Add-on is reset to default updates"
);
await setAddonUpdateState(AddonManager.AUTOUPDATE_ENABLE);
propertyChanged = AddonTestUtils.promiseAddonEvent("onPropertyChanged");
resetStateButton.click();
await propertyChanged;
is(
addon.applyBackgroundUpdates,
AddonManager.AUTOUPDATE_DEFAULT,
"Add-on is reset to default updates again"
);
info("Check the label on the button as the global state changes");
is(
win.document.l10n.getAttributes(resetStateButton).id,
"addon-updates-reset-updates-to-automatic",
"The reset button label says it resets to automatic"
);
info("Disable auto updating globally");
AddonManager.autoUpdateDefault = false;
is(
win.document.l10n.getAttributes(resetStateButton).id,
"addon-updates-reset-updates-to-manual",
"The reset button label says it resets to manual"
);
await closeView(win);
await extension.unload();
});
|