forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			184 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| const CHECK_DEFAULT_INITIAL = Services.prefs.getBoolPref(
 | |
|   "browser.shell.checkDefaultBrowser"
 | |
| );
 | |
| 
 | |
| add_task(async function clicking_make_default_checks_alwaysCheck_checkbox() {
 | |
|   await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:preferences");
 | |
| 
 | |
|   await test_with_mock_shellservice({ isDefault: false }, async function() {
 | |
|     let checkDefaultBrowserState = isDefault => {
 | |
|       let isDefaultPane = content.document.getElementById("isDefaultPane");
 | |
|       let isNotDefaultPane = content.document.getElementById(
 | |
|         "isNotDefaultPane"
 | |
|       );
 | |
|       Assert.equal(
 | |
|         ContentTaskUtils.is_hidden(isDefaultPane),
 | |
|         !isDefault,
 | |
|         "The 'browser is default' pane should be hidden when browser is not default"
 | |
|       );
 | |
|       Assert.equal(
 | |
|         ContentTaskUtils.is_hidden(isNotDefaultPane),
 | |
|         isDefault,
 | |
|         "The 'make default' pane should be hidden when browser is default"
 | |
|       );
 | |
|     };
 | |
| 
 | |
|     checkDefaultBrowserState(false);
 | |
| 
 | |
|     let alwaysCheck = content.document.getElementById("alwaysCheckDefault");
 | |
|     Assert.ok(!alwaysCheck.checked, "Always Check is unchecked by default");
 | |
|     Assert.ok(
 | |
|       !Services.prefs.getBoolPref("browser.shell.checkDefaultBrowser"),
 | |
|       "alwaysCheck pref should be false by default in test runs"
 | |
|     );
 | |
| 
 | |
|     let setDefaultButton = content.document.getElementById("setDefaultButton");
 | |
|     setDefaultButton.click();
 | |
|     content.window.gMainPane.updateSetDefaultBrowser();
 | |
| 
 | |
|     await ContentTaskUtils.waitForCondition(
 | |
|       () => alwaysCheck.checked,
 | |
|       "'Always Check' checkbox should get checked after clicking the 'Set Default' button"
 | |
|     );
 | |
| 
 | |
|     Assert.ok(
 | |
|       alwaysCheck.checked,
 | |
|       "Clicking 'Make Default' checks the 'Always Check' checkbox"
 | |
|     );
 | |
|     Assert.ok(
 | |
|       Services.prefs.getBoolPref("browser.shell.checkDefaultBrowser"),
 | |
|       "Checking the checkbox should set the pref to true"
 | |
|     );
 | |
|     Assert.ok(
 | |
|       alwaysCheck.disabled,
 | |
|       "'Always Check' checkbox is locked with default browser and alwaysCheck=true"
 | |
|     );
 | |
|     checkDefaultBrowserState(true);
 | |
|     Assert.ok(
 | |
|       Services.prefs.getBoolPref("browser.shell.checkDefaultBrowser"),
 | |
|       "checkDefaultBrowser pref is now enabled"
 | |
|     );
 | |
|   });
 | |
| 
 | |
|   gBrowser.removeCurrentTab();
 | |
|   Services.prefs.clearUserPref("browser.shell.checkDefaultBrowser");
 | |
| });
 | |
| 
 | |
| add_task(async function clicking_make_default_checks_alwaysCheck_checkbox() {
 | |
|   Services.prefs.lockPref("browser.shell.checkDefaultBrowser");
 | |
|   await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:preferences");
 | |
| 
 | |
|   await test_with_mock_shellservice({ isDefault: false }, async function() {
 | |
|     let isDefaultPane = content.document.getElementById("isDefaultPane");
 | |
|     let isNotDefaultPane = content.document.getElementById("isNotDefaultPane");
 | |
|     Assert.ok(
 | |
|       ContentTaskUtils.is_hidden(isDefaultPane),
 | |
|       "The 'browser is default' pane should be hidden when not default"
 | |
|     );
 | |
|     Assert.ok(
 | |
|       ContentTaskUtils.is_visible(isNotDefaultPane),
 | |
|       "The 'make default' pane should be visible when not default"
 | |
|     );
 | |
| 
 | |
|     let alwaysCheck = content.document.getElementById("alwaysCheckDefault");
 | |
|     Assert.ok(alwaysCheck.disabled, "Always Check is disabled when locked");
 | |
|     Assert.ok(
 | |
|       alwaysCheck.checked,
 | |
|       "Always Check is checked because defaultPref is true and pref is locked"
 | |
|     );
 | |
|     Assert.ok(
 | |
|       Services.prefs.getBoolPref("browser.shell.checkDefaultBrowser"),
 | |
|       "alwaysCheck pref should ship with 'true' by default"
 | |
|     );
 | |
| 
 | |
|     let setDefaultButton = content.document.getElementById("setDefaultButton");
 | |
|     setDefaultButton.click();
 | |
|     content.window.gMainPane.updateSetDefaultBrowser();
 | |
| 
 | |
|     await ContentTaskUtils.waitForCondition(
 | |
|       () => ContentTaskUtils.is_visible(isDefaultPane),
 | |
|       "Browser is now default"
 | |
|     );
 | |
| 
 | |
|     Assert.ok(
 | |
|       alwaysCheck.checked,
 | |
|       "'Always Check' is still checked because it's locked"
 | |
|     );
 | |
|     Assert.ok(
 | |
|       alwaysCheck.disabled,
 | |
|       "'Always Check is disabled because it's locked"
 | |
|     );
 | |
|     Assert.ok(
 | |
|       Services.prefs.getBoolPref("browser.shell.checkDefaultBrowser"),
 | |
|       "The pref is locked and so doesn't get changed"
 | |
|     );
 | |
|   });
 | |
| 
 | |
|   Services.prefs.unlockPref("browser.shell.checkDefaultBrowser");
 | |
|   gBrowser.removeCurrentTab();
 | |
| });
 | |
| 
 | |
| add_task(async function make_default_disabled_until_prefs_are_loaded() {
 | |
|   // Testcase with Firefox not set as the default browser
 | |
|   await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:preferences");
 | |
|   await test_with_mock_shellservice({ isDefault: false }, async function() {
 | |
|     let alwaysCheck = content.document.getElementById("alwaysCheckDefault");
 | |
|     Assert.ok(
 | |
|       !alwaysCheck.disabled,
 | |
|       "'Always Check' is enabled after default browser updated"
 | |
|     );
 | |
|   });
 | |
|   gBrowser.removeCurrentTab();
 | |
| 
 | |
|   // Testcase with Firefox set as the default browser
 | |
|   await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:preferences");
 | |
|   await test_with_mock_shellservice({ isDefault: true }, async function() {
 | |
|     let alwaysCheck = content.document.getElementById("alwaysCheckDefault");
 | |
|     Assert.ok(
 | |
|       alwaysCheck.disabled,
 | |
|       "'Always Check' is still disabled after default browser updated"
 | |
|     );
 | |
|   });
 | |
|   gBrowser.removeCurrentTab();
 | |
| });
 | |
| 
 | |
| registerCleanupFunction(function() {
 | |
|   Services.prefs.unlockPref("browser.shell.checkDefaultBrowser");
 | |
|   Services.prefs.setBoolPref(
 | |
|     "browser.shell.checkDefaultBrowser",
 | |
|     CHECK_DEFAULT_INITIAL
 | |
|   );
 | |
| });
 | |
| 
 | |
| async function test_with_mock_shellservice(options, testFn) {
 | |
|   await SpecialPowers.spawn(gBrowser.selectedBrowser, [options], async function(
 | |
|     contentOptions
 | |
|   ) {
 | |
|     let doc = content.document;
 | |
|     let win = doc.defaultView;
 | |
|     win.oldShellService = win.getShellService();
 | |
|     let mockShellService = {
 | |
|       _isDefault: false,
 | |
|       isDefaultBrowser() {
 | |
|         return this._isDefault;
 | |
|       },
 | |
|       setDefaultBrowser() {
 | |
|         this._isDefault = true;
 | |
|       },
 | |
|     };
 | |
|     win.getShellService = function() {
 | |
|       return mockShellService;
 | |
|     };
 | |
|     mockShellService._isDefault = contentOptions.isDefault;
 | |
|     win.gMainPane.updateSetDefaultBrowser();
 | |
|   });
 | |
| 
 | |
|   await SpecialPowers.spawn(gBrowser.selectedBrowser, [], testFn);
 | |
| 
 | |
|   Services.prefs.setBoolPref(
 | |
|     "browser.shell.checkDefaultBrowser",
 | |
|     CHECK_DEFAULT_INITIAL
 | |
|   );
 | |
| }
 | 
