test_urlbar_search_terms_persistence.js (7677B)
1 /* 2 * This test checks we can determine the type of search page and whether the 3 * page is a default search page. 4 */ 5 6 ChromeUtils.defineESModuleGetters(this, { 7 UrlbarSearchTermsPersistence: 8 "moz-src:///browser/components/urlbar/UrlbarSearchTermsPersistence.sys.mjs", 9 }); 10 11 const PROVIDERS = [ 12 { 13 id: "example", 14 queryParamNames: ["q"], 15 searchPageRegexp: "^https://example\\.com/", 16 includeParams: [ 17 { 18 key: "page", 19 values: ["web"], 20 canBeMissing: true, 21 }, 22 ], 23 excludeParams: [ 24 { 25 key: "excludeKey", 26 values: ["hello"], 27 }, 28 ], 29 }, 30 { 31 id: "example2", 32 queryParamNames: ["q"], 33 searchPageRegexp: "^https://example2\\.com/", 34 includeParams: [ 35 { 36 key: "page", 37 values: ["web"], 38 canBeMissing: false, 39 }, 40 ], 41 excludeParams: [ 42 { 43 key: "excludeKey", 44 }, 45 ], 46 }, 47 { 48 id: "example3", 49 queryParamNames: ["q"], 50 searchPageRegexp: "^https://example3\\.com/", 51 includeParams: [], 52 excludeParams: [], 53 }, 54 { 55 id: "example4", 56 queryParamNames: ["q"], 57 searchPageRegexp: "^https://example4\\.com/", 58 excludeParams: [], 59 }, 60 ]; 61 62 const TESTS = [ 63 { 64 title: "Tracked provider", 65 name: "Example", 66 cases: [ 67 { 68 title: "Non-existent URI", 69 originalURI: null, 70 expected: "", 71 }, 72 { 73 title: "Empty URI", 74 originalURI: "", 75 expected: "", 76 }, 77 { 78 title: "Non-url", 79 originalURI: "about:blank", 80 expected: "", 81 }, 82 { 83 title: "Non-url 1", 84 originalURI: "about:home", 85 expected: "", 86 }, 87 { 88 title: "Non-url 2", 89 originalURI: "about:newtab", 90 expected: "", 91 }, 92 { 93 title: "Non-url 3", 94 originalURI: "not://a/supported/protocol", 95 expected: "", 96 }, 97 { 98 title: "Non-url 4", 99 originalURI: "view-source:http://www.example.com/", 100 expected: "", 101 }, 102 { 103 title: "No search parameters", 104 originalURI: "https://example.com/", 105 expected: "", 106 }, 107 { 108 title: "No search query param value", 109 originalURI: "https://example.com/?q", 110 expected: "", 111 }, 112 { 113 title: "With search query param value", 114 originalURI: "https://example.com/?q=foo", 115 expected: "foo", 116 }, 117 { 118 title: "With search query param value and a fake value key-value pair", 119 originalURI: "https://example.com/?q=foo&page=fake_code", 120 expected: "", 121 }, 122 { 123 title: "With search query param value and valid key-value pair", 124 originalURI: "https://example.com/?q=foo&page=web", 125 expected: "foo", 126 }, 127 { 128 title: "With search query param value and unknown key-value pair", 129 originalURI: "https://example.com/?q=foo&key=unknown", 130 expected: "foo", 131 }, 132 { 133 title: 134 "With search query param value and valid excludeParams key-value pair", 135 originalURI: "https://example.com/?q=foo&excludeKey=hello", 136 expected: "", 137 }, 138 { 139 title: 140 "With search query param value and invalid excludeParams key-value pair", 141 originalURI: "https://example.com/?q=foo&page=web&excludeKey=hi", 142 expected: "foo", 143 }, 144 ], 145 }, 146 { 147 title: "Untracked provider", 148 name: "Example1", 149 cases: [ 150 { 151 title: "With search query param", 152 originalURI: "https://example1.com/?q=foo", 153 expected: "", 154 }, 155 { 156 title: "No search parameters", 157 originalURI: "https://example1.com/", 158 expected: "", 159 }, 160 { 161 title: "No search query param value", 162 originalURI: "https://example1.com/?q", 163 expected: "", 164 }, 165 { 166 title: "With search query param value and unknown key-value pair", 167 originalURI: "https://example1.com/?q=foo&key=unknown", 168 expected: "", 169 }, 170 { 171 title: "with search query param value and default key-value pair", 172 originalURI: "https://example1.com/?q=foo&default=all", 173 expected: "foo", 174 }, 175 ], 176 }, 177 { 178 title: "Tracked provider with mandatory key-value pair", 179 name: "Example2", 180 cases: [ 181 { 182 title: "With search query param value", 183 originalURI: "https://example2.com/?q=foo", 184 expected: "", 185 }, 186 { 187 title: "With search query param value", 188 originalURI: "https://example2.com/?q=foo&page=web", 189 expected: "foo", 190 }, 191 { 192 title: "With search query param value and excludeParams key-value pair", 193 originalURI: "https://example2.com/?q=foo&page=web&excludeKey=web", 194 expected: "", 195 }, 196 { 197 title: 198 "With search query param value and presence of excludeParams key", 199 originalURI: "https://example2.com/?q=foo&excludeKey", 200 expected: "", 201 }, 202 ], 203 }, 204 { 205 title: "Empty includeParams", 206 name: "example3", 207 cases: [ 208 { 209 title: "With search query param value", 210 originalURI: "https://example3.com/?q=foo", 211 expected: "foo", 212 }, 213 ], 214 }, 215 { 216 title: "No includeParams", 217 name: "example4", 218 cases: [ 219 { 220 title: "With search query param value", 221 originalURI: "https://example4.com/?q=foo", 222 expected: "foo", 223 }, 224 ], 225 }, 226 ]; 227 228 add_setup(async function () { 229 await UrlbarSearchTermsPersistence.overrideSearchTermsPersistenceForTests( 230 PROVIDERS 231 ); 232 const CONFIG_V2 = [ 233 { 234 recordType: "engine", 235 identifier: "Example", 236 base: { 237 name: "Example", 238 urls: { 239 search: { 240 base: "https://example.com/", 241 searchTermParamName: "q", 242 }, 243 }, 244 }, 245 }, 246 { 247 recordType: "engine", 248 identifier: "Example1", 249 base: { 250 name: "Example1", 251 urls: { 252 search: { 253 base: "https://example1.com/", 254 searchTermParamName: "q", 255 params: [ 256 { 257 name: "default", 258 value: "all", 259 }, 260 ], 261 }, 262 }, 263 }, 264 }, 265 { 266 recordType: "engine", 267 identifier: "Example2", 268 base: { 269 name: "Example2", 270 urls: { 271 search: { 272 base: "https://example2.com/", 273 searchTermParamName: "q", 274 }, 275 }, 276 }, 277 }, 278 { 279 recordType: "engine", 280 identifier: "example3", 281 base: { 282 name: "example3", 283 urls: { 284 search: { 285 base: "https://example3.com/", 286 searchTermParamName: "q", 287 }, 288 }, 289 }, 290 }, 291 { 292 recordType: "engine", 293 identifier: "example4", 294 base: { 295 name: "example4", 296 urls: { 297 search: { 298 base: "https://example4.com/", 299 searchTermParamName: "q", 300 }, 301 }, 302 }, 303 }, 304 { 305 recordType: "defaultEngines", 306 globalDefault: "Example", 307 specificDefaults: [], 308 }, 309 ]; 310 SearchTestUtils.updateRemoteSettingsConfig(CONFIG_V2); 311 await Services.search.init(); 312 }); 313 314 add_task(async function test_parsing_extracted_urls() { 315 for (let test of TESTS) { 316 for (let { title, originalURI, expected } of test.cases) { 317 info(`${test.name} - ${title}`); 318 319 if (originalURI) { 320 originalURI = Services.io.newURI(originalURI); 321 } 322 323 Assert.equal( 324 UrlbarSearchTermsPersistence.getSearchTerm(originalURI), 325 expected 326 ); 327 } 328 } 329 });