From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../tests/unit/test_modal_dialogs.py | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 testing/marionette/harness/marionette_harness/tests/unit/test_modal_dialogs.py (limited to 'testing/marionette/harness/marionette_harness/tests/unit/test_modal_dialogs.py') diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_modal_dialogs.py b/testing/marionette/harness/marionette_harness/tests/unit/test_modal_dialogs.py new file mode 100644 index 0000000000..e738625899 --- /dev/null +++ b/testing/marionette/harness/marionette_harness/tests/unit/test_modal_dialogs.py @@ -0,0 +1,161 @@ +from marionette_driver.by import By +from marionette_driver.expected import element_present +from marionette_driver import errors +from marionette_driver.marionette import Alert +from marionette_driver.wait import Wait + +from marionette_harness import MarionetteTestCase, parameterized, WindowManagerMixin + + +class TestModalDialogs(WindowManagerMixin, MarionetteTestCase): + def setUp(self): + super(TestModalDialogs, self).setUp() + self.new_tab = self.open_tab() + self.marionette.switch_to_window(self.new_tab) + + self.http_auth_pref = ( + "network.auth.non-web-content-triggered-resources-http-auth-allow" + ) + + def tearDown(self): + # Ensure to close all possible remaining tab modal dialogs + try: + while True: + alert = self.marionette.switch_to_alert() + alert.dismiss() + except errors.NoAlertPresentException: + pass + + self.close_all_tabs() + self.close_all_windows() + + super(TestModalDialogs, self).tearDown() + + @property + def alert_present(self): + try: + Alert(self.marionette).text + return True + except errors.NoAlertPresentException: + return False + + def wait_for_alert(self, timeout=None): + Wait(self.marionette, timeout=timeout).until(lambda _: self.alert_present) + + def open_custom_prompt(self, modal_type, delay=0): + browsing_context_id = self.marionette.execute_script( + """ + return window.browsingContext.id; + """, + sandbox="system", + ) + + with self.marionette.using_context("chrome"): + self.marionette.execute_script( + """ + const [ modalType, browsingContextId, delay ] = arguments; + + const modalTypes = { + 1: Services.prompt.MODAL_TYPE_CONTENT, + 2: Services.prompt.MODAL_TYPE_TAB, + 3: Services.prompt.MODAL_TYPE_WINDOW, + 4: Services.prompt.MODAL_TYPE_INTERNAL_WINDOW, + } + + window.setTimeout(() => { + Services.prompt.alertBC( + BrowsingContext.get(browsingContextId), + modalTypes[modalType], + "title", + "text" + ); + }, delay); + """, + script_args=(modal_type, browsing_context_id, delay * 1000), + ) + + @parameterized("content", 1) + @parameterized("tab", 2) + @parameterized("window", 3) + @parameterized("internal_window", 4) + def test_detect_modal_type_in_current_tab_for_type(self, type): + self.open_custom_prompt(type) + self.wait_for_alert() + + self.assertTrue(self.alert_present) + + # Restart the session to ensure we still find the formerly left-open dialog. + self.marionette.delete_session() + self.marionette.start_session() + + alert = self.marionette.switch_to_alert() + alert.dismiss() + + @parameterized("content", 1) + @parameterized("tab", 2) + def test_dont_detect_content_and_tab_modal_type_in_another_tab_for_type(self, type): + self.open_custom_prompt(type, delay=0.25) + + self.marionette.switch_to_window(self.start_tab) + with self.assertRaises(errors.TimeoutException): + self.wait_for_alert(2) + + self.marionette.switch_to_window(self.new_tab) + alert = self.marionette.switch_to_alert() + alert.dismiss() + + @parameterized("window", 3) + @parameterized("internal_window", 4) + def test_detect_window_modal_type_in_another_tab_for_type(self, type): + self.open_custom_prompt(type, delay=0.25) + + self.marionette.switch_to_window(self.start_tab) + self.wait_for_alert() + + alert = self.marionette.switch_to_alert() + alert.dismiss() + + self.marionette.switch_to_window(self.new_tab) + self.assertFalse(self.alert_present) + + @parameterized("window", 3) + @parameterized("internal_window", 4) + def test_detect_window_modal_type_in_another_window_for_type(self, type): + self.new_window = self.open_window() + + self.marionette.switch_to_window(self.new_window) + + self.open_custom_prompt(type, delay=0.25) + + self.marionette.switch_to_window(self.new_tab) + with self.assertRaises(errors.TimeoutException): + self.wait_for_alert(2) + + self.marionette.switch_to_window(self.new_window) + alert = self.marionette.switch_to_alert() + alert.dismiss() + + self.marionette.switch_to_window(self.new_tab) + self.assertFalse(self.alert_present) + + def test_http_auth_dismiss(self): + with self.marionette.using_prefs({self.http_auth_pref: True}): + self.marionette.navigate(self.marionette.absolute_url("http_auth")) + self.wait_for_alert(timeout=self.marionette.timeout.page_load) + + alert = self.marionette.switch_to_alert() + alert.dismiss() + + status = Wait( + self.marionette, timeout=self.marionette.timeout.page_load + ).until(element_present(By.ID, "status")) + self.assertEqual(status.text, "restricted") + + def test_http_auth_send_keys(self): + with self.marionette.using_prefs({self.http_auth_pref: True}): + self.marionette.navigate(self.marionette.absolute_url("http_auth")) + self.wait_for_alert(timeout=self.marionette.timeout.page_load) + + alert = self.marionette.switch_to_alert() + with self.assertRaises(errors.UnsupportedOperationException): + alert.send_keys("foo") -- cgit v1.2.3