tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_chrome_window_handles.py (10856B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 import os
      6 import sys
      7 
      8 from marionette_driver import errors
      9 from marionette_harness import MarionetteTestCase, WindowManagerMixin
     10 
     11 # add this directory to the path
     12 sys.path.append(os.path.dirname(__file__))
     13 
     14 from chrome_handler_mixin import ChromeHandlerMixin
     15 
     16 
     17 class TestWindowHandles(ChromeHandlerMixin, WindowManagerMixin, MarionetteTestCase):
     18    def setUp(self):
     19        super(TestWindowHandles, self).setUp()
     20 
     21        self.chrome_dialog = self.chrome_base_url + "test.xhtml"
     22 
     23        self.marionette.set_context("chrome")
     24 
     25    def tearDown(self):
     26        self.close_all_windows()
     27        self.close_all_tabs()
     28 
     29        super(TestWindowHandles, self).tearDown()
     30 
     31    def assert_window_handles(self):
     32        try:
     33            self.assertIsInstance(self.marionette.current_chrome_window_handle, str)
     34            self.assertIsInstance(self.marionette.current_window_handle, str)
     35        except errors.NoSuchWindowException:
     36            pass
     37 
     38        for handle in self.marionette.chrome_window_handles:
     39            self.assertIsInstance(handle, str)
     40 
     41        for handle in self.marionette.window_handles:
     42            self.assertIsInstance(handle, str)
     43 
     44    def test_chrome_window_handles_with_scopes(self):
     45        new_browser = self.open_window()
     46        self.assert_window_handles()
     47        self.assertEqual(
     48            len(self.marionette.chrome_window_handles), len(self.start_windows) + 1
     49        )
     50        self.assertIn(new_browser, self.marionette.chrome_window_handles)
     51        self.assertEqual(
     52            self.marionette.current_chrome_window_handle, self.start_window
     53        )
     54 
     55        new_dialog = self.open_chrome_window(self.chrome_dialog)
     56        self.assert_window_handles()
     57        self.assertEqual(
     58            len(self.marionette.chrome_window_handles), len(self.start_windows) + 2
     59        )
     60        self.assertIn(new_dialog, self.marionette.chrome_window_handles)
     61        self.assertEqual(
     62            self.marionette.current_chrome_window_handle, self.start_window
     63        )
     64 
     65        chrome_window_handles_in_chrome_scope = self.marionette.chrome_window_handles
     66        window_handles_in_chrome_scope = self.marionette.window_handles
     67 
     68        with self.marionette.using_context("content"):
     69            self.assertEqual(
     70                self.marionette.chrome_window_handles,
     71                chrome_window_handles_in_chrome_scope,
     72            )
     73            self.assertEqual(
     74                self.marionette.window_handles, window_handles_in_chrome_scope
     75            )
     76 
     77    def test_chrome_window_handles_after_opening_new_chrome_window(self):
     78        new_window = self.open_chrome_window(self.chrome_dialog)
     79        self.assert_window_handles()
     80        self.assertEqual(
     81            len(self.marionette.chrome_window_handles), len(self.start_windows) + 1
     82        )
     83        self.assertIn(new_window, self.marionette.chrome_window_handles)
     84        self.assertEqual(
     85            self.marionette.current_chrome_window_handle, self.start_window
     86        )
     87 
     88        # Check that the new chrome window has the correct URL loaded
     89        self.marionette.switch_to_window(new_window)
     90        self.assert_window_handles()
     91        self.assertEqual(self.marionette.current_chrome_window_handle, new_window)
     92        self.assertEqual(self.marionette.get_url(), self.chrome_dialog)
     93 
     94        # Close the chrome window, and carry on in our original window.
     95        self.marionette.close_chrome_window()
     96        self.assert_window_handles()
     97        self.assertEqual(
     98            len(self.marionette.chrome_window_handles), len(self.start_windows)
     99        )
    100        self.assertNotIn(new_window, self.marionette.chrome_window_handles)
    101 
    102        self.marionette.switch_to_window(self.start_window)
    103        self.assert_window_handles()
    104        self.assertEqual(
    105            self.marionette.current_chrome_window_handle, self.start_window
    106        )
    107 
    108    def test_chrome_window_handles_after_opening_new_window(self):
    109        new_window = self.open_window()
    110        self.assert_window_handles()
    111        self.assertEqual(
    112            len(self.marionette.chrome_window_handles), len(self.start_windows) + 1
    113        )
    114        self.assertIn(new_window, self.marionette.chrome_window_handles)
    115        self.assertEqual(
    116            self.marionette.current_chrome_window_handle, self.start_window
    117        )
    118 
    119        self.marionette.switch_to_window(new_window)
    120        self.assert_window_handles()
    121        self.assertEqual(self.marionette.current_chrome_window_handle, new_window)
    122 
    123        # Close the opened window and carry on in our original window.
    124        self.marionette.close()
    125        self.assert_window_handles()
    126        self.assertEqual(
    127            len(self.marionette.chrome_window_handles), len(self.start_windows)
    128        )
    129        self.assertNotIn(new_window, self.marionette.chrome_window_handles)
    130 
    131        self.marionette.switch_to_window(self.start_window)
    132        self.assert_window_handles()
    133        self.assertEqual(
    134            self.marionette.current_chrome_window_handle, self.start_window
    135        )
    136 
    137    def test_chrome_window_handles_after_session_created(self):
    138        new_window = self.open_chrome_window(self.chrome_dialog)
    139        self.assert_window_handles()
    140        self.assertEqual(
    141            len(self.marionette.chrome_window_handles), len(self.start_windows) + 1
    142        )
    143        self.assertIn(new_window, self.marionette.chrome_window_handles)
    144        self.assertEqual(
    145            self.marionette.current_chrome_window_handle, self.start_window
    146        )
    147 
    148        chrome_window_handles = self.marionette.chrome_window_handles
    149 
    150        self.marionette.delete_session()
    151        self.marionette.start_session()
    152 
    153        self.assert_window_handles()
    154 
    155        # For a new session the window handles will have a new uuid as value
    156        self.assertEqual(
    157            len(chrome_window_handles), len(self.marionette.chrome_window_handles)
    158        )
    159        for item in self.marionette.chrome_window_handles:
    160            self.assertNotIn(item, chrome_window_handles)
    161 
    162    def test_window_handles_after_opening_new_tab(self):
    163        with self.marionette.using_context("content"):
    164            new_tab = self.open_tab()
    165        self.assert_window_handles()
    166        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1)
    167        self.assertIn(new_tab, self.marionette.window_handles)
    168        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    169 
    170        self.marionette.switch_to_window(new_tab)
    171        self.assert_window_handles()
    172        self.assertEqual(self.marionette.current_window_handle, new_tab)
    173 
    174        self.marionette.switch_to_window(self.start_tab)
    175        self.assert_window_handles()
    176        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    177 
    178        self.marionette.switch_to_window(new_tab)
    179        self.marionette.close()
    180        self.assert_window_handles()
    181        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
    182        self.assertNotIn(new_tab, self.marionette.window_handles)
    183 
    184        self.marionette.switch_to_window(self.start_tab)
    185        self.assert_window_handles()
    186        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    187 
    188    def test_window_handles_after_opening_new_foreground_tab(self):
    189        with self.marionette.using_context("content"):
    190            new_tab = self.open_tab(focus=True)
    191        self.assert_window_handles()
    192        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1)
    193        self.assertIn(new_tab, self.marionette.window_handles)
    194        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    195 
    196        # We still have the default tab set as our window handle. This
    197        # get_url command should be sent immediately, and not be forever-queued.
    198        with self.marionette.using_context("content"):
    199            self.marionette.get_url()
    200 
    201        self.marionette.switch_to_window(new_tab)
    202        self.assert_window_handles()
    203        self.assertEqual(self.marionette.current_window_handle, new_tab)
    204 
    205        self.marionette.close()
    206        self.assert_window_handles()
    207        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
    208        self.assertNotIn(new_tab, self.marionette.window_handles)
    209 
    210        self.marionette.switch_to_window(self.start_tab)
    211        self.assert_window_handles()
    212        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    213 
    214    def test_window_handles_after_opening_new_chrome_window(self):
    215        new_window = self.open_chrome_window(self.chrome_dialog)
    216        self.assert_window_handles()
    217        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
    218        self.assertNotIn(new_window, self.marionette.window_handles)
    219        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    220 
    221        self.marionette.switch_to_window(new_window)
    222        self.assert_window_handles()
    223        self.assertEqual(self.marionette.get_url(), self.chrome_dialog)
    224 
    225        # Check that the opened dialog is not accessible via window handles
    226        with self.assertRaises(errors.NoSuchWindowException):
    227            self.marionette.current_window_handle
    228        with self.assertRaises(errors.NoSuchWindowException):
    229            self.marionette.close()
    230 
    231        # Close the dialog and carry on in our original tab.
    232        self.marionette.close_chrome_window()
    233        self.assert_window_handles()
    234        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
    235 
    236        self.marionette.switch_to_window(self.start_tab)
    237        self.assert_window_handles()
    238        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    239 
    240    def test_window_handles_after_closing_original_tab(self):
    241        with self.marionette.using_context("content"):
    242            new_tab = self.open_tab()
    243        self.assert_window_handles()
    244        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1)
    245        self.assertIn(new_tab, self.marionette.window_handles)
    246        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    247 
    248        self.marionette.close()
    249        self.assert_window_handles()
    250        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
    251        self.assertIn(new_tab, self.marionette.window_handles)
    252 
    253        self.marionette.switch_to_window(new_tab)
    254        self.assert_window_handles()
    255        self.assertEqual(self.marionette.current_window_handle, new_tab)
    256 
    257    def test_window_handles_after_closing_last_window(self):
    258        self.close_all_windows()
    259        self.assertEqual(self.marionette.close_chrome_window(), [])