@ai-ecoverse/slicc-browsers 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -68,12 +68,14 @@ Every feature builds for `wasm32-wasip1`.
68
68
  - `electron`: `macosApps` (known Electron apps by bundle id, with display names), `debugBlocked` (app names that block remote debugging; they're listed with `debugSupport: "disabled"` and never launched), and `idPrefix` (`electron:`, followed by the slug of the name: lower case, runs of other characters as one `-`).
69
69
  - `rank`: `tiers`, 1 to 5: `sevenOpen` (an endpoint with a seven tab), `endpoint` (any other endpoint), `chrome` (installed `chromeId`), `chromium` (other installed Chromium browsers), `electron` (installed Electron apps).
70
70
  - `discovery`:
71
- - `activePortFile` (`DevToolsActivePort`) and `probePorts` (9222 to 9229, probed by `slicc` only);
71
+ - `activePortFile` (`DevToolsActivePort`): its first line is the port (1 to 65535) and its second the browser's websocket path, which starts with `/`. A file without both is ignored. A file is live only when its port answers `/json/version` with a `webSocketDebuggerUrl` whose path is that websocket path; otherwise it's stale and ignored. When the port accepts connections but serves no `/json/version`, the endpoint is listed as `wsOnly`, with `ws://127.0.0.1:<port><path>`;
72
+ - `probePorts` (9222 to 9229, probed by `slicc` only);
73
+ - every endpoint's `cdp` is `<scheme>://<host>:<port>`, with the host in lower case and `localhost` and `::1` written as `127.0.0.1`, whatever form the URL was found in. Endpoints with the same host and port, written that way, are one endpoint. A `ws://` `--cdp` URL that is listed as `wsOnly` keeps its websocket URL as given;
72
74
  - `sourceRank`: when two sources find the same host and port, the lower rank wins, and on a tie the first found;
73
75
  - `names`: an endpoint's name when it isn't from a known browser's user-data dir: `electron` when the user agent contains `electronUserAgent`, else `products[<product>]` for the product before the `/` in `/json/version`'s `Browser`, else that product, else `fallback`;
74
76
  - `process`: the process scan, see [The process source](#the-process-source).
75
77
  - `seven`:
76
- - `originScheme` and `originHostPattern`: a seven origin is `https://<host>` with a host matching the pattern, except for the `excludedLabels` (`www`);
78
+ - `originScheme` and `originHostPattern`: a seven origin is `https://<host>` with a host matching the pattern, except for the `excludedLabels` (`www`). An origin is compared without the scheme's default port (443 for `https`, 80 for `http`), so `https://seven.sliccy.ai:443` is seven and `https://seven.sliccy.ai:8443` is not. The same goes for extra seven origins;
77
79
  - `sitePattern` (`[*.]sliccy.ai`);
78
80
  - `switches` and `disabledFeatures`: the seven flags, all `--disable-features` values merged into one switch;
79
81
  - `prefs`: values merged into a profile's `Default/Preferences` at the `path` of keys;
@@ -90,7 +92,7 @@ The process scan finds browsers started with a debugging port by something else:
90
92
  - **Process list.** On Unix it's `discovery.process.unix` (`ps -ax -o pid= -o command=`): one process a line, the pid, whitespace, and the command line. On Windows it's `discovery.process.windows`, which prints a JSON array (or one object) of `ProcessId` and `CommandLine`; entries with no command line are skipped.
91
93
  - **What's skipped:** pid 0, the scanning process itself, and commands whose first token is a wrapper. The first token is the quoted string when the command starts with a quote. A wrapper is a token whose base name, without `.exe`, `.cmd` or `.bat`, is one of `wrappers`, case-insensitively. A command with no executable before its first `-` token is skipped too.
92
94
  - **The port** comes from the first `--remote-debugging-port` followed by `=` or whitespace and then digits. A port above 65535 drops the process.
93
- - **The dir** is `--user-data-dir` at the start of a token, followed by `=` or whitespace, then one token (or a quoted string).
95
+ - **The dir** is the value of `--user-data-dir` at the start of a token, followed by `=` or by whitespace (which is skipped). A value that starts with one of `valueQuotes` (`"` or `'`) runs to the matching quote. Any other value runs up to the first whitespace that is followed by `valueStop` (`--`), or to the end of the command, without trailing whitespace. So `--user-data-dir=/Users/me/Library/Application Support/x --no-first-run` gives `/Users/me/Library/Application Support/x`. A value that would start with `--` is empty.
94
96
  - **Port 0** means the port is in the dir's `DevToolsActivePort`, checked like any other. With no dir, or a dir under the legacy profile root (a `slicc` segment followed by `profiles`, case-insensitively), the process is skipped.
95
97
  - **Any other port** is probed on `127.0.0.1`. An endpoint from the process scan has `source: "process"` and `userDataDir` set to the dir when there is one.
96
98
  - **Tests** must fake the process list: never scan the real one in a test.
package/catalog.json CHANGED
@@ -613,6 +613,8 @@
613
613
  ],
614
614
  "portFlag": "--remote-debugging-port",
615
615
  "userDataDirFlag": "--user-data-dir",
616
+ "valueQuotes": ["\"", "'"],
617
+ "valueStop": "--",
616
618
  "wrappers": [
617
619
  "node",
618
620
  "npx",
package/corpus.json CHANGED
@@ -126,6 +126,232 @@
126
126
  ]
127
127
  }
