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()