tor-browser

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

test_restore_sidebar.py (10177B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 0.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/0.0/.
      4 
      5 import os
      6 import sys
      7 
      8 # add this directory to the path
      9 sys.path.append(os.path.dirname(__file__))
     10 
     11 from session_store_test_case import SessionStoreTestCase
     12 
     13 
     14 def inline(title):
     15    return f"data:text/html;charset=utf-8,<html><head><title>{title}</title></head><body></body></html>"
     16 
     17 
     18 class TestSessionRestore(SessionStoreTestCase):
     19    """
     20    Test that the sidebar and its attributes are restored on reopening of window.
     21    """
     22 
     23    def setUp(self):
     24        super().setUp(
     25            startup_page=1,
     26            include_private=False,
     27            restore_on_demand=True,
     28            test_windows=set([
     29                (
     30                    inline("lorem ipsom"),
     31                    inline("dolor"),
     32                ),
     33            ]),
     34        )
     35 
     36    def test_restore_sidebar_open(self):
     37        self.assertEqual(
     38            len(self.marionette.chrome_window_handles),
     39            1,
     40            msg="Should have 1 window open.",
     41        )
     42        self.marionette.execute_async_script(
     43            """
     44            const resolve = arguments[0];
     45            let window = BrowserWindowTracker.getTopWindow()
     46            window.SidebarController.show("viewHistorySidebar").then(() => {
     47              let sidebarBox = window.document.getElementById("sidebar-box")
     48              sidebarBox.style.width = "100px";
     49            }).then(resolve);
     50            """
     51        )
     52 
     53        self.assertEqual(
     54            self.marionette.execute_script(
     55                """
     56                let window = BrowserWindowTracker.getTopWindow()
     57                return !window.document.getElementById("sidebar-box").hidden;
     58                """
     59            ),
     60            True,
     61            "Sidebar is open before window is closed.",
     62        )
     63 
     64        self.marionette.restart()
     65        self.marionette.set_context("chrome")
     66 
     67        self.assertEqual(
     68            len(self.marionette.chrome_window_handles),
     69            1,
     70            msg="Windows from last session have been restored.",
     71        )
     72 
     73        self.assertEqual(
     74            self.marionette.execute_script(
     75                """
     76                let window = BrowserWindowTracker.getTopWindow()
     77                return !window.document.getElementById("sidebar-box").hidden;
     78                """
     79            ),
     80            True,
     81            "Sidebar has been restored.",
     82        )
     83 
     84        self.assertEqual(
     85            self.marionette.execute_script(
     86                """
     87                let window = BrowserWindowTracker.getTopWindow()
     88                return window.document.getElementById("sidebar-box").style.width;
     89                """
     90            ),
     91            "100px",
     92            "Sidebar width been restored.",
     93        )
     94 
     95        self.assertEqual(
     96            self.marionette.execute_script(
     97                """
     98                const lazy = {};
     99                ChromeUtils.defineESModuleGetters(lazy, {
    100                    SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs",
    101                });
    102                let state = SessionStore.getCurrentState();
    103                return state.windows[0].sidebar.command;
    104                """
    105            ),
    106            "viewHistorySidebar",
    107            "Correct sidebar category has been restored.",
    108        )
    109 
    110    def test_restore_sidebar_closed(self):
    111        self.marionette.execute_async_script(
    112            """
    113            const resolve = arguments[0];
    114            let window = BrowserWindowTracker.getTopWindow()
    115            window.SidebarController.show("viewHistorySidebar").then(() => {
    116             let sidebarBox = window.document.getElementById("sidebar-box")
    117             sidebarBox.style.width = "100px";
    118             window.SidebarController.toggle();
    119            }).then(resolve);
    120            """
    121        )
    122 
    123        self.assertEqual(
    124            self.marionette.execute_script(
    125                """
    126                let window = BrowserWindowTracker.getTopWindow()
    127                return window.document.getElementById("sidebar-box").hidden;
    128                """
    129            ),
    130            True,
    131            "Sidebar is hidden before window is closed.",
    132        )
    133 
    134        self.marionette.restart()
    135        self.marionette.set_context("chrome")
    136 
    137        self.assertEqual(
    138            len(self.marionette.chrome_window_handles),
    139            1,
    140            msg="Windows from last session have been restored.",
    141        )
    142 
    143        self.assertEqual(
    144            self.marionette.execute_script(
    145                """
    146                let window = BrowserWindowTracker.getTopWindow()
    147                return window.document.getElementById("sidebar-box").hidden;
    148                """
    149            ),
    150            True,
    151            "Sidebar is hidden on session restore.",
    152        )
    153 
    154        self.assertEqual(
    155            self.marionette.execute_script(
    156                """
    157                let window = BrowserWindowTracker.getTopWindow()
    158                return window.document.getElementById("sidebar-box").style.width;
    159                """
    160            ),
    161            "100px",
    162            "Sidebar width has been restored.",
    163        )
    164 
    165    def test_restore_for_always_show(self):
    166        self.marionette.execute_script(
    167            """
    168            Services.prefs.setBoolPref("sidebar.revamp", true);
    169            // Always show is only available with vertical tabs
    170            Services.prefs.setBoolPref("sidebar.verticalTabs", true);
    171            Services.prefs.setBoolPref("sidebar.animation.enabled", false);
    172            Services.prefs.setStringPref("sidebar.visibility", "always-show");
    173            """
    174        )
    175        self.marionette.restart()
    176        self.marionette.set_context("chrome")
    177 
    178        self.assertEqual(
    179            len(self.marionette.chrome_window_handles),
    180            1,
    181            msg="Should have 1 window open.",
    182        )
    183        self.assertTrue(
    184            self.marionette.execute_script(
    185                """
    186                const window = BrowserWindowTracker.getTopWindow();
    187                return window.SidebarController.sidebarMain.expanded;
    188                """
    189            ),
    190            "Sidebar is expanded before window is closed.",
    191        )
    192 
    193        self.marionette.restart()
    194 
    195        self.marionette.execute_async_script(
    196            """
    197            let resolve = arguments[0];
    198            let { BrowserInitState } = ChromeUtils.importESModule("resource:///modules/BrowserGlue.sys.mjs");
    199            BrowserInitState.startupIdleTaskPromise.then(resolve);
    200            """
    201        )
    202 
    203        self.assertTrue(
    204            self.marionette.execute_script(
    205                """
    206                const window = BrowserWindowTracker.getTopWindow();
    207                return window.SidebarController.sidebarMain.expanded;
    208                """
    209            ),
    210            "Sidebar expanded state has been restored.",
    211        )
    212 
    213    def test_restore_for_hide_sidebar(self):
    214        self.marionette.execute_script(
    215            """
    216            Services.prefs.setBoolPref("sidebar.revamp", true);
    217            Services.prefs.setStringPref("sidebar.visibility", "hide-sidebar");
    218            """
    219        )
    220        self.marionette.restart()
    221        self.marionette.set_context("chrome")
    222 
    223        self.assertEqual(
    224            len(self.marionette.chrome_window_handles),
    225            1,
    226            msg="Should have 1 window open.",
    227        )
    228        self.assertTrue(
    229            self.marionette.execute_script(
    230                """
    231                const window = BrowserWindowTracker.getTopWindow();
    232                return window.SidebarController.sidebarContainer.hidden;
    233                """
    234            ),
    235            "Sidebar is hidden before window is closed.",
    236        )
    237 
    238        self.marionette.restart()
    239 
    240        self.assertTrue(
    241            self.marionette.execute_script(
    242                """
    243                const window = BrowserWindowTracker.getTopWindow();
    244                return window.SidebarController.sidebarContainer.hidden;
    245                """
    246            ),
    247            "Sidebar visibility state has been restored.",
    248        )
    249 
    250    def test_restore_sidebar_open_from_backup_pref(self):
    251        self.marionette.execute_script(
    252            """
    253            Services.prefs.setBoolPref("sidebar.revamp", true);
    254            Services.prefs.setBoolPref("browser.privatebrowsing.autostart", true);
    255            """
    256        )
    257        self.marionette.restart()
    258        self.marionette.set_context("chrome")
    259 
    260        # Open the history panel.
    261        self.marionette.execute_async_script(
    262            """
    263            let resolve = arguments[0];
    264            let window = BrowserWindowTracker.getTopWindow();
    265            window.SidebarController.show("viewHistorySidebar").then(resolve);
    266            """
    267        )
    268 
    269        # Restart the browser.
    270        self.marionette.restart()
    271        self.marionette.execute_async_script(
    272            """
    273            let resolve = arguments[0];
    274            let { BrowserInitState } = ChromeUtils.importESModule("resource:///modules/BrowserGlue.sys.mjs");
    275            BrowserInitState.startupIdleTaskPromise.then(resolve);
    276            """
    277        )
    278 
    279        # Check to see if the history panel was restored.
    280        self.assertEqual(
    281            self.marionette.execute_script(
    282                """
    283                let window = BrowserWindowTracker.getTopWindow();
    284                return window.SidebarController.currentID;
    285                """
    286            ),
    287            "viewHistorySidebar",
    288            "Correct sidebar category has been restored.",
    289        )
    290 
    291    def test_upgrade_profile_and_restore_sidebar_from_backup_pref(self):
    292        # Bug 1963549 - Sidebar bookmarks no longer open automatically since the last update.
    293        self.marionette.execute_script(
    294            """
    295            Services.prefs.setIntPref("browser.migration.version", 154);
    296            Services.xulStore.setValue(
    297                AppConstants.BROWSER_CHROME_URL,
    298                "sidebar-box",
    299                "checked",
    300                "true"
    301            );
    302            """
    303        )
    304        self.test_restore_sidebar_open_from_backup_pref()