128
128
  },
129
+ {
130
+ "name": "active-port-without-websocket",
131
+ "case": {
132
+ "description": "A DevToolsActivePort without a websocket path starting with / on its second line is stale, even when its port answers",
133
+ "needs": [
134
+ "user-data-dirs",
135
+ "seven-profiles"
136
+ ],
137
+ "files": {
138
+ "{userData:chrome}/DevToolsActivePort": "9501\n",
139
+ "{sevenProfiles}/bare/DevToolsActivePort": "9502",
140
+ "{sevenProfiles}/relative/DevToolsActivePort": "9503\ndevtools/browser/k3\n",
141
+ "{sevenProfiles}/blank/DevToolsActivePort": "9505\n\n",
142
+ "{sevenProfiles}/ok/DevToolsActivePort": "9504\n/devtools/browser/k4\n"
143
+ },
144
+ "http": {
145
+ "127.0.0.1:9501": {
146
+ "version": {
147
+ "Browser": "Chrome/154.0.8037.98",
148
+ "Protocol-Version": "1.3",
149
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
150
+ "V8-Version": "15.4.79.1",
151
+ "WebKit-Version": "537.36 (@a1b2c3)",
152
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9501/devtools/browser/k1"
153
+ },
154
+ "list": []
155
+ },
156
+ "127.0.0.1:9502": {
157
+ "version": {
158
+ "Browser": "Chrome/154.0.8037.98",
159
+ "Protocol-Version": "1.3",
160
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
161
+ "V8-Version": "15.4.79.1",
162
+ "WebKit-Version": "537.36 (@a1b2c3)",
163
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9502/devtools/browser/k2"
164
+ },
165
+ "list": []
166
+ },
167
+ "127.0.0.1:9503": {
168
+ "version": {
169
+ "Browser": "Chrome/154.0.8037.98",
170
+ "Protocol-Version": "1.3",
171
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
172
+ "V8-Version": "15.4.79.1",
173
+ "WebKit-Version": "537.36 (@a1b2c3)",
174
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9503/devtools/browser/k3"
175
+ },
176
+ "list": []
177
+ },
178
+ "127.0.0.1:9504": {
179
+ "version": {
180
+ "Browser": "Chrome/154.0.8037.98",
181
+ "Protocol-Version": "1.3",
182
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
183
+ "V8-Version": "15.4.79.1",
184
+ "WebKit-Version": "537.36 (@a1b2c3)",
185
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9504/devtools/browser/k4"
186
+ },
187
+ "list": []
188
+ },
189
+ "127.0.0.1:9505": {
190
+ "version": {
191
+ "Browser": "Chrome/154.0.8037.98",
192
+ "Protocol-Version": "1.3",
193
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
194
+ "V8-Version": "15.4.79.1",
195
+ "WebKit-Version": "537.36 (@a1b2c3)",
196
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9505/devtools/browser/k5"
197
+ },
198
+ "list": []
199
+ }
200
+ }
201
+ },
202
+ "expected": {
203
+ "schema": 1,
204
+ "minChromium": 116,
205
+ "entries": [
206
+ {
207
+ "id": "cdp:127.0.0.1:9504",
208
+ "kind": "endpoint",
209
+ "tier": 2,
210
+ "name": "Chrome",
211
+ "version": "154.0.8037.98",
212
+ "endpoint": {
213
+ "cdp": "http://127.0.0.1:9504",
214
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9504/devtools/browser/k4",
215
+ "name": "Chrome",
216
+ "version": "154.0.8037.98",
217
+ "product": "Chrome/154.0.8037.98",
218
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
219
+ "source": "devtools-active-port",
220
+ "userDataDir": "{sevenProfiles}/ok",
221
+ "profile": "ok",
222
+ "sevenOpen": false,
223
+ "sevenTabs": []
224
+ }
225
+ }
226
+ ]
227
+ }
228
+ },
229
+ {
230
+ "name": "cdp-localhost",
231
+ "case": {
232
+ "description": "A --cdp URL on localhost or [::1] is listed with cdp on 127.0.0.1; a ws:// URL keeps its websocket URL as given",
233
+ "needs": [
234
+ "flag"
235
+ ],
236
+ "cdp": [
237
+ "localhost:9521",
238
+ "http://LOCALHOST:9522",
239
+ "ws://localhost:9523/devtools/browser/c3",
240
+ "[::1]:9524"
241
+ ],
242
+ "http": {
243
+ "127.0.0.1:9521": {
244
+ "version": {
245
+ "Browser": "Chrome/154.0.8037.98",
246
+ "Protocol-Version": "1.3",
247
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
248
+ "V8-Version": "15.4.79.1",
249
+ "WebKit-Version": "537.36 (@a1b2c3)",
250
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9521/devtools/browser/c1"
251
+ },
252
+ "list": []
253
+ },
254
+ "127.0.0.1:9522": {
255
+ "version": {
256
+ "Browser": "Chrome/154.0.8037.98",
257
+ "Protocol-Version": "1.3",
258
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
259
+ "V8-Version": "15.4.79.1",
260
+ "WebKit-Version": "537.36 (@a1b2c3)",
261
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9522/devtools/browser/c2"
262
+ },
263
+ "list": []
264
+ },
265
+ "127.0.0.1:9523": {},
266
+ "127.0.0.1:9524": {
267
+ "version": {
268
+ "Browser": "Chrome/154.0.8037.98",
269
+ "Protocol-Version": "1.3",
270
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
271
+ "V8-Version": "15.4.79.1",
272
+ "WebKit-Version": "537.36 (@a1b2c3)",
273
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9524/devtools/browser/c4"
274
+ },
275
+ "list": []
276
+ }
277
+ }
278
+ },
279
+ "expected": {
280
+ "schema": 1,
281
+ "minChromium": 116,
282
+ "entries": [
283
+ {
284
+ "id": "cdp:127.0.0.1:9521",
285
+ "kind": "endpoint",
286
+ "tier": 2,
287
+ "name": "Chrome",
288
+ "version": "154.0.8037.98",
289
+ "endpoint": {
290
+ "cdp": "http://127.0.0.1:9521",
291
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9521/devtools/browser/c1",
292
+ "name": "Chrome",
293
+ "version": "154.0.8037.98",
294
+ "product": "Chrome/154.0.8037.98",
295
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
296
+ "source": "flag",
297
+ "sevenOpen": false,
298
+ "sevenTabs": []
299
+ }
300
+ },
301
+ {
302
+ "id": "cdp:127.0.0.1:9522",
303
+ "kind": "endpoint",
304
+ "tier": 2,
305
+ "name": "Chrome",
306
+ "version": "154.0.8037.98",
307
+ "endpoint": {
308
+ "cdp": "http://127.0.0.1:9522",
309
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9522/devtools/browser/c2",
310
+ "name": "Chrome",
311
+ "version": "154.0.8037.98",
312
+ "product": "Chrome/154.0.8037.98",
313
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
314
+ "source": "flag",
315
+ "sevenOpen": false,
316
+ "sevenTabs": []
317
+ }
318
+ },
319
+ {
320
+ "id": "cdp:127.0.0.1:9523",
321
+ "kind": "endpoint",
322
+ "tier": 2,
323
+ "name": "Chromium",
324
+ "endpoint": {
325
+ "cdp": "http://127.0.0.1:9523",
326
+ "webSocketDebuggerUrl": "ws://localhost:9523/devtools/browser/c3",
327
+ "name": "Chromium",
328
+ "source": "flag",
329
+ "wsOnly": true,
330
+ "sevenOpen": false,
331
+ "sevenTabs": []
332
+ }
333
+ },
334
+ {
335
+ "id": "cdp:127.0.0.1:9524",
336
+ "kind": "endpoint",
337
+ "tier": 2,
338
+ "name": "Chrome",
339
+ "version": "154.0.8037.98",
340
+ "endpoint": {
341
+ "cdp": "http://127.0.0.1:9524",
342
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9524/devtools/browser/c4",
343
+ "name": "Chrome",
344
+ "version": "154.0.8037.98",
345
+ "product": "Chrome/154.0.8037.98",
346
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
347
+ "source": "flag",
348
+ "sevenOpen": false,
349
+ "sevenTabs": []
350
+ }
351
+ }
352
+ ]
353
+ }
354
+ },
129
355
  {
130
356
  "name": "dedupe",
131
357
  "case": {
@@ -441,7 +667,7 @@
441
667
  {
442
668
  "name": "extra-origins",
443
669
  "case": {
444
- "description": "An extra seven origin (--origin, --page) makes a tab on it a seven tab",
670
+ "description": "An extra seven origin (--origin, --page) makes a tab on it a seven tab, with or without the default port",
445
671
  "needs": [
446
672
  "flag",
447
673
  "origins"
@@ -470,6 +696,13 @@
470
696
  "title": "dev",
471
697
  "webSocketDebuggerUrl": "ws://127.0.0.1/devtools/page/O1"
472
698
  },
699
+ {
700
+ "id": "O3",
701
+ "type": "page",
702
+ "url": "https://dev.example.test:443/other",
703
+ "title": "dev again",
704
+ "webSocketDebuggerUrl": "ws://127.0.0.1/devtools/page/O3"
705
+ },
473
706
  {
474
707
  "id": "O2",
475
708
  "type": "page",
@@ -505,6 +738,11 @@
505
738
  "id": "O1",
506
739
  "url": "https://dev.example.test/app",
507
740
  "title": "dev"
741
+ },
742
+ {
743
+ "id": "O3",
744
+ "url": "https://dev.example.test:443/other",
745
+ "title": "dev again"
508
746
  }
509
747
  ]
510
748
  }
@@ -1006,6 +1244,167 @@
1006
1244
  ]
1007
1245
  }
