@@ -9,6 +9,7 @@ const { sinon } = ChromeUtils.importESModule(
9
9
10
10
ChromeUtils . defineESModuleGetters ( this , {
11
11
ScreenshotsUtils : "resource:///modules/ScreenshotsUtils.sys.mjs" ,
12
+ AddonManager : "resource://gre/modules/AddonManager.sys.mjs" ,
12
13
} ) ;
13
14
ChromeUtils . defineLazyGetter ( this , "ExtensionManagement" , ( ) => {
14
15
const { Management } = ChromeUtils . importESModule (
@@ -17,7 +18,11 @@ ChromeUtils.defineLazyGetter(this, "ExtensionManagement", () => {
17
18
return Management ;
18
19
} ) ;
19
20
20
- add_task ( async function test ( ) {
21
+ const COMPONENT_PREF = "screenshots.browser.component.enabled" ;
22
+ const SCREENSHOTS_PREF = "extensions.screenshots.disabled" ;
23
+ const SCREENSHOT_EXTENSION = "screenshots@mozilla.org" ;
24
+
25
+ add_task ( async function test_toggling_screenshots_pref ( ) {
21
26
let observerSpy = sinon . spy ( ) ;
22
27
let notifierSpy = sinon . spy ( ) ;
23
28
@@ -31,13 +36,24 @@ add_task(async function test() {
31
36
ScreenshotsUtils . notify . wrappedMethod . apply ( this , arguments ) ;
32
37
} ) ;
33
38
39
+ // wait for startup idle tasks to complete
40
+ await new Promise ( resolve => ChromeUtils . idleDispatch ( resolve ) ) ;
41
+ ok ( Services . prefs . getBoolPref ( COMPONENT_PREF ) , "Component enabled" ) ;
42
+ ok ( ! Services . prefs . getBoolPref ( SCREENSHOTS_PREF ) , "Screenshots enabled" ) ;
43
+
44
+ let addon = await AddonManager . getAddonByID ( SCREENSHOT_EXTENSION ) ;
45
+ await BrowserTestUtils . waitForCondition (
46
+ ( ) => ! addon . isActive ,
47
+ "The extension is not active when the component is prefd on"
48
+ ) ;
49
+
34
50
await BrowserTestUtils . withNewTab (
35
51
{
36
52
gBrowser,
37
53
url : SHORT_TEST_PAGE ,
38
54
} ,
39
55
async browser => {
40
- function awaitExtensionEvent ( eventName , id ) {
56
+ function extensionEventPromise ( eventName , id ) {
41
57
return new Promise ( resolve => {
42
58
let listener = ( _eventName , ...args ) => {
43
59
let extension = args [ 0 ] ;
@@ -49,9 +65,21 @@ add_task(async function test() {
49
65
ExtensionManagement . on ( eventName , listener ) ;
50
66
} ) ;
51
67
}
52
- const SCREENSHOT_EXTENSION = "screenshots@mozilla.org" ;
53
68
54
69
let helper = new ScreenshotsHelper ( browser ) ;
70
+ ok (
71
+ addon . userDisabled ,
72
+ "The extension is disabled when the component is prefd on"
73
+ ) ;
74
+ ok (
75
+ ! addon . isActive ,
76
+ "The extension is not initially active when the component is prefd on"
77
+ ) ;
78
+ await BrowserTestUtils . waitForCondition (
79
+ ( ) => ScreenshotsUtils . initialized ,
80
+ "The component is initialized"
81
+ ) ;
82
+ ok ( ScreenshotsUtils . initialized , "The component is initialized" ) ;
55
83
56
84
ok ( observerSpy . notCalled , "Observer not called" ) ;
57
85
helper . triggerUIFromToolbar ( ) ;
@@ -80,12 +108,20 @@ add_task(async function test() {
80
108
81
109
Assert . equal ( observerSpy . callCount , 3 , "Observer function called thrice" ) ;
82
110
83
- const COMPONENT_PREF = "screenshots.browser.component.enabled" ;
84
- await SpecialPowers . pushPrefEnv ( {
85
- set : [ [ COMPONENT_PREF , false ] ] ,
86
- } ) ;
111
+ let extensionReadyPromise = extensionEventPromise (
112
+ "ready" ,
113
+ SCREENSHOT_EXTENSION
114
+ ) ;
115
+ Services . prefs . setBoolPref ( COMPONENT_PREF , false ) ;
87
116
ok ( ! Services . prefs . getBoolPref ( COMPONENT_PREF ) , "Extension enabled" ) ;
88
- await awaitExtensionEvent ( "ready" , SCREENSHOT_EXTENSION ) ;
117
+
118
+ info ( "Waiting for the extension ready event" ) ;
119
+ await extensionReadyPromise ;
120
+ await BrowserTestUtils . waitForCondition (
121
+ ( ) => ! addon . userDisabled ,
122
+ "The extension gets un-disabled when the component is prefd off"
123
+ ) ;
124
+ ok ( addon . isActive , "Extension is active" ) ;
89
125
90
126
helper . triggerUIFromToolbar ( ) ;
91
127
Assert . equal (
@@ -94,6 +130,7 @@ add_task(async function test() {
94
130
"Observer function still called thrice"
95
131
) ;
96
132
133
+ info ( "Waiting for the extensions overlay" ) ;
97
134
await SpecialPowers . spawn (
98
135
browser ,
99
136
[ "#firefox-screenshots-preselection-iframe" ] ,
@@ -115,6 +152,7 @@ add_task(async function test() {
115
152
}
116
153
) ;
117
154
155
+ info ( "Waiting for the extensions overlay" ) ;
118
156
helper . triggerUIFromToolbar ( ) ;
119
157
await SpecialPowers . spawn (
120
158
browser ,
@@ -202,9 +240,7 @@ add_task(async function test() {
202
240
"screenshots-component-initialized"
203
241
) ;
204
242
205
- await SpecialPowers . pushPrefEnv ( {
206
- set : [ [ COMPONENT_PREF , true ] ] ,
207
- } ) ;
243
+ Services . prefs . setBoolPref ( COMPONENT_PREF , true ) ;
208
244
ok ( Services . prefs . getBoolPref ( COMPONENT_PREF ) , "Component enabled" ) ;
209
245
// Needed for component to initialize
210
246
await componentReady ;
@@ -215,12 +251,6 @@ add_task(async function test() {
215
251
4 ,
216
252
"Observer function called four times"
217
253
) ;
218
-
219
- const SCREENSHOTS_PREF = "extensions.screenshots.disabled" ;
220
- await SpecialPowers . pushPrefEnv ( {
221
- set : [ [ SCREENSHOTS_PREF , true ] ] ,
222
- } ) ;
223
- ok ( Services . prefs . getBoolPref ( SCREENSHOTS_PREF ) , "Screenshots disabled" ) ;
224
254
}
225
255
) ;
226
256
@@ -230,7 +260,9 @@ add_task(async function test() {
230
260
url : SHORT_TEST_PAGE ,
231
261
} ,
232
262
async browser => {
233
- const SCREENSHOTS_PREF = "extensions.screenshots.disabled" ;
263
+ Services . prefs . setBoolPref ( SCREENSHOTS_PREF , true ) ;
264
+ Services . prefs . setBoolPref ( COMPONENT_PREF , true ) ;
265
+
234
266
ok ( Services . prefs . getBoolPref ( SCREENSHOTS_PREF ) , "Screenshots disabled" ) ;
235
267
236
268
ok (
@@ -255,22 +287,23 @@ add_task(async function test() {
255
287
menu . hidePopup ( ) ;
256
288
await popuphidden ;
257
289
258
- await SpecialPowers . pushPrefEnv ( {
259
- set : [ [ SCREENSHOTS_PREF , false ] ] ,
260
- } ) ;
261
- ok ( ! Services . prefs . getBoolPref ( SCREENSHOTS_PREF ) , "Screenshots enabled" ) ;
262
- }
263
- ) ;
290
+ let componentReady = TestUtils . topicObserved (
291
+ "screenshots-component-initialized"
292
+ ) ;
293
+
294
+ Services . prefs . setBoolPref ( SCREENSHOTS_PREF , false ) ;
264
295
265
- await BrowserTestUtils . withNewTab (
266
- {
267
- gBrowser,
268
- url : SHORT_TEST_PAGE ,
269
- } ,
270
- async browser => {
271
- const SCREENSHOTS_PREF = "extensions.screenshots.disabled" ;
272
296
ok ( ! Services . prefs . getBoolPref ( SCREENSHOTS_PREF ) , "Screenshots enabled" ) ;
273
297
298
+ await componentReady ;
299
+
300
+ ok ( ScreenshotsUtils . initialized , "The component is initialized" ) ;
301
+
302
+ ok (
303
+ ! document . getElementById ( "screenshot-button" ) . disabled ,
304
+ "Toolbar button is enabled"
305
+ ) ;
306
+
274
307
let helper = new ScreenshotsHelper ( browser ) ;
275
308
276
309
helper . triggerUIFromToolbar ( ) ;
@@ -284,6 +317,4 @@ add_task(async function test() {
284
317
285
318
observerStub . restore ( ) ;
286
319
notifierStub . restore ( ) ;
287
-
288
- await SpecialPowers . popPrefEnv ( ) ;
289
320
} ) ;
0 commit comments