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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
/* 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.import(
"resource://testing-common/AddonTestUtils.jsm"
);
const PREF_UPDATE_ENABLED = "extensions.update.enabled";
const PREF_AUTOUPDATE_DEFAULT = "extensions.update.autoUpdateDefault";
add_task(async function testUpdateAutomaticallyButton() {
Services.telemetry.clearEvents();
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");
assertAboutAddonsTelemetryEvents(
[
[
"addonsManager",
"action",
"aboutAddons",
"enabled",
{ action: "setUpdatePolicy", view: "list" },
],
[
"addonsManager",
"action",
"aboutAddons",
"default,enabled",
{ action: "setUpdatePolicy", view: "list" },
],
],
{ methods: ["action"] }
);
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"
);
assertAboutAddonsTelemetryEvents(
[
[
"addonsManager",
"action",
"aboutAddons",
null,
{ action: "resetUpdatePolicy", view: "list" },
],
[
"addonsManager",
"action",
"aboutAddons",
null,
{ action: "resetUpdatePolicy", view: "list" },
],
],
{ methods: ["action"] }
);
await closeView(win);
await extension.unload();
});
|