browser_permissions_checkPermissionsWereAdded.js (4373B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const PERMISSIONS_URL = 7 "chrome://browser/content/preferences/dialogs/permissions.xhtml"; 8 9 const _checkAndOpenCookiesDialog = async doc => { 10 let cookieExceptionsButton = doc.getElementById("cookieExceptions"); 11 ok(cookieExceptionsButton, "cookieExceptionsButton found"); 12 let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL); 13 cookieExceptionsButton.click(); 14 let dialog = await dialogPromise; 15 return dialog; 16 }; 17 18 const _checkCookiesDialog = (dialog, buttonIds) => { 19 ok(dialog, "dialog loaded"); 20 let urlLabel = dialog.document.getElementById("urlLabel"); 21 ok(!urlLabel.hidden, "urlLabel should be visible"); 22 let url = dialog.document.getElementById("url"); 23 ok(!url.hidden, "url should be visible"); 24 for (let buttonId of buttonIds) { 25 let buttonDialog = dialog.document.getElementById(buttonId); 26 ok(buttonDialog, "blockButtonDialog found"); 27 is( 28 buttonDialog.hasAttribute("disabled"), 29 true, 30 "If the user hasn't added an url the button shouldn't be clickable" 31 ); 32 } 33 return dialog; 34 }; 35 36 const _addWebsiteAddressToPermissionBox = ( 37 websiteAddress, 38 dialog, 39 buttonId, 40 expectError 41 ) => { 42 let url = dialog.document.getElementById("url"); 43 let buttonDialog = dialog.document.getElementById(buttonId); 44 url.value = websiteAddress; 45 url.dispatchEvent(new Event("input", { bubbles: true })); 46 is( 47 buttonDialog.hasAttribute("disabled"), 48 false, 49 "When the user add an url the button should be clickable" 50 ); 51 buttonDialog.click(); 52 let permissionsBox = dialog.document.getElementById("permissionsBox"); 53 let children = permissionsBox.getElementsByAttribute("origin", "*"); 54 is( 55 !!children.length, 56 !expectError, 57 "Website added in url should be in the list" 58 ); 59 }; 60 61 const _checkIfPermissionsWereAdded = (dialog, expectedResult) => { 62 let permissionsBox = dialog.document.getElementById("permissionsBox"); 63 for (let website of expectedResult) { 64 let elements = permissionsBox.getElementsByAttribute("origin", website); 65 is(elements.length, 1, "It should find only one coincidence"); 66 } 67 }; 68 69 const _removesAllSitesInPermissionBox = (dialog, shouldBePossible) => { 70 let removeAllWebsitesButton = dialog.document.getElementById( 71 "removeAllPermissions" 72 ); 73 ok(removeAllWebsitesButton, "removeAllWebsitesButton found"); 74 const isDisabled = removeAllWebsitesButton.hasAttribute("disabled"); 75 is( 76 !removeAllWebsitesButton.hasAttribute("disabled"), 77 shouldBePossible, 78 "There should be websites in the list" 79 ); 80 if (!isDisabled) { 81 removeAllWebsitesButton.click(); 82 } 83 }; 84 85 add_task(async function checkCookiePermissions() { 86 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 87 leaveOpen: true, 88 }); 89 let win = gBrowser.selectedBrowser.contentWindow; 90 let doc = win.document; 91 let buttonIds = ["btnBlock", "btnCookieSession", "btnAllow"]; 92 93 let dialog = await _checkAndOpenCookiesDialog(doc); 94 _checkCookiesDialog(dialog, buttonIds); 95 96 let tests = [ 97 { 98 inputWebsite: "google.com", 99 expectedResult: ["http://google.com", "https://google.com"], 100 }, 101 { 102 inputWebsite: "https://google.com", 103 expectedResult: ["https://google.com"], 104 }, 105 { 106 inputWebsite: "s3.eu-central-1.amazonaws.com", 107 expectedResult: [ 108 "http://s3.eu-central-1.amazonaws.com", 109 "https://s3.eu-central-1.amazonaws.com", 110 ], 111 }, 112 { 113 inputWebsite: "file://", 114 expectedResult: ["file:///"], 115 }, 116 { 117 inputWebsite: "about:config", 118 expectedResult: ["about:config"], 119 }, 120 // Invalid inputs, expected to not be added 121 { 122 inputWebsite: "http://", 123 expectedResult: [], 124 }, 125 { 126 inputWebsite: "*.example.com", 127 expectedResult: [], 128 }, 129 { 130 inputWebsite: "http://*.example.com", 131 expectedResult: [], 132 }, 133 ]; 134 135 for (let buttonId of buttonIds) { 136 for (let test of tests) { 137 _addWebsiteAddressToPermissionBox( 138 test.inputWebsite, 139 dialog, 140 buttonId, 141 test.expectedResult.length === 0 142 ); 143 _checkIfPermissionsWereAdded(dialog, test.expectedResult); 144 _removesAllSitesInPermissionBox(dialog, !!test.expectedResult.length); 145 } 146 } 147 148 gBrowser.removeCurrentTab(); 149 });