99sys .path .append (os .path .dirname (__file__ ))
1010
1111from base_test import Environment
12- from felt_tests import FeltTests
12+ from felt_lock_tests import FeltLockTests
1313
1414PREF_LOCK_ON_CLOSE = "enterprise.locking.browser_close"
1515PREF_PROMPT_ON_SIGNOUT = "enterprise.prompt_on_signout"
1616
1717
18- class BrowserLockOnClose (FeltTests ):
18+ class BrowserLockOnClose (FeltLockTests ):
1919 """Verify the lock-vs-signout decision when closing a FELT browser.
2020
2121 The distinguishing signal is whether a server signout is posted (a lock
@@ -104,44 +104,28 @@ def _accept_close_dialog(self):
104104 """
105105 )
106106
107- def _felt_has_locking_token (self ):
108- """Whether FELT persisted an encrypted resume token for the signed-in user."""
109- driver = self .get_driver (Environment .FELT )
110- driver .set_context ("chrome" )
111- try :
112- return driver .execute_script (
113- """
114- const { FeltStorage } = ChromeUtils.importESModule(
115- "resource://gre/modules/enterprise/FeltStorage.sys.mjs"
116- );
117- const email = FeltStorage.getLastSignedInUser();
118- return !!(email && FeltStorage.getLockingToken(email));
119- """
120- )
121- finally :
122- driver .set_context ("content" )
123-
124- def _settle_after_close (self , browser_pid ):
125- self .wait_process_exit (browser_pid )
126- self .await_felt_auth_window ()
127- self .force_window ()
128-
129- def _start_signed_in (self ):
130- self ._hold_felt_after_child_exit ()
131- self .run_felt_base ()
132- self .connect_child_browser ()
133- self .assert_user_signed_in (env = Environment .FIREFOX )
134- return self ._child_driver .session_capabilities ["moz:processID" ]
107+ def _set_locking_enabled (self , enabled ):
108+ """enterprise.locking.browser_close is locked in firefox.js; Marionette
109+ can't override a locked pref the way the policy engine does (it unlocks
110+ first), so unlock it here to emulate the policy-applied value."""
111+ self ._child_driver .set_context ("chrome" )
112+ self ._child_driver .execute_script (
113+ """
114+ const pref = arguments[0];
115+ Services.prefs.unlockPref(pref);
116+ Services.prefs.setBoolPref(pref, arguments[1]);
117+ """ ,
118+ script_args = (PREF_LOCK_ON_CLOSE , enabled ),
119+ )
120+ self ._child_driver .set_context ("content" )
135121
136122 def _begin_close_test (self , * , locking_enabled , prompt_enabled ):
137123 """Sign in, set the locking/prompt prefs, and assert no signout yet.
138124
139- Returns the child browser pid for _settle_after_close ."""
125+ Returns the child browser pid for _settle_after_child_exit ."""
140126 browser_pid = self ._start_signed_in ()
141- self ._child_driver .set_prefs ({
142- PREF_LOCK_ON_CLOSE : locking_enabled ,
143- PREF_PROMPT_ON_SIGNOUT : prompt_enabled ,
144- })
127+ self ._set_locking_enabled (locking_enabled )
128+ self ._child_driver .set_pref (PREF_PROMPT_ON_SIGNOUT , prompt_enabled )
145129 assert self .signout_count .value == 0 , "No signout should have been posted yet"
146130 return browser_pid
147131
@@ -169,16 +153,18 @@ def test_lock_on_close_persists_session_without_signout(self):
169153 browser_pid = self ._begin_close_test (locking_enabled = True , prompt_enabled = False )
170154
171155 self ._trigger_browser_closure ()
172- self ._settle_after_close (browser_pid )
156+ self ._settle_after_child_exit (browser_pid )
173157
174158 self ._assert_locked ()
175159
176160 def test_signout_on_close_when_locking_disabled (self ):
177161 """Locking disabled, prompt disabled: closing signs out (no token kept)."""
178- browser_pid = self ._begin_close_test (locking_enabled = False , prompt_enabled = False )
162+ browser_pid = self ._begin_close_test (
163+ locking_enabled = False , prompt_enabled = False
164+ )
179165
180166 self ._trigger_browser_closure ()
181- self ._settle_after_close (browser_pid )
167+ self ._settle_after_child_exit (browser_pid )
182168
183169 self ._assert_signed_out ()
184170
@@ -192,7 +178,7 @@ def test_prompt_lock_dialog_accept_locks(self):
192178 expected_reauth = "You can resume your session after authenticating on this device." ,
193179 )
194180 self ._accept_close_dialog ()
195- self ._settle_after_close (browser_pid )
181+ self ._settle_after_child_exit (browser_pid )
196182
197183 self ._assert_locked ()
198184
@@ -206,6 +192,6 @@ def test_prompt_signout_dialog_accept_signs_out(self):
206192 expected_reauth = "To use Firefox Enterprise again, you’ll need to reauthenticate through your organization’s SSO provider." ,
207193 )
208194 self ._accept_close_dialog ()
209- self ._settle_after_close (browser_pid )
195+ self ._settle_after_child_exit (browser_pid )
210196
211197 self ._assert_signed_out ()
0 commit comments