1008
1246
  },
1247
+ {
1248
+ "name": "process-user-data-dir-spaces",
1249
+ "case": {
1250
+ "description": "A process's --user-data-dir runs to the next whitespace followed by --, or to the end; a value that starts with a quote runs to the matching quote",
1251
+ "needs": [
1252
+ "process"
1253
+ ],
1254
+ "files": {
1255
+ "{home}/Library/Application Support/ms-playwright/mcp-chrome/DevToolsActivePort": "9511\n/devtools/browser/u1\n",
1256
+ "{home}/with space/quoted/DevToolsActivePort": "9512\n/devtools/browser/u2\n",
1257
+ "{home}/tail space/DevToolsActivePort": "9513\n/devtools/browser/u3\n",
1258
+ "{home}/single quote/DevToolsActivePort": "9514\n/devtools/browser/u4\n"
1259
+ },
1260
+ "processes": [
1261
+ {
1262
+ "pid": 401,
1263
+ "command": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --remote-debugging-port=0 --user-data-dir={home}/Library/Application Support/ms-playwright/mcp-chrome --no-first-run --no-default-browser-check about:blank"
1264
+ },
1265
+ {
1266
+ "pid": 402,
1267
+ "command": "\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\" --remote-debugging-port=0 --user-data-dir=\"{home}/with space/quoted\" --no-first-run"
1268
+ },
1269
+ {
1270
+ "pid": 403,
1271
+ "command": "/opt/google/chrome/chrome --remote-debugging-port 0 --user-data-dir {home}/tail space"
1272
+ },
1273
+ {
1274
+ "pid": 404,
1275
+ "command": "/opt/google/chrome/chrome --remote-debugging-port=0 --user-data-dir='{home}/single quote' --headless=new"
1276
+ }
1277
+ ],
1278
+ "http": {
1279
+ "127.0.0.1:9511": {
1280
+ "version": {
1281
+ "Browser": "Chrome/154.0.8037.98",
1282
+ "Protocol-Version": "1.3",
1283
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1284
+ "V8-Version": "15.4.79.1",
1285
+ "WebKit-Version": "537.36 (@a1b2c3)",
1286
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9511/devtools/browser/u1"
1287
+ },
1288
+ "list": []
1289
+ },
1290
+ "127.0.0.1:9512": {
1291
+ "version": {
1292
+ "Browser": "Chrome/154.0.8037.98",
1293
+ "Protocol-Version": "1.3",
1294
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1295
+ "V8-Version": "15.4.79.1",
1296
+ "WebKit-Version": "537.36 (@a1b2c3)",
1297
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9512/devtools/browser/u2"
1298
+ },
1299
+ "list": []
1300
+ },
1301
+ "127.0.0.1:9513": {
1302
+ "version": {
1303
+ "Browser": "Chrome/154.0.8037.98",
1304
+ "Protocol-Version": "1.3",
1305
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1306
+ "V8-Version": "15.4.79.1",
1307
+ "WebKit-Version": "537.36 (@a1b2c3)",
1308
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9513/devtools/browser/u3"
1309
+ },
1310
+ "list": []
1311
+ },
1312
+ "127.0.0.1:9514": {
1313
+ "version": {
1314
+ "Browser": "Chrome/154.0.8037.98",
1315
+ "Protocol-Version": "1.3",
1316
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1317
+ "V8-Version": "15.4.79.1",
1318
+ "WebKit-Version": "537.36 (@a1b2c3)",
1319
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9514/devtools/browser/u4"
1320
+ },
1321
+ "list": []
1322
+ }
1323
+ }
1324
+ },
1325
+ "expected": {
1326
+ "schema": 1,
1327
+ "minChromium": 116,
1328
+ "entries": [
1329
+ {
1330
+ "id": "cdp:127.0.0.1:9511",
1331
+ "kind": "endpoint",
1332
+ "tier": 2,
1333
+ "name": "Chrome",
1334
+ "version": "154.0.8037.98",
1335
+ "endpoint": {
1336
+ "cdp": "http://127.0.0.1:9511",
1337
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9511/devtools/browser/u1",
1338
+ "name": "Chrome",
1339
+ "version": "154.0.8037.98",
1340
+ "product": "Chrome/154.0.8037.98",
1341
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1342
+ "source": "process",
1343
+ "userDataDir": "{home}/Library/Application Support/ms-playwright/mcp-chrome",
1344
+ "sevenOpen": false,
1345
+ "sevenTabs": []
1346
+ }
1347
+ },
1348
+ {
1349
+ "id": "cdp:127.0.0.1:9512",
1350
+ "kind": "endpoint",
1351
+ "tier": 2,
1352
+ "name": "Chrome",
1353
+ "version": "154.0.8037.98",
1354
+ "endpoint": {
1355
+ "cdp": "http://127.0.0.1:9512",
1356
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9512/devtools/browser/u2",
1357
+ "name": "Chrome",
1358
+ "version": "154.0.8037.98",
1359
+ "product": "Chrome/154.0.8037.98",
1360
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1361
+ "source": "process",
1362
+ "userDataDir": "{home}/with space/quoted",
1363
+ "sevenOpen": false,
1364
+ "sevenTabs": []
1365
+ }
1366
+ },
1367
+ {
1368
+ "id": "cdp:127.0.0.1:9513",
1369
+ "kind": "endpoint",
1370
+ "tier": 2,
1371
+ "name": "Chrome",
1372
+ "version": "154.0.8037.98",
1373
+ "endpoint": {
1374
+ "cdp": "http://127.0.0.1:9513",
1375
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9513/devtools/browser/u3",
1376
+ "name": "Chrome",
1377
+ "version": "154.0.8037.98",
1378
+ "product": "Chrome/154.0.8037.98",
1379
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1380
+ "source": "process",
1381
+ "userDataDir": "{home}/tail space",
1382
+ "sevenOpen": false,
1383
+ "sevenTabs": []
1384
+ }
1385
+ },
1386
+ {
1387
+ "id": "cdp:127.0.0.1:9514",
1388
+ "kind": "endpoint",
1389
+ "tier": 2,
1390
+ "name": "Chrome",
1391
+ "version": "154.0.8037.98",
1392
+ "endpoint": {
1393
+ "cdp": "http://127.0.0.1:9514",
1394
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9514/devtools/browser/u4",
1395
+ "name": "Chrome",
1396
+ "version": "154.0.8037.98",
1397
+ "product": "Chrome/154.0.8037.98",
1398
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1399
+ "source": "process",
1400
+ "userDataDir": "{home}/single quote",
1401
+ "sevenOpen": false,
1402
+ "sevenTabs": []
1403
+ }
1404
+ }
1405
+ ]
1406
+ }
1407
+ },
1009
1408
  {
1010
1409
  "name": "ranking-ties",
1011
1410
  "case": {
@@ -1414,6 +1813,114 @@
1414
1813
  ]
1415
1814
  }
1416
1815
  },
1816
+ {
1817
+ "name": "seven-tab-default-port",
1818
+ "case": {
1819
+ "description": "https://<label>.sliccy.ai:443 is the same origin as without the port; any other port is a different origin",
1820
+ "needs": [
1821
+ "flag"
1822
+ ],
1823
+ "cdp": [
1824
+ "127.0.0.1:9531",
1825
+ "127.0.0.1:9532"
1826
+ ],
1827
+ "http": {
1828
+ "127.0.0.1:9531": {
1829
+ "version": {
1830
+ "Browser": "Chrome/154.0.8037.98",
1831
+ "Protocol-Version": "1.3",
1832
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1833
+ "V8-Version": "15.4.79.1",
1834
+ "WebKit-Version": "537.36 (@a1b2c3)",
1835
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9531/devtools/browser/d1"
1836
+ },
1837
+ "list": [
1838
+ {
1839
+ "id": "D1",
1840
+ "type": "page",
1841
+ "url": "https://seven.sliccy.ai:443/",
1842
+ "title": "seven",
1843
+ "webSocketDebuggerUrl": "ws://127.0.0.1/devtools/page/D1"
1844
+ },
1845
+ {
1846
+ "id": "D2",
1847
+ "type": "page",
1848
+ "url": "https://lars.sliccy.ai:8443/",
1849
+ "title": "other port",
1850
+ "webSocketDebuggerUrl": "ws://127.0.0.1/devtools/page/D2"
1851
+ }
1852
+ ]
1853
+ },
1854
+ "127.0.0.1:9532": {
1855
+ "version": {
1856
+ "Browser": "Chrome/154.0.8037.98",
1857
+ "Protocol-Version": "1.3",
1858
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1859
+ "V8-Version": "15.4.79.1",
1860
+ "WebKit-Version": "537.36 (@a1b2c3)",
1861
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9532/devtools/browser/d2"
1862
+ },
1863
+ "list": [
1864
+ {
1865
+ "id": "D3",
1866
+ "type": "page",
1867
+ "url": "https://lars.sliccy.ai:8443/",
1868
+ "title": "other port",
1869
+ "webSocketDebuggerUrl": "ws://127.0.0.1/devtools/page/D3"
1870
+ }
1871
+ ]
1872
+ }
1873
+ }
1874
+ },
1875
+ "expected": {
1876
+ "schema": 1,
1877
+ "minChromium": 116,
1878
+ "entries": [
1879
+ {
1880
+ "id": "cdp:127.0.0.1:9531",
1881
+ "kind": "endpoint",
1882
+ "tier": 1,
1883
+ "name": "Chrome",
1884
+ "version": "154.0.8037.98",
1885
+ "endpoint": {
1886
+ "cdp": "http://127.0.0.1:9531",
1887
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9531/devtools/browser/d1",
1888
+ "name": "Chrome",
1889
+ "version": "154.0.8037.98",
1890
+ "product": "Chrome/154.0.8037.98",
1891
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1892
+ "source": "flag",
1893
+ "sevenOpen": true,
1894
+ "sevenTabs": [
1895
+ {
1896
+ "id": "D1",
1897
+ "url": "https://seven.sliccy.ai:443/",
1898
+ "title": "seven"
1899
+ }
1900
+ ]
1901
+ }
1902
+ },
1903
+ {
1904
+ "id": "cdp:127.0.0.1:9532",
1905
+ "kind": "endpoint",
1906
+ "tier": 2,
1907
+ "name": "Chrome",
1908
+ "version": "154.0.8037.98",
1909
+ "endpoint": {
1910
+ "cdp": "http://127.0.0.1:9532",
1911
+ "webSocketDebuggerUrl": "ws://127.0.0.1:9532/devtools/browser/d2",
1912
+ "name": "Chrome",
1913
+ "version": "154.0.8037.98",
1914
+ "product": "Chrome/154.0.8037.98",
1915
+ "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.8037.98 Safari/537.36",
1916
+ "source": "flag",
1917
+ "sevenOpen": false,
1918
+ "sevenTabs": []
1919
+ }
1920
+ }
1921
+ ]
1922
+ }
1923
+ },
1417
1924
  {
1418
1925
  "name": "seven-tabs",
1419
1926
  "case": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-browsers",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "SLICC's shared browser catalog, JSON schemas and discovery conformance corpus",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -119,6 +119,11 @@
119
119
  "windows": { "$ref": "#/$defs/names" },
120
120
  "portFlag": { "type": "string", "pattern": "^--" },
121
121
  "userDataDirFlag": { "type": "string", "pattern": "^--" },
122
+ "valueQuotes": {
123
+ "type": "array",
124
+ "items": { "type": "string", "minLength": 1, "maxLength": 1 }
125
+ },
126
+ "valueStop": { "$ref": "#/$defs/name" },
122
127
  "wrappers": { "$ref": "#/$defs/names" },
123
128
  "wrapperSuffixes": { "$ref": "#/$defs/names" }
124
129
  }