browser_cookie_exceptions_addRemove.js (7831B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 if (AppConstants.TSAN || AppConstants.DEBUG) { 7 requestLongerTimeout(2); 8 } 9 10 const PERMISSIONS_URL = 11 "chrome://browser/content/preferences/dialogs/permissions.xhtml"; 12 13 async function openCookiesDialog(doc) { 14 let cookieExceptionsButton = doc.getElementById("cookieExceptions"); 15 ok(cookieExceptionsButton, "cookieExceptionsButton found"); 16 let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL); 17 cookieExceptionsButton.click(); 18 let dialog = await dialogPromise; 19 return dialog; 20 } 21 22 function checkCookiesDialog(dialog) { 23 ok(dialog, "dialog loaded"); 24 let buttonIds = ["removePermission", "removeAllPermissions"]; 25 26 for (let buttonId of buttonIds) { 27 let button = dialog.document.getElementById(buttonId); 28 ok(button, `${buttonId} found`); 29 } 30 31 let dialogEl = dialog.document.querySelector("dialog"); 32 let acceptBtn = dialogEl.getButton("accept"); 33 let cancelBtn = dialogEl.getButton("cancel"); 34 35 ok(!acceptBtn.hidden, "acceptButton found"); 36 ok(!cancelBtn.hidden, "cancelButton found"); 37 } 38 39 function addNewPermission(websiteAddress, dialog) { 40 let url = dialog.document.getElementById("url"); 41 let buttonDialog = dialog.document.getElementById("btnBlock"); 42 let permissionsBox = dialog.document.getElementById("permissionsBox"); 43 let currentPermissions = permissionsBox.itemCount; 44 45 url.value = websiteAddress; 46 url.dispatchEvent(new Event("input", { bubbles: true })); 47 is( 48 buttonDialog.hasAttribute("disabled"), 49 false, 50 "When the user add an url the button should be clickable" 51 ); 52 buttonDialog.click(); 53 54 is( 55 permissionsBox.itemCount, 56 currentPermissions + 1, 57 "Website added in url should be in the list" 58 ); 59 } 60 61 async function cleanList(dialog) { 62 let removeAllButton = dialog.document.getElementById("removeAllPermissions"); 63 if (!removeAllButton.hasAttribute("disabled")) { 64 removeAllButton.click(); 65 } 66 } 67 68 function addData(websites, dialog) { 69 for (let website of websites) { 70 addNewPermission(website, dialog); 71 } 72 } 73 74 function deletePermission(permission, dialog) { 75 let permissionsBox = dialog.document.getElementById("permissionsBox"); 76 let elements = permissionsBox.getElementsByAttribute("origin", permission); 77 is(elements.length, 1, "It should find only one entry"); 78 permissionsBox.selectItem(elements[0]); 79 let removePermissionButton = 80 dialog.document.getElementById("removePermission"); 81 is( 82 removePermissionButton.hasAttribute("disabled"), 83 false, 84 "The button should be clickable to remove selected item" 85 ); 86 removePermissionButton.click(); 87 } 88 89 function save(dialog) { 90 let saveButton = dialog.document.querySelector("dialog").getButton("accept"); 91 saveButton.click(); 92 } 93 94 function cancel(dialog) { 95 let cancelButton = dialog.document 96 .querySelector("dialog") 97 .getButton("cancel"); 98 ok(!cancelButton.hidden, "cancelButton found"); 99 cancelButton.click(); 100 } 101 102 async function checkExpected(expected, doc) { 103 let dialog = await openCookiesDialog(doc); 104 let permissionsBox = dialog.document.getElementById("permissionsBox"); 105 106 is( 107 permissionsBox.itemCount, 108 expected.length, 109 `There should be ${expected.length} elements in the list` 110 ); 111 112 for (let website of expected) { 113 let elements = permissionsBox.getElementsByAttribute("origin", website); 114 is(elements.length, 1, "It should find only one entry"); 115 } 116 return dialog; 117 } 118 119 async function runTest(test, websites, doc) { 120 let dialog = await openCookiesDialog(doc); 121 checkCookiesDialog(dialog); 122 123 if (test.needPreviousData) { 124 addData(websites, dialog); 125 save(dialog); 126 dialog = await openCookiesDialog(doc); 127 } 128 129 for (let step of test.steps) { 130 switch (step) { 131 case "addNewPermission": 132 addNewPermission(test.newData, dialog); 133 break; 134 case "deletePermission": 135 deletePermission(test.newData, dialog); 136 break; 137 case "deleteAllPermission": 138 await cleanList(dialog); 139 break; 140 case "save": 141 save(dialog); 142 break; 143 case "cancel": 144 cancel(dialog); 145 break; 146 case "openPane": 147 dialog = await openCookiesDialog(doc); 148 break; 149 default: 150 // code block 151 } 152 } 153 dialog = await checkExpected(test.expected, doc); 154 await cleanList(dialog); 155 save(dialog); 156 } 157 158 add_task(async function checkPermissions() { 159 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 160 leaveOpen: true, 161 }); 162 let win = gBrowser.selectedBrowser.contentWindow; 163 let doc = win.document; 164 let websites = ["http://test1.com", "http://test2.com"]; 165 166 let tests = [ 167 { 168 needPreviousData: false, 169 newData: "https://mytest.com", 170 steps: ["addNewPermission", "save"], 171 expected: ["https://mytest.com"], // when open the pane again it should find this in the list 172 }, 173 { 174 needPreviousData: false, 175 newData: "https://mytest.com", 176 steps: ["addNewPermission", "cancel"], 177 expected: [], 178 }, 179 { 180 needPreviousData: false, 181 newData: "https://mytest.com", 182 steps: ["addNewPermission", "deletePermission", "save"], 183 expected: [], 184 }, 185 { 186 needPreviousData: false, 187 newData: "https://mytest.com", 188 steps: ["addNewPermission", "deletePermission", "cancel"], 189 expected: [], 190 }, 191 { 192 needPreviousData: false, 193 newData: "https://mytest.com", 194 steps: [ 195 "addNewPermission", 196 "save", 197 "openPane", 198 "deletePermission", 199 "save", 200 ], 201 expected: [], 202 }, 203 { 204 needPreviousData: false, 205 newData: "https://mytest.com", 206 steps: [ 207 "addNewPermission", 208 "save", 209 "openPane", 210 "deletePermission", 211 "cancel", 212 ], 213 expected: ["https://mytest.com"], 214 }, 215 { 216 needPreviousData: false, 217 newData: "https://mytest.com", 218 steps: ["addNewPermission", "deleteAllPermission", "save"], 219 expected: [], 220 }, 221 { 222 needPreviousData: false, 223 newData: "https://mytest.com", 224 steps: ["addNewPermission", "deleteAllPermission", "cancel"], 225 expected: [], 226 }, 227 { 228 needPreviousData: false, 229 newData: "https://mytest.com", 230 steps: [ 231 "addNewPermission", 232 "save", 233 "openPane", 234 "deleteAllPermission", 235 "save", 236 ], 237 expected: [], 238 }, 239 { 240 needPreviousData: false, 241 newData: "https://mytest.com", 242 steps: [ 243 "addNewPermission", 244 "save", 245 "openPane", 246 "deleteAllPermission", 247 "cancel", 248 ], 249 expected: ["https://mytest.com"], 250 }, 251 { 252 needPreviousData: true, 253 newData: "https://mytest.com", 254 steps: ["deleteAllPermission", "save"], 255 expected: [], 256 }, 257 { 258 needPreviousData: true, 259 newData: "https://mytest.com", 260 steps: ["deleteAllPermission", "cancel"], 261 expected: websites, 262 }, 263 { 264 needPreviousData: true, 265 newData: "https://mytest.com", 266 steps: ["addNewPermission", "save"], 267 expected: (function () { 268 let result = websites.slice(); 269 result.push("https://mytest.com"); 270 return result; 271 })(), 272 }, 273 { 274 needPreviousData: true, 275 newData: "https://mytest.com", 276 steps: ["addNewPermission", "cancel"], 277 expected: websites, 278 }, 279 { 280 needPreviousData: false, 281 newData: "https://mytest.com", 282 steps: [ 283 "addNewPermission", 284 "save", 285 "openPane", 286 "deleteAllPermission", 287 "addNewPermission", 288 "save", 289 ], 290 expected: ["https://mytest.com"], 291 }, 292 ]; 293 294 for (let test of tests) { 295 await runTest(test, websites, doc); 296 } 297 298 gBrowser.removeCurrentTab(); 299 });