chrome-devtools-mcp 1.2.0 → 1.4.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.
Files changed (40) hide show
  1. package/README.md +59 -4
  2. package/build/src/HeapSnapshotManager.js +25 -16
  3. package/build/src/McpContext.js +35 -1
  4. package/build/src/McpResponse.js +77 -7
  5. package/build/src/PageCollector.js +1 -1
  6. package/build/src/bin/check-latest-version.js +1 -0
  7. package/build/src/bin/chrome-devtools-cli-options.js +84 -0
  8. package/build/src/bin/chrome-devtools-mcp-cli-options.js +47 -3
  9. package/build/src/{DevToolsConnectionAdapter.js → devtools/DevToolsConnectionAdapter.js} +1 -1
  10. package/build/src/{DevtoolsUtils.js → devtools/DevtoolsUtils.js} +75 -71
  11. package/build/src/devtools/McpHostBindingAdapter.js +165 -0
  12. package/build/src/formatters/ConsoleFormatter.js +1 -1
  13. package/build/src/formatters/HeapSnapshotFormatter.js +22 -0
  14. package/build/src/formatters/NetworkFormatter.js +3 -1
  15. package/build/src/third_party/THIRD_PARTY_NOTICES +4 -4
  16. package/build/src/third_party/bundled-packages.json +3 -3
  17. package/build/src/third_party/devtools-formatter-worker.js +0 -1
  18. package/build/src/third_party/devtools-heap-snapshot-worker.js +67 -3
  19. package/build/src/third_party/index.js +1971 -426
  20. package/build/src/tools/memory.js +76 -0
  21. package/build/src/tools/screencast.js +30 -9
  22. package/build/src/tools/screenshot.js +158 -76
  23. package/build/src/utils/check-for-updates.js +1 -0
  24. package/build/src/version.js +1 -1
  25. package/package.json +7 -6
  26. package/skills/a11y-debugging/SKILL.md +89 -0
  27. package/skills/a11y-debugging/references/a11y-snippets.md +92 -0
  28. package/skills/chrome-devtools/SKILL.md +72 -0
  29. package/skills/chrome-devtools-cli/SKILL.md +153 -0
  30. package/skills/chrome-devtools-cli/references/installation.md +14 -0
  31. package/skills/debug-optimize-lcp/SKILL.md +121 -0
  32. package/skills/debug-optimize-lcp/references/elements-and-size.md +27 -0
  33. package/skills/debug-optimize-lcp/references/lcp-breakdown.md +23 -0
  34. package/skills/debug-optimize-lcp/references/lcp-snippets.md +79 -0
  35. package/skills/debug-optimize-lcp/references/optimization-strategies.md +38 -0
  36. package/skills/memory-leak-debugging/SKILL.md +50 -0
  37. package/skills/memory-leak-debugging/references/common-leaks.md +33 -0
  38. package/skills/memory-leak-debugging/references/compare_snapshots.js +109 -0
  39. package/skills/memory-leak-debugging/references/memlab.md +29 -0
  40. package/skills/troubleshooting/SKILL.md +98 -0
@@ -15,12 +15,13 @@ import require$$1 from 'tty';
15
15
  import require$$0 from 'os';
16
16
  import require$$0$3 from 'child_process';
17
17
  import { PassThrough } from 'node:stream';
18
+ import { debuglog, promisify } from 'node:util';
18
19
  import { mkdtemp, unlink, rename } from 'node:fs/promises';
19
20
  import { EventEmitter as EventEmitter$1 } from 'node:events';
21
+ import 'node:crypto';
20
22
  import * as http from 'node:http';
21
23
  import * as https from 'node:https';
22
24
  import { urlToHttpOptions, URL as URL$1 } from 'node:url';
23
- import { debuglog, promisify } from 'node:util';
24
25
  import 'node:assert';
25
26
  import require$$0$7 from 'events';
26
27
  import require$$1$3 from 'https';
@@ -10507,6 +10508,18 @@ function requireSemver$1 () {
10507
10508
  const { safeRe: re, t } = requireRe();
10508
10509
  const parseOptions = requireParseOptions();
10509
10510
  const { compareIdentifiers } = requireIdentifiers();
10511
+ const isPrereleaseIdentifier = (prerelease, identifier) => {
10512
+ const identifiers = identifier.split('.');
10513
+ if (identifiers.length > prerelease.length) {
10514
+ return false
10515
+ }
10516
+ for (let i = 0; i < identifiers.length; i++) {
10517
+ if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {
10518
+ return false
10519
+ }
10520
+ }
10521
+ return true
10522
+ };
10510
10523
  class SemVer {
10511
10524
  constructor (version, options) {
10512
10525
  options = parseOptions(options);
@@ -10752,8 +10765,9 @@ function requireSemver$1 () {
10752
10765
  if (identifierBase === false) {
10753
10766
  prerelease = [identifier];
10754
10767
  }
10755
- if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
10756
- if (isNaN(this.prerelease[1])) {
10768
+ if (isPrereleaseIdentifier(this.prerelease, identifier)) {
10769
+ const prereleaseBase = this.prerelease[identifier.split('.').length];
10770
+ if (isNaN(prereleaseBase)) {
10757
10771
  this.prerelease = prerelease;
10758
10772
  }
10759
10773
  } else {
@@ -11499,6 +11513,10 @@ function requireRange () {
11499
11513
  return comp
11500
11514
  };
11501
11515
  const isX = id => !id || id.toLowerCase() === 'x' || id === '*';
11516
+ const invalidXRangeOrder = (M, m, p) => (
11517
+ (isX(M) && !isX(m)) ||
11518
+ (isX(m) && p && !isX(p))
11519
+ );
11502
11520
  const replaceTildes = (comp, options) => {
11503
11521
  return comp
11504
11522
  .trim()
@@ -11508,15 +11526,16 @@ function requireRange () {
11508
11526
  };
11509
11527
  const replaceTilde = (comp, options) => {
11510
11528
  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
11529
+ const z = options.includePrerelease ? '-0' : '';
11511
11530
  return comp.replace(r, (_, M, m, p, pr) => {
11512
11531
  debug('tilde', comp, _, M, m, p, pr);
11513
11532
  let ret;
11514
11533
  if (isX(M)) {
11515
11534
  ret = '';
11516
11535
  } else if (isX(m)) {
11517
- ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
11536
+ ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
11518
11537
  } else if (isX(p)) {
11519
- ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
11538
+ ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
11520
11539
  } else if (pr) {
11521
11540
  debug('replaceTilde pr', pr);
11522
11541
  ret = `>=${M}.${m}.${p}-${pr
@@ -11572,10 +11591,10 @@ function requireRange () {
11572
11591
  if (M === '0') {
11573
11592
  if (m === '0') {
11574
11593
  ret = `>=${M}.${m}.${p
11575
- }${z} <${M}.${m}.${+p + 1}-0`;
11594
+ } <${M}.${m}.${+p + 1}-0`;
11576
11595
  } else {
11577
11596
  ret = `>=${M}.${m}.${p
11578
- }${z} <${M}.${+m + 1}.0-0`;
11597
+ } <${M}.${+m + 1}.0-0`;
11579
11598
  }
11580
11599
  } else {
11581
11600
  ret = `>=${M}.${m}.${p
@@ -11598,6 +11617,9 @@ function requireRange () {
11598
11617
  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
11599
11618
  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
11600
11619
  debug('xRange', comp, ret, gtlt, M, m, p, pr);
11620
+ if (invalidXRangeOrder(M, m, p)) {
11621
+ return comp
11622
+ }
11601
11623
  const xM = isX(M);
11602
11624
  const xm = xM || isX(m);
11603
11625
  const xp = xm || isX(p);
@@ -48120,6 +48142,37 @@ function requireAjv () {
48120
48142
  var ajvExports = requireAjv();
48121
48143
  var ajv = /*@__PURE__*/getDefaultExportFromCjs(ajvExports);
48122
48144
 
48145
+ /**
48146
+ * @license
48147
+ * Copyright 2020 Google Inc.
48148
+ * SPDX-License-Identifier: Apache-2.0
48149
+ */
48150
+ const isNode = !!(typeof process !== 'undefined' && process.version);
48151
+ const environment = {
48152
+ value: {
48153
+ get fs() {
48154
+ throw new Error('fs is not available in this environment');
48155
+ },
48156
+ ScreenRecorder: class {
48157
+ constructor() {
48158
+ throw new Error('ScreenRecorder is not available in this environment');
48159
+ }
48160
+ },
48161
+ },
48162
+ };
48163
+
48164
+ /**
48165
+ * @license
48166
+ * Copyright 2026 Google Inc.
48167
+ * SPDX-License-Identifier: Apache-2.0
48168
+ */
48169
+ environment.value = {
48170
+ fs,
48171
+ path,
48172
+ debuglog,
48173
+ ScreenRecorder: environment.value.ScreenRecorder,
48174
+ };
48175
+
48123
48176
  /**
48124
48177
  Apache License
48125
48178
  Version 2.0, January 2004
@@ -50607,23 +50660,6 @@ class SuppressedErrorPolyfill extends Error {
50607
50660
  }
50608
50661
  }
50609
50662
 
50610
- /**
50611
- * @license
50612
- * Copyright 2020 Google Inc.
50613
- * SPDX-License-Identifier: Apache-2.0
50614
- */
50615
- const isNode = !!(typeof process !== 'undefined' && process.version);
50616
- const environment = {
50617
- value: {
50618
- get fs() {
50619
- throw new Error('fs is not available in this environment');
50620
- },
50621
- get ScreenRecorder() {
50622
- throw new Error('ScreenRecorder is not available in this environment');
50623
- },
50624
- },
50625
- };
50626
-
50627
50663
  /**
50628
50664
  * @license
50629
50665
  * Copyright 2020 Google Inc.
@@ -50686,39 +50722,36 @@ function mergeUint8Arrays(items) {
50686
50722
  * Copyright 2025 Google Inc.
50687
50723
  * SPDX-License-Identifier: Apache-2.0
50688
50724
  */
50689
- const packageVersion = '25.1.0';
50725
+ const packageVersion = '25.2.0';
50690
50726
 
50691
50727
  /**
50692
50728
  * @license
50693
50729
  * Copyright 2020 Google Inc.
50694
50730
  * SPDX-License-Identifier: Apache-2.0
50695
50731
  */
50696
- let debugModule = null;
50697
- async function importDebug() {
50698
- if (!debugModule) {
50699
- debugModule = (await import('node:util')).debuglog;
50700
- }
50701
- return debugModule;
50702
- }
50703
50732
  const debug$1 = (prefix) => {
50704
50733
  if (isNode) {
50705
- return async (...logArgs) => {
50706
- (await importDebug())(prefix)(...logArgs);
50734
+ const nodeDebug = environment.value.debuglog?.(prefix);
50735
+ if (!nodeDebug || !nodeDebug.enabled) {
50736
+ return;
50737
+ }
50738
+ return (...logArgs) => {
50739
+ nodeDebug(...logArgs);
50707
50740
  };
50708
50741
  }
50742
+ const debugLevel = globalThis.__PUPPETEER_DEBUG;
50743
+ if (!debugLevel) {
50744
+ return;
50745
+ }
50746
+ const everythingShouldBeLogged = debugLevel === '*';
50747
+ const prefixMatchesDebugLevel = everythingShouldBeLogged ||
50748
+ (debugLevel.endsWith('*')
50749
+ ? prefix.startsWith(debugLevel.slice(0, -1))
50750
+ : prefix === debugLevel);
50751
+ if (!prefixMatchesDebugLevel) {
50752
+ return;
50753
+ }
50709
50754
  return (...logArgs) => {
50710
- const debugLevel = globalThis.__PUPPETEER_DEBUG;
50711
- if (!debugLevel) {
50712
- return;
50713
- }
50714
- const everythingShouldBeLogged = debugLevel === '*';
50715
- const prefixMatchesDebugLevel = everythingShouldBeLogged ||
50716
- (debugLevel.endsWith('*')
50717
- ? prefix.startsWith(debugLevel)
50718
- : prefix === debugLevel);
50719
- if (!prefixMatchesDebugLevel) {
50720
- return;
50721
- }
50722
50755
  console.log(`${prefix}:`, ...logArgs);
50723
50756
  };
50724
50757
  };
@@ -50822,6 +50855,7 @@ const paperFormats = {
50822
50855
  * SPDX-License-Identifier: Apache-2.0
50823
50856
  */
50824
50857
  const debugError = debug$1('puppeteer:error');
50858
+ const debugCatchError = debugError ?? (() => { });
50825
50859
  const DEFAULT_VIEWPORT = Object.freeze({ width: 800, height: 600 });
50826
50860
  const SOURCE_URL = Symbol('Source URL for Puppeteer evaluation scripts');
50827
50861
  class PuppeteerURL {
@@ -50934,7 +50968,7 @@ async function getReadableAsTypedArray(readable, path) {
50934
50968
  return concat;
50935
50969
  }
50936
50970
  catch (error) {
50937
- debugError(error);
50971
+ debugError?.(error);
50938
50972
  return null;
50939
50973
  }
50940
50974
  }
@@ -51149,7 +51183,7 @@ class EventEmitter {
51149
51183
  return this;
51150
51184
  }
51151
51185
  [disposeSymbol]() {
51152
- return void this[asyncDisposeSymbol]().catch(debugError);
51186
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
51153
51187
  }
51154
51188
  async [asyncDisposeSymbol]() {
51155
51189
  for (const [type, handlers] of this.#handlers) {
@@ -51214,7 +51248,7 @@ let Browser$1 = class Browser extends EventEmitter {
51214
51248
  return await this.defaultBrowserContext().setPermission(origin, ...permissions);
51215
51249
  }
51216
51250
  [disposeSymbol]() {
51217
- return void this[asyncDisposeSymbol]().catch(debugError);
51251
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
51218
51252
  }
51219
51253
  async [asyncDisposeSymbol]() {
51220
51254
  if (this.process()) {
@@ -51443,7 +51477,7 @@ class BrowserContext extends EventEmitter {
51443
51477
  return undefined;
51444
51478
  }
51445
51479
  [disposeSymbol]() {
51446
- return void this[asyncDisposeSymbol]().catch(debugError);
51480
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
51447
51481
  }
51448
51482
  async [asyncDisposeSymbol]() {
51449
51483
  await this.close();
@@ -52011,7 +52045,7 @@ class CSSQueryHandler extends QueryHandler {
52011
52045
  };
52012
52046
  }
52013
52047
 
52014
- const source = "\"use strict\";var N=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},G=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let s of B(e))!Y.call(t,s)&&s!==r&&N(t,s,{get:()=>e[s],enumerable:!(o=X(e,s))||o.enumerable});return t};var J=t=>G(N({},\"__esModule\",{value:!0}),t);var pe={};l(pe,{default:()=>he});module.exports=J(pe);var x=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends x{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(s=>s instanceof t?(s.#s&&r.add(s),s.valueOrThrow()):s);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#s;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#s=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#s),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#n;valueOrThrow(){return this.#n||(this.#n=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#n}};var L=new Map,W=t=>{let e=L.get(t);return e||(e=new Function(`return ${t}`)(),L.set(t,e),e)};var E={};l(E,{ariaQuerySelector:()=>z,ariaQuerySelectorAll:()=>b});var z=(t,e)=>globalThis.__ariaQuerySelector(t,e),b=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var v={};l(v,{cssQuerySelector:()=>K,cssQuerySelectorAll:()=>Z});var K=(t,e)=>t.querySelector(e),Z=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(s,i)=>{for(let n of o(s,i))return n;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(s,i)=>{let n=o(s,i);return n?[n]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>ee,pierceQuerySelectorAll:()=>te});var ee=(t,e)=>{let r=null,o=s=>{let i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT);do{let n=i.currentNode;n.shadowRoot&&o(n.shadowRoot),!(n instanceof ShadowRoot)&&n!==s&&!r&&n.matches(e)&&(r=n)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},te=(t,e)=>{let r=[],o=s=>{let i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT);do{let n=i.currentNode;n.shadowRoot&&o(n.shadowRoot),!(n instanceof ShadowRoot)&&n!==s&&n.matches(e)&&r.push(n)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var w=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},T=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let s=await this.#e();if(!s){window.requestAnimationFrame(o);return}e.resolve(s),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var _={};l(_,{PCombinator:()=>H,pQuerySelector:()=>fe,pQuerySelectorAll:()=>$});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var C={};l(C,{textQuerySelectorAll:()=>m});var re=new Set([\"checkbox\",\"image\",\"radio\"]),oe=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!re.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),I=new WeakMap,F=t=>{for(;t;)I.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},j=new WeakSet,ne=new MutationObserver(t=>{for(let e of t)F(e.target)}),d=t=>{let e=I.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(oe(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{F(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),j.has(t)||(ne.observe(t,{childList:!0,characterData:!0,subtree:!0}),j.add(t))}return I.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let s;o.shadowRoot?s=m(o.shadowRoot,e):s=m(o,e);for(let i of s)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var k={};l(k,{checkVisibility:()=>le,pierce:()=>g,pierceAll:()=>O});var ie=[\"hidden\",\"collapse\"],le=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t,o=window.getComputedStyle(r),s=o&&!ie.includes(o.visibility)&&!ae(r);return e===s?t:!1};function ae(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ce=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ce(t)?yield t.shadowRoot:yield t}function*O(t){t=g(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let s=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],n;for(;(n=s.iterateNext())&&(i.push(n),!(r&&i.length===r)););for(let h=0;h<i.length;h++)n=i[h],yield n,i[h]=null};var ue=/[-\\w\\P{ASCII}*]/u,H=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(H||{}),V=t=>\"querySelectorAll\"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){for(typeof this.#o==\"string\"&&this.#o.trimStart()===\":scope\"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&ue.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){V(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!V(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let s of r.parentElement.children)if(++o,s===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*b(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,g),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,O),this.#t();break}default:this.#r=e,this.#t();break}}},M=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let s=0;for(let n=e.previousSibling;n;n=n.previousSibling)++s;let i=this.calculate(e.parentNode,[s]);return this.#e.set(e,i),[...i,...r]}},U=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[s=-1,...i]=e;return r===s?U(o,i):r<s?-1:1},de=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new M;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,s])=>U(o,s)).map(([o])=>o)},$=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let s=0;return o.some(i=>(typeof i==\"string\"?++s:s=0,s>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return de(a.flatMap(r,o=>{let s=new Q(t,o);return s.run(),s.elements}))},fe=async function(t,e){for await(let r of $(t,e))return r;return null};var me=Object.freeze({...E,...A,...R,..._,...C,...k,...D,...v,Deferred:c,createFunction:W,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),he=me;\n";
52048
+ const source = "\"use strict\";var N=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Y(e))!G.call(t,n)&&n!==r&&N(t,n,{get:()=>e[n],enumerable:!(o=B(e,n))||o.enumerable});return t};var z=t=>J(N({},\"__esModule\",{value:!0}),t);var ye={};l(ye,{default:()=>pe});module.exports=z(ye);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#n&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#n;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#n=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#n),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#s;valueOrThrow(){return this.#s||(this.#s=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#s}};var W=new Map,j=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var v={};l(v,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var w=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},T=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var L={};l(L,{PCombinator:()=>U,pQuerySelector:()=>me,pQuerySelectorAll:()=>X});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var O={};l(O,{textQuerySelectorAll:()=>m});var oe=new Set([\"checkbox\",\"image\",\"radio\"]),ne=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!oe.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),C=new WeakMap,V=t=>{for(;t;)C.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},F=new WeakSet,I,ie=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\"MutationObserver is not available in this environment.\");return I||(I=new t(e=>{for(let r of e)V(r.target)})),I},d=t=>{let e=C.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(ne(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{V(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),F.has(t)||(ie().observe(t,{childList:!0,characterData:!0,subtree:!0}),F.add(t))}return C.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var M={};l(M,{checkVisibility:()=>ae,pierce:()=>g,pierceAll:()=>k});var le=[\"hidden\",\"collapse\"],ae=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t,o=window.getComputedStyle(r),n=o&&!le.includes(o.visibility)&&!ce(r);return e===n?t:!1};function ce(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ue=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ue(t)?yield t.shadowRoot:yield t}function*k(t){t=g(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let h=0;h<i.length;h++)s=i[h],yield s,i[h]=null};var de=/[-\\w\\P{ASCII}*]/u,U=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(U||{}),H=t=>\"querySelectorAll\"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){for(typeof this.#o==\"string\"&&this.#o.trimStart()===\":scope\"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&de.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){H(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!H(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,g),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,k),this.#t();break}default:this.#r=e,this.#t();break}}},_=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},fe=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new _;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},X=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\"string\"?++n:n=0,n>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return fe(a.flatMap(r,o=>{let n=new Q(t,o);return n.run(),n.elements}))},me=async function(t,e){for await(let r of X(t,e))return r;return null};var he=Object.freeze({...v,...A,...R,...L,...O,...M,...D,...E,Deferred:c,createFunction:j,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),pe=he;\n";
52015
52049
 
52016
52050
  /**
52017
52051
  * @license
@@ -52804,14 +52838,7 @@ let JSHandle = (() => {
52804
52838
  }
52805
52839
  async getProperties() {
52806
52840
  const propertyNames = await this.evaluate(object => {
52807
- const enumerableProperties = [];
52808
- const descriptors = Object.getOwnPropertyDescriptors(object);
52809
- for (const propertyName in descriptors) {
52810
- if (descriptors[propertyName]?.enumerable) {
52811
- enumerableProperties.push(propertyName);
52812
- }
52813
- }
52814
- return enumerableProperties;
52841
+ return Object.keys(object ?? {});
52815
52842
  });
52816
52843
  const map = new Map();
52817
52844
  const results = await Promise.all(propertyNames.map(key => {
@@ -52836,7 +52863,7 @@ let JSHandle = (() => {
52836
52863
  return map;
52837
52864
  }
52838
52865
  [(_getProperty_decorators = [throwIfDisposed()], _getProperties_decorators = [throwIfDisposed()], disposeSymbol)]() {
52839
- return void this[asyncDisposeSymbol]().catch(debugError);
52866
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
52840
52867
  }
52841
52868
  [asyncDisposeSymbol]() {
52842
52869
  return this.dispose();
@@ -53046,7 +53073,7 @@ class Locator extends EventEmitter {
53046
53073
  return this.emit(LocatorEvent.Action, undefined);
53047
53074
  }), mergeMap(handle => {
53048
53075
  return from(handle.click(options)).pipe(catchError(err => {
53049
- void handle.dispose().catch(debugError);
53076
+ void handle.dispose().catch(debugCatchError);
53050
53077
  throw err;
53051
53078
  }));
53052
53079
  }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause));
@@ -53187,7 +53214,7 @@ class Locator extends EventEmitter {
53187
53214
  }
53188
53215
  }))
53189
53216
  .pipe(catchError(err => {
53190
- void handle.dispose().catch(debugError);
53217
+ void handle.dispose().catch(debugCatchError);
53191
53218
  throw err;
53192
53219
  }));
53193
53220
  }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause));
@@ -53202,7 +53229,7 @@ class Locator extends EventEmitter {
53202
53229
  return this.emit(LocatorEvent.Action, undefined);
53203
53230
  }), mergeMap(handle => {
53204
53231
  return from(handle.hover()).pipe(catchError(err => {
53205
- void handle.dispose().catch(debugError);
53232
+ void handle.dispose().catch(debugCatchError);
53206
53233
  throw err;
53207
53234
  }));
53208
53235
  }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause));
@@ -53224,7 +53251,7 @@ class Locator extends EventEmitter {
53224
53251
  el.scrollLeft = scrollLeft;
53225
53252
  }
53226
53253
  }, options?.scrollTop, options?.scrollLeft)).pipe(catchError(err => {
53227
- void handle.dispose().catch(debugError);
53254
+ void handle.dispose().catch(debugCatchError);
53228
53255
  throw err;
53229
53256
  }));
53230
53257
  }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause));
@@ -55066,13 +55093,17 @@ var InterceptResolutionAction;
55066
55093
  })(InterceptResolutionAction || (InterceptResolutionAction = {}));
55067
55094
  function headersArray(headers) {
55068
55095
  const result = [];
55069
- for (const name in headers) {
55096
+ for (const name of Object.keys(headers)) {
55070
55097
  const value = headers[name];
55071
- if (!Object.is(value, undefined)) {
55072
- const values = Array.isArray(value) ? value : [value];
55073
- result.push(...values.map(value => {
55074
- return { name, value: value + '' };
55075
- }));
55098
+ if (value !== undefined) {
55099
+ if (Array.isArray(value)) {
55100
+ for (const v of value) {
55101
+ result.push({ name, value: v + '' });
55102
+ }
55103
+ }
55104
+ else {
55105
+ result.push({ name, value: value + '' });
55106
+ }
55076
55107
  }
55077
55108
  }
55078
55109
  return result;
@@ -55165,7 +55196,7 @@ function handleError(error) {
55165
55196
  error.originalMessage.includes('invalid argument')) {
55166
55197
  throw error;
55167
55198
  }
55168
- debugError(error);
55199
+ debugError?.(error);
55169
55200
  }
55170
55201
 
55171
55202
  /**
@@ -55654,7 +55685,7 @@ let Page = (() => {
55654
55685
  if (viewport && viewport.deviceScaleFactor !== 0) {
55655
55686
  await this.setViewport({ ...viewport, deviceScaleFactor: 0 });
55656
55687
  stack.defer(() => {
55657
- void this.setViewport(viewport).catch(debugError);
55688
+ void this.setViewport(viewport).catch(debugCatchError);
55658
55689
  });
55659
55690
  }
55660
55691
  return await this.mainFrame()
@@ -55748,7 +55779,7 @@ let Page = (() => {
55748
55779
  ...scrollDimensions,
55749
55780
  });
55750
55781
  stack.defer(async () => {
55751
- await this.setViewport(viewport).catch(debugError);
55782
+ await this.setViewport(viewport).catch(debugCatchError);
55752
55783
  });
55753
55784
  }
55754
55785
  }
@@ -55804,7 +55835,7 @@ let Page = (() => {
55804
55835
  [(_screenshot_decorators = [guarded(function () {
55805
55836
  return this.browser();
55806
55837
  })], disposeSymbol)]() {
55807
- return void this[asyncDisposeSymbol]().catch(debugError);
55838
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
55808
55839
  }
55809
55840
  async [asyncDisposeSymbol]() {
55810
55841
  await this.close();
@@ -56107,6 +56138,12 @@ let WebWorker$1 = class WebWorker extends EventEmitter {
56107
56138
  func = withSourcePuppeteerURLIfNone(this.evaluateHandle.name, func);
56108
56139
  return await this.mainRealm().evaluateHandle(func, ...args);
56109
56140
  }
56141
+ waitForFunction(workerFunction, options = {}, ...args) {
56142
+ return this.mainRealm().waitForFunction(workerFunction, {
56143
+ polling: 100,
56144
+ ...options,
56145
+ }, ...args);
56146
+ }
56110
56147
  async close() {
56111
56148
  throw new UnsupportedOperation('WebWorker.close() is not supported');
56112
56149
  }
@@ -56209,7 +56246,7 @@ class Accessibility {
56209
56246
  root.iframeSnapshot = iframeSnapshot ?? undefined;
56210
56247
  }
56211
56248
  catch (error) {
56212
- debugError(error);
56249
+ debugError?.(error);
56213
56250
  }
56214
56251
  }
56215
56252
  catch (e_1) {
@@ -56220,9 +56257,9 @@ class Accessibility {
56220
56257
  __disposeResources$4(env_1);
56221
56258
  }
56222
56259
  }
56223
- for (const child of root.children) {
56224
- await populateIframes(child);
56225
- }
56260
+ await Promise.all(root.children.map(child => {
56261
+ return populateIframes(child);
56262
+ }));
56226
56263
  };
56227
56264
  let needle = defaultRoot;
56228
56265
  if (!defaultRoot) {
@@ -56739,7 +56776,7 @@ let Binding$2 = class Binding {
56739
56776
  callbacks.get(seq).reject(error);
56740
56777
  callbacks.delete(seq);
56741
56778
  }, this.#name, id, error.message, error.stack)
56742
- .catch(debugError);
56779
+ .catch(debugCatchError);
56743
56780
  }
56744
56781
  else {
56745
56782
  await context
@@ -56748,7 +56785,7 @@ let Binding$2 = class Binding {
56748
56785
  callbacks.get(seq).reject(error);
56749
56786
  callbacks.delete(seq);
56750
56787
  }, this.#name, id, error)
56751
- .catch(debugError);
56788
+ .catch(debugCatchError);
56752
56789
  }
56753
56790
  }
56754
56791
  }
@@ -56885,7 +56922,7 @@ class CallbackRegistry {
56885
56922
  request(callback.id);
56886
56923
  }
56887
56924
  catch (error) {
56888
- callback.promise.catch(debugError).finally(() => {
56925
+ void callback.promise.catch(debugCatchError).finally(() => {
56889
56926
  this.#callbacks.delete(callback.id);
56890
56927
  });
56891
56928
  callback.reject(error);
@@ -57165,7 +57202,7 @@ class Connection extends EventEmitter {
57165
57202
  id,
57166
57203
  sessionId,
57167
57204
  });
57168
- debugProtocolSend(stringifiedMessage);
57205
+ debugProtocolSend?.(stringifiedMessage);
57169
57206
  this.#transport.send(stringifiedMessage);
57170
57207
  });
57171
57208
  }
@@ -57178,7 +57215,7 @@ class Connection extends EventEmitter {
57178
57215
  return setTimeout(r, this.#delay);
57179
57216
  });
57180
57217
  }
57181
- debugProtocolReceive(message);
57218
+ debugProtocolReceive?.(message);
57182
57219
  const object = JSON.parse(message);
57183
57220
  if (object.method === 'Target.attachedToTarget') {
57184
57221
  const sessionId = object.params.sessionId;
@@ -57376,7 +57413,7 @@ class JSCoverage {
57376
57413
  this.#scriptSources.set(event.scriptId, response.scriptSource);
57377
57414
  }
57378
57415
  catch (error) {
57379
- debugError(error);
57416
+ debugError?.(error);
57380
57417
  }
57381
57418
  }
57382
57419
  async stop() {
@@ -57465,7 +57502,7 @@ class CSSCoverage {
57465
57502
  this.#stylesheetSources.set(header.styleSheetId, response.text);
57466
57503
  }
57467
57504
  catch (error) {
57468
- debugError(error);
57505
+ debugError?.(error);
57469
57506
  }
57470
57507
  }
57471
57508
  async stop() {
@@ -57638,6 +57675,8 @@ let EmulationManager = (() => {
57638
57675
  let _private_emulateIdleState_descriptor;
57639
57676
  let _private_emulateTimezone_decorators;
57640
57677
  let _private_emulateTimezone_descriptor;
57678
+ let _private_emulateLocale_decorators;
57679
+ let _private_emulateLocale_descriptor;
57641
57680
  let _private_emulateVisionDeficiency_decorators;
57642
57681
  let _private_emulateVisionDeficiency_descriptor;
57643
57682
  let _private_emulateCpuThrottling_decorators;
@@ -57660,6 +57699,7 @@ let EmulationManager = (() => {
57660
57699
  _private_applyViewport_decorators = [invokeAtMostOnceForArguments];
57661
57700
  _private_emulateIdleState_decorators = [invokeAtMostOnceForArguments];
57662
57701
  _private_emulateTimezone_decorators = [invokeAtMostOnceForArguments];
57702
+ _private_emulateLocale_decorators = [invokeAtMostOnceForArguments];
57663
57703
  _private_emulateVisionDeficiency_decorators = [invokeAtMostOnceForArguments];
57664
57704
  _private_emulateCpuThrottling_decorators = [invokeAtMostOnceForArguments];
57665
57705
  _private_emulateMediaFeatures_decorators = [invokeAtMostOnceForArguments];
@@ -57675,7 +57715,7 @@ let EmulationManager = (() => {
57675
57715
  client.send('Emulation.setTouchEmulationEnabled', {
57676
57716
  enabled: false,
57677
57717
  }),
57678
- ]).catch(debugError);
57718
+ ]).catch(debugCatchError);
57679
57719
  return;
57680
57720
  }
57681
57721
  const { viewport } = viewportState;
@@ -57698,7 +57738,7 @@ let EmulationManager = (() => {
57698
57738
  })
57699
57739
  .catch(err => {
57700
57740
  if (err.message.includes('Target does not support metrics override')) {
57701
- debugError(err);
57741
+ debugError?.(err);
57702
57742
  return;
57703
57743
  }
57704
57744
  throw err;
@@ -57738,6 +57778,14 @@ let EmulationManager = (() => {
57738
57778
  throw error;
57739
57779
  }
57740
57780
  }, "#emulateTimezone") }, _private_emulateTimezone_decorators, { kind: "method", name: "#emulateTimezone", static: false, private: true, access: { has: obj => #emulateTimezone in obj, get: obj => obj.#emulateTimezone }, metadata: _metadata }, null, _instanceExtraInitializers);
57781
+ __esDecorate$3(this, _private_emulateLocale_descriptor = { value: __setFunctionName$1(async function (client, localeState) {
57782
+ if (!localeState.active) {
57783
+ return;
57784
+ }
57785
+ await client.send('Emulation.setLocaleOverride', {
57786
+ locale: localeState.locale,
57787
+ });
57788
+ }, "#emulateLocale") }, _private_emulateLocale_decorators, { kind: "method", name: "#emulateLocale", static: false, private: true, access: { has: obj => #emulateLocale in obj, get: obj => obj.#emulateLocale }, metadata: _metadata }, null, _instanceExtraInitializers);
57741
57789
  __esDecorate$3(this, _private_emulateVisionDeficiency_descriptor = { value: __setFunctionName$1(async function (client, visionDeficiency) {
57742
57790
  if (!visionDeficiency.active) {
57743
57791
  return;
@@ -57821,6 +57869,9 @@ let EmulationManager = (() => {
57821
57869
  #timezoneState = new EmulatedState({
57822
57870
  active: false,
57823
57871
  }, this, this.#emulateTimezone);
57872
+ #localeState = new EmulatedState({
57873
+ active: false,
57874
+ }, this, this.#emulateLocale);
57824
57875
  #visionDeficiencyState = new EmulatedState({
57825
57876
  active: false,
57826
57877
  }, this, this.#emulateVisionDeficiency);
@@ -57867,7 +57918,7 @@ let EmulationManager = (() => {
57867
57918
  this.#secondaryClients.delete(client);
57868
57919
  });
57869
57920
  void Promise.all(this.#states.map(s => {
57870
- return s.sync().catch(debugError);
57921
+ return s.sync().catch(debugCatchError);
57871
57922
  }));
57872
57923
  }
57873
57924
  get javascriptEnabled() {
@@ -57908,6 +57959,13 @@ let EmulationManager = (() => {
57908
57959
  active: true,
57909
57960
  });
57910
57961
  }
57962
+ get #emulateLocale() { return _private_emulateLocale_descriptor.value; }
57963
+ async emulateLocale(locale) {
57964
+ await this.#localeState.setState({
57965
+ locale,
57966
+ active: true,
57967
+ });
57968
+ }
57911
57969
  get #emulateVisionDeficiency() { return _private_emulateVisionDeficiency_descriptor.value; }
57912
57970
  async emulateVisionDeficiency(type) {
57913
57971
  const visionDeficiencies = new Set([
@@ -58481,7 +58539,7 @@ async function releaseObject(client, remoteObject) {
58481
58539
  await client
58482
58540
  .send('Runtime.releaseObject', { objectId: remoteObject.objectId })
58483
58541
  .catch(error => {
58484
- debugError(error);
58542
+ debugError?.(error);
58485
58543
  });
58486
58544
  }
58487
58545
 
@@ -58581,7 +58639,7 @@ let CdpElementHandle = (() => {
58581
58639
  });
58582
58640
  }
58583
58641
  catch (error) {
58584
- debugError(error);
58642
+ debugError?.(error);
58585
58643
  await super.scrollIntoView();
58586
58644
  }
58587
58645
  }
@@ -58791,7 +58849,7 @@ let ExecutionContext$1 = class ExecutionContext extends EventEmitter {
58791
58849
  return;
58792
58850
  }
58793
58851
  }
58794
- debugError(error);
58852
+ debugError?.(error);
58795
58853
  }
58796
58854
  }
58797
58855
  catch (e_1) {
@@ -58827,7 +58885,7 @@ let ExecutionContext$1 = class ExecutionContext extends EventEmitter {
58827
58885
  await binding?.run(this, seq, args, isTrivial);
58828
58886
  }
58829
58887
  catch (err) {
58830
- debugError(err);
58888
+ debugError?.(err);
58831
58889
  }
58832
58890
  }
58833
58891
  get id() {
@@ -58867,7 +58925,7 @@ let ExecutionContext$1 = class ExecutionContext extends EventEmitter {
58867
58925
  await this.#addBinding(binding);
58868
58926
  }
58869
58927
  catch (err) {
58870
- debugError(err);
58928
+ debugError?.(err);
58871
58929
  }
58872
58930
  }
58873
58931
  async evaluate(pageFunction, ...args) {
@@ -59036,6 +59094,7 @@ class CdpWebWorker extends WebWorker$1 {
59036
59094
  #id;
59037
59095
  #targetType;
59038
59096
  #emitter;
59097
+ #workerLoaded = new Deferred();
59039
59098
  get internalEmitter() {
59040
59099
  return this.#emitter;
59041
59100
  }
@@ -59049,6 +59108,9 @@ class CdpWebWorker extends WebWorker$1 {
59049
59108
  this.#client.once('Runtime.executionContextCreated', async (event) => {
59050
59109
  this.#world.setContext(new ExecutionContext$1(client, event.context, this.#world));
59051
59110
  });
59111
+ this.#client.once('Inspector.workerScriptLoaded', () => {
59112
+ this.#workerLoaded.resolve();
59113
+ });
59052
59114
  this.#world.emitter.on('consoleapicalled', async (event) => {
59053
59115
  try {
59054
59116
  const values = event.args.map(arg => {
@@ -59058,7 +59120,7 @@ class CdpWebWorker extends WebWorker$1 {
59058
59120
  const noWorkerListeners = this.listenerCount(WebWorkerEvent.Console) === 0;
59059
59121
  if (noInternalListeners && noWorkerListeners) {
59060
59122
  for (const value of values) {
59061
- void value.dispose().catch(debugError);
59123
+ void value.dispose().catch(debugCatchError);
59062
59124
  }
59063
59125
  return;
59064
59126
  }
@@ -59069,15 +59131,17 @@ class CdpWebWorker extends WebWorker$1 {
59069
59131
  }
59070
59132
  }
59071
59133
  catch (err) {
59072
- debugError(err);
59134
+ debugError?.(err);
59073
59135
  }
59074
59136
  });
59075
59137
  this.#client.on('Runtime.exceptionThrown', exceptionThrown);
59076
59138
  this.#client.once(CDPSessionEvent.Disconnected, () => {
59077
59139
  this.#world.dispose();
59078
59140
  });
59079
- networkManager?.addClient(this.#client).catch(debugError);
59080
- this.#client.send('Runtime.enable').catch(debugError);
59141
+ networkManager
59142
+ ?.addClient(this.#client)
59143
+ .catch(debugCatchError ?? (() => { }));
59144
+ this.#client.send('Runtime.enable').catch(debugCatchError ?? (() => { }));
59081
59145
  }
59082
59146
  mainRealm() {
59083
59147
  return this.#world;
@@ -59108,6 +59172,14 @@ class CdpWebWorker extends WebWorker$1 {
59108
59172
  });
59109
59173
  }
59110
59174
  }
59175
+ async evaluate(func, ...args) {
59176
+ await this.#workerLoaded.valueOrThrow();
59177
+ return await super.evaluate(func, ...args);
59178
+ }
59179
+ async evaluateHandle(func, ...args) {
59180
+ await this.#workerLoaded.valueOrThrow();
59181
+ return await super.evaluateHandle(func, ...args);
59182
+ }
59111
59183
  }
59112
59184
 
59113
59185
  /**
@@ -59671,7 +59743,7 @@ let CdpFrame = (() => {
59671
59743
  this.#client.send('Runtime.addBinding', {
59672
59744
  name: CDP_BINDING_PREFIX + binding.name,
59673
59745
  }),
59674
- this.evaluate(binding.initSource).catch(debugError),
59746
+ this.evaluate(binding.initSource).catch(debugCatchError),
59675
59747
  ]);
59676
59748
  }
59677
59749
  async removeExposedFunctionBinding(binding) {
@@ -59684,7 +59756,7 @@ let CdpFrame = (() => {
59684
59756
  }),
59685
59757
  this.evaluate(name => {
59686
59758
  globalThis[name] = undefined;
59687
- }, binding.name).catch(debugError),
59759
+ }, binding.name).catch(debugCatchError),
59688
59760
  ]);
59689
59761
  }
59690
59762
  async waitForDevicePrompt(options = {}) {
@@ -59905,7 +59977,7 @@ class CdpHTTPRequest extends HTTPRequest {
59905
59977
  return result.postData;
59906
59978
  }
59907
59979
  catch (err) {
59908
- debugError(err);
59980
+ debugError?.(err);
59909
59981
  return;
59910
59982
  }
59911
59983
  }
@@ -60319,8 +60391,10 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60319
60391
  #userCacheDisabled;
60320
60392
  #emulatedNetworkConditions;
60321
60393
  #userAgent;
60394
+ #defaultUserAgent;
60322
60395
  #userAgentMetadata;
60323
60396
  #platform;
60397
+ #acceptLanguage;
60324
60398
  #handlers = [
60325
60399
  ['Fetch.requestPaused', this.#onRequestPaused],
60326
60400
  ['Fetch.authRequired', this.#onAuthRequired],
@@ -60335,10 +60409,11 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60335
60409
  ];
60336
60410
  #clients = new Map();
60337
60411
  #networkEnabled = true;
60338
- constructor(frameManager, networkEnabled) {
60412
+ constructor(frameManager, networkEnabled, defaultUserAgent) {
60339
60413
  super();
60340
60414
  this.#frameManager = frameManager;
60341
60415
  this.#networkEnabled = networkEnabled ?? true;
60416
+ this.#defaultUserAgent = defaultUserAgent;
60342
60417
  }
60343
60418
  #canIgnoreError(error) {
60344
60419
  return (isErrorLike$2(error) &&
@@ -60483,13 +60558,19 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60483
60558
  this.#platform = platform;
60484
60559
  await this.#applyToAllClients(this.#applyUserAgent.bind(this));
60485
60560
  }
60561
+ async setAcceptLanguage(acceptLanguage) {
60562
+ this.#acceptLanguage = acceptLanguage;
60563
+ await this.#applyToAllClients(this.#applyUserAgent.bind(this));
60564
+ }
60486
60565
  async #applyUserAgent(client) {
60487
- if (this.#userAgent === undefined) {
60566
+ const userAgent = this.#userAgent ?? this.#defaultUserAgent;
60567
+ if (userAgent === undefined) {
60488
60568
  return;
60489
60569
  }
60490
60570
  try {
60491
60571
  await client.send('Network.setUserAgentOverride', {
60492
- userAgent: this.#userAgent,
60572
+ userAgent,
60573
+ acceptLanguage: this.#acceptLanguage,
60493
60574
  userAgentMetadata: this.#userAgentMetadata,
60494
60575
  platform: this.#platform,
60495
60576
  });
@@ -60590,21 +60671,21 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60590
60671
  username: undefined,
60591
60672
  password: undefined,
60592
60673
  };
60593
- client
60674
+ void client
60594
60675
  .send('Fetch.continueWithAuth', {
60595
60676
  requestId: event.requestId,
60596
60677
  authChallengeResponse: { response, username, password },
60597
60678
  })
60598
- .catch(debugError);
60679
+ .catch(debugCatchError);
60599
60680
  }
60600
60681
  #onRequestPaused(client, event) {
60601
60682
  if (!this.#userRequestInterceptionEnabled &&
60602
60683
  this.#protocolRequestInterceptionEnabled) {
60603
- client
60684
+ void client
60604
60685
  .send('Fetch.continueRequest', {
60605
60686
  requestId: event.requestId,
60606
60687
  })
60607
- .catch(debugError);
60688
+ .catch(debugCatchError);
60608
60689
  }
60609
60690
  const { networkId: networkRequestId, requestId: fetchRequestId } = event;
60610
60691
  if (!networkRequestId) {
@@ -60706,7 +60787,7 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60706
60787
  request = this.#networkEventManager.getRequest(event.requestId);
60707
60788
  }
60708
60789
  if (!request) {
60709
- debugError(new Error(`Request ${event.requestId} was served from cache but we could not find the corresponding request object`));
60790
+ debugError?.(new Error(`Request ${event.requestId} was served from cache but we could not find the corresponding request object`));
60710
60791
  return;
60711
60792
  }
60712
60793
  this.emit(NetworkManagerEvent.RequestServedFromCache, request);
@@ -60727,7 +60808,7 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60727
60808
  }
60728
60809
  const extraInfos = this.#networkEventManager.responseExtraInfo(responseReceived.requestId);
60729
60810
  if (extraInfos.length) {
60730
- debugError(new Error('Unexpected extraInfo events for request ' +
60811
+ debugError?.(new Error('Unexpected extraInfo events for request ' +
60731
60812
  responseReceived.requestId));
60732
60813
  }
60733
60814
  if (responseReceived.response.fromDiskCache) {
@@ -60864,15 +60945,15 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
60864
60945
  get client() {
60865
60946
  return this.#client;
60866
60947
  }
60867
- constructor(client, page, timeoutSettings) {
60948
+ constructor(client, page, timeoutSettings, defaultUserAgent) {
60868
60949
  super();
60869
60950
  this.#client = client;
60870
60951
  this.#page = page;
60871
- this.#networkManager = new NetworkManager$2(this, page.browser().isNetworkEnabled());
60952
+ this.#networkManager = new NetworkManager$2(this, page.browser().isNetworkEnabled(), defaultUserAgent);
60872
60953
  this.#timeoutSettings = timeoutSettings;
60873
60954
  this.setupEventListeners(this.#client);
60874
60955
  client.once(CDPSessionEvent.Disconnected, () => {
60875
- this.#onClientDisconnect().catch(debugError);
60956
+ void this.#onClientDisconnect().catch(debugCatchError);
60876
60957
  });
60877
60958
  }
60878
60959
  async #onClientDisconnect() {
@@ -60913,7 +60994,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
60913
60994
  }
60914
60995
  this.setupEventListeners(client);
60915
60996
  client.once(CDPSessionEvent.Disconnected, () => {
60916
- this.#onClientDisconnect().catch(debugError);
60997
+ void this.#onClientDisconnect().catch(debugCatchError);
60917
60998
  });
60918
60999
  await this.initialize(client, frame);
60919
61000
  await this.#networkManager.addClient(client);
@@ -61051,7 +61132,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
61051
61132
  .send('Page.removeScriptToEvaluateOnNewDocument', {
61052
61133
  identifier,
61053
61134
  })
61054
- .catch(debugError);
61135
+ .catch(debugCatchError);
61055
61136
  }));
61056
61137
  }
61057
61138
  onAttachedToTarget(target) {
@@ -61063,7 +61144,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
61063
61144
  frame.updateClient(target._session());
61064
61145
  }
61065
61146
  this.setupEventListeners(target._session());
61066
- void this.initialize(target._session(), frame).catch(debugError);
61147
+ void this.initialize(target._session(), frame).catch(debugCatchError);
61067
61148
  }
61068
61149
  _deviceRequestPromptManager(client) {
61069
61150
  let manager = this.#deviceRequestPromptManagerMap.get(client);
@@ -61172,7 +61253,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
61172
61253
  worldName: name,
61173
61254
  grantUniveralAccess: true,
61174
61255
  })
61175
- .catch(debugError);
61256
+ .catch(debugCatchError);
61176
61257
  }));
61177
61258
  this.#isolatedWorlds.add(key);
61178
61259
  }
@@ -61232,7 +61313,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
61232
61313
  else if (this.#isExtensionOrigin(origin)) {
61233
61314
  const extId = this.#extractExtensionId(origin);
61234
61315
  if (!extId) {
61235
- debugError('Error while parsing extension id');
61316
+ debugError?.('Error while parsing extension id');
61236
61317
  return;
61237
61318
  }
61238
61319
  if (frame.extensionWorlds[extId]) {
@@ -62270,7 +62351,7 @@ class WebMCPToolCall {
62270
62351
  }
62271
62352
  catch (error) {
62272
62353
  this.input = {};
62273
- debugError(error);
62354
+ debugError?.(error);
62274
62355
  }
62275
62356
  }
62276
62357
  }
@@ -62289,6 +62370,7 @@ class WebMCP extends EventEmitter {
62289
62370
  const frameTools = this.#tools.get(tool.frameId) ?? new Map();
62290
62371
  if (!this.#tools.has(tool.frameId)) {
62291
62372
  this.#tools.set(tool.frameId, frameTools);
62373
+ this.#listenToContextDestroyed(frame);
62292
62374
  }
62293
62375
  const addedTool = new WebMCPTool(this, tool, frame);
62294
62376
  frameTools.set(tool.name, addedTool);
@@ -62332,7 +62414,7 @@ class WebMCP extends EventEmitter {
62332
62414
  };
62333
62415
  this.emit('toolresponded', response);
62334
62416
  };
62335
- #onFrameNavigated = (frame) => {
62417
+ #onContextDisposed = (frame) => {
62336
62418
  this.#pendingCalls.clear();
62337
62419
  const frameTools = this.#tools.get(frame._id);
62338
62420
  if (!frameTools) {
@@ -62344,15 +62426,19 @@ class WebMCP extends EventEmitter {
62344
62426
  this.emit('toolsremoved', { tools });
62345
62427
  }
62346
62428
  };
62429
+ #listenToContextDestroyed(frame) {
62430
+ frame.mainRealm().context?.once('disposed', () => {
62431
+ this.#onContextDisposed(frame);
62432
+ });
62433
+ }
62347
62434
  constructor(client, frameManager) {
62348
62435
  super();
62349
62436
  this.#client = client;
62350
62437
  this.#frameManager = frameManager;
62351
- this.#frameManager.on(FrameManagerEvent.FrameNavigated, this.#onFrameNavigated);
62352
62438
  this.#bindListeners();
62353
62439
  }
62354
62440
  async initialize() {
62355
- return await this.#client.send('WebMCP.enable').catch(debugError);
62441
+ return await this.#client.send('WebMCP.enable').catch(debugCatchError);
62356
62442
  }
62357
62443
  async invokeTool(tool, input) {
62358
62444
  return await this.#client.send('WebMCP.invokeTool', {
@@ -62451,7 +62537,7 @@ function convertSameSiteFromPuppeteerToCdp(sameSite) {
62451
62537
  }
62452
62538
  class CdpPage extends Page {
62453
62539
  static async _create(client, target, defaultViewport) {
62454
- const page = new CdpPage(client, target);
62540
+ const page = new CdpPage(client, target, await target.browser().userAgent());
62455
62541
  await page.#initialize();
62456
62542
  if (defaultViewport) {
62457
62543
  try {
@@ -62459,7 +62545,7 @@ class CdpPage extends Page {
62459
62545
  }
62460
62546
  catch (err) {
62461
62547
  if (isErrorLike$2(err) && isTargetClosedError(err)) {
62462
- debugError(err);
62548
+ debugError?.(err);
62463
62549
  }
62464
62550
  else {
62465
62551
  throw err;
@@ -62491,7 +62577,7 @@ class CdpPage extends Page {
62491
62577
  #sessionCloseDeferred = Deferred.create();
62492
62578
  #serviceWorkerBypassed = false;
62493
62579
  #userDragInterceptionEnabled = false;
62494
- constructor(client, target) {
62580
+ constructor(client, target, defaultUserAgent) {
62495
62581
  super();
62496
62582
  this.#primaryTargetClient = client;
62497
62583
  this.#tabTargetClient = client.parentSession();
@@ -62504,7 +62590,7 @@ class CdpPage extends Page {
62504
62590
  this.#keyboard = new CdpKeyboard(client);
62505
62591
  this.#mouse = new CdpMouse(client, this.#keyboard);
62506
62592
  this.#touchscreen = new CdpTouchscreen(client, this.#keyboard);
62507
- this.#frameManager = new FrameManager$1(client, this, this._timeoutSettings);
62593
+ this.#frameManager = new FrameManager$1(client, this, this._timeoutSettings, defaultUserAgent);
62508
62594
  this.#emulationManager = new EmulationManager(client);
62509
62595
  this.#tracing = new Tracing(client);
62510
62596
  this.#webmcp = new WebMCP(client, this.#frameManager);
@@ -62546,14 +62632,14 @@ class CdpPage extends Page {
62546
62632
  this.#tabTargetClient.on(CDPSessionEvent.Swapped, this.#onActivation.bind(this));
62547
62633
  this.#tabTargetClient.on(CDPSessionEvent.Ready, this.#onSecondaryTarget.bind(this));
62548
62634
  this.#targetManager.on("targetGone" , this.#onDetachedFromTarget);
62549
- this.#tabTarget._isClosedDeferred
62635
+ void this.#tabTarget._isClosedDeferred
62550
62636
  .valueOrThrow()
62551
62637
  .then(() => {
62552
62638
  this.#targetManager.off("targetGone" , this.#onDetachedFromTarget);
62553
62639
  this.emit("close" , undefined);
62554
62640
  this.#closed = true;
62555
62641
  })
62556
- .catch(debugError);
62642
+ .catch(debugCatchError);
62557
62643
  this.#setupPrimaryTargetListeners();
62558
62644
  this.#attachExistingTargets();
62559
62645
  }
@@ -62595,10 +62681,12 @@ class CdpPage extends Page {
62595
62681
  if (session.target()._subtype() !== 'prerender') {
62596
62682
  return;
62597
62683
  }
62598
- this.#frameManager.registerSpeculativeSession(session).catch(debugError);
62599
- this.#emulationManager
62684
+ void this.#frameManager
62600
62685
  .registerSpeculativeSession(session)
62601
- .catch(debugError);
62686
+ .catch(debugCatchError);
62687
+ void this.#emulationManager
62688
+ .registerSpeculativeSession(session)
62689
+ .catch(debugCatchError);
62602
62690
  }
62603
62691
  #setupPrimaryTargetListeners() {
62604
62692
  const clientEmitter = new EventEmitter(this.#primaryTargetClient);
@@ -62639,7 +62727,7 @@ class CdpPage extends Page {
62639
62727
  const noListenersForConsoleOnWorker = worker.listenerCount(WebWorkerEvent.Console) === 0;
62640
62728
  if (noListenersForConsoleOnPage && noListenersForConsoleOnWorker) {
62641
62729
  for (const arg of message.args()) {
62642
- void arg.dispose().catch(debugError);
62730
+ void arg.dispose().catch(debugCatchError);
62643
62731
  }
62644
62732
  return;
62645
62733
  }
@@ -62662,7 +62750,7 @@ class CdpPage extends Page {
62662
62750
  }
62663
62751
  catch (err) {
62664
62752
  if (isErrorLike$2(err) && isTargetClosedError(err)) {
62665
- debugError(err);
62753
+ debugError?.(err);
62666
62754
  }
62667
62755
  else {
62668
62756
  throw err;
@@ -63037,7 +63125,7 @@ class CdpPage extends Page {
63037
63125
  if (!hasPageConsoleListeners) {
63038
63126
  if (!hasWorkerConsoleListeners) {
63039
63127
  for (const value of values) {
63040
- void value.dispose().catch(debugError);
63128
+ void value.dispose().catch(debugCatchError);
63041
63129
  }
63042
63130
  }
63043
63131
  return;
@@ -63131,6 +63219,10 @@ class CdpPage extends Page {
63131
63219
  async emulateTimezone(timezoneId) {
63132
63220
  return await this.#emulationManager.emulateTimezone(timezoneId);
63133
63221
  }
63222
+ async emulateLocale(locale) {
63223
+ await this.#emulationManager.emulateLocale(locale);
63224
+ await this.#frameManager.networkManager.setAcceptLanguage(locale);
63225
+ }
63134
63226
  async emulateIdleState(overrides) {
63135
63227
  return await this.#emulationManager.emulateIdleState(overrides);
63136
63228
  }
@@ -63167,7 +63259,7 @@ class CdpPage extends Page {
63167
63259
  stack.defer(async () => {
63168
63260
  await this.#emulationManager
63169
63261
  .resetDefaultBackgroundColor()
63170
- .catch(debugError);
63262
+ .catch(debugCatchError);
63171
63263
  });
63172
63264
  }
63173
63265
  let clip = userClip;
@@ -63524,23 +63616,21 @@ class CdpExtension extends Extension {
63524
63616
  return (target.type() === 'service_worker' &&
63525
63617
  targetUrl.startsWith('chrome-extension://' + this.id));
63526
63618
  });
63527
- const workers = [];
63528
- for (const target of extensionWorkers) {
63619
+ const workers = await Promise.all(extensionWorkers.map(async (target) => {
63529
63620
  try {
63530
- const worker = await target.worker();
63531
- if (worker) {
63532
- workers.push(worker);
63533
- }
63621
+ return await target.worker();
63534
63622
  }
63535
63623
  catch (err) {
63536
63624
  if (this.#canIgnoreError(err)) {
63537
- debugError(err);
63538
- continue;
63625
+ debugError?.(err);
63626
+ return null;
63539
63627
  }
63540
63628
  throw err;
63541
63629
  }
63542
- }
63543
- return workers;
63630
+ }));
63631
+ return workers.filter((worker) => {
63632
+ return worker !== null;
63633
+ });
63544
63634
  }
63545
63635
  async pages() {
63546
63636
  const targets = this.#browser.targets();
@@ -63555,7 +63645,7 @@ class CdpExtension extends Extension {
63555
63645
  }
63556
63646
  catch (err) {
63557
63647
  if (this.#canIgnoreError(err)) {
63558
- debugError(err);
63648
+ debugError?.(err);
63559
63649
  return null;
63560
63650
  }
63561
63651
  throw err;
@@ -63738,7 +63828,7 @@ class PageTarget extends CdpTarget {
63738
63828
  this.#defaultViewport = defaultViewport ?? undefined;
63739
63829
  }
63740
63830
  _initialize() {
63741
- this._initializedDeferred
63831
+ void this._initializedDeferred
63742
63832
  .valueOrThrow()
63743
63833
  .then(async (result) => {
63744
63834
  if (result === InitializationStatus.ABORTED) {
@@ -63759,7 +63849,7 @@ class PageTarget extends CdpTarget {
63759
63849
  openerPage.emit("popup" , popupPage);
63760
63850
  return true;
63761
63851
  })
63762
- .catch(debugError);
63852
+ .catch(debugCatchError);
63763
63853
  this._checkIfInitialized();
63764
63854
  }
63765
63855
  async page() {
@@ -64701,12 +64791,14 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64701
64791
  }
64702
64792
  }
64703
64793
  #silentDetach = async (session, parentSession) => {
64704
- await session.send('Runtime.runIfWaitingForDebugger').catch(debugError);
64794
+ await session
64795
+ .send('Runtime.runIfWaitingForDebugger')
64796
+ .catch(debugCatchError);
64705
64797
  await parentSession
64706
64798
  .send('Target.detachFromTarget', {
64707
64799
  sessionId: session.id(),
64708
64800
  })
64709
- .catch(debugError);
64801
+ .catch(debugCatchError);
64710
64802
  };
64711
64803
  #getParentTarget = (parentSession) => {
64712
64804
  return parentSession instanceof CdpCDPSession
@@ -64773,6 +64865,7 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64773
64865
  throw new Error(`Session ${event.sessionId} was not created.`);
64774
64866
  }
64775
64867
  if (!this.#connection.isAutoAttached(targetInfo.targetId)) {
64868
+ await this.#maybeSetupNetworkConditions(session, targetInfo);
64776
64869
  return;
64777
64870
  }
64778
64871
  if (!this.#initialAttachDone && !this.isUrlAllowed(targetInfo.url)) {
@@ -64780,6 +64873,13 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64780
64873
  return;
64781
64874
  }
64782
64875
  if (targetInfo.type === 'service_worker') {
64876
+ if (!this.isUrlAllowed(targetInfo.url)) {
64877
+ await Promise.all([
64878
+ this.#maybeSetupNetworkConditions(session, targetInfo),
64879
+ session.send('Runtime.runIfWaitingForDebugger'),
64880
+ ]).catch(debugCatchError);
64881
+ return;
64882
+ }
64783
64883
  await this.#silentDetach(session, parentSession);
64784
64884
  if (this.#attachedTargetsByTargetId.has(targetInfo.targetId) ||
64785
64885
  this.#ignoredTargets.has(targetInfo.targetId) ||
@@ -64836,9 +64936,9 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64836
64936
  autoAttach: true,
64837
64937
  filter: this.#discoveryFilter,
64838
64938
  }),
64839
- this.#maybeSetupNetworkConditions(session),
64939
+ this.#maybeSetupNetworkConditions(session, targetInfo),
64840
64940
  session.send('Runtime.runIfWaitingForDebugger'),
64841
- ]).catch(debugError);
64941
+ ]).catch(debugCatchError);
64842
64942
  };
64843
64943
  #finishInitializationIfReady(targetId) {
64844
64944
  if (targetId !== undefined) {
@@ -64892,7 +64992,7 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64892
64992
  }
64893
64993
  return result;
64894
64994
  }
64895
- #maybeSetupNetworkConditions = async (session) => {
64995
+ #maybeSetupNetworkConditions = async (session, targetInfo) => {
64896
64996
  if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {
64897
64997
  return;
64898
64998
  }
@@ -64924,10 +65024,18 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64924
65024
  uploadThroughput: -1,
64925
65025
  });
64926
65026
  }
64927
- await session.send('Network.emulateNetworkConditionsByRule', {
65027
+ const needsNetwork = targetInfo.type === 'worker' ||
65028
+ targetInfo.type === 'service_worker' ||
65029
+ targetInfo.type === 'shared_worker';
65030
+ const promises = [];
65031
+ if (needsNetwork) {
65032
+ promises.push(session.send('Network.enable'));
65033
+ }
65034
+ promises.push(session.send('Network.emulateNetworkConditionsByRule', {
64928
65035
  offline: this.#blocklist.length > 0 ? true : undefined,
64929
65036
  matchedNetworkConditions,
64930
- });
65037
+ }));
65038
+ await Promise.all(promises).catch(debugCatchError);
64931
65039
  };
64932
65040
  };
64933
65041
 
@@ -65312,7 +65420,7 @@ async function _connectToCdpBrowser(connectionTransport, url, options) {
65312
65420
  false, idGenerator);
65313
65421
  const { browserContextIds } = await connection.send('Target.getBrowserContexts');
65314
65422
  const browser = await CdpBrowser._create(connection, browserContextIds, acceptInsecureCerts, defaultViewport, downloadBehavior, undefined, () => {
65315
- return connection.send('Browser.close').catch(debugError);
65423
+ return connection.send('Browser.close').catch(debugCatchError);
65316
65424
  }, targetFilter, isPageTarget, undefined, networkEnabled, issuesEnabled, handleDevToolsAsPage, blocklist, allowlist);
65317
65425
  return browser;
65318
65426
  }
@@ -65370,7 +65478,7 @@ class BrowserWebSocketTransport {
65370
65478
  this.onclose.call(null);
65371
65479
  }
65372
65480
  });
65373
- this.#ws.addEventListener('error', debugError);
65481
+ this.#ws.addEventListener('error', debugCatchError);
65374
65482
  }
65375
65483
  send(message) {
65376
65484
  this.#ws.send(message);
@@ -67002,7 +67110,9 @@ async function getBiDiConnection(connectionTransport, url, options) {
67002
67110
  return {
67003
67111
  bidiConnection: pureBidiConnection,
67004
67112
  closeCallback: async () => {
67005
- await pureBidiConnection.send('browser.close', {}).catch(debugError);
67113
+ await pureBidiConnection
67114
+ .send('browser.close', {})
67115
+ .catch(debugCatchError);
67006
67116
  },
67007
67117
  };
67008
67118
  }
@@ -67024,7 +67134,7 @@ async function getBiDiConnection(connectionTransport, url, options) {
67024
67134
  cdpConnection,
67025
67135
  bidiConnection: bidiOverCdpConnection,
67026
67136
  closeCallback: async () => {
67027
- await cdpConnection.send('Browser.close').catch(debugError);
67137
+ await cdpConnection.send('Browser.close').catch(debugCatchError);
67028
67138
  },
67029
67139
  };
67030
67140
  }
@@ -67048,6 +67158,16 @@ function assertSupportedUrlRestrictions(options) {
67048
67158
  (options.blocklist || options.allowlist)) {
67049
67159
  throw new Error('blocklist and allowlist are only supported with the CDP protocol');
67050
67160
  }
67161
+ if (options.blocklist) {
67162
+ for (const rule of options.blocklist) {
67163
+ new Y$1(rule);
67164
+ }
67165
+ }
67166
+ if (options.allowlist) {
67167
+ for (const rule of options.allowlist) {
67168
+ new Y$1(rule);
67169
+ }
67170
+ }
67051
67171
  }
67052
67172
  async function _connectToBrowser(options) {
67053
67173
  assertSupportedUrlRestrictions(options);
@@ -67189,9 +67309,9 @@ class Puppeteer {
67189
67309
  * SPDX-License-Identifier: Apache-2.0
67190
67310
  */
67191
67311
  const PUPPETEER_REVISIONS = Object.freeze({
67192
- chrome: '149.0.7827.22',
67193
- 'chrome-headless-shell': '149.0.7827.22',
67194
- firefox: 'stable_151.0',
67312
+ chrome: '150.0.7871.24',
67313
+ 'chrome-headless-shell': '150.0.7871.24',
67314
+ firefox: 'stable_152.0.1',
67195
67315
  });
67196
67316
 
67197
67317
  /**
@@ -71989,7 +72109,7 @@ class NodeWebSocketTransport {
71989
72109
  this.onclose.call(null);
71990
72110
  }
71991
72111
  });
71992
- this.#ws.addEventListener('error', debugError);
72112
+ this.#ws.addEventListener('error', debugCatchError);
71993
72113
  }
71994
72114
  send(message) {
71995
72115
  this.#ws.send(message);
@@ -72023,10 +72143,10 @@ class PipeTransport {
72023
72143
  this.onclose.call(null);
72024
72144
  }
72025
72145
  });
72026
- pipeReadEmitter.on('error', debugError);
72146
+ pipeReadEmitter.on('error', debugCatchError);
72027
72147
  const pipeWriteEmitter = this.#subscriptions.use(
72028
72148
  new EventEmitter(pipeWrite));
72029
- pipeWriteEmitter.on('error', debugError);
72149
+ pipeWriteEmitter.on('error', debugCatchError);
72030
72150
  }
72031
72151
  send(message) {
72032
72152
  assert(!this.#isClosed, '`PipeTransport` is closed.');
@@ -72070,6 +72190,15 @@ class PipeTransport {
72070
72190
  * Copyright 2017 Google Inc.
72071
72191
  * SPDX-License-Identifier: Apache-2.0
72072
72192
  */
72193
+ function getBrowserTypeDisplayName(browserType) {
72194
+ switch (browserType) {
72195
+ case Browser.FIREFOX:
72196
+ case Browser.CHROME:
72197
+ return browserType.charAt(0).toUpperCase() + browserType.slice(1);
72198
+ default:
72199
+ return browserType;
72200
+ }
72201
+ }
72073
72202
  class BrowserLauncher {
72074
72203
  #browser;
72075
72204
  puppeteer;
@@ -72193,9 +72322,6 @@ class BrowserLauncher {
72193
72322
  throw error;
72194
72323
  }
72195
72324
  if (Array.isArray(enableExtensions)) {
72196
- if (this.#browser === 'chrome' && !usePipe) {
72197
- throw new Error('To use `enableExtensions` with a list of paths in Chrome, you must be connected with `--remote-debugging-pipe` (`pipe: true`).');
72198
- }
72199
72325
  await Promise.all([
72200
72326
  enableExtensions.map(path => {
72201
72327
  return browser.installExtension(path);
@@ -72214,7 +72340,7 @@ class BrowserLauncher {
72214
72340
  await browserProcess.hasClosed();
72215
72341
  }
72216
72342
  catch (error) {
72217
- debugError(error);
72343
+ debugError?.(error);
72218
72344
  await browserProcess.close();
72219
72345
  }
72220
72346
  }
@@ -72315,18 +72441,10 @@ class BrowserLauncher {
72315
72441
  if (configVersion) {
72316
72442
  throw new Error(`Tried to find the browser at the configured path (${executablePath}) for version ${configVersion}, but no executable was found.`);
72317
72443
  }
72318
- switch (this.browser) {
72319
- case 'chrome':
72320
- throw new Error(`Could not find Chrome (ver. ${browserVersion}). This can occur if either\n` +
72321
- ` 1. you did not perform an installation before running the script (e.g. \`npx puppeteer browsers install ${browserType}\`) or\n` +
72322
- ` 2. your cache path is incorrectly configured (which is: ${config.cacheDirectory}).\n` +
72323
- 'For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.');
72324
- case 'firefox':
72325
- throw new Error(`Could not find Firefox (rev. ${browserVersion}). This can occur if either\n` +
72326
- ' 1. you did not perform an installation for Firefox before running the script (e.g. `npx puppeteer browsers install firefox`) or\n' +
72327
- ` 2. your cache path is incorrectly configured (which is: ${config.cacheDirectory}).\n` +
72328
- 'For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.');
72329
- }
72444
+ throw new Error(`Could not find ${getBrowserTypeDisplayName(browserType)} (ver. ${browserVersion}). This can occur if either\n` +
72445
+ ` 1. you did not perform an installation before running the script (e.g. \`npx puppeteer browsers install ${browserType}\`) or\n` +
72446
+ ` 2. your cache path is incorrectly configured (which is: ${config.cacheDirectory}).\n` +
72447
+ 'For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.');
72330
72448
  }
72331
72449
  return executablePath;
72332
72450
  }
@@ -72423,16 +72541,21 @@ class ChromeLauncher extends BrowserLauncher {
72423
72541
  }
72424
72542
  }
72425
72543
  let isTempUserDataDir = false;
72426
- let userDataDirIndex = chromeArguments.findIndex(arg => {
72544
+ const userDataDirIndex = chromeArguments.findIndex(arg => {
72427
72545
  return arg.startsWith('--user-data-dir');
72428
72546
  });
72547
+ let userDataDir;
72429
72548
  if (userDataDirIndex < 0) {
72430
72549
  isTempUserDataDir = true;
72431
- chromeArguments.push(`--user-data-dir=${await mkdtemp(await this.getProfilePath())}`);
72432
- userDataDirIndex = chromeArguments.length - 1;
72550
+ const profilePath = await this.getProfilePath();
72551
+ userDataDir = await mkdtemp(profilePath);
72552
+ chromeArguments.push(`--user-data-dir=${userDataDir}`);
72553
+ }
72554
+ else {
72555
+ const parsedUserDataDir = chromeArguments[userDataDirIndex].split('=', 2)[1];
72556
+ assert(typeof parsedUserDataDir === 'string', '`--user-data-dir` is malformed');
72557
+ userDataDir = parsedUserDataDir;
72433
72558
  }
72434
- const userDataDir = chromeArguments[userDataDirIndex].split('=', 2)[1];
72435
- assert(typeof userDataDir === 'string', '`--user-data-dir` is malformed');
72436
72559
  let chromeExecutable = executablePath;
72437
72560
  if (!chromeExecutable) {
72438
72561
  assert(channel || !this.puppeteer._isPuppeteerCore, `An \`executablePath\` or \`channel\` must be specified for \`puppeteer-core\``);
@@ -72453,7 +72576,7 @@ class ChromeLauncher extends BrowserLauncher {
72453
72576
  await rm(path);
72454
72577
  }
72455
72578
  catch (error) {
72456
- debugError(error);
72579
+ debugError?.(error);
72457
72580
  throw error;
72458
72581
  }
72459
72582
  }
@@ -72540,9 +72663,9 @@ class ChromeLauncher extends BrowserLauncher {
72540
72663
  if (headless) {
72541
72664
  chromeArguments.push(headless === 'shell' ? '--headless' : '--headless=new', '--hide-scrollbars', '--mute-audio');
72542
72665
  }
72543
- chromeArguments.push(enableExtensions
72544
- ? '--enable-unsafe-extension-debugging'
72545
- : '--disable-extensions');
72666
+ if (!enableExtensions) {
72667
+ chromeArguments.push('--disable-extensions');
72668
+ }
72546
72669
  if (args.every(arg => {
72547
72670
  return arg.startsWith('-');
72548
72671
  })) {
@@ -72676,7 +72799,7 @@ class FirefoxLauncher extends BrowserLauncher {
72676
72799
  await rm(userDataDir);
72677
72800
  }
72678
72801
  catch (error) {
72679
- debugError(error);
72802
+ debugError?.(error);
72680
72803
  throw error;
72681
72804
  }
72682
72805
  }
@@ -72699,7 +72822,7 @@ class FirefoxLauncher extends BrowserLauncher {
72699
72822
  }
72700
72823
  }
72701
72824
  catch (error) {
72702
- debugError(error);
72825
+ debugError?.(error);
72703
72826
  }
72704
72827
  }
72705
72828
  }
@@ -72913,6 +73036,11 @@ var __setFunctionName = (undefined && undefined.__setFunctionName) || function (
72913
73036
  const CRF_VALUE = 30;
72914
73037
  const DEFAULT_FPS = 30;
72915
73038
  const debugFfmpeg = debug$1('puppeteer:ffmpeg');
73039
+ function countFrames(startTimestamp, previousTimestamp, timestamp, fps) {
73040
+ const end = Math.round((timestamp - startTimestamp) * fps);
73041
+ const start = Math.round((previousTimestamp - startTimestamp) * fps);
73042
+ return Math.max(0, end - start);
73043
+ }
72916
73044
  let ScreenRecorder = (() => {
72917
73045
  let _classSuper = PassThrough;
72918
73046
  let _instanceExtraInitializers = [];
@@ -72988,10 +73116,9 @@ let ScreenRecorder = (() => {
72988
73116
  '-fflags',
72989
73117
  'nobuffer',
72990
73118
  ],
72991
- ['-f', 'image2pipe', '-vcodec', 'png', '-i', 'pipe:0'],
73119
+ ['-framerate', `${fps}`, '-f', 'image2pipe', '-vcodec', 'png', '-i', 'pipe:0'],
72992
73120
  ['-an'],
72993
73121
  ['-threads', '1'],
72994
- ['-framerate', `${fps}`],
72995
73122
  ['-b:v', '0'],
72996
73123
  formatArgs,
72997
73124
  ['-vf', filters.join()],
@@ -73000,13 +73127,14 @@ let ScreenRecorder = (() => {
73000
73127
  ].flat(), { stdio: ['pipe', 'pipe', 'pipe'] });
73001
73128
  this.#process.stdout.pipe(this);
73002
73129
  this.#process.stderr.on('data', (data) => {
73003
- debugFfmpeg(data.toString('utf8'));
73130
+ debugFfmpeg?.(data.toString('utf8'));
73004
73131
  });
73005
73132
  this.#page = page;
73006
73133
  const { client } = this.#page.mainFrame();
73007
73134
  client.once(CDPSessionEvent.Disconnected, () => {
73008
- void this.stop().catch(debugError);
73135
+ void this.stop().catch(debugCatchError);
73009
73136
  });
73137
+ let startTimestamp;
73010
73138
  this.#lastFrame = lastValueFrom(fromEmitterEvent(client, 'Page.screencastFrame').pipe(tap(event => {
73011
73139
  void client.send('Page.screencastFrameAck', {
73012
73140
  sessionId: event.sessionId,
@@ -73019,7 +73147,8 @@ let ScreenRecorder = (() => {
73019
73147
  timestamp: event.metadata.timestamp,
73020
73148
  };
73021
73149
  }), bufferCount(2, 1), concatMap(([{ timestamp: previousTimestamp, buffer }, { timestamp }]) => {
73022
- return from(Array(Math.round(fps * Math.max(timestamp - previousTimestamp, 0))).fill(buffer));
73150
+ startTimestamp ??= previousTimestamp;
73151
+ return from(Array(countFrames(startTimestamp, previousTimestamp, timestamp, fps)).fill(buffer));
73023
73152
  }), map(buffer => {
73024
73153
  void this.#writeFrame(buffer);
73025
73154
  return [buffer, performance.now()];
@@ -73072,7 +73201,7 @@ let ScreenRecorder = (() => {
73072
73201
  if (this.#controller.signal.aborted) {
73073
73202
  return;
73074
73203
  }
73075
- await this.#page._stopScreencast().catch(debugError);
73204
+ await this.#page._stopScreencast().catch(debugCatchError);
73076
73205
  this.#controller.abort();
73077
73206
  const [buffer, timestamp] = await this.#lastFrame;
73078
73207
  await Promise.all(Array(Math.max(1, Math.round((this.#fps * (performance.now() - timestamp)) / 1000)))
@@ -73095,11 +73224,7 @@ let ScreenRecorder = (() => {
73095
73224
  * Copyright 2017 Google Inc.
73096
73225
  * SPDX-License-Identifier: Apache-2.0
73097
73226
  */
73098
- environment.value = {
73099
- fs,
73100
- path,
73101
- ScreenRecorder: ScreenRecorder,
73102
- };
73227
+ environment.value.ScreenRecorder = ScreenRecorder;
73103
73228
  const puppeteer = new PuppeteerNode({
73104
73229
  isPuppeteerCore: true,
73105
73230
  });
@@ -73114,7 +73239,7 @@ const DELIMITERS = {
73114
73239
  comma: ","};
73115
73240
  const DEFAULT_DELIMITER = DELIMITERS.comma;
73116
73241
  function escapeString(value) {
73117
- return value.replace(/\\/g, `\\\\`).replace(/"/g, `\\"`).replace(/\n/g, `\\n`).replace(/\r/g, `\\r`).replace(/\t/g, `\\t`);
73242
+ return value.replace(/\\/g, `\\\\`).replace(/"/g, `\\"`).replace(/\n/g, `\\n`).replace(/\r/g, `\\r`).replace(/\t/g, `\\t`).replace(/[\u0000-\u001F]/g, (c) => `\\u${c.charCodeAt(0).toString(16).padStart(4, "0")}`);
73118
73243
  }
73119
73244
  function isBooleanOrNullLiteral(token) {
73120
73245
  return token === "true" || token === "false" || token === "null";
@@ -73187,7 +73312,7 @@ function isSafeUnquoted(value, delimiter = DEFAULT_DELIMITER) {
73187
73312
  if (value.includes(":")) return false;
73188
73313
  if (value.includes("\"") || value.includes("\\")) return false;
73189
73314
  if (/[[\]{}]/.test(value)) return false;
73190
- if (/[\n\r\t]/.test(value)) return false;
73315
+ if (/[\u0000-\u001F]/.test(value)) return false;
73191
73316
  if (value.includes(delimiter)) return false;
73192
73317
  if (value.startsWith("-")) return false;
73193
73318
  return true;
@@ -73323,10 +73448,7 @@ function* encodeKeyValuePairLines(key, value, depth, options, siblings, rootLite
73323
73448
  }
73324
73449
  function* encodeArrayLines(key, value, depth, options) {
73325
73450
  if (value.length === 0) {
73326
- yield indentedLine(depth, formatHeader(0, {
73327
- key,
73328
- delimiter: options.delimiter
73329
- }), options.indent);
73451
+ yield indentedLine(depth, key != null ? `${encodeKey(key)}: []` : "[]", options.indent);
73330
73452
  return;
73331
73453
  }
73332
73454
  if (isArrayOfPrimitives(value)) {
@@ -73424,7 +73546,7 @@ function* encodeObjectAsListItemLines(obj, depth, options) {
73424
73546
  }
73425
73547
  const encodedKey = encodeKey(firstKey);
73426
73548
  if (isJsonPrimitive(firstValue)) yield indentedListItem(depth, `${encodedKey}: ${encodePrimitive(firstValue, options.delimiter)}`, options.indent);
73427
- else if (isJsonArray(firstValue)) if (firstValue.length === 0) yield indentedListItem(depth, `${encodedKey}${formatHeader(0, { delimiter: options.delimiter })}`, options.indent);
73549
+ else if (isJsonArray(firstValue)) if (firstValue.length === 0) yield indentedListItem(depth, `${encodedKey}: []`, options.indent);
73428
73550
  else if (isArrayOfPrimitives(firstValue)) yield indentedListItem(depth, `${encodedKey}${encodeInlineArrayLine(firstValue, options.delimiter)}`, options.indent);
73429
73551
  else {
73430
73552
  yield indentedListItem(depth, `${encodedKey}${formatHeader(firstValue.length, { delimiter: options.delimiter })}`, options.indent);
@@ -76810,7 +76932,6 @@ var ExperimentName;
76810
76932
  ExperimentName["ALL"] = "*";
76811
76933
  ExperimentName["PROTOCOL_MONITOR"] = "protocol-monitor";
76812
76934
  ExperimentName["INSTRUMENTATION_BREAKPOINTS"] = "instrumentation-breakpoints";
76813
- ExperimentName["USE_SOURCE_MAP_SCOPES"] = "use-source-map-scopes";
76814
76935
  ExperimentName["DURABLE_MESSAGES"] = "durable-messages";
76815
76936
  ExperimentName["JPEG_XL"] = "jpeg-xl";
76816
76937
  ExperimentName["PLUS_BUTTON"] = "plus-button";
@@ -79332,6 +79453,9 @@ const debounce = function (func, delay) {
79332
79453
  clearTimeout(timer);
79333
79454
  timer = setTimeout(() => func(...args), testDebounceOverride ? 0 : delay);
79334
79455
  };
79456
+ debounced.cancel = () => {
79457
+ clearTimeout(timer);
79458
+ };
79335
79459
  return debounced;
79336
79460
  };
79337
79461
  let testDebounceOverride = false;
@@ -83483,6 +83607,7 @@ var ClientFeature;
83483
83607
  ClientFeature[ClientFeature["CHROME_ACCESSIBILITY_AGENT"] = 26] = "CHROME_ACCESSIBILITY_AGENT";
83484
83608
  ClientFeature[ClientFeature["CHROME_CONVERSATION_SUMMARY_AGENT"] = 27] = "CHROME_CONVERSATION_SUMMARY_AGENT";
83485
83609
  ClientFeature[ClientFeature["CHROME_STORAGE_AGENT"] = 28] = "CHROME_STORAGE_AGENT";
83610
+ ClientFeature[ClientFeature["CHROME_DEVTOOLS_V2_AGENT"] = 29] = "CHROME_DEVTOOLS_V2_AGENT";
83486
83611
  })(ClientFeature || (ClientFeature = {}));
83487
83612
  var UserTier;
83488
83613
  (function (UserTier) {
@@ -85996,7 +86121,9 @@ var Action;
85996
86121
  Action[Action["AiCodeGenerationRequestTriggeredFromSources"] = 205] = "AiCodeGenerationRequestTriggeredFromSources";
85997
86122
  Action[Action["AiCodeCompletionFreCompletedFromConsole"] = 206] = "AiCodeCompletionFreCompletedFromConsole";
85998
86123
  Action[Action["AiCodeCompletionFreCompletedFromSources"] = 207] = "AiCodeCompletionFreCompletedFromSources";
85999
- Action[Action["MAX_VALUE"] = 208] = "MAX_VALUE";
86124
+ Action[Action["AiAssistanceOpenedFromApplicationPanelFloatingButton"] = 208] = "AiAssistanceOpenedFromApplicationPanelFloatingButton";
86125
+ Action[Action["AiAssistanceOpenedFromApplicationPanel"] = 209] = "AiAssistanceOpenedFromApplicationPanel";
86126
+ Action[Action["MAX_VALUE"] = 210] = "MAX_VALUE";
86000
86127
  })(Action || (Action = {}));
86001
86128
  var PanelCodes;
86002
86129
  (function (PanelCodes) {
@@ -86066,7 +86193,8 @@ var PanelCodes;
86066
86193
  PanelCodes[PanelCodes["developer-resources"] = 66] = "developer-resources";
86067
86194
  PanelCodes[PanelCodes["autofill-view"] = 67] = "autofill-view";
86068
86195
  PanelCodes[PanelCodes["freestyler"] = 68] = "freestyler";
86069
- PanelCodes[PanelCodes["MAX_VALUE"] = 69] = "MAX_VALUE";
86196
+ PanelCodes[PanelCodes["ads"] = 69] = "ads";
86197
+ PanelCodes[PanelCodes["MAX_VALUE"] = 70] = "MAX_VALUE";
86070
86198
  })(PanelCodes || (PanelCodes = {}));
86071
86199
  var MediaTypes;
86072
86200
  (function (MediaTypes) {
@@ -86239,7 +86367,6 @@ var DevtoolsExperiments;
86239
86367
  (function (DevtoolsExperiments) {
86240
86368
  DevtoolsExperiments[DevtoolsExperiments["protocol-monitor"] = 13] = "protocol-monitor";
86241
86369
  DevtoolsExperiments[DevtoolsExperiments["instrumentation-breakpoints"] = 61] = "instrumentation-breakpoints";
86242
- DevtoolsExperiments[DevtoolsExperiments["use-source-map-scopes"] = 76] = "use-source-map-scopes";
86243
86370
  DevtoolsExperiments[DevtoolsExperiments["durable-messages"] = 110] = "durable-messages";
86244
86371
  DevtoolsExperiments[DevtoolsExperiments["jpeg-xl"] = 111] = "jpeg-xl";
86245
86372
  DevtoolsExperiments[DevtoolsExperiments["plus-button"] = 112] = "plus-button";
@@ -86799,7 +86926,8 @@ function registerCommands(inspectorBackend) {
86799
86926
  inspectorBackend.registerType("CSS.InheritedPseudoElementMatches", [{ "name": "pseudoElements", "type": "array", "optional": false, "description": "Matches of pseudo styles from the pseudos of an ancestor node.", "typeRef": "CSS.PseudoElementMatches" }]);
86800
86927
  inspectorBackend.registerType("CSS.RuleMatch", [{ "name": "rule", "type": "object", "optional": false, "description": "CSS rule in the match.", "typeRef": "CSS.CSSRule" }, { "name": "matchingSelectors", "type": "array", "optional": false, "description": "Matching selector indices in the rule's selectorList selectors (0-based).", "typeRef": "integer" }]);
86801
86928
  inspectorBackend.registerType("CSS.Value", [{ "name": "text", "type": "string", "optional": false, "description": "Value text.", "typeRef": null }, { "name": "range", "type": "object", "optional": true, "description": "Value range in the underlying resource (if available).", "typeRef": "CSS.SourceRange" }, { "name": "specificity", "type": "object", "optional": true, "description": "Specificity of the selector.", "typeRef": "CSS.Specificity" }]);
86802
- inspectorBackend.registerType("CSS.Specificity", [{ "name": "a", "type": "number", "optional": false, "description": "The a component, which represents the number of ID selectors.", "typeRef": null }, { "name": "b", "type": "number", "optional": false, "description": "The b component, which represents the number of class selectors, attributes selectors, and pseudo-classes.", "typeRef": null }, { "name": "c", "type": "number", "optional": false, "description": "The c component, which represents the number of type selectors and pseudo-elements.", "typeRef": null }]);
86929
+ inspectorBackend.registerType("CSS.SpecificityComponent", [{ "name": "text", "type": "string", "optional": false, "description": "The simple selector text that contributes to specificity.", "typeRef": null }, { "name": "a", "type": "number", "optional": false, "description": "The a component contribution.", "typeRef": null }, { "name": "b", "type": "number", "optional": false, "description": "The b component contribution.", "typeRef": null }, { "name": "c", "type": "number", "optional": false, "description": "The c component contribution.", "typeRef": null }]);
86930
+ inspectorBackend.registerType("CSS.Specificity", [{ "name": "a", "type": "number", "optional": false, "description": "The a component, which represents the number of ID selectors.", "typeRef": null }, { "name": "b", "type": "number", "optional": false, "description": "The b component, which represents the number of class selectors, attributes selectors, and pseudo-classes.", "typeRef": null }, { "name": "c", "type": "number", "optional": false, "description": "The c component, which represents the number of type selectors and pseudo-elements.", "typeRef": null }, { "name": "components", "type": "array", "optional": true, "description": "Per-simple-selector contributions used to explain this specificity.", "typeRef": "CSS.SpecificityComponent" }]);
86803
86931
  inspectorBackend.registerType("CSS.SelectorList", [{ "name": "selectors", "type": "array", "optional": false, "description": "Selectors in the list.", "typeRef": "CSS.Value" }, { "name": "text", "type": "string", "optional": false, "description": "Rule selector text.", "typeRef": null }]);
86804
86932
  inspectorBackend.registerType("CSS.CSSStyleSheetHeader", [{ "name": "styleSheetId", "type": "string", "optional": false, "description": "The stylesheet identifier.", "typeRef": "DOM.StyleSheetId" }, { "name": "frameId", "type": "string", "optional": false, "description": "Owner frame identifier.", "typeRef": "Page.FrameId" }, { "name": "sourceURL", "type": "string", "optional": false, "description": "Stylesheet resource URL. Empty if this is a constructed stylesheet created using new CSSStyleSheet() (but non-empty if this is a constructed stylesheet imported as a CSS module script).", "typeRef": null }, { "name": "sourceMapURL", "type": "string", "optional": true, "description": "URL of source map associated with the stylesheet (if any).", "typeRef": null }, { "name": "origin", "type": "string", "optional": false, "description": "Stylesheet origin.", "typeRef": "CSS.StyleSheetOrigin" }, { "name": "title", "type": "string", "optional": false, "description": "Stylesheet title.", "typeRef": null }, { "name": "ownerNode", "type": "number", "optional": true, "description": "The backend id for the owner node of the stylesheet.", "typeRef": "DOM.BackendNodeId" }, { "name": "disabled", "type": "boolean", "optional": false, "description": "Denotes whether the stylesheet is disabled.", "typeRef": null }, { "name": "hasSourceURL", "type": "boolean", "optional": true, "description": "Whether the sourceURL field value comes from the sourceURL comment.", "typeRef": null }, { "name": "isInline", "type": "boolean", "optional": false, "description": "Whether this stylesheet is created for STYLE tag by parser. This flag is not set for document.written STYLE tags.", "typeRef": null }, { "name": "isMutable", "type": "boolean", "optional": false, "description": "Whether this stylesheet is mutable. Inline stylesheets become mutable after they have been modified via CSSOM API. `<link>` element's stylesheets become mutable only if DevTools modifies them. Constructed stylesheets (new CSSStyleSheet()) are mutable immediately after creation.", "typeRef": null }, { "name": "isConstructed", "type": "boolean", "optional": false, "description": "True if this stylesheet is created through new CSSStyleSheet() or imported as a CSS module script.", "typeRef": null }, { "name": "startLine", "type": "number", "optional": false, "description": "Line offset of the stylesheet within the resource (zero based).", "typeRef": null }, { "name": "startColumn", "type": "number", "optional": false, "description": "Column offset of the stylesheet within the resource (zero based).", "typeRef": null }, { "name": "length", "type": "number", "optional": false, "description": "Size of the content (in characters).", "typeRef": null }, { "name": "endLine", "type": "number", "optional": false, "description": "Line offset of the end of the stylesheet within the resource (zero based).", "typeRef": null }, { "name": "endColumn", "type": "number", "optional": false, "description": "Column offset of the end of the stylesheet within the resource (zero based).", "typeRef": null }, { "name": "loadingFailed", "type": "boolean", "optional": true, "description": "If the style sheet was loaded from a network resource, this indicates when the resource failed to load", "typeRef": null }]);
86805
86933
  inspectorBackend.registerType("CSS.CSSRule", [{ "name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId" }, { "name": "selectorList", "type": "object", "optional": false, "description": "Rule selector data.", "typeRef": "CSS.SelectorList" }, { "name": "nestingSelectors", "type": "array", "optional": true, "description": "Array of selectors from ancestor style rules, sorted by distance from the current rule.", "typeRef": "string" }, { "name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin" }, { "name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle" }, { "name": "originTreeScopeNodeId", "type": "number", "optional": true, "description": "The BackendNodeId of the DOM node that constitutes the origin tree scope of this rule.", "typeRef": "DOM.BackendNodeId" }, { "name": "media", "type": "array", "optional": true, "description": "Media list array (for rules involving media queries). The array enumerates media queries starting with the innermost one, going outwards.", "typeRef": "CSS.CSSMedia" }, { "name": "containerQueries", "type": "array", "optional": true, "description": "Container query list array (for rules involving container queries). The array enumerates container queries starting with the innermost one, going outwards.", "typeRef": "CSS.CSSContainerQuery" }, { "name": "supports", "type": "array", "optional": true, "description": "@supports CSS at-rule array. The array enumerates @supports at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSSupports" }, { "name": "layers", "type": "array", "optional": true, "description": "Cascade layer array. Contains the layer hierarchy that this rule belongs to starting with the innermost layer and going outwards.", "typeRef": "CSS.CSSLayer" }, { "name": "scopes", "type": "array", "optional": true, "description": "@scope CSS at-rule array. The array enumerates @scope at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSScope" }, { "name": "ruleTypes", "type": "array", "optional": true, "description": "The array keeps the types of ancestor CSSRules from the innermost going outwards.", "typeRef": "CSS.CSSRuleType" }, { "name": "startingStyles", "type": "array", "optional": true, "description": "@starting-style CSS at-rule array. The array enumerates @starting-style at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSStartingStyle" }, { "name": "navigations", "type": "array", "optional": true, "description": "@navigation CSS at-rule array. The array enumerates @navigation at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSNavigation" }]);
@@ -86935,7 +87063,7 @@ function registerCommands(inspectorBackend) {
86935
87063
  inspectorBackend.registerCommand("DOM.getContainerForNode", [{ "name": "nodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.NodeId" }, { "name": "containerName", "type": "string", "optional": true, "description": "", "typeRef": null }, { "name": "physicalAxes", "type": "string", "optional": true, "description": "", "typeRef": "DOM.PhysicalAxes" }, { "name": "logicalAxes", "type": "string", "optional": true, "description": "", "typeRef": "DOM.LogicalAxes" }, { "name": "queriesScrollState", "type": "boolean", "optional": true, "description": "", "typeRef": null }, { "name": "queriesAnchored", "type": "boolean", "optional": true, "description": "", "typeRef": null }], ["nodeId"], "Returns the query container of the given node based on container query conditions: containerName, physical and logical axes, and whether it queries scroll-state or anchored elements. If no axes are provided and queriesScrollState is false, the style container is returned, which is the direct parent or the closest element with a matching container-name.");
86936
87064
  inspectorBackend.registerCommand("DOM.getQueryingDescendantsForContainer", [{ "name": "nodeId", "type": "number", "optional": false, "description": "Id of the container node to find querying descendants from.", "typeRef": "DOM.NodeId" }], ["nodeIds"], "Returns the descendants of a container query container that have container queries against this container.");
86937
87065
  inspectorBackend.registerCommand("DOM.getAnchorElement", [{ "name": "nodeId", "type": "number", "optional": false, "description": "Id of the positioned element from which to find the anchor.", "typeRef": "DOM.NodeId" }, { "name": "anchorSpecifier", "type": "string", "optional": true, "description": "An optional anchor specifier, as defined in https://www.w3.org/TR/css-anchor-position-1/#anchor-specifier. If not provided, it will return the implicit anchor element for the given positioned element.", "typeRef": null }], ["nodeId"], "Returns the target anchor element of the given anchor query according to https://www.w3.org/TR/css-anchor-position-1/#target.");
86938
- inspectorBackend.registerCommand("DOM.forceShowPopover", [{ "name": "nodeId", "type": "number", "optional": false, "description": "Id of the popover HTMLElement", "typeRef": "DOM.NodeId" }, { "name": "enable", "type": "boolean", "optional": false, "description": "If true, opens the popover and keeps it open. If false, closes the popover if it was previously force-opened.", "typeRef": null }], ["nodeIds"], "When enabling, this API force-opens the popover identified by nodeId and keeps it open until disabled.");
87066
+ inspectorBackend.registerCommand("DOM.forceShowPopover", [{ "name": "nodeId", "type": "number", "optional": false, "description": "Id of the popover HTMLElement", "typeRef": "DOM.NodeId" }, { "name": "enable", "type": "boolean", "optional": false, "description": "If true, opens the popover and keeps it open. If false, closes the popover if it was previously force-opened.", "typeRef": null }, { "name": "invokerNodeId", "type": "number", "optional": true, "description": "Optional ID of the element invoking this popover, used to establish the implicit anchor. If not provided, it will fall back to the first invoker in the document, preferring elements with a popovertarget attribute over those with a commandfor attribute. Note that if there are multiple invokers, this is just an estimate.", "typeRef": "DOM.BackendNodeId" }], ["nodeIds"], "When enabling, this API force-opens the popover identified by nodeId and keeps it open until disabled.");
86939
87067
  inspectorBackend.registerType("DOM.BackendNode", [{ "name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null }, { "name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null }, { "name": "backendNodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.BackendNodeId" }]);
86940
87068
  inspectorBackend.registerType("DOM.Node", [{ "name": "nodeId", "type": "number", "optional": false, "description": "Node identifier that is passed into the rest of the DOM messages as the `nodeId`. Backend will only push node with given `id` once. It is aware of all requested nodes and will only fire DOM events for nodes known to the client.", "typeRef": "DOM.NodeId" }, { "name": "parentId", "type": "number", "optional": true, "description": "The id of the parent node if any.", "typeRef": "DOM.NodeId" }, { "name": "backendNodeId", "type": "number", "optional": false, "description": "The BackendNodeId for this node.", "typeRef": "DOM.BackendNodeId" }, { "name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null }, { "name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null }, { "name": "localName", "type": "string", "optional": false, "description": "`Node`'s localName.", "typeRef": null }, { "name": "nodeValue", "type": "string", "optional": false, "description": "`Node`'s nodeValue.", "typeRef": null }, { "name": "childNodeCount", "type": "number", "optional": true, "description": "Child count for `Container` nodes.", "typeRef": null }, { "name": "children", "type": "array", "optional": true, "description": "Child nodes of this node when requested with children.", "typeRef": "DOM.Node" }, { "name": "attributes", "type": "array", "optional": true, "description": "Attributes of the `Element` node in the form of flat array `[name1, value1, name2, value2]`.", "typeRef": "string" }, { "name": "documentURL", "type": "string", "optional": true, "description": "Document URL that `Document` or `FrameOwner` node points to.", "typeRef": null }, { "name": "baseURL", "type": "string", "optional": true, "description": "Base URL that `Document` or `FrameOwner` node uses for URL completion.", "typeRef": null }, { "name": "publicId", "type": "string", "optional": true, "description": "`DocumentType`'s publicId.", "typeRef": null }, { "name": "systemId", "type": "string", "optional": true, "description": "`DocumentType`'s systemId.", "typeRef": null }, { "name": "internalSubset", "type": "string", "optional": true, "description": "`DocumentType`'s internalSubset.", "typeRef": null }, { "name": "xmlVersion", "type": "string", "optional": true, "description": "`Document`'s XML version in case of XML documents.", "typeRef": null }, { "name": "name", "type": "string", "optional": true, "description": "`Attr`'s name.", "typeRef": null }, { "name": "value", "type": "string", "optional": true, "description": "`Attr`'s value.", "typeRef": null }, { "name": "pseudoType", "type": "string", "optional": true, "description": "Pseudo element type for this node.", "typeRef": "DOM.PseudoType" }, { "name": "pseudoIdentifier", "type": "string", "optional": true, "description": "Pseudo element identifier for this node. Only present if there is a valid pseudoType.", "typeRef": null }, { "name": "shadowRootType", "type": "string", "optional": true, "description": "Shadow root type.", "typeRef": "DOM.ShadowRootType" }, { "name": "frameId", "type": "string", "optional": true, "description": "Frame ID for frame owner elements.", "typeRef": "Page.FrameId" }, { "name": "contentDocument", "type": "object", "optional": true, "description": "Content document for frame owner elements.", "typeRef": "DOM.Node" }, { "name": "shadowRoots", "type": "array", "optional": true, "description": "Shadow root list for given element host.", "typeRef": "DOM.Node" }, { "name": "templateContent", "type": "object", "optional": true, "description": "Content document fragment for template elements.", "typeRef": "DOM.Node" }, { "name": "pseudoElements", "type": "array", "optional": true, "description": "Pseudo elements associated with this node.", "typeRef": "DOM.Node" }, { "name": "importedDocument", "type": "object", "optional": true, "description": "Deprecated, as the HTML Imports API has been removed (crbug.com/937746). This property used to return the imported document for the HTMLImport links. The property is always undefined now.", "typeRef": "DOM.Node" }, { "name": "distributedNodes", "type": "array", "optional": true, "description": "Distributed nodes for given insertion point.", "typeRef": "DOM.BackendNode" }, { "name": "isSVG", "type": "boolean", "optional": true, "description": "Whether the node is SVG.", "typeRef": null }, { "name": "compatibilityMode", "type": "string", "optional": true, "description": "", "typeRef": "DOM.CompatibilityMode" }, { "name": "assignedSlot", "type": "object", "optional": true, "description": "", "typeRef": "DOM.BackendNode" }, { "name": "isScrollable", "type": "boolean", "optional": true, "description": "", "typeRef": null }, { "name": "affectedByStartingStyles", "type": "boolean", "optional": true, "description": "", "typeRef": null }, { "name": "adoptedStyleSheets", "type": "array", "optional": true, "description": "", "typeRef": "DOM.StyleSheetId" }, { "name": "adProvenance", "type": "object", "optional": true, "description": "", "typeRef": "Network.AdProvenance" }]);
86941
87069
  inspectorBackend.registerType("DOM.DetachedElementInfo", [{ "name": "treeNode", "type": "object", "optional": false, "description": "", "typeRef": "DOM.Node" }, { "name": "retainedNodeIds", "type": "array", "optional": false, "description": "", "typeRef": "DOM.NodeId" }]);
@@ -87256,7 +87384,7 @@ function registerCommands(inspectorBackend) {
87256
87384
  inspectorBackend.registerEnum("Network.InitiatorType", { Parser: "parser", Script: "script", Preload: "preload", SignedExchange: "SignedExchange", Preflight: "preflight", FedCM: "FedCM", Other: "other" });
87257
87385
  inspectorBackend.registerEnum("Network.SetCookieBlockedReason", { SecureOnly: "SecureOnly", SameSiteStrict: "SameSiteStrict", SameSiteLax: "SameSiteLax", SameSiteUnspecifiedTreatedAsLax: "SameSiteUnspecifiedTreatedAsLax", SameSiteNoneInsecure: "SameSiteNoneInsecure", UserPreferences: "UserPreferences", ThirdPartyPhaseout: "ThirdPartyPhaseout", ThirdPartyBlockedInFirstPartySet: "ThirdPartyBlockedInFirstPartySet", SyntaxError: "SyntaxError", SchemeNotSupported: "SchemeNotSupported", OverwriteSecure: "OverwriteSecure", InvalidDomain: "InvalidDomain", InvalidPrefix: "InvalidPrefix", UnknownError: "UnknownError", SchemefulSameSiteStrict: "SchemefulSameSiteStrict", SchemefulSameSiteLax: "SchemefulSameSiteLax", SchemefulSameSiteUnspecifiedTreatedAsLax: "SchemefulSameSiteUnspecifiedTreatedAsLax", NameValuePairExceedsMaxSize: "NameValuePairExceedsMaxSize", DisallowedCharacter: "DisallowedCharacter", NoCookieContent: "NoCookieContent" });
87258
87386
  inspectorBackend.registerEnum("Network.CookieBlockedReason", { SecureOnly: "SecureOnly", NotOnPath: "NotOnPath", DomainMismatch: "DomainMismatch", SameSiteStrict: "SameSiteStrict", SameSiteLax: "SameSiteLax", SameSiteUnspecifiedTreatedAsLax: "SameSiteUnspecifiedTreatedAsLax", SameSiteNoneInsecure: "SameSiteNoneInsecure", UserPreferences: "UserPreferences", ThirdPartyPhaseout: "ThirdPartyPhaseout", ThirdPartyBlockedInFirstPartySet: "ThirdPartyBlockedInFirstPartySet", UnknownError: "UnknownError", SchemefulSameSiteStrict: "SchemefulSameSiteStrict", SchemefulSameSiteLax: "SchemefulSameSiteLax", SchemefulSameSiteUnspecifiedTreatedAsLax: "SchemefulSameSiteUnspecifiedTreatedAsLax", NameValuePairExceedsMaxSize: "NameValuePairExceedsMaxSize", PortMismatch: "PortMismatch", SchemeMismatch: "SchemeMismatch", AnonymousContext: "AnonymousContext" });
87259
- inspectorBackend.registerEnum("Network.CookieExemptionReason", { None: "None", UserSetting: "UserSetting", TPCDMetadata: "TPCDMetadata", TPCDDeprecationTrial: "TPCDDeprecationTrial", TopLevelTPCDDeprecationTrial: "TopLevelTPCDDeprecationTrial", TPCDHeuristics: "TPCDHeuristics", EnterprisePolicy: "EnterprisePolicy", StorageAccess: "StorageAccess", TopLevelStorageAccess: "TopLevelStorageAccess", Scheme: "Scheme", SameSiteNoneCookiesInSandbox: "SameSiteNoneCookiesInSandbox" });
87387
+ inspectorBackend.registerEnum("Network.CookieExemptionReason", { None: "None", UserSetting: "UserSetting", EnterprisePolicy: "EnterprisePolicy", StorageAccess: "StorageAccess", TopLevelStorageAccess: "TopLevelStorageAccess", Scheme: "Scheme", SameSiteNoneCookiesInSandbox: "SameSiteNoneCookiesInSandbox" });
87260
87388
  inspectorBackend.registerEnum("Network.AuthChallengeSource", { Server: "Server", Proxy: "Proxy" });
87261
87389
  inspectorBackend.registerEnum("Network.AuthChallengeResponseResponse", { Default: "Default", CancelAuth: "CancelAuth", ProvideCredentials: "ProvideCredentials" });
87262
87390
  inspectorBackend.registerEnum("Network.InterceptionStage", { Request: "Request", HeadersReceived: "HeadersReceived" });
@@ -87490,7 +87618,7 @@ function registerCommands(inspectorBackend) {
87490
87618
  inspectorBackend.registerEnum("Page.SecureContextType", { Secure: "Secure", SecureLocalhost: "SecureLocalhost", InsecureScheme: "InsecureScheme", InsecureAncestor: "InsecureAncestor" });
87491
87619
  inspectorBackend.registerEnum("Page.CrossOriginIsolatedContextType", { Isolated: "Isolated", NotIsolated: "NotIsolated", NotIsolatedFeatureDisabled: "NotIsolatedFeatureDisabled" });
87492
87620
  inspectorBackend.registerEnum("Page.GatedAPIFeatures", { SharedArrayBuffers: "SharedArrayBuffers", SharedArrayBuffersTransferAllowed: "SharedArrayBuffersTransferAllowed", PerformanceMeasureMemory: "PerformanceMeasureMemory", PerformanceProfile: "PerformanceProfile" });
87493
- inspectorBackend.registerEnum("Page.PermissionsPolicyFeature", { Accelerometer: "accelerometer", AllScreensCapture: "all-screens-capture", AmbientLightSensor: "ambient-light-sensor", AriaNotify: "aria-notify", AttributionReporting: "attribution-reporting", Autofill: "autofill", Autoplay: "autoplay", Bluetooth: "bluetooth", BrowsingTopics: "browsing-topics", Camera: "camera", CapturedSurfaceControl: "captured-surface-control", ChDpr: "ch-dpr", ChDeviceMemory: "ch-device-memory", ChDownlink: "ch-downlink", ChEct: "ch-ect", ChPrefersColorScheme: "ch-prefers-color-scheme", ChPrefersReducedMotion: "ch-prefers-reduced-motion", ChPrefersReducedTransparency: "ch-prefers-reduced-transparency", ChRtt: "ch-rtt", ChSaveData: "ch-save-data", ChUa: "ch-ua", ChUaArch: "ch-ua-arch", ChUaBitness: "ch-ua-bitness", ChUaHighEntropyValues: "ch-ua-high-entropy-values", ChUaPlatform: "ch-ua-platform", ChUaModel: "ch-ua-model", ChUaMobile: "ch-ua-mobile", ChUaFormFactors: "ch-ua-form-factors", ChUaFullVersion: "ch-ua-full-version", ChUaFullVersionList: "ch-ua-full-version-list", ChUaPlatformVersion: "ch-ua-platform-version", ChUaWow64: "ch-ua-wow64", ChViewportHeight: "ch-viewport-height", ChViewportWidth: "ch-viewport-width", ChWidth: "ch-width", ClipboardRead: "clipboard-read", ClipboardWrite: "clipboard-write", ComputePressure: "compute-pressure", ControlledFrame: "controlled-frame", CrossOriginIsolated: "cross-origin-isolated", DeferredFetch: "deferred-fetch", DeferredFetchMinimal: "deferred-fetch-minimal", DeviceAttributes: "device-attributes", DigitalCredentialsCreate: "digital-credentials-create", DigitalCredentialsGet: "digital-credentials-get", DirectSockets: "direct-sockets", DirectSocketsMulticast: "direct-sockets-multicast", DirectSocketsPrivate: "direct-sockets-private", DisplayCapture: "display-capture", DocumentDomain: "document-domain", EncryptedMedia: "encrypted-media", ExecutionWhileOutOfViewport: "execution-while-out-of-viewport", ExecutionWhileNotRendered: "execution-while-not-rendered", FocusWithoutUserActivation: "focus-without-user-activation", Fullscreen: "fullscreen", Frobulate: "frobulate", Gamepad: "gamepad", Geolocation: "geolocation", Gyroscope: "gyroscope", Hid: "hid", IdentityCredentialsGet: "identity-credentials-get", IdleDetection: "idle-detection", InterestCohort: "interest-cohort", JoinAdInterestGroup: "join-ad-interest-group", KeyboardMap: "keyboard-map", LanguageDetector: "language-detector", LanguageModel: "language-model", LocalFonts: "local-fonts", LocalNetwork: "local-network", LocalNetworkAccess: "local-network-access", LoopbackNetwork: "loopback-network", Magnetometer: "magnetometer", ManualText: "manual-text", MediaPlaybackWhileNotVisible: "media-playback-while-not-visible", Microphone: "microphone", Midi: "midi", OnDeviceSpeechRecognition: "on-device-speech-recognition", OtpCredentials: "otp-credentials", Payment: "payment", PictureInPicture: "picture-in-picture", PrivateAggregation: "private-aggregation", PrivateStateTokenIssuance: "private-state-token-issuance", PrivateStateTokenRedemption: "private-state-token-redemption", PublickeyCredentialsCreate: "publickey-credentials-create", PublickeyCredentialsGet: "publickey-credentials-get", RecordAdAuctionEvents: "record-ad-auction-events", Rewriter: "rewriter", RunAdAuction: "run-ad-auction", ScreenWakeLock: "screen-wake-lock", Serial: "serial", SharedStorage: "shared-storage", SharedStorageSelectUrl: "shared-storage-select-url", SmartCard: "smart-card", SpeakerSelection: "speaker-selection", StorageAccess: "storage-access", SubApps: "sub-apps", Summarizer: "summarizer", SyncXhr: "sync-xhr", Tools: "tools", Translator: "translator", Unload: "unload", Usb: "usb", UsbUnrestricted: "usb-unrestricted", VerticalScroll: "vertical-scroll", WebAppInstallation: "web-app-installation", WebPrinting: "web-printing", WebShare: "web-share", WindowManagement: "window-management", Writer: "writer", XrSpatialTracking: "xr-spatial-tracking" });
87621
+ inspectorBackend.registerEnum("Page.PermissionsPolicyFeature", { Accelerometer: "accelerometer", AllScreensCapture: "all-screens-capture", AmbientLightSensor: "ambient-light-sensor", AriaNotify: "aria-notify", AttributionReporting: "attribution-reporting", Autofill: "autofill", Autoplay: "autoplay", Bluetooth: "bluetooth", BrowsingTopics: "browsing-topics", Camera: "camera", CapturedSurfaceControl: "captured-surface-control", ChDpr: "ch-dpr", ChDeviceMemory: "ch-device-memory", ChDownlink: "ch-downlink", ChEct: "ch-ect", ChPrefersColorScheme: "ch-prefers-color-scheme", ChPrefersReducedMotion: "ch-prefers-reduced-motion", ChPrefersReducedTransparency: "ch-prefers-reduced-transparency", ChRtt: "ch-rtt", ChSaveData: "ch-save-data", ChUa: "ch-ua", ChUaArch: "ch-ua-arch", ChUaBitness: "ch-ua-bitness", ChUaHighEntropyValues: "ch-ua-high-entropy-values", ChUaPlatform: "ch-ua-platform", ChUaModel: "ch-ua-model", ChUaMobile: "ch-ua-mobile", ChUaFormFactors: "ch-ua-form-factors", ChUaFullVersion: "ch-ua-full-version", ChUaFullVersionList: "ch-ua-full-version-list", ChUaPlatformVersion: "ch-ua-platform-version", ChUaWow64: "ch-ua-wow64", ChViewportHeight: "ch-viewport-height", ChViewportWidth: "ch-viewport-width", ChWidth: "ch-width", ClipboardRead: "clipboard-read", ClipboardWrite: "clipboard-write", ComputePressure: "compute-pressure", ControlledFrame: "controlled-frame", CrossOriginIsolated: "cross-origin-isolated", DeferredFetch: "deferred-fetch", DeferredFetchMinimal: "deferred-fetch-minimal", DeviceAttributes: "device-attributes", DigitalCredentialsCreate: "digital-credentials-create", DigitalCredentialsGet: "digital-credentials-get", DirectSockets: "direct-sockets", DirectSocketsMulticast: "direct-sockets-multicast", DisplayCapture: "display-capture", DocumentDomain: "document-domain", EncryptedMedia: "encrypted-media", ExecutionWhileOutOfViewport: "execution-while-out-of-viewport", ExecutionWhileNotRendered: "execution-while-not-rendered", FocusWithoutUserActivation: "focus-without-user-activation", Fullscreen: "fullscreen", Frobulate: "frobulate", Gamepad: "gamepad", Geolocation: "geolocation", Gyroscope: "gyroscope", Hid: "hid", IdentityCredentialsGet: "identity-credentials-get", IdleDetection: "idle-detection", InterestCohort: "interest-cohort", JoinAdInterestGroup: "join-ad-interest-group", KeyboardMap: "keyboard-map", LanguageDetector: "language-detector", LanguageModel: "language-model", LocalFonts: "local-fonts", LocalNetwork: "local-network", LocalNetworkAccess: "local-network-access", LoopbackNetwork: "loopback-network", Magnetometer: "magnetometer", ManualText: "manual-text", MediaPlaybackWhileNotVisible: "media-playback-while-not-visible", Microphone: "microphone", Midi: "midi", OnDeviceSpeechRecognition: "on-device-speech-recognition", OtpCredentials: "otp-credentials", Payment: "payment", PictureInPicture: "picture-in-picture", PrivateAggregation: "private-aggregation", PrivateStateTokenIssuance: "private-state-token-issuance", PrivateStateTokenRedemption: "private-state-token-redemption", PublickeyCredentialsCreate: "publickey-credentials-create", PublickeyCredentialsGet: "publickey-credentials-get", RecordAdAuctionEvents: "record-ad-auction-events", Rewriter: "rewriter", RunAdAuction: "run-ad-auction", ScreenWakeLock: "screen-wake-lock", Serial: "serial", SharedStorage: "shared-storage", SharedStorageSelectUrl: "shared-storage-select-url", SmartCard: "smart-card", SpeakerSelection: "speaker-selection", StorageAccess: "storage-access", SubApps: "sub-apps", Summarizer: "summarizer", SyncXhr: "sync-xhr", Tools: "tools", Translator: "translator", Unload: "unload", Usb: "usb", UsbUnrestricted: "usb-unrestricted", VerticalScroll: "vertical-scroll", WebAppInstallation: "web-app-installation", Webnn: "webnn", WebPrinting: "web-printing", WebShare: "web-share", WindowManagement: "window-management", Writer: "writer", XrSpatialTracking: "xr-spatial-tracking" });
87494
87622
  inspectorBackend.registerEnum("Page.PermissionsPolicyBlockReason", { Header: "Header", IframeAttribute: "IframeAttribute", InFencedFrameTree: "InFencedFrameTree", InIsolatedApp: "InIsolatedApp" });
87495
87623
  inspectorBackend.registerEnum("Page.OriginTrialTokenStatus", { Success: "Success", NotSupported: "NotSupported", Insecure: "Insecure", Expired: "Expired", WrongOrigin: "WrongOrigin", InvalidSignature: "InvalidSignature", Malformed: "Malformed", WrongVersion: "WrongVersion", FeatureDisabled: "FeatureDisabled", TokenDisabled: "TokenDisabled", FeatureDisabledForUser: "FeatureDisabledForUser", UnknownTrial: "UnknownTrial" });
87496
87624
  inspectorBackend.registerEnum("Page.OriginTrialStatus", { Enabled: "Enabled", ValidTokenNotProvided: "ValidTokenNotProvided", OSNotSupported: "OSNotSupported", TrialNotAllowed: "TrialNotAllowed" });
@@ -88268,6 +88396,9 @@ class TargetBase {
88268
88396
  autofillAgent() {
88269
88397
  return this.getAgent('Autofill');
88270
88398
  }
88399
+ adsAgent() {
88400
+ return this.getAgent('Ads');
88401
+ }
88271
88402
  browserAgent() {
88272
88403
  return this.getAgent('Browser');
88273
88404
  }
@@ -90275,7 +90406,21 @@ const generatedProperties = [
90275
90406
  "block-ellipsis",
90276
90407
  "continue"
90277
90408
  ],
90278
- "name": "-alternative-webkit-line-clamp"
90409
+ "name": "-alternative-line-clamp-shorthand"
90410
+ },
90411
+ {
90412
+ "keywords": [
90413
+ "none"
90414
+ ],
90415
+ "name": "-alternative-webkit-line-clamp-longhand"
90416
+ },
90417
+ {
90418
+ "longhands": [
90419
+ "max-lines",
90420
+ "block-ellipsis",
90421
+ "continue"
90422
+ ],
90423
+ "name": "-alternative-webkit-line-clamp-shorthand"
90279
90424
  },
90280
90425
  {
90281
90426
  "inherited": true,
@@ -90357,6 +90502,12 @@ const generatedProperties = [
90357
90502
  },
90358
90503
  {
90359
90504
  "inherited": true,
90505
+ "keywords": [
90506
+ "auto",
90507
+ "none",
90508
+ "antialiased",
90509
+ "subpixel-antialiased"
90510
+ ],
90360
90511
  "name": "-webkit-font-smoothing"
90361
90512
  },
90362
90513
  {
@@ -90377,6 +90528,9 @@ const generatedProperties = [
90377
90528
  },
90378
90529
  {
90379
90530
  "inherited": true,
90531
+ "keywords": [
90532
+ "auto"
90533
+ ],
90380
90534
  "name": "-webkit-locale"
90381
90535
  },
90382
90536
  {
@@ -90393,15 +90547,27 @@ const generatedProperties = [
90393
90547
  "name": "-webkit-mask-box-image-outset"
90394
90548
  },
90395
90549
  {
90550
+ "keywords": [
90551
+ "repeat",
90552
+ "stretch",
90553
+ "space",
90554
+ "round"
90555
+ ],
90396
90556
  "name": "-webkit-mask-box-image-repeat"
90397
90557
  },
90398
90558
  {
90399
90559
  "name": "-webkit-mask-box-image-slice"
90400
90560
  },
90401
90561
  {
90562
+ "keywords": [
90563
+ "none"
90564
+ ],
90402
90565
  "name": "-webkit-mask-box-image-source"
90403
90566
  },
90404
90567
  {
90568
+ "keywords": [
90569
+ "auto"
90570
+ ],
90405
90571
  "name": "-webkit-mask-box-image-width"
90406
90572
  },
90407
90573
  {
@@ -90434,10 +90600,23 @@ const generatedProperties = [
90434
90600
  },
90435
90601
  {
90436
90602
  "inherited": true,
90603
+ "keywords": [
90604
+ "none",
90605
+ "horizontal"
90606
+ ],
90437
90607
  "name": "-webkit-text-combine"
90438
90608
  },
90439
90609
  {
90440
90610
  "inherited": true,
90611
+ "keywords": [
90612
+ "none",
90613
+ "blink",
90614
+ "line-through",
90615
+ "overline",
90616
+ "underline",
90617
+ "spelling-error",
90618
+ "grammar-error"
90619
+ ],
90441
90620
  "name": "-webkit-text-decorations-in-effect"
90442
90621
  },
90443
90622
  {
@@ -90513,6 +90692,8 @@ const generatedProperties = [
90513
90692
  "name": "accent-color"
90514
90693
  },
90515
90694
  {
90695
+ "is_descriptor": true,
90696
+ "is_property": false,
90516
90697
  "name": "additive-symbols"
90517
90698
  },
90518
90699
  {
@@ -90522,6 +90703,20 @@ const generatedProperties = [
90522
90703
  "name": "align-items"
90523
90704
  },
90524
90705
  {
90706
+ "keywords": [
90707
+ "auto",
90708
+ "normal",
90709
+ "stretch",
90710
+ "baseline",
90711
+ "center",
90712
+ "start",
90713
+ "end",
90714
+ "self-start",
90715
+ "self-end",
90716
+ "flex-start",
90717
+ "flex-end",
90718
+ "anchor-center"
90719
+ ],
90525
90720
  "name": "align-self"
90526
90721
  },
90527
90722
  {
@@ -90543,6 +90738,7 @@ const generatedProperties = [
90543
90738
  },
90544
90739
  {
90545
90740
  "longhands": [
90741
+ "-alternative-webkit-line-clamp-longhand",
90546
90742
  "-webkit-border-horizontal-spacing",
90547
90743
  "-webkit-border-vertical-spacing",
90548
90744
  "-webkit-box-align",
@@ -90808,6 +91004,7 @@ const generatedProperties = [
90808
91004
  "letter-spacing",
90809
91005
  "lighting-color",
90810
91006
  "line-break",
91007
+ "line-clamp",
90811
91008
  "line-gap-override",
90812
91009
  "line-height",
90813
91010
  "list-style-image",
@@ -91114,6 +91311,9 @@ const generatedProperties = [
91114
91311
  "name": "animation-direction"
91115
91312
  },
91116
91313
  {
91314
+ "keywords": [
91315
+ "auto"
91316
+ ],
91117
91317
  "name": "animation-duration"
91118
91318
  },
91119
91319
  {
@@ -91195,9 +91395,27 @@ const generatedProperties = [
91195
91395
  "name": "app-region"
91196
91396
  },
91197
91397
  {
91398
+ "keywords": [
91399
+ "auto",
91400
+ "none",
91401
+ "checkbox",
91402
+ "radio",
91403
+ "button",
91404
+ "listbox",
91405
+ "menulist",
91406
+ "menulist-button",
91407
+ "meter",
91408
+ "progress-bar",
91409
+ "searchfield",
91410
+ "textfield",
91411
+ "textarea",
91412
+ "base-select"
91413
+ ],
91198
91414
  "name": "appearance"
91199
91415
  },
91200
91416
  {
91417
+ "is_descriptor": true,
91418
+ "is_property": false,
91201
91419
  "name": "ascent-override"
91202
91420
  },
91203
91421
  {
@@ -91280,7 +91498,6 @@ const generatedProperties = [
91280
91498
  },
91281
91499
  {
91282
91500
  "keywords": [
91283
- "auto",
91284
91501
  "none"
91285
91502
  ],
91286
91503
  "name": "background-image"
@@ -91318,9 +91535,13 @@ const generatedProperties = [
91318
91535
  "name": "background-size"
91319
91536
  },
91320
91537
  {
91538
+ "is_descriptor": true,
91539
+ "is_property": false,
91321
91540
  "name": "base-palette"
91322
91541
  },
91323
91542
  {
91543
+ "is_descriptor": true,
91544
+ "is_property": false,
91324
91545
  "name": "base-url"
91325
91546
  },
91326
91547
  {
@@ -91405,9 +91626,26 @@ const generatedProperties = [
91405
91626
  "name": "border-block-end-color"
91406
91627
  },
91407
91628
  {
91629
+ "keywords": [
91630
+ "none",
91631
+ "hidden",
91632
+ "inset",
91633
+ "groove",
91634
+ "outset",
91635
+ "ridge",
91636
+ "dotted",
91637
+ "dashed",
91638
+ "solid",
91639
+ "double"
91640
+ ],
91408
91641
  "name": "border-block-end-style"
91409
91642
  },
91410
91643
  {
91644
+ "keywords": [
91645
+ "medium",
91646
+ "thick",
91647
+ "thin"
91648
+ ],
91411
91649
  "name": "border-block-end-width"
91412
91650
  },
91413
91651
  {
@@ -91422,9 +91660,26 @@ const generatedProperties = [
91422
91660
  "name": "border-block-start-color"
91423
91661
  },
91424
91662
  {
91663
+ "keywords": [
91664
+ "none",
91665
+ "hidden",
91666
+ "inset",
91667
+ "groove",
91668
+ "outset",
91669
+ "ridge",
91670
+ "dotted",
91671
+ "dashed",
91672
+ "solid",
91673
+ "double"
91674
+ ],
91425
91675
  "name": "border-block-start-style"
91426
91676
  },
91427
91677
  {
91678
+ "keywords": [
91679
+ "medium",
91680
+ "thick",
91681
+ "thin"
91682
+ ],
91428
91683
  "name": "border-block-start-width"
91429
91684
  },
91430
91685
  {
@@ -91508,6 +91763,13 @@ const generatedProperties = [
91508
91763
  "name": "border-end-start-radius"
91509
91764
  },
91510
91765
  {
91766
+ "keywords": [
91767
+ "none",
91768
+ "repeat",
91769
+ "stretch",
91770
+ "space",
91771
+ "round"
91772
+ ],
91511
91773
  "longhands": [
91512
91774
  "border-image-source",
91513
91775
  "border-image-slice",
@@ -91574,9 +91836,26 @@ const generatedProperties = [
91574
91836
  "name": "border-inline-end-color"
91575
91837
  },
91576
91838
  {
91839
+ "keywords": [
91840
+ "none",
91841
+ "hidden",
91842
+ "inset",
91843
+ "groove",
91844
+ "outset",
91845
+ "ridge",
91846
+ "dotted",
91847
+ "dashed",
91848
+ "solid",
91849
+ "double"
91850
+ ],
91577
91851
  "name": "border-inline-end-style"
91578
91852
  },
91579
91853
  {
91854
+ "keywords": [
91855
+ "medium",
91856
+ "thick",
91857
+ "thin"
91858
+ ],
91580
91859
  "name": "border-inline-end-width"
91581
91860
  },
91582
91861
  {
@@ -91591,9 +91870,26 @@ const generatedProperties = [
91591
91870
  "name": "border-inline-start-color"
91592
91871
  },
91593
91872
  {
91873
+ "keywords": [
91874
+ "none",
91875
+ "hidden",
91876
+ "inset",
91877
+ "groove",
91878
+ "outset",
91879
+ "ridge",
91880
+ "dotted",
91881
+ "dashed",
91882
+ "solid",
91883
+ "double"
91884
+ ],
91594
91885
  "name": "border-inline-start-style"
91595
91886
  },
91596
91887
  {
91888
+ "keywords": [
91889
+ "medium",
91890
+ "thick",
91891
+ "thin"
91892
+ ],
91597
91893
  "name": "border-inline-start-width"
91598
91894
  },
91599
91895
  {
@@ -92151,6 +92447,9 @@ const generatedProperties = [
92151
92447
  "name": "contain"
92152
92448
  },
92153
92449
  {
92450
+ "keywords": [
92451
+ "none"
92452
+ ],
92154
92453
  "name": "contain-intrinsic-block-size"
92155
92454
  },
92156
92455
  {
@@ -92160,6 +92459,9 @@ const generatedProperties = [
92160
92459
  "name": "contain-intrinsic-height"
92161
92460
  },
92162
92461
  {
92462
+ "keywords": [
92463
+ "none"
92464
+ ],
92163
92465
  "name": "contain-intrinsic-inline-size"
92164
92466
  },
92165
92467
  {
@@ -92199,6 +92501,14 @@ const generatedProperties = [
92199
92501
  "name": "container-type"
92200
92502
  },
92201
92503
  {
92504
+ "keywords": [
92505
+ "none",
92506
+ "normal",
92507
+ "close-quote",
92508
+ "no-close-quote",
92509
+ "no-open-quote",
92510
+ "open-quote"
92511
+ ],
92202
92512
  "name": "content"
92203
92513
  },
92204
92514
  {
@@ -92603,6 +92913,8 @@ const generatedProperties = [
92603
92913
  "name": "d"
92604
92914
  },
92605
92915
  {
92916
+ "is_descriptor": true,
92917
+ "is_property": false,
92606
92918
  "name": "descent-override"
92607
92919
  },
92608
92920
  {
@@ -92683,6 +92995,8 @@ const generatedProperties = [
92683
92995
  "name": "empty-cells"
92684
92996
  },
92685
92997
  {
92998
+ "is_descriptor": true,
92999
+ "is_property": false,
92686
93000
  "name": "fallback"
92687
93001
  },
92688
93002
  {
@@ -92818,14 +93132,18 @@ const generatedProperties = [
92818
93132
  "name": "font"
92819
93133
  },
92820
93134
  {
93135
+ "is_descriptor": true,
93136
+ "is_property": false,
92821
93137
  "name": "font-display"
92822
93138
  },
92823
93139
  {
92824
93140
  "inherited": true,
93141
+ "is_descriptor": true,
92825
93142
  "name": "font-family"
92826
93143
  },
92827
93144
  {
92828
93145
  "inherited": true,
93146
+ "is_descriptor": true,
92829
93147
  "keywords": [
92830
93148
  "normal"
92831
93149
  ],
@@ -92896,6 +93214,7 @@ const generatedProperties = [
92896
93214
  },
92897
93215
  {
92898
93216
  "inherited": true,
93217
+ "is_descriptor": true,
92899
93218
  "keywords": [
92900
93219
  "normal",
92901
93220
  "ultra-condensed",
@@ -92911,6 +93230,7 @@ const generatedProperties = [
92911
93230
  },
92912
93231
  {
92913
93232
  "inherited": true,
93233
+ "is_descriptor": true,
92914
93234
  "keywords": [
92915
93235
  "normal",
92916
93236
  "italic",
@@ -92953,6 +93273,7 @@ const generatedProperties = [
92953
93273
  },
92954
93274
  {
92955
93275
  "inherited": true,
93276
+ "is_descriptor": true,
92956
93277
  "longhands": [
92957
93278
  "font-variant-ligatures",
92958
93279
  "font-variant-caps",
@@ -93052,6 +93373,7 @@ const generatedProperties = [
93052
93373
  },
93053
93374
  {
93054
93375
  "inherited": true,
93376
+ "is_descriptor": true,
93055
93377
  "keywords": [
93056
93378
  "normal"
93057
93379
  ],
@@ -93059,6 +93381,7 @@ const generatedProperties = [
93059
93381
  },
93060
93382
  {
93061
93383
  "inherited": true,
93384
+ "is_descriptor": true,
93062
93385
  "keywords": [
93063
93386
  "normal",
93064
93387
  "bold",
@@ -93216,13 +93539,19 @@ const generatedProperties = [
93216
93539
  },
93217
93540
  {
93218
93541
  "keywords": [
93219
- "none"
93542
+ "auto",
93543
+ "none",
93544
+ "min-content",
93545
+ "max-content"
93220
93546
  ],
93221
93547
  "name": "grid-template-columns"
93222
93548
  },
93223
93549
  {
93224
93550
  "keywords": [
93225
- "none"
93551
+ "auto",
93552
+ "none",
93553
+ "min-content",
93554
+ "max-content"
93226
93555
  ],
93227
93556
  "name": "grid-template-rows"
93228
93557
  },
@@ -93237,6 +93566,8 @@ const generatedProperties = [
93237
93566
  "name": "hanging-punctuation"
93238
93567
  },
93239
93568
  {
93569
+ "is_descriptor": true,
93570
+ "is_property": false,
93240
93571
  "name": "hash"
93241
93572
  },
93242
93573
  {
@@ -93249,10 +93580,15 @@ const generatedProperties = [
93249
93580
  "name": "height"
93250
93581
  },
93251
93582
  {
93583
+ "is_descriptor": true,
93584
+ "is_property": false,
93252
93585
  "name": "hostname"
93253
93586
  },
93254
93587
  {
93255
93588
  "inherited": true,
93589
+ "keywords": [
93590
+ "auto"
93591
+ ],
93256
93592
  "name": "hyphenate-character"
93257
93593
  },
93258
93594
  {
@@ -93283,6 +93619,10 @@ const generatedProperties = [
93283
93619
  },
93284
93620
  {
93285
93621
  "inherited": true,
93622
+ "keywords": [
93623
+ "none",
93624
+ "from-image"
93625
+ ],
93286
93626
  "name": "image-orientation"
93287
93627
  },
93288
93628
  {
@@ -93298,6 +93638,8 @@ const generatedProperties = [
93298
93638
  "name": "image-rendering"
93299
93639
  },
93300
93640
  {
93641
+ "is_descriptor": true,
93642
+ "is_property": false,
93301
93643
  "name": "inherits"
93302
93644
  },
93303
93645
  {
@@ -93310,6 +93652,8 @@ const generatedProperties = [
93310
93652
  "name": "initial-letter"
93311
93653
  },
93312
93654
  {
93655
+ "is_descriptor": true,
93656
+ "is_property": false,
93313
93657
  "name": "initial-value"
93314
93658
  },
93315
93659
  {
@@ -93335,9 +93679,15 @@ const generatedProperties = [
93335
93679
  "name": "inset-block"
93336
93680
  },
93337
93681
  {
93682
+ "keywords": [
93683
+ "auto"
93684
+ ],
93338
93685
  "name": "inset-block-end"
93339
93686
  },
93340
93687
  {
93688
+ "keywords": [
93689
+ "auto"
93690
+ ],
93341
93691
  "name": "inset-block-start"
93342
93692
  },
93343
93693
  {
@@ -93348,9 +93698,15 @@ const generatedProperties = [
93348
93698
  "name": "inset-inline"
93349
93699
  },
93350
93700
  {
93701
+ "keywords": [
93702
+ "auto"
93703
+ ],
93351
93704
  "name": "inset-inline-end"
93352
93705
  },
93353
93706
  {
93707
+ "keywords": [
93708
+ "auto"
93709
+ ],
93354
93710
  "name": "inset-inline-start"
93355
93711
  },
93356
93712
  {
@@ -93396,6 +93752,22 @@ const generatedProperties = [
93396
93752
  "name": "justify-items"
93397
93753
  },
93398
93754
  {
93755
+ "keywords": [
93756
+ "auto",
93757
+ "normal",
93758
+ "stretch",
93759
+ "baseline",
93760
+ "center",
93761
+ "start",
93762
+ "end",
93763
+ "self-start",
93764
+ "self-end",
93765
+ "flex-start",
93766
+ "flex-end",
93767
+ "left",
93768
+ "right",
93769
+ "anchor-center"
93770
+ ],
93399
93771
  "name": "justify-self"
93400
93772
  },
93401
93773
  {
@@ -93430,14 +93802,18 @@ const generatedProperties = [
93430
93802
  "name": "line-break"
93431
93803
  },
93432
93804
  {
93433
- "longhands": [
93434
- "max-lines",
93435
- "block-ellipsis",
93436
- "continue"
93805
+ "keywords": [
93806
+ "none",
93807
+ "auto",
93808
+ "ellipsis",
93809
+ "no-ellipsis",
93810
+ "-webkit-legacy"
93437
93811
  ],
93438
93812
  "name": "line-clamp"
93439
93813
  },
93440
93814
  {
93815
+ "is_descriptor": true,
93816
+ "is_property": false,
93441
93817
  "name": "line-gap-override"
93442
93818
  },
93443
93819
  {
@@ -93615,6 +93991,9 @@ const generatedProperties = [
93615
93991
  "name": "mask-composite"
93616
93992
  },
93617
93993
  {
93994
+ "keywords": [
93995
+ "none"
93996
+ ],
93618
93997
  "name": "mask-image"
93619
93998
  },
93620
93999
  {
@@ -93639,6 +94018,11 @@ const generatedProperties = [
93639
94018
  "name": "mask-repeat"
93640
94019
  },
93641
94020
  {
94021
+ "keywords": [
94022
+ "auto",
94023
+ "contain",
94024
+ "cover"
94025
+ ],
93642
94026
  "name": "mask-size"
93643
94027
  },
93644
94028
  {
@@ -93699,15 +94083,43 @@ const generatedProperties = [
93699
94083
  "name": "max-width"
93700
94084
  },
93701
94085
  {
94086
+ "keywords": [
94087
+ "auto",
94088
+ "min-content",
94089
+ "max-content",
94090
+ "fit-content",
94091
+ "stretch"
94092
+ ],
93702
94093
  "name": "min-block-size"
93703
94094
  },
93704
94095
  {
94096
+ "keywords": [
94097
+ "auto",
94098
+ "min-content",
94099
+ "max-content",
94100
+ "fit-content",
94101
+ "stretch"
94102
+ ],
93705
94103
  "name": "min-height"
93706
94104
  },
93707
94105
  {
94106
+ "keywords": [
94107
+ "auto",
94108
+ "min-content",
94109
+ "max-content",
94110
+ "fit-content",
94111
+ "stretch"
94112
+ ],
93708
94113
  "name": "min-inline-size"
93709
94114
  },
93710
94115
  {
94116
+ "keywords": [
94117
+ "auto",
94118
+ "min-content",
94119
+ "max-content",
94120
+ "fit-content",
94121
+ "stretch"
94122
+ ],
93711
94123
  "name": "min-width"
93712
94124
  },
93713
94125
  {
@@ -93733,9 +94145,13 @@ const generatedProperties = [
93733
94145
  "name": "mix-blend-mode"
93734
94146
  },
93735
94147
  {
94148
+ "is_descriptor": true,
94149
+ "is_property": false,
93736
94150
  "name": "navigation"
93737
94151
  },
93738
94152
  {
94153
+ "is_descriptor": true,
94154
+ "is_property": false,
93739
94155
  "name": "negative"
93740
94156
  },
93741
94157
  {
@@ -93814,6 +94230,21 @@ const generatedProperties = [
93814
94230
  "name": "orphans"
93815
94231
  },
93816
94232
  {
94233
+ "keywords": [
94234
+ "auto",
94235
+ "none",
94236
+ "inset",
94237
+ "groove",
94238
+ "ridge",
94239
+ "outset",
94240
+ "dotted",
94241
+ "dashed",
94242
+ "solid",
94243
+ "double",
94244
+ "medium",
94245
+ "thick",
94246
+ "thin"
94247
+ ],
93817
94248
  "longhands": [
93818
94249
  "outline-color",
93819
94250
  "outline-style",
@@ -93922,9 +94353,16 @@ const generatedProperties = [
93922
94353
  "name": "overlay"
93923
94354
  },
93924
94355
  {
94356
+ "is_descriptor": true,
94357
+ "is_property": false,
93925
94358
  "name": "override-colors"
93926
94359
  },
93927
94360
  {
94361
+ "keywords": [
94362
+ "auto",
94363
+ "none",
94364
+ "contain"
94365
+ ],
93928
94366
  "longhands": [
93929
94367
  "overscroll-behavior-x",
93930
94368
  "overscroll-behavior-y"
@@ -93956,6 +94394,8 @@ const generatedProperties = [
93956
94394
  "name": "overscroll-behavior-y"
93957
94395
  },
93958
94396
  {
94397
+ "is_descriptor": true,
94398
+ "is_property": false,
93959
94399
  "name": "pad"
93960
94400
  },
93961
94401
  {
@@ -94018,6 +94458,13 @@ const generatedProperties = [
94018
94458
  "name": "page-break-after"
94019
94459
  },
94020
94460
  {
94461
+ "keywords": [
94462
+ "auto",
94463
+ "left",
94464
+ "right",
94465
+ "always",
94466
+ "avoid"
94467
+ ],
94021
94468
  "longhands": [
94022
94469
  "break-before"
94023
94470
  ],
@@ -94030,6 +94477,7 @@ const generatedProperties = [
94030
94477
  "name": "page-break-inside"
94031
94478
  },
94032
94479
  {
94480
+ "is_descriptor": true,
94033
94481
  "keywords": [
94034
94482
  "none",
94035
94483
  "clamp",
@@ -94038,6 +94486,7 @@ const generatedProperties = [
94038
94486
  "name": "page-margin-safety"
94039
94487
  },
94040
94488
  {
94489
+ "is_descriptor": true,
94041
94490
  "name": "page-orientation"
94042
94491
  },
94043
94492
  {
@@ -94057,9 +94506,13 @@ const generatedProperties = [
94057
94506
  "name": "path-length"
94058
94507
  },
94059
94508
  {
94509
+ "is_descriptor": true,
94510
+ "is_property": false,
94060
94511
  "name": "pathname"
94061
94512
  },
94062
94513
  {
94514
+ "is_descriptor": true,
94515
+ "is_property": false,
94063
94516
  "name": "pattern"
94064
94517
  },
94065
94518
  {
@@ -94110,6 +94563,8 @@ const generatedProperties = [
94110
94563
  "name": "pointer-events"
94111
94564
  },
94112
94565
  {
94566
+ "is_descriptor": true,
94567
+ "is_property": false,
94113
94568
  "name": "port"
94114
94569
  },
94115
94570
  {
@@ -94125,7 +94580,8 @@ const generatedProperties = [
94125
94580
  {
94126
94581
  "keywords": [
94127
94582
  "auto",
94128
- "none"
94583
+ "none",
94584
+ "normal"
94129
94585
  ],
94130
94586
  "name": "position-anchor"
94131
94587
  },
@@ -94186,6 +94642,8 @@ const generatedProperties = [
94186
94642
  "name": "position-visibility"
94187
94643
  },
94188
94644
  {
94645
+ "is_descriptor": true,
94646
+ "is_property": false,
94189
94647
  "name": "prefix"
94190
94648
  },
94191
94649
  {
@@ -94197,6 +94655,8 @@ const generatedProperties = [
94197
94655
  "name": "print-color-adjust"
94198
94656
  },
94199
94657
  {
94658
+ "is_descriptor": true,
94659
+ "is_property": false,
94200
94660
  "name": "protocol"
94201
94661
  },
94202
94662
  {
@@ -94211,6 +94671,8 @@ const generatedProperties = [
94211
94671
  "name": "r"
94212
94672
  },
94213
94673
  {
94674
+ "is_descriptor": true,
94675
+ "is_property": false,
94214
94676
  "name": "range"
94215
94677
  },
94216
94678
  {
@@ -94240,6 +94702,8 @@ const generatedProperties = [
94240
94702
  "name": "resize"
94241
94703
  },
94242
94704
  {
94705
+ "is_descriptor": true,
94706
+ "is_property": false,
94243
94707
  "name": "result"
94244
94708
  },
94245
94709
  {
@@ -94591,6 +95055,11 @@ const generatedProperties = [
94591
95055
  "name": "scroll-margin-top"
94592
95056
  },
94593
95057
  {
95058
+ "keywords": [
95059
+ "none",
95060
+ "after",
95061
+ "before"
95062
+ ],
94594
95063
  "name": "scroll-marker-group"
94595
95064
  },
94596
95065
  {
@@ -94711,6 +95180,9 @@ const generatedProperties = [
94711
95180
  "name": "scroll-timeline-axis"
94712
95181
  },
94713
95182
  {
95183
+ "keywords": [
95184
+ "none"
95185
+ ],
94714
95186
  "name": "scroll-timeline-name"
94715
95187
  },
94716
95188
  {
@@ -94739,15 +95211,14 @@ const generatedProperties = [
94739
95211
  "name": "scrollbar-width"
94740
95212
  },
94741
95213
  {
95214
+ "is_descriptor": true,
95215
+ "is_property": false,
94742
95216
  "name": "search"
94743
95217
  },
94744
95218
  {
94745
95219
  "name": "shape-image-threshold"
94746
95220
  },
94747
95221
  {
94748
- "keywords": [
94749
- "none"
94750
- ],
94751
95222
  "name": "shape-margin"
94752
95223
  },
94753
95224
  {
@@ -94767,9 +95238,16 @@ const generatedProperties = [
94767
95238
  "name": "shape-rendering"
94768
95239
  },
94769
95240
  {
95241
+ "keywords": [
95242
+ "auto",
95243
+ "portrait",
95244
+ "landscape"
95245
+ ],
94770
95246
  "name": "size"
94771
95247
  },
94772
95248
  {
95249
+ "is_descriptor": true,
95250
+ "is_property": false,
94773
95251
  "name": "size-adjust"
94774
95252
  },
94775
95253
  {
@@ -94785,9 +95263,13 @@ const generatedProperties = [
94785
95263
  "name": "speak"
94786
95264
  },
94787
95265
  {
95266
+ "is_descriptor": true,
95267
+ "is_property": false,
94788
95268
  "name": "speak-as"
94789
95269
  },
94790
95270
  {
95271
+ "is_descriptor": true,
95272
+ "is_property": false,
94791
95273
  "name": "src"
94792
95274
  },
94793
95275
  {
@@ -94845,15 +95327,23 @@ const generatedProperties = [
94845
95327
  "name": "stroke-width"
94846
95328
  },
94847
95329
  {
95330
+ "is_descriptor": true,
95331
+ "is_property": false,
94848
95332
  "name": "suffix"
94849
95333
  },
94850
95334
  {
95335
+ "is_descriptor": true,
95336
+ "is_property": false,
94851
95337
  "name": "symbols"
94852
95338
  },
94853
95339
  {
95340
+ "is_descriptor": true,
95341
+ "is_property": false,
94854
95342
  "name": "syntax"
94855
95343
  },
94856
95344
  {
95345
+ "is_descriptor": true,
95346
+ "is_property": false,
94857
95347
  "name": "system"
94858
95348
  },
94859
95349
  {
@@ -94923,6 +95413,12 @@ const generatedProperties = [
94923
95413
  },
94924
95414
  {
94925
95415
  "inherited": true,
95416
+ "keywords": [
95417
+ "auto",
95418
+ "text",
95419
+ "cap",
95420
+ "ex"
95421
+ ],
94926
95422
  "name": "text-box-edge"
94927
95423
  },
94928
95424
  {
@@ -95164,6 +95660,10 @@ const generatedProperties = [
95164
95660
  "name": "text-wrap-style"
95165
95661
  },
95166
95662
  {
95663
+ "keywords": [
95664
+ "none",
95665
+ "all"
95666
+ ],
95167
95667
  "name": "timeline-scope"
95168
95668
  },
95169
95669
  {
@@ -95198,12 +95698,23 @@ const generatedProperties = [
95198
95698
  "name": "timeline-trigger-active-range"
95199
95699
  },
95200
95700
  {
95701
+ "keywords": [
95702
+ "auto",
95703
+ "normal"
95704
+ ],
95201
95705
  "name": "timeline-trigger-active-range-end"
95202
95706
  },
95203
95707
  {
95708
+ "keywords": [
95709
+ "auto",
95710
+ "normal"
95711
+ ],
95204
95712
  "name": "timeline-trigger-active-range-start"
95205
95713
  },
95206
95714
  {
95715
+ "keywords": [
95716
+ "none"
95717
+ ],
95207
95718
  "name": "timeline-trigger-name"
95208
95719
  },
95209
95720
  {
@@ -95316,6 +95827,8 @@ const generatedProperties = [
95316
95827
  "name": "trigger-scope"
95317
95828
  },
95318
95829
  {
95830
+ "is_descriptor": true,
95831
+ "is_property": false,
95319
95832
  "name": "types"
95320
95833
  },
95321
95834
  {
@@ -95330,6 +95843,8 @@ const generatedProperties = [
95330
95843
  "name": "unicode-bidi"
95331
95844
  },
95332
95845
  {
95846
+ "is_descriptor": true,
95847
+ "is_property": false,
95333
95848
  "name": "unicode-range"
95334
95849
  },
95335
95850
  {
@@ -95373,9 +95888,15 @@ const generatedProperties = [
95373
95888
  "name": "view-timeline-axis"
95374
95889
  },
95375
95890
  {
95891
+ "keywords": [
95892
+ "auto"
95893
+ ],
95376
95894
  "name": "view-timeline-inset"
95377
95895
  },
95378
95896
  {
95897
+ "keywords": [
95898
+ "none"
95899
+ ],
95379
95900
  "name": "view-timeline-name"
95380
95901
  },
95381
95902
  {
@@ -95499,6 +96020,11 @@ const generatedProperties = [
95499
96020
  }
95500
96021
  ];
95501
96022
  const generatedPropertyValues = {
96023
+ "-alternative-webkit-line-clamp-longhand": {
96024
+ "values": [
96025
+ "none"
96026
+ ]
96027
+ },
95502
96028
  "-webkit-box-align": {
95503
96029
  "values": [
95504
96030
  "stretch",
@@ -95534,6 +96060,14 @@ const generatedPropertyValues = {
95534
96060
  "justify"
95535
96061
  ]
95536
96062
  },
96063
+ "-webkit-font-smoothing": {
96064
+ "values": [
96065
+ "auto",
96066
+ "none",
96067
+ "antialiased",
96068
+ "subpixel-antialiased"
96069
+ ]
96070
+ },
95537
96071
  "-webkit-line-break": {
95538
96072
  "values": [
95539
96073
  "auto",
@@ -95548,12 +96082,52 @@ const generatedPropertyValues = {
95548
96082
  "none"
95549
96083
  ]
95550
96084
  },
96085
+ "-webkit-locale": {
96086
+ "values": [
96087
+ "auto"
96088
+ ]
96089
+ },
96090
+ "-webkit-mask-box-image-repeat": {
96091
+ "values": [
96092
+ "repeat",
96093
+ "stretch",
96094
+ "space",
96095
+ "round"
96096
+ ]
96097
+ },
96098
+ "-webkit-mask-box-image-source": {
96099
+ "values": [
96100
+ "none"
96101
+ ]
96102
+ },
96103
+ "-webkit-mask-box-image-width": {
96104
+ "values": [
96105
+ "auto"
96106
+ ]
96107
+ },
95551
96108
  "-webkit-rtl-ordering": {
95552
96109
  "values": [
95553
96110
  "logical",
95554
96111
  "visual"
95555
96112
  ]
95556
96113
  },
96114
+ "-webkit-text-combine": {
96115
+ "values": [
96116
+ "none",
96117
+ "horizontal"
96118
+ ]
96119
+ },
96120
+ "-webkit-text-decorations-in-effect": {
96121
+ "values": [
96122
+ "none",
96123
+ "blink",
96124
+ "line-through",
96125
+ "overline",
96126
+ "underline",
96127
+ "spelling-error",
96128
+ "grammar-error"
96129
+ ]
96130
+ },
95557
96131
  "-webkit-text-security": {
95558
96132
  "values": [
95559
96133
  "none",
@@ -95582,6 +96156,22 @@ const generatedPropertyValues = {
95582
96156
  "currentcolor"
95583
96157
  ]
95584
96158
  },
96159
+ "align-self": {
96160
+ "values": [
96161
+ "auto",
96162
+ "normal",
96163
+ "stretch",
96164
+ "baseline",
96165
+ "center",
96166
+ "start",
96167
+ "end",
96168
+ "self-start",
96169
+ "self-end",
96170
+ "flex-start",
96171
+ "flex-end",
96172
+ "anchor-center"
96173
+ ]
96174
+ },
95585
96175
  "alignment-baseline": {
95586
96176
  "values": [
95587
96177
  "auto",
@@ -95624,6 +96214,11 @@ const generatedPropertyValues = {
95624
96214
  "alternate-reverse"
95625
96215
  ]
95626
96216
  },
96217
+ "animation-duration": {
96218
+ "values": [
96219
+ "auto"
96220
+ ]
96221
+ },
95627
96222
  "animation-fill-mode": {
95628
96223
  "values": [
95629
96224
  "none",
@@ -95681,6 +96276,24 @@ const generatedPropertyValues = {
95681
96276
  "no-drag"
95682
96277
  ]
95683
96278
  },
96279
+ "appearance": {
96280
+ "values": [
96281
+ "auto",
96282
+ "none",
96283
+ "checkbox",
96284
+ "radio",
96285
+ "button",
96286
+ "listbox",
96287
+ "menulist",
96288
+ "menulist-button",
96289
+ "meter",
96290
+ "progress-bar",
96291
+ "searchfield",
96292
+ "textfield",
96293
+ "textarea",
96294
+ "base-select"
96295
+ ]
96296
+ },
95684
96297
  "aspect-ratio": {
95685
96298
  "values": [
95686
96299
  "auto"
@@ -95740,7 +96353,6 @@ const generatedPropertyValues = {
95740
96353
  },
95741
96354
  "background-image": {
95742
96355
  "values": [
95743
- "auto",
95744
96356
  "none"
95745
96357
  ]
95746
96358
  },
@@ -95783,6 +96395,48 @@ const generatedPropertyValues = {
95783
96395
  "auto"
95784
96396
  ]
95785
96397
  },
96398
+ "border-block-end-style": {
96399
+ "values": [
96400
+ "none",
96401
+ "hidden",
96402
+ "inset",
96403
+ "groove",
96404
+ "outset",
96405
+ "ridge",
96406
+ "dotted",
96407
+ "dashed",
96408
+ "solid",
96409
+ "double"
96410
+ ]
96411
+ },
96412
+ "border-block-end-width": {
96413
+ "values": [
96414
+ "medium",
96415
+ "thick",
96416
+ "thin"
96417
+ ]
96418
+ },
96419
+ "border-block-start-style": {
96420
+ "values": [
96421
+ "none",
96422
+ "hidden",
96423
+ "inset",
96424
+ "groove",
96425
+ "outset",
96426
+ "ridge",
96427
+ "dotted",
96428
+ "dashed",
96429
+ "solid",
96430
+ "double"
96431
+ ]
96432
+ },
96433
+ "border-block-start-width": {
96434
+ "values": [
96435
+ "medium",
96436
+ "thick",
96437
+ "thin"
96438
+ ]
96439
+ },
95786
96440
  "border-bottom-color": {
95787
96441
  "values": [
95788
96442
  "currentcolor"
@@ -95815,6 +96469,15 @@ const generatedPropertyValues = {
95815
96469
  "collapse"
95816
96470
  ]
95817
96471
  },
96472
+ "border-image": {
96473
+ "values": [
96474
+ "none",
96475
+ "repeat",
96476
+ "stretch",
96477
+ "space",
96478
+ "round"
96479
+ ]
96480
+ },
95818
96481
  "border-image-repeat": {
95819
96482
  "values": [
95820
96483
  "stretch",
@@ -95833,6 +96496,48 @@ const generatedPropertyValues = {
95833
96496
  "auto"
95834
96497
  ]
95835
96498
  },
96499
+ "border-inline-end-style": {
96500
+ "values": [
96501
+ "none",
96502
+ "hidden",
96503
+ "inset",
96504
+ "groove",
96505
+ "outset",
96506
+ "ridge",
96507
+ "dotted",
96508
+ "dashed",
96509
+ "solid",
96510
+ "double"
96511
+ ]
96512
+ },
96513
+ "border-inline-end-width": {
96514
+ "values": [
96515
+ "medium",
96516
+ "thick",
96517
+ "thin"
96518
+ ]
96519
+ },
96520
+ "border-inline-start-style": {
96521
+ "values": [
96522
+ "none",
96523
+ "hidden",
96524
+ "inset",
96525
+ "groove",
96526
+ "outset",
96527
+ "ridge",
96528
+ "dotted",
96529
+ "dashed",
96530
+ "solid",
96531
+ "double"
96532
+ ]
96533
+ },
96534
+ "border-inline-start-width": {
96535
+ "values": [
96536
+ "medium",
96537
+ "thick",
96538
+ "thin"
96539
+ ]
96540
+ },
95836
96541
  "border-left-color": {
95837
96542
  "values": [
95838
96543
  "currentcolor"
@@ -96184,11 +96889,21 @@ const generatedPropertyValues = {
96184
96889
  "block-size"
96185
96890
  ]
96186
96891
  },
96892
+ "contain-intrinsic-block-size": {
96893
+ "values": [
96894
+ "none"
96895
+ ]
96896
+ },
96187
96897
  "contain-intrinsic-height": {
96188
96898
  "values": [
96189
96899
  "none"
96190
96900
  ]
96191
96901
  },
96902
+ "contain-intrinsic-inline-size": {
96903
+ "values": [
96904
+ "none"
96905
+ ]
96906
+ },
96192
96907
  "contain-intrinsic-width": {
96193
96908
  "values": [
96194
96909
  "none"
@@ -96208,6 +96923,16 @@ const generatedPropertyValues = {
96208
96923
  "anchored"
96209
96924
  ]
96210
96925
  },
96926
+ "content": {
96927
+ "values": [
96928
+ "none",
96929
+ "normal",
96930
+ "close-quote",
96931
+ "no-close-quote",
96932
+ "no-open-quote",
96933
+ "open-quote"
96934
+ ]
96935
+ },
96211
96936
  "content-visibility": {
96212
96937
  "values": [
96213
96938
  "visible",
@@ -96794,12 +97519,18 @@ const generatedPropertyValues = {
96794
97519
  },
96795
97520
  "grid-template-columns": {
96796
97521
  "values": [
96797
- "none"
97522
+ "auto",
97523
+ "none",
97524
+ "min-content",
97525
+ "max-content"
96798
97526
  ]
96799
97527
  },
96800
97528
  "grid-template-rows": {
96801
97529
  "values": [
96802
- "none"
97530
+ "auto",
97531
+ "none",
97532
+ "min-content",
97533
+ "max-content"
96803
97534
  ]
96804
97535
  },
96805
97536
  "hanging-punctuation": {
@@ -96818,6 +97549,11 @@ const generatedPropertyValues = {
96818
97549
  "max-content"
96819
97550
  ]
96820
97551
  },
97552
+ "hyphenate-character": {
97553
+ "values": [
97554
+ "auto"
97555
+ ]
97556
+ },
96821
97557
  "hyphenate-limit-chars": {
96822
97558
  "values": [
96823
97559
  "auto"
@@ -96838,6 +97574,12 @@ const generatedPropertyValues = {
96838
97574
  "stopped"
96839
97575
  ]
96840
97576
  },
97577
+ "image-orientation": {
97578
+ "values": [
97579
+ "none",
97580
+ "from-image"
97581
+ ]
97582
+ },
96841
97583
  "image-rendering": {
96842
97584
  "values": [
96843
97585
  "auto",
@@ -96860,6 +97602,26 @@ const generatedPropertyValues = {
96860
97602
  "auto"
96861
97603
  ]
96862
97604
  },
97605
+ "inset-block-end": {
97606
+ "values": [
97607
+ "auto"
97608
+ ]
97609
+ },
97610
+ "inset-block-start": {
97611
+ "values": [
97612
+ "auto"
97613
+ ]
97614
+ },
97615
+ "inset-inline-end": {
97616
+ "values": [
97617
+ "auto"
97618
+ ]
97619
+ },
97620
+ "inset-inline-start": {
97621
+ "values": [
97622
+ "auto"
97623
+ ]
97624
+ },
96863
97625
  "interactivity": {
96864
97626
  "values": [
96865
97627
  "auto",
@@ -96878,6 +97640,24 @@ const generatedPropertyValues = {
96878
97640
  "isolate"
96879
97641
  ]
96880
97642
  },
97643
+ "justify-self": {
97644
+ "values": [
97645
+ "auto",
97646
+ "normal",
97647
+ "stretch",
97648
+ "baseline",
97649
+ "center",
97650
+ "start",
97651
+ "end",
97652
+ "self-start",
97653
+ "self-end",
97654
+ "flex-start",
97655
+ "flex-end",
97656
+ "left",
97657
+ "right",
97658
+ "anchor-center"
97659
+ ]
97660
+ },
96881
97661
  "left": {
96882
97662
  "values": [
96883
97663
  "auto"
@@ -96903,6 +97683,15 @@ const generatedPropertyValues = {
96903
97683
  "after-white-space"
96904
97684
  ]
96905
97685
  },
97686
+ "line-clamp": {
97687
+ "values": [
97688
+ "none",
97689
+ "auto",
97690
+ "ellipsis",
97691
+ "no-ellipsis",
97692
+ "-webkit-legacy"
97693
+ ]
97694
+ },
96906
97695
  "line-height": {
96907
97696
  "values": [
96908
97697
  "normal"
@@ -96993,6 +97782,11 @@ const generatedPropertyValues = {
96993
97782
  "exclude"
96994
97783
  ]
96995
97784
  },
97785
+ "mask-image": {
97786
+ "values": [
97787
+ "none"
97788
+ ]
97789
+ },
96996
97790
  "mask-mode": {
96997
97791
  "values": [
96998
97792
  "alpha",
@@ -97000,6 +97794,13 @@ const generatedPropertyValues = {
97000
97794
  "match-source"
97001
97795
  ]
97002
97796
  },
97797
+ "mask-size": {
97798
+ "values": [
97799
+ "auto",
97800
+ "contain",
97801
+ "cover"
97802
+ ]
97803
+ },
97003
97804
  "mask-type": {
97004
97805
  "values": [
97005
97806
  "luminance",
@@ -97043,6 +97844,42 @@ const generatedPropertyValues = {
97043
97844
  "none"
97044
97845
  ]
97045
97846
  },
97847
+ "min-block-size": {
97848
+ "values": [
97849
+ "auto",
97850
+ "min-content",
97851
+ "max-content",
97852
+ "fit-content",
97853
+ "stretch"
97854
+ ]
97855
+ },
97856
+ "min-height": {
97857
+ "values": [
97858
+ "auto",
97859
+ "min-content",
97860
+ "max-content",
97861
+ "fit-content",
97862
+ "stretch"
97863
+ ]
97864
+ },
97865
+ "min-inline-size": {
97866
+ "values": [
97867
+ "auto",
97868
+ "min-content",
97869
+ "max-content",
97870
+ "fit-content",
97871
+ "stretch"
97872
+ ]
97873
+ },
97874
+ "min-width": {
97875
+ "values": [
97876
+ "auto",
97877
+ "min-content",
97878
+ "max-content",
97879
+ "fit-content",
97880
+ "stretch"
97881
+ ]
97882
+ },
97046
97883
  "mix-blend-mode": {
97047
97884
  "values": [
97048
97885
  "normal",
@@ -97106,6 +97943,23 @@ const generatedPropertyValues = {
97106
97943
  "none"
97107
97944
  ]
97108
97945
  },
97946
+ "outline": {
97947
+ "values": [
97948
+ "auto",
97949
+ "none",
97950
+ "inset",
97951
+ "groove",
97952
+ "ridge",
97953
+ "outset",
97954
+ "dotted",
97955
+ "dashed",
97956
+ "solid",
97957
+ "double",
97958
+ "medium",
97959
+ "thick",
97960
+ "thin"
97961
+ ]
97962
+ },
97109
97963
  "outline-color": {
97110
97964
  "values": [
97111
97965
  "currentcolor"
@@ -97179,6 +98033,13 @@ const generatedPropertyValues = {
97179
98033
  "auto"
97180
98034
  ]
97181
98035
  },
98036
+ "overscroll-behavior": {
98037
+ "values": [
98038
+ "auto",
98039
+ "none",
98040
+ "contain"
98041
+ ]
98042
+ },
97182
98043
  "overscroll-behavior-x": {
97183
98044
  "values": [
97184
98045
  "auto",
@@ -97200,6 +98061,15 @@ const generatedPropertyValues = {
97200
98061
  "auto"
97201
98062
  ]
97202
98063
  },
98064
+ "page-break-before": {
98065
+ "values": [
98066
+ "auto",
98067
+ "left",
98068
+ "right",
98069
+ "always",
98070
+ "avoid"
98071
+ ]
98072
+ },
97203
98073
  "page-margin-safety": {
97204
98074
  "values": [
97205
98075
  "none",
@@ -97252,7 +98122,8 @@ const generatedPropertyValues = {
97252
98122
  "position-anchor": {
97253
98123
  "values": [
97254
98124
  "auto",
97255
- "none"
98125
+ "none",
98126
+ "normal"
97256
98127
  ]
97257
98128
  },
97258
98129
  "position-area": {
@@ -97458,6 +98329,13 @@ const generatedPropertyValues = {
97458
98329
  "nearest"
97459
98330
  ]
97460
98331
  },
98332
+ "scroll-marker-group": {
98333
+ "values": [
98334
+ "none",
98335
+ "after",
98336
+ "before"
98337
+ ]
98338
+ },
97461
98339
  "scroll-padding-block-end": {
97462
98340
  "values": [
97463
98341
  "auto"
@@ -97530,6 +98408,11 @@ const generatedPropertyValues = {
97530
98408
  "auto"
97531
98409
  ]
97532
98410
  },
98411
+ "scroll-timeline-name": {
98412
+ "values": [
98413
+ "none"
98414
+ ]
98415
+ },
97533
98416
  "scrollbar-color": {
97534
98417
  "values": [
97535
98418
  "auto"
@@ -97549,11 +98432,6 @@ const generatedPropertyValues = {
97549
98432
  "none"
97550
98433
  ]
97551
98434
  },
97552
- "shape-margin": {
97553
- "values": [
97554
- "none"
97555
- ]
97556
- },
97557
98435
  "shape-outside": {
97558
98436
  "values": [
97559
98437
  "none"
@@ -97567,6 +98445,13 @@ const generatedPropertyValues = {
97567
98445
  "geometricprecision"
97568
98446
  ]
97569
98447
  },
98448
+ "size": {
98449
+ "values": [
98450
+ "auto",
98451
+ "portrait",
98452
+ "landscape"
98453
+ ]
98454
+ },
97570
98455
  "speak": {
97571
98456
  "values": [
97572
98457
  "none",
@@ -97646,6 +98531,14 @@ const generatedPropertyValues = {
97646
98531
  "normal"
97647
98532
  ]
97648
98533
  },
98534
+ "text-box-edge": {
98535
+ "values": [
98536
+ "auto",
98537
+ "text",
98538
+ "cap",
98539
+ "ex"
98540
+ ]
98541
+ },
97649
98542
  "text-box-trim": {
97650
98543
  "values": [
97651
98544
  "none",
@@ -97798,6 +98691,29 @@ const generatedPropertyValues = {
97798
98691
  "stable"
97799
98692
  ]
97800
98693
  },
98694
+ "timeline-scope": {
98695
+ "values": [
98696
+ "none",
98697
+ "all"
98698
+ ]
98699
+ },
98700
+ "timeline-trigger-active-range-end": {
98701
+ "values": [
98702
+ "auto",
98703
+ "normal"
98704
+ ]
98705
+ },
98706
+ "timeline-trigger-active-range-start": {
98707
+ "values": [
98708
+ "auto",
98709
+ "normal"
98710
+ ]
98711
+ },
98712
+ "timeline-trigger-name": {
98713
+ "values": [
98714
+ "none"
98715
+ ]
98716
+ },
97801
98717
  "timeline-trigger-source": {
97802
98718
  "values": [
97803
98719
  "none",
@@ -97910,6 +98826,16 @@ const generatedPropertyValues = {
97910
98826
  "middle"
97911
98827
  ]
97912
98828
  },
98829
+ "view-timeline-inset": {
98830
+ "values": [
98831
+ "auto"
98832
+ ]
98833
+ },
98834
+ "view-timeline-name": {
98835
+ "values": [
98836
+ "none"
98837
+ ]
98838
+ },
97913
98839
  "view-transition-class": {
97914
98840
  "values": [
97915
98841
  "none"
@@ -98487,6 +99413,11 @@ class CSSMetadata {
98487
99413
  for (let i = 0; i < properties.length; ++i) {
98488
99414
  const property = properties[i];
98489
99415
  const propertyName = property.name;
99416
+ if ('is_descriptor' in property && 'is_property' in property) {
99417
+ if (property.is_descriptor && !property.is_property) {
99418
+ continue;
99419
+ }
99420
+ }
98490
99421
  if (!CSS.supports(propertyName, 'initial')) {
98491
99422
  continue;
98492
99423
  }
@@ -98527,6 +99458,15 @@ class CSSMetadata {
98527
99458
  }
98528
99459
  }
98529
99460
  for (const [propertyName, values] of propertyValueSets) {
99461
+ const aliasFor = this.#aliasesFor.get(propertyName);
99462
+ if (aliasFor) {
99463
+ const aliasForValues = propertyValueSets.get(aliasFor);
99464
+ if (aliasForValues) {
99465
+ for (const val of aliasForValues) {
99466
+ values.add(val);
99467
+ }
99468
+ }
99469
+ }
98530
99470
  for (const commonKeyword of CommonKeywords) {
98531
99471
  if (!values.has(commonKeyword) && CSS.supports(propertyName, commonKeyword)) {
98532
99472
  values.add(commonKeyword);
@@ -99714,6 +100654,7 @@ const extraPropertyValues = new Map([
99714
100654
  'superellipse(infinity)',
99715
100655
  ]),
99716
100656
  ],
100657
+ ['outline-style', new Set(['auto'])],
99717
100658
  ]);
99718
100659
  const Weight = new Map([
99719
100660
  ['align-content', 57],
@@ -100056,6 +100997,63 @@ class VariableMatcher extends matcherBase(VariableMatch) {
100056
100997
  null;
100057
100998
  }
100058
100999
  }
101000
+ class VariableNameMatch {
101001
+ node;
101002
+ text;
101003
+ matchedStyles;
101004
+ style;
101005
+ constructor(node, text, matchedStyles, style) {
101006
+ this.node = node;
101007
+ this.text = text;
101008
+ this.matchedStyles = matchedStyles;
101009
+ this.style = style;
101010
+ }
101011
+ resolveVariable() {
101012
+ return this.matchedStyles.computeCSSVariable(this.style, this.text);
101013
+ }
101014
+ }
101015
+ class VariableNameMatcher extends matcherBase(VariableNameMatch) {
101016
+ matchedStyles;
101017
+ style;
101018
+ constructor(matchedStyles, style) {
101019
+ super();
101020
+ this.matchedStyles = matchedStyles;
101021
+ this.style = style;
101022
+ }
101023
+ accepts() {
101024
+ return true;
101025
+ }
101026
+ matches(node, matching) {
101027
+ if (node.name !== 'VariableName' && node.name !== 'FeatureName' && node.name !== 'KeywordQuery') {
101028
+ return null;
101029
+ }
101030
+ const rawText = matching.ast.text(node);
101031
+ if (!rawText.startsWith('--')) {
101032
+ return null;
101033
+ }
101034
+ let cur = node.parent;
101035
+ let foundStyleCall = null;
101036
+ while (cur) {
101037
+ if (cur.name === 'CallExpression') {
101038
+ return null;
101039
+ }
101040
+ if (cur.name === 'CallQuery') {
101041
+ const callee = cur.getChild('QueryCallee');
101042
+ if (callee && matching.ast.text(callee) === 'style') {
101043
+ foundStyleCall = cur;
101044
+ break;
101045
+ }
101046
+ return null;
101047
+ }
101048
+ cur = cur.parent;
101049
+ }
101050
+ if (!foundStyleCall) {
101051
+ return null;
101052
+ }
101053
+ const text = node.name === 'KeywordQuery' ? rawText.split(/\s|[>!=<:]/)[0] : rawText;
101054
+ return new VariableNameMatch(node, text, this.matchedStyles, this.style);
101055
+ }
101056
+ }
100059
101057
  class AttributeMatch extends BaseVariableMatch {
100060
101058
  type;
100061
101059
  isCSSTokens;
@@ -100428,8 +101426,7 @@ class ColorMatcher extends matcherBase(ColorMatch) {
100428
101426
  if (callee && colorFunc.match(/^(rgba?|hsla?|hwba?|lab|lch|oklab|oklch|color)$/)) {
100429
101427
  const args = ASTUtils.children(node.getChild('ArgList'));
100430
101428
  const colorText = args.length >= 2 ? matching.getComputedTextRange(args[0], args[args.length - 1]) : '';
100431
- const isRelativeColorSyntax = Boolean(colorText.match(/^[^)]*\(\W*from\W+/) && !matching.hasUnresolvedSubstitutions(node) &&
100432
- CSS.supports('color', colorFunc + colorText));
101429
+ const isRelativeColorSyntax = Boolean(colorText.match(/^[^)]*\(\W*from\W+/) && !matching.hasUnresolvedSubstitutions(node));
100433
101430
  if (!isRelativeColorSyntax) {
100434
101431
  return new ColorMatch(text, node);
100435
101432
  }
@@ -102809,6 +103806,7 @@ class CSSFunctionRule extends CSSRule {
102809
103806
  styleSheetId: payload.styleSheetId
102810
103807
  },
102811
103808
  header: styleSheetHeaderForRule(cssModel, payload),
103809
+ originTreeScopeNodeId: payload.originTreeScopeNodeId
102812
103810
  });
102813
103811
  this.#name = new CSSValue(payload.name);
102814
103812
  this.#parameters = payload.parameters.map(({ name }) => name);
@@ -103038,6 +104036,27 @@ function queryMatches(style) {
103038
104036
  }
103039
104037
  return true;
103040
104038
  }
104039
+ function treeScopeDistance(node, property) {
104040
+ if (!property.ownerStyle.parentRule && property.ownerStyle.type !== Type$3.Inline) {
104041
+ return -1;
104042
+ }
104043
+ const root = node.getTreeRoot();
104044
+ const nodeId = property.ownerStyle.parentRule?.treeScope ?? root?.backendNodeId();
104045
+ if (nodeId === undefined) {
104046
+ return -1;
104047
+ }
104048
+ return distanceToTreeScope(node, nodeId);
104049
+ }
104050
+ function distanceToTreeScope(node, treeScope) {
104051
+ let distance = 0;
104052
+ for (let ancestor = node; ancestor; ancestor = ancestor.parentNode) {
104053
+ if (ancestor.backendNodeId() === treeScope) {
104054
+ return distance;
104055
+ }
104056
+ distance++;
104057
+ }
104058
+ return -1;
104059
+ }
103041
104060
  class CSSRegisteredProperty {
103042
104061
  #registration;
103043
104062
  #cssModel;
@@ -103153,7 +104172,9 @@ class CSSMatchedStyles {
103153
104172
  this.#registeredPropertyMap.set(prop.propertyName(), prop);
103154
104173
  }
103155
104174
  for (const rule of this.#functionRules) {
103156
- this.#functionRuleMap.set(rule.functionName().text, rule);
104175
+ const rules = this.#functionRuleMap.get(rule.functionName().text) ?? [];
104176
+ rules.push(rule);
104177
+ this.#functionRuleMap.set(rule.functionName().text, rules);
103157
104178
  }
103158
104179
  }
103159
104180
  async buildMainCascade(inlinePayload, attributesPayload, matchedPayload, inheritedPayload, animationStylesPayload, transitionsStylePayload, inheritedAnimatedPayload) {
@@ -103468,9 +104489,23 @@ class CSSMatchedStyles {
103468
104489
  getRegisteredProperty(name) {
103469
104490
  return this.#registeredPropertyMap.get(name);
103470
104491
  }
103471
- getRegisteredFunction(name) {
103472
- const functionRule = this.#functionRuleMap.get(name);
103473
- return functionRule ? functionRule.nameWithParameters() : undefined;
104492
+ getRegisteredFunction(name, sourceProperty) {
104493
+ const minTreeScopeDistance = treeScopeDistance(this.#node, sourceProperty);
104494
+ const functionRules = this.#functionRuleMap.get(name) ?? [];
104495
+ let result = { treeScopeDistance: -1 };
104496
+ for (const functionRule of functionRules) {
104497
+ if (!functionRule.treeScope) {
104498
+ continue;
104499
+ }
104500
+ const distance = distanceToTreeScope(this.#node, functionRule.treeScope);
104501
+ if (distance === -1 || distance < minTreeScopeDistance) {
104502
+ continue;
104503
+ }
104504
+ if (result.treeScopeDistance === -1 || distance < result.treeScopeDistance) {
104505
+ result = { registeredFunction: functionRule.nameWithParameters(), treeScopeDistance: distance };
104506
+ }
104507
+ }
104508
+ return result;
103474
104509
  }
103475
104510
  functionRules() {
103476
104511
  return this.#functionRules;
@@ -103578,6 +104613,7 @@ class CSSMatchedStyles {
103578
104613
  propertyMatchers(style, computedStyles) {
103579
104614
  return [
103580
104615
  new VariableMatcher(this, style),
104616
+ new VariableNameMatcher(this, style),
103581
104617
  new ColorMatcher(() => computedStyles?.get('color') ?? null),
103582
104618
  new ColorMixMatcher(),
103583
104619
  new ContrastColorMatcher(),
@@ -103673,24 +104709,6 @@ class NodeCascade {
103673
104709
  }
103674
104710
  }
103675
104711
  }
103676
- #treeScopeDistance(property) {
103677
- if (!property.ownerStyle.parentRule && property.ownerStyle.type !== Type$3.Inline) {
103678
- return -1;
103679
- }
103680
- const root = this.#node.getTreeRoot();
103681
- const nodeId = property.ownerStyle.parentRule?.treeScope ?? root?.backendNodeId();
103682
- if (nodeId === undefined) {
103683
- return -1;
103684
- }
103685
- let distance = 0;
103686
- for (let ancestor = this.#node; ancestor; ancestor = ancestor.parentNode) {
103687
- if (ancestor.backendNodeId() === nodeId) {
103688
- return distance;
103689
- }
103690
- distance++;
103691
- }
103692
- return -1;
103693
- }
103694
104712
  #needsCascadeContextStep() {
103695
104713
  if (!this.#node.isInShadowTree()) {
103696
104714
  return false;
@@ -103705,7 +104723,8 @@ class NodeCascade {
103705
104723
  const activeProperty = this.activeProperties.get(canonicalName);
103706
104724
  if (activeProperty?.important && !propertyWithHigherSpecificity.important ||
103707
104725
  activeProperty && this.#needsCascadeContextStep() &&
103708
- this.#treeScopeDistance(activeProperty) > this.#treeScopeDistance(propertyWithHigherSpecificity)) {
104726
+ treeScopeDistance(this.#node, activeProperty) >
104727
+ treeScopeDistance(this.#node, propertyWithHigherSpecificity)) {
103709
104728
  this.propertiesState.set(propertyWithHigherSpecificity, "Overloaded" );
103710
104729
  return;
103711
104730
  }
@@ -105664,10 +106683,6 @@ const UIStrings$15 = {
105664
106683
  thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize: 'This attempt to set a cookie via a `Set-Cookie` header was blocked because the cookie was too large. The combined size of the name and value must be less than or equal to 4096 characters.',
105665
106684
  setcookieHeaderIsIgnoredIn: 'Set-Cookie header is ignored in response from url: {PH1}. The combined size of the name and value must be less than or equal to 4096 characters.',
105666
106685
  exemptionReasonUserSetting: 'This cookie is allowed by user preference.',
105667
- exemptionReasonTPCDMetadata: 'This cookie is allowed by a third-party cookie deprecation trial grace period. Learn more: goo.gle/dt-grace.',
105668
- exemptionReasonTPCDDeprecationTrial: 'This cookie is allowed by third-party cookie deprecation trial. Learn more: goo.gle/ps-dt.',
105669
- exemptionReasonTopLevelTPCDDeprecationTrial: 'This cookie is allowed by top-level third-party cookie deprecation trial. Learn more: goo.gle/ps-dt.',
105670
- exemptionReasonTPCDHeuristics: 'This cookie is allowed by third-party cookie heuristics. Learn more: goo.gle/hbe',
105671
106686
  exemptionReasonEnterprisePolicy: 'This cookie is allowed by Chrome Enterprise policy. Learn more: goo.gle/ce-3pc',
105672
106687
  exemptionReasonStorageAccessAPI: 'This cookie is allowed by the Storage Access API. Learn more: goo.gle/saa',
105673
106688
  exemptionReasonTopLevelStorageAccessAPI: 'This cookie is allowed by the top-level Storage Access API. Learn more: goo.gle/saa-top',
@@ -105774,6 +106789,7 @@ class NetworkRequest extends ObjectWrapper {
105774
106789
  #contentDataProvider;
105775
106790
  #isSameSite = null;
105776
106791
  #wasIntercepted = false;
106792
+ #isImportedHar = false;
105777
106793
  #associatedData = new Map();
105778
106794
  #hasOverriddenContent = false;
105779
106795
  #hasThirdPartyCookiePhaseoutIssue = false;
@@ -106370,6 +107386,12 @@ class NetworkRequest extends ObjectWrapper {
106370
107386
  setWasIntercepted(wasIntercepted) {
106371
107387
  this.#wasIntercepted = wasIntercepted;
106372
107388
  }
107389
+ isImportedHar() {
107390
+ return this.#isImportedHar;
107391
+ }
107392
+ setIsImportedHar(isImportedHar) {
107393
+ this.#isImportedHar = isImportedHar;
107394
+ }
106373
107395
  setEarlyHintsHeaders(headers) {
106374
107396
  this.earlyHintsHeaders = headers;
106375
107397
  }
@@ -111416,22 +112438,20 @@ class SourceMap {
111416
112438
  nameIndex += tokenIter.nextVLQ();
111417
112439
  this.mappings().push(new SourceMapEntry(lineNumber, columnNumber, sourceIndex, sourceURL, sourceLineNumber, sourceColumnNumber, names[nameIndex]));
111418
112440
  }
111419
- if (experiments.isEnabled(ExperimentName.USE_SOURCE_MAP_SCOPES)) {
111420
- if (!this.#scopesInfo) {
111421
- this.#scopesInfo = new SourceMapScopesInfo(this, { scopes: [], ranges: [] });
111422
- }
111423
- if (map.scopes) {
111424
- const { scopes, ranges } = decode(map, { mode: 2 , generatedOffset: { line: baseLineNumber, column: baseColumnNumber } });
111425
- this.#scopesInfo.addOriginalScopes(scopes);
111426
- this.#scopesInfo.addGeneratedRanges(ranges);
111427
- }
111428
- else if (map.x_com_bloomberg_sourcesFunctionMappings) {
111429
- const originalScopes = this.parseBloombergScopes(map);
111430
- this.#scopesInfo.addOriginalScopes(originalScopes);
111431
- }
111432
- else {
111433
- this.#scopesInfo.addOriginalScopes(new Array(map.sources.length).fill(null));
111434
- }
112441
+ if (!this.#scopesInfo) {
112442
+ this.#scopesInfo = new SourceMapScopesInfo(this, { scopes: [], ranges: [] });
112443
+ }
112444
+ if (map.scopes) {
112445
+ const { scopes, ranges } = decode(map, { mode: 2 , generatedOffset: { line: baseLineNumber, column: baseColumnNumber } });
112446
+ this.#scopesInfo.addOriginalScopes(scopes);
112447
+ this.#scopesInfo.addGeneratedRanges(ranges);
112448
+ }
112449
+ else if (map.x_com_bloomberg_sourcesFunctionMappings) {
112450
+ const originalScopes = this.parseBloombergScopes(map);
112451
+ this.#scopesInfo.addOriginalScopes(originalScopes);
112452
+ }
112453
+ else {
112454
+ this.#scopesInfo.addOriginalScopes(new Array(map.sources.length).fill(null));
111435
112455
  }
111436
112456
  }
111437
112457
  parseBloombergScopes(map) {
@@ -118460,6 +119480,10 @@ class DebuggerModel extends SDKModel {
118460
119480
  scriptForId(scriptId) {
118461
119481
  return this.#scripts.get(scriptId) || null;
118462
119482
  }
119483
+ isWasm(scriptId) {
119484
+ const script = this.scriptForId(scriptId);
119485
+ return script ? script.isWasm() : false;
119486
+ }
118463
119487
  scriptsForSourceURL(sourceURL) {
118464
119488
  return this.#scriptsBySourceURL.get(sourceURL) || [];
118465
119489
  }
@@ -118604,10 +119628,10 @@ class DebuggerModel extends SDKModel {
118604
119628
  this.dispatchEventToListeners(Events$5.DiscardedAnonymousScriptSource, script);
118605
119629
  }
118606
119630
  }
118607
- createRawLocation(script, lineNumber, columnNumber, inlineFrameIndex) {
118608
- return this.createRawLocationByScriptId(script.scriptId, lineNumber, columnNumber, inlineFrameIndex);
119631
+ createRawLocation(script, lineNumber, columnNumber) {
119632
+ return this.createRawLocationByScriptId(script.scriptId, lineNumber, columnNumber);
118609
119633
  }
118610
- createRawLocationByURL(sourceURL, lineNumber, columnNumber, inlineFrameIndex) {
119634
+ createRawLocationByURL(sourceURL, lineNumber, columnNumber) {
118611
119635
  for (const script of this.#scriptsBySourceURL.get(sourceURL) || []) {
118612
119636
  if (script.lineOffset > lineNumber ||
118613
119637
  (script.lineOffset === lineNumber && columnNumber !== undefined && script.columnOffset > columnNumber)) {
@@ -118617,12 +119641,12 @@ class DebuggerModel extends SDKModel {
118617
119641
  (script.endLine === lineNumber && columnNumber !== undefined && script.endColumn <= columnNumber)) {
118618
119642
  continue;
118619
119643
  }
118620
- return new Location$2(this, script.scriptId, lineNumber, columnNumber, inlineFrameIndex);
119644
+ return new Location$2(this, script.scriptId, lineNumber, columnNumber);
118621
119645
  }
118622
119646
  return null;
118623
119647
  }
118624
- createRawLocationByScriptId(scriptId, lineNumber, columnNumber, inlineFrameIndex) {
118625
- return new Location$2(this, scriptId, lineNumber, columnNumber, inlineFrameIndex);
119648
+ createRawLocationByScriptId(scriptId, lineNumber, columnNumber) {
119649
+ return new Location$2(this, scriptId, lineNumber, columnNumber);
118626
119650
  }
118627
119651
  createRawLocationsByStackTrace(stackTrace) {
118628
119652
  const rawLocations = [];
@@ -120921,6 +121945,7 @@ class ConsoleMessage {
120921
121945
  #exceptionId = undefined;
120922
121946
  #affectedResources;
120923
121947
  category;
121948
+ exceptionDetails;
120924
121949
  stackFrameWithBreakpoint = null;
120925
121950
  #originatingBreakpointType = null;
120926
121951
  constructor(runtimeModel, source, level, messageText, details) {
@@ -120940,6 +121965,7 @@ class ConsoleMessage {
120940
121965
  this.workerId = details?.workerId;
120941
121966
  this.#affectedResources = details?.affectedResources;
120942
121967
  this.category = details?.category;
121968
+ this.exceptionDetails = details?.exceptionDetails;
120943
121969
  if (!this.#executionContextId && this.#runtimeModel) {
120944
121970
  if (this.scriptId) {
120945
121971
  this.#executionContextId = this.#runtimeModel.executionContextIdForScriptId(this.scriptId);
@@ -120978,6 +122004,7 @@ class ConsoleMessage {
120978
122004
  executionContextId: exceptionDetails.executionContextId,
120979
122005
  scriptId: exceptionDetails.scriptId,
120980
122006
  affectedResources,
122007
+ exceptionDetails,
120981
122008
  };
120982
122009
  return new ConsoleMessage(runtimeModel, "javascript" , "error" , RuntimeModel.simpleTextFromException(exceptionDetails), details);
120983
122010
  }
@@ -123837,7 +124864,7 @@ SDKModel.register(WebAuthnModel, { capabilities: 65536 , autostart: false });
123837
124864
 
123838
124865
  // Copyright 2026 The Chromium Authors
123839
124866
  const CALL_FRAME_REGEX = /^\s*at\s+/;
123840
- function parseRawFramesFromErrorStack(stack) {
124867
+ function parseRawFramesFromErrorStack(stack, resolveURL) {
123841
124868
  const lines = stack.split('\n');
123842
124869
  const firstAtLineIndex = findFramesStartLine(lines);
123843
124870
  const rawFrames = [];
@@ -123877,63 +124904,74 @@ function parseRawFramesFromErrorStack(stack) {
123877
124904
  let promiseIndex;
123878
124905
  let evalOrigin;
123879
124906
  const openParenIndex = lineContent.indexOf(' (');
124907
+ let location = '';
123880
124908
  if (lineContent.endsWith(')') && openParenIndex !== -1) {
123881
124909
  functionName = lineContent.substring(0, openParenIndex).trim();
123882
- let location = lineContent.substring(openParenIndex + 2, lineContent.length - 1);
123883
- if (location.startsWith('eval at ')) {
123884
- isEval = true;
123885
- const commaIndex = location.lastIndexOf(', ');
123886
- let evalOriginStr = location;
123887
- if (commaIndex !== -1) {
123888
- evalOriginStr = location.substring(0, commaIndex);
123889
- location = location.substring(commaIndex + 2);
123890
- }
123891
- else {
123892
- location = '';
123893
- }
123894
- if (evalOriginStr.startsWith('eval at ')) {
123895
- evalOriginStr = evalOriginStr.substring(8);
123896
- }
123897
- const innerOpenParen = evalOriginStr.indexOf(' (');
123898
- let evalFunctionName = evalOriginStr;
123899
- let evalLocation = '';
123900
- if (innerOpenParen !== -1) {
123901
- evalFunctionName = evalOriginStr.substring(0, innerOpenParen).trim();
123902
- evalLocation = evalOriginStr.substring(innerOpenParen + 2, evalOriginStr.length - 1);
123903
- evalOrigin = parseRawFramesFromErrorStack(` at ${evalFunctionName} (${evalLocation})`)?.[0];
123904
- }
123905
- else {
123906
- evalOrigin = parseRawFramesFromErrorStack(` at ${evalFunctionName}`)?.[0];
123907
- }
124910
+ location = lineContent.substring(openParenIndex + 2, lineContent.length - 1);
124911
+ }
124912
+ else if (lineContent.startsWith('(') && lineContent.endsWith(')')) {
124913
+ location = lineContent.substring(1, lineContent.length - 1);
124914
+ }
124915
+ else {
124916
+ location = lineContent;
124917
+ }
124918
+ if (location.startsWith('eval at ')) {
124919
+ isEval = true;
124920
+ const commaIndex = location.lastIndexOf(', ');
124921
+ let evalOriginStr = location;
124922
+ if (commaIndex !== -1) {
124923
+ evalOriginStr = location.substring(0, commaIndex);
124924
+ location = location.substring(commaIndex + 2);
123908
124925
  }
123909
- if (location.startsWith('index ')) {
123910
- promiseIndex = parseInt(location.substring(6), 10);
123911
- url = '';
124926
+ else {
124927
+ location = '';
123912
124928
  }
123913
- else if (location === '<anonymous>' || location === 'native') {
123914
- url = '';
124929
+ if (evalOriginStr.startsWith('eval at ')) {
124930
+ evalOriginStr = evalOriginStr.substring(8);
123915
124931
  }
123916
- else if (location.includes(':wasm-function[')) {
123917
- isWasm = true;
123918
- const wasmMatch = /^(.*):wasm-function\[(\d+)\]:(0x[0-9a-fA-F]+)$/.exec(location);
123919
- if (wasmMatch) {
123920
- url = wasmMatch[1];
123921
- wasmFunctionIndex = parseInt(wasmMatch[2], 10);
123922
- columnNumber = parseInt(wasmMatch[3], 16);
123923
- }
124932
+ const innerOpenParen = evalOriginStr.indexOf(' (');
124933
+ let evalFunctionName = evalOriginStr;
124934
+ let evalLocation = '';
124935
+ if (innerOpenParen !== -1) {
124936
+ evalFunctionName = evalOriginStr.substring(0, innerOpenParen).trim();
124937
+ evalLocation = evalOriginStr.substring(innerOpenParen + 2, evalOriginStr.length - 1);
124938
+ evalOrigin = parseRawFramesFromErrorStack(` at ${evalFunctionName} (${evalLocation})`, resolveURL)?.[0];
123924
124939
  }
123925
124940
  else {
123926
- const splitResult = ParsedURL.splitLineAndColumn(location);
123927
- url = splitResult.url;
123928
- lineNumber = splitResult.lineNumber ?? -1;
123929
- columnNumber = splitResult.columnNumber ?? -1;
124941
+ evalOrigin = parseRawFramesFromErrorStack(` at ${evalFunctionName}`, resolveURL)?.[0];
123930
124942
  }
123931
124943
  }
123932
- else {
123933
- const splitResult = ParsedURL.splitLineAndColumn(lineContent);
123934
- url = splitResult.url;
124944
+ if (location.startsWith('index ')) {
124945
+ promiseIndex = parseInt(location.substring(6), 10);
124946
+ url = '';
124947
+ }
124948
+ else if (location === '<anonymous>' || location === 'native') {
124949
+ url = '';
124950
+ }
124951
+ else if (location.includes(':wasm-function[')) {
124952
+ isWasm = true;
124953
+ const wasmMatch = /^(.*):wasm-function\[(\d+)\]:(0x[0-9a-fA-F]+)$/.exec(location);
124954
+ if (wasmMatch) {
124955
+ url = wasmMatch[1];
124956
+ wasmFunctionIndex = parseInt(wasmMatch[2], 10);
124957
+ columnNumber = parseInt(wasmMatch[3], 16);
124958
+ lineNumber = 0;
124959
+ }
124960
+ }
124961
+ else if (location) {
124962
+ const splitResult = ParsedURL.splitLineAndColumn(location);
123935
124963
  lineNumber = splitResult.lineNumber ?? -1;
123936
124964
  columnNumber = splitResult.columnNumber ?? -1;
124965
+ if (resolveURL && splitResult.url !== '<anonymous>' && splitResult.url !== 'native') {
124966
+ const resolved = resolveURL(splitResult.url);
124967
+ if (!resolved) {
124968
+ return null;
124969
+ }
124970
+ url = resolved;
124971
+ }
124972
+ else {
124973
+ url = splitResult.url;
124974
+ }
123937
124975
  }
123938
124976
  if (functionName) {
123939
124977
  const aliasMatch = /(.*)\s+\[as\s+(.*)\]/.exec(functionName);
@@ -123955,12 +124993,12 @@ function parseRawFramesFromErrorStack(stack) {
123955
124993
  functionName,
123956
124994
  lineNumber,
123957
124995
  columnNumber,
124996
+ isWasm,
123958
124997
  parsedFrameInfo: {
123959
124998
  isAsync,
123960
124999
  isConstructor,
123961
125000
  isEval,
123962
125001
  evalOrigin,
123963
- isWasm,
123964
125002
  wasmModuleName,
123965
125003
  wasmFunctionIndex,
123966
125004
  typeName,
@@ -123984,11 +125022,7 @@ function parseMessage(stack) {
123984
125022
  }
123985
125023
  function augmentRawFramesWithScriptIds(rawFrames, protocolStackTrace) {
123986
125024
  function augmentFrame(rawFrame) {
123987
- const isWasm = rawFrame.parsedFrameInfo?.isWasm;
123988
125025
  const protocolFrame = protocolStackTrace.callFrames.find(frame => {
123989
- if (isWasm) {
123990
- return rawFrame.url === frame.url && rawFrame.columnNumber === frame.columnNumber;
123991
- }
123992
125026
  return rawFrame.url === frame.url && rawFrame.lineNumber === frame.lineNumber &&
123993
125027
  rawFrame.columnNumber === frame.columnNumber;
123994
125028
  });
@@ -124062,7 +125096,9 @@ class FrameImpl {
124062
125096
  column;
124063
125097
  missingDebugInfo;
124064
125098
  rawName;
124065
- constructor(url, uiSourceCode, name, line, column, missingDebugInfo, rawName) {
125099
+ isWasm;
125100
+ isInline;
125101
+ constructor(url, uiSourceCode, name, line, column, missingDebugInfo, rawName, isWasm, isInline) {
124066
125102
  this.url = url;
124067
125103
  this.uiSourceCode = uiSourceCode;
124068
125104
  this.name = name;
@@ -124070,6 +125106,8 @@ class FrameImpl {
124070
125106
  this.column = column;
124071
125107
  this.missingDebugInfo = missingDebugInfo;
124072
125108
  this.rawName = rawName;
125109
+ this.isWasm = isWasm;
125110
+ this.isInline = isInline;
124073
125111
  }
124074
125112
  }
124075
125113
  function createParsedErrorStackFrameImplFromEvalOrigin(evalOrigin, parsedFrameInfo) {
@@ -124142,7 +125180,10 @@ class ParsedErrorStackFrameImpl {
124142
125180
  return this.#evalOrigin;
124143
125181
  }
124144
125182
  get isWasm() {
124145
- return this.#parsedFrameInfo?.isWasm;
125183
+ return this.#frame.isWasm;
125184
+ }
125185
+ get isInline() {
125186
+ return this.#frame.isInline;
124146
125187
  }
124147
125188
  get wasmModuleName() {
124148
125189
  return this.#parsedFrameInfo?.wasmModuleName;
@@ -124212,6 +125253,12 @@ class DebuggableFrameImpl {
124212
125253
  get rawName() {
124213
125254
  return this.#frame.rawName;
124214
125255
  }
125256
+ get isWasm() {
125257
+ return this.#frame.isWasm;
125258
+ }
125259
+ get isInline() {
125260
+ return this.#frame.isInline;
125261
+ }
124215
125262
  get sdkFrame() {
124216
125263
  return this.#sdkFrame;
124217
125264
  }
@@ -124270,9 +125317,9 @@ function parseSourcePositionsFromErrorStack(runtimeModel, stack) {
124270
125317
  }
124271
125318
  continue;
124272
125319
  }
124273
- let url = parseOrScriptMatch(debuggerModel, splitResult.url);
125320
+ let url = parseOrScriptMatch$1(debuggerModel, splitResult.url);
124274
125321
  if (!url && ParsedURL.isRelativeURL(splitResult.url)) {
124275
- url = parseOrScriptMatch(debuggerModel, ParsedURL.completeURL(baseURL, splitResult.url));
125322
+ url = parseOrScriptMatch$1(debuggerModel, ParsedURL.completeURL(baseURL, splitResult.url));
124276
125323
  }
124277
125324
  if (!url) {
124278
125325
  return null;
@@ -124292,7 +125339,7 @@ function parseSourcePositionsFromErrorStack(runtimeModel, stack) {
124292
125339
  }
124293
125340
  return linkInfos;
124294
125341
  }
124295
- function parseOrScriptMatch(debuggerModel, url) {
125342
+ function parseOrScriptMatch$1(debuggerModel, url) {
124296
125343
  if (!url) {
124297
125344
  return null;
124298
125345
  }
@@ -124484,14 +125531,28 @@ class StackTraceModel extends SDKModel {
124484
125531
  return model;
124485
125532
  }
124486
125533
  async createFromProtocolRuntime(stackTrace, rawFramesToUIFrames) {
125534
+ const debuggerModel = this.target().model(DebuggerModel);
125535
+ const syncFrames = stackTrace.callFrames.map((frame) => {
125536
+ const isWasm = debuggerModel?.isWasm(frame.scriptId) ?? false;
125537
+ return { ...frame, isWasm };
125538
+ });
124487
125539
  const [syncFragment, asyncFragments] = await Promise.all([
124488
- this.#createFragment(stackTrace.callFrames, rawFramesToUIFrames),
125540
+ this.#createFragment(syncFrames, rawFramesToUIFrames),
124489
125541
  this.#createAsyncFragments(stackTrace, rawFramesToUIFrames),
124490
125542
  ]);
124491
125543
  return new StackTraceImpl(syncFragment, asyncFragments);
124492
125544
  }
124493
125545
  async createFromErrorStackLikeString(stack, rawFramesToUIFrames, exceptionDetails) {
124494
- const rawFrames = parseRawFramesFromErrorStack(stack);
125546
+ const debuggerModel = this.target().model(DebuggerModel);
125547
+ const baseURL = this.target().inspectedURL();
125548
+ const resolveURL = (url) => {
125549
+ let urlWithScheme = parseOrScriptMatch(debuggerModel, url);
125550
+ if (!urlWithScheme && ParsedURL.isRelativeURL(url)) {
125551
+ urlWithScheme = parseOrScriptMatch(debuggerModel, ParsedURL.completeURL(baseURL, url));
125552
+ }
125553
+ return urlWithScheme;
125554
+ };
125555
+ const rawFrames = parseRawFramesFromErrorStack(stack, resolveURL);
124495
125556
  if (!rawFrames) {
124496
125557
  return null;
124497
125558
  }
@@ -124539,6 +125600,7 @@ class StackTraceModel extends SDKModel {
124539
125600
  functionName: frame.functionName,
124540
125601
  lineNumber: frame.location().lineNumber,
124541
125602
  columnNumber: frame.location().columnNumber,
125603
+ isWasm: frame.script.isWasm(),
124542
125604
  })), rawFramesToUIFrames);
124543
125605
  return new DebuggableFragmentImpl(fragment, pausedDetails.callFrames);
124544
125606
  }
@@ -124551,7 +125613,12 @@ class StackTraceModel extends SDKModel {
124551
125613
  continue;
124552
125614
  }
124553
125615
  const model = _a$4.#modelForTarget(target);
124554
- const asyncFragmentPromise = model.#createFragment(asyncStackTrace.callFrames, rawFramesToUIFrames)
125616
+ const targetDebuggerModel = target.model(DebuggerModel);
125617
+ const asyncFrames = asyncStackTrace.callFrames.map((frame) => {
125618
+ const isWasm = targetDebuggerModel?.isWasm(frame.scriptId) ?? false;
125619
+ return { ...frame, isWasm };
125620
+ });
125621
+ const asyncFragmentPromise = model.#createFragment(asyncFrames, rawFramesToUIFrames)
124555
125622
  .then(fragment => new AsyncFragmentImpl(asyncStackTrace.description ?? '', fragment));
124556
125623
  asyncFragments.push(asyncFragmentPromise);
124557
125624
  }
@@ -124593,7 +125660,9 @@ class StackTraceModel extends SDKModel {
124593
125660
  let i = 0;
124594
125661
  let evalI = 0;
124595
125662
  for (const node of fragment.node.getCallStack()) {
124596
- node.frames = uiFrames[i++].map(frame => new FrameImpl(frame.url, frame.uiSourceCode, frame.name, frame.line, frame.column, frame.missingDebugInfo, node.rawFrame.functionName));
125663
+ const group = uiFrames[i++];
125664
+ node.frames =
125665
+ group.map((frame, index) => new FrameImpl(frame.url, frame.uiSourceCode, frame.name, frame.line, frame.column, frame.missingDebugInfo, node.rawFrame.functionName, node.rawFrame.isWasm, index < group.length - 1));
124597
125666
  if (node.parsedFrameInfo?.evalOrigin) {
124598
125667
  node.evalOrigin = evalOrigins[evalI++];
124599
125668
  }
@@ -124624,13 +125693,34 @@ class StackTraceModel extends SDKModel {
124624
125693
  _a$4 = StackTraceModel;
124625
125694
  async function translateEvalOrigin(rawFrame, rawFramesToUIFrames, target) {
124626
125695
  const uiFrames = await rawFramesToUIFrames([rawFrame], target);
124627
- const frames = uiFrames[0].map(frame => new FrameImpl(frame.url, frame.uiSourceCode, frame.name, frame.line, frame.column, frame.missingDebugInfo, rawFrame.functionName));
125696
+ const group = uiFrames[0];
125697
+ const frames = group.map((frame, index) => new FrameImpl(frame.url, frame.uiSourceCode, frame.name, frame.line, frame.column, frame.missingDebugInfo, rawFrame.functionName, rawFrame.isWasm, index < group.length - 1));
124628
125698
  let parentEvalOrigin;
124629
125699
  if (rawFrame.parsedFrameInfo?.evalOrigin) {
124630
125700
  parentEvalOrigin = await translateEvalOrigin(rawFrame.parsedFrameInfo.evalOrigin, rawFramesToUIFrames, target);
124631
125701
  }
124632
125702
  return new EvalOrigin(frames, parentEvalOrigin);
124633
125703
  }
125704
+ function parseOrScriptMatch(debuggerModel, url) {
125705
+ if (!url) {
125706
+ return null;
125707
+ }
125708
+ if (ParsedURL.isValidUrlString(url)) {
125709
+ return url;
125710
+ }
125711
+ if (debuggerModel.scriptsForSourceURL(url).length) {
125712
+ return url;
125713
+ }
125714
+ try {
125715
+ const fileUrl = new URL(url, 'file://');
125716
+ if (debuggerModel.scriptsForSourceURL(fileUrl.href).length) {
125717
+ return fileUrl.href;
125718
+ }
125719
+ }
125720
+ catch {
125721
+ }
125722
+ return null;
125723
+ }
124634
125724
  SDKModel.register(StackTraceModel, { capabilities: 0 , autostart: false });
124635
125725
 
124636
125726
  // Copyright 2011 The Chromium Authors
@@ -128106,7 +129196,8 @@ class DefaultScriptMapping {
128106
129196
  }
128107
129197
  this.#uiSourceCodeToScript.set(uiSourceCode, script);
128108
129198
  this.#scriptToUISourceCode.set(script, uiSourceCode);
128109
- this.#project.addUISourceCodeWithProvider(uiSourceCode, script, null, 'text/javascript');
129199
+ const mimeType = script.isWasm() ? 'application/wasm' : 'text/javascript';
129200
+ this.#project.addUISourceCodeWithProvider(uiSourceCode, script, null, mimeType);
128110
129201
  void this.#debuggerWorkspaceBinding.updateLocations(script);
128111
129202
  }
128112
129203
  discardedScriptSource(event) {
@@ -128555,6 +129646,7 @@ class SymbolizedErrorObject extends ObjectWrapper {
128555
129646
  message;
128556
129647
  stackTrace;
128557
129648
  cause;
129649
+ #syntaxErrorLocation = null;
128558
129650
  constructor(message, stackTrace, cause) {
128559
129651
  super();
128560
129652
  this.message = message;
@@ -128570,39 +129662,35 @@ class SymbolizedErrorObject extends ObjectWrapper {
128570
129662
  this.cause.dispose();
128571
129663
  }
128572
129664
  }
128573
- #fireUpdated() {
128574
- this.dispatchEventToListeners("UPDATED" );
128575
- }
128576
- }
128577
- class SymbolizedSyntaxError extends ObjectWrapper {
128578
- message;
128579
- #uiLocation = null;
128580
- constructor(message) {
128581
- super();
128582
- this.message = message;
128583
- }
128584
- get uiLocation() {
128585
- return this.#uiLocation;
129665
+ get syntaxErrorLocation() {
129666
+ return this.#syntaxErrorLocation;
128586
129667
  }
128587
- static async fromExceptionDetails(target, debuggerWorkspaceBinding, exceptionDetails) {
129668
+ static async createForSyntaxError(target, debuggerWorkspaceBinding, message, exceptionDetails, stackTrace, cause) {
128588
129669
  const { exception, scriptId, lineNumber, columnNumber } = exceptionDetails;
128589
129670
  if (!exception || exception.subtype !== 'error' || exception.className !== 'SyntaxError') {
128590
- throw new Error('SymbolizedSyntaxError.fromExceptionDetails expects a SyntaxError');
129671
+ throw new Error('SymbolizedErrorObject.createForSyntaxError expects a SyntaxError');
128591
129672
  }
129673
+ const symbolizedError = new SymbolizedErrorObject(message, stackTrace, cause);
128592
129674
  if (!scriptId) {
128593
- return null;
129675
+ return symbolizedError;
128594
129676
  }
128595
- const debuggerModel = target.model(DebuggerModel);
128596
- if (!debuggerModel) {
128597
- return null;
129677
+ const topFrame = exceptionDetails.stackTrace?.callFrames[0];
129678
+ const isProgrammaticThrow = topFrame && topFrame.scriptId === scriptId && topFrame.lineNumber === lineNumber &&
129679
+ topFrame.columnNumber === columnNumber;
129680
+ if (!isProgrammaticThrow) {
129681
+ const debuggerModel = target.model(DebuggerModel);
129682
+ if (debuggerModel) {
129683
+ const rawLocation = debuggerModel.createRawLocationByScriptId(scriptId, lineNumber, columnNumber);
129684
+ await debuggerWorkspaceBinding.createLiveLocation(rawLocation, symbolizedError.#updateSyntaxErrorLocation.bind(symbolizedError), new LiveLocationPool());
129685
+ }
128598
129686
  }
128599
- const rawLocation = debuggerModel.createRawLocationByScriptId(scriptId, lineNumber, columnNumber);
128600
- const symbolizedSyntaxError = new SymbolizedSyntaxError(exception.description || '');
128601
- await debuggerWorkspaceBinding.createLiveLocation(rawLocation, symbolizedSyntaxError.#update.bind(symbolizedSyntaxError), new LiveLocationPool());
128602
- return symbolizedSyntaxError;
129687
+ return symbolizedError;
128603
129688
  }
128604
- async #update(liveLocation) {
128605
- this.#uiLocation = await liveLocation.uiLocation();
129689
+ async #updateSyntaxErrorLocation(liveLocation) {
129690
+ this.#syntaxErrorLocation = await liveLocation.uiLocation();
129691
+ this.dispatchEventToListeners("UPDATED" );
129692
+ }
129693
+ #fireUpdated() {
128606
129694
  this.dispatchEventToListeners("UPDATED" );
128607
129695
  }
128608
129696
  }
@@ -128757,12 +129845,6 @@ class DebuggerWorkspaceBinding {
128757
129845
  ]);
128758
129846
  fetchedExceptionDetails = details;
128759
129847
  causeRemoteObject = causeRemote;
128760
- if (remoteObject.className === 'SyntaxError' && fetchedExceptionDetails) {
128761
- const syntaxError = await SymbolizedSyntaxError.fromExceptionDetails(remoteObject.runtimeModel().target(), this, fetchedExceptionDetails);
128762
- if (syntaxError) {
128763
- return syntaxError;
128764
- }
128765
- }
128766
129848
  }
128767
129849
  else if (remoteObject.type === 'string') {
128768
129850
  errorStack = remoteObject.description || '';
@@ -128785,6 +129867,9 @@ class DebuggerWorkspaceBinding {
128785
129867
  return new UnparsableError(errorStack, cause);
128786
129868
  }
128787
129869
  const message = parseMessage(errorStack);
129870
+ if (remoteObject.subtype === 'error' && remoteObject.className === 'SyntaxError' && fetchedExceptionDetails) {
129871
+ return await SymbolizedErrorObject.createForSyntaxError(remoteObject.runtimeModel().target(), this, message, fetchedExceptionDetails, stackTrace, cause);
129872
+ }
128788
129873
  return new SymbolizedErrorObject(message, stackTrace, cause);
128789
129874
  }
128790
129875
  async createLiveLocation(rawLocation, updateDelegate, locationPool) {
@@ -130924,21 +132009,17 @@ class NetworkRequestFormatter {
130924
132009
  return `${title}\n<binary data>`;
130925
132010
  }
130926
132011
  static formatInitiatorUrl(initiatorUrl, allowedOrigin) {
130927
- try {
130928
- const initiatorOrigin = new URL(initiatorUrl).origin;
130929
- if (initiatorOrigin === allowedOrigin) {
130930
- return initiatorUrl;
130931
- }
130932
- return '<redacted cross-origin initiator URL>';
130933
- }
130934
- catch {
130935
- return '<redacted cross-origin initiator URL>';
132012
+ const initiatorOrigin = ParsedURL.extractOrigin(initiatorUrl);
132013
+ if (initiatorOrigin && initiatorOrigin === allowedOrigin) {
132014
+ return initiatorUrl;
130936
132015
  }
132016
+ return '<redacted cross-origin initiator URL>';
130937
132017
  }
130938
132018
  static formatStatus(status) {
130939
132019
  let responseStatus = '';
130940
132020
  if (status.statusCode) {
130941
- responseStatus = `Response status: ${status.statusCode} ${status.statusText}\n`;
132021
+ const statusText = status.statusText ? ` ${status.statusText}` : '';
132022
+ responseStatus = `Response status: ${status.statusCode}${statusText}\n`;
130942
132023
  }
130943
132024
  const flags = [];
130944
132025
  flags.push(status.finished ? 'finished' : 'pending');
@@ -131019,7 +132100,7 @@ Request initiator chain:\n${this.formatRequestInitiatorChain()}`;
131019
132100
  });
131020
132101
  }
131021
132102
  formatRequestInitiatorChain() {
131022
- const allowedOrigin = new URL(this.#request.url()).origin;
132103
+ const allowedOrigin = ParsedURL.extractOrigin(this.#request.url());
131023
132104
  let initiatorChain = '';
131024
132105
  let lineStart = '- URL: ';
131025
132106
  const graph = NetworkLog.instance().initiatorGraphForRequest(this.#request);
@@ -131553,7 +132634,7 @@ const markerTypeGuards = [
131553
132634
  isMarkDOMContent,
131554
132635
  isMarkLoad,
131555
132636
  isFirstPaint,
131556
- isFirstContentfulPaint,
132637
+ isAnyFirstContentfulPaint,
131557
132638
  isAnyLargestContentfulPaintCandidate,
131558
132639
  isNavigationStart,
131559
132640
  isSoftNavigationStart,
@@ -131563,6 +132644,7 @@ const MarkerName = [
131563
132644
  "MarkLoad" ,
131564
132645
  "firstPaint" ,
131565
132646
  "firstContentfulPaint" ,
132647
+ "SyntheticSoftFirstContentfulPaint" ,
131566
132648
  "largestContentfulPaint::Candidate" ,
131567
132649
  "largestContentfulPaint::CandidateForSoftNavigation" ,
131568
132650
  "navigationStart" ,
@@ -131806,6 +132888,12 @@ function isLayoutInvalidationTracking(event) {
131806
132888
  function isFirstContentfulPaint(event) {
131807
132889
  return event.name === "firstContentfulPaint" ;
131808
132890
  }
132891
+ function isSoftFirstContentfulPaint(event) {
132892
+ return event.name === "SyntheticSoftFirstContentfulPaint" ;
132893
+ }
132894
+ function isAnyFirstContentfulPaint(event) {
132895
+ return event.name === "firstContentfulPaint" || event.name === "SyntheticSoftFirstContentfulPaint" ;
132896
+ }
131809
132897
  function isAnyLargestContentfulPaintCandidate(event) {
131810
132898
  return event.name === "largestContentfulPaint::Candidate" || event.name === "largestContentfulPaint::CandidateForSoftNavigation" ;
131811
132899
  }
@@ -132107,6 +133195,7 @@ var TraceEvents = /*#__PURE__*/Object.freeze({
132107
133195
  isAnimationFrameAsyncEnd: isAnimationFrameAsyncEnd,
132108
133196
  isAnimationFrameAsyncStart: isAnimationFrameAsyncStart,
132109
133197
  isAnimationFramePresentation: isAnimationFramePresentation,
133198
+ isAnyFirstContentfulPaint: isAnyFirstContentfulPaint,
132110
133199
  isAnyLargestContentfulPaintCandidate: isAnyLargestContentfulPaintCandidate,
132111
133200
  isAnyScriptSourceEvent: isAnyScriptSourceEvent,
132112
133201
  isAuctionWorkletDoneWithProcess: isAuctionWorkletDoneWithProcess,
@@ -132223,6 +133312,7 @@ var TraceEvents = /*#__PURE__*/Object.freeze({
132223
133312
  isScrollLayer: isScrollLayer,
132224
133313
  isSelectorStats: isSelectorStats,
132225
133314
  isSetLayerId: isSetLayerId,
133315
+ isSoftFirstContentfulPaint: isSoftFirstContentfulPaint,
132226
133316
  isSoftLargestContentfulPaintCandidate: isSoftLargestContentfulPaintCandidate,
132227
133317
  isSoftNavigationStart: isSoftNavigationStart,
132228
133318
  isStyleInvalidatorInvalidationTracking: isStyleInvalidatorInvalidationTracking,
@@ -132504,6 +133594,18 @@ function timeStampForEventAdjustedByClosestNavigation(event, traceBounds, naviga
132504
133594
  eventTimeStamp = event.ts - navigationForEvent.ts;
132505
133595
  }
132506
133596
  }
133597
+ else if (isSoftFirstContentfulPaint(event) && event.args?.context?.performanceTimelineNavigationId) {
133598
+ const navigationForEvent = softNavigationsById.get(event.args.context.performanceTimelineNavigationId);
133599
+ if (navigationForEvent) {
133600
+ eventTimeStamp = event.ts - navigationForEvent.ts;
133601
+ }
133602
+ }
133603
+ else if (isSoftNavigationStart(event)) {
133604
+ const navigationForEvent = getNavigationForTraceEvent(event, event.args.frame, navigationsByFrameId);
133605
+ if (navigationForEvent) {
133606
+ eventTimeStamp = event.ts - navigationForEvent.ts;
133607
+ }
133608
+ }
132507
133609
  else if (event.args?.data?.navigationId) {
132508
133610
  const navigationForEvent = navigationsByNavigationId.get(event.args.data.navigationId);
132509
133611
  if (navigationForEvent) {
@@ -134660,6 +135762,13 @@ function handleEvent$o(event) {
134660
135762
  }
134661
135763
  async function finalize$H() {
134662
135764
  const { rendererProcessesByFrame } = data$p();
135765
+ const allowedProtocols = [
135766
+ 'blob:',
135767
+ 'file:',
135768
+ 'filesystem:',
135769
+ 'http:',
135770
+ 'https:',
135771
+ ];
134663
135772
  for (const [requestId, request] of requestMap.entries()) {
134664
135773
  if (!request.sendRequests) {
134665
135774
  continue;
@@ -134677,7 +135786,7 @@ async function finalize$H() {
134677
135786
  dur = Micro(nextWillSendRequest.ts - willSendRequest.ts);
134678
135787
  }
134679
135788
  redirects.push({
134680
- url: sendRequest.args.data.url,
135789
+ url: allowedProtocols.some(p => sendRequest.args.data.url.startsWith(p)) ? sendRequest.args.data.url : '',
134681
135790
  priority: sendRequest.args.data.priority,
134682
135791
  requestMethod: sendRequest.args.data.requestMethod,
134683
135792
  ts,
@@ -134743,14 +135852,7 @@ async function finalize$H() {
134743
135852
  lrServerResponseTime = Math.max(0, parseInt(ResponseMsHeader.value, 10));
134744
135853
  }
134745
135854
  }
134746
- const allowedProtocols = [
134747
- 'blob:',
134748
- 'file:',
134749
- 'filesystem:',
134750
- 'http:',
134751
- 'https:',
134752
- ];
134753
- if (!allowedProtocols.some(p => firstSendRequest.args.data.url.startsWith(p))) {
135855
+ if (!allowedProtocols.some(p => finalSendRequest.args.data.url.startsWith(p))) {
134754
135856
  continue;
134755
135857
  }
134756
135858
  const initialPriority = finalSendRequest.args.data.priority;
@@ -134863,7 +135965,10 @@ async function finalize$H() {
134863
135965
  responseHeaders: request.receiveResponse?.args.data.headers ?? null,
134864
135966
  fetchPriorityHint: finalSendRequest.args.data.fetchPriorityHint ?? 'auto',
134865
135967
  initiator: finalSendRequest.args.data.initiator,
134866
- stackTrace: finalSendRequest.args.data.stackTrace,
135968
+ stackTrace: finalSendRequest.args.data.stackTrace?.map(frame => ({
135969
+ ...frame,
135970
+ url: allowedProtocols.some(p => frame.url.startsWith(p)) ? frame.url : '',
135971
+ })),
134867
135972
  timing,
134868
135973
  lrServerResponseTime,
134869
135974
  url,
@@ -137398,6 +138503,25 @@ function handleEvent$b(event) {
137398
138503
  return;
137399
138504
  }
137400
138505
  pageLoadEventsArray.push(event);
138506
+ if (isSoftNavigationStart(event) && event.args?.context?.firstContentfulPaint) {
138507
+ const syntheticSoftFcpEvent = SyntheticEventsManager
138508
+ .registerSyntheticEvent({
138509
+ name: "SyntheticSoftFirstContentfulPaint" ,
138510
+ ph: "R" ,
138511
+ rawSourceEvent: event,
138512
+ pid: event.pid,
138513
+ tid: event.tid,
138514
+ ts: Micro(event.args.context.firstContentfulPaint),
138515
+ cat: event.cat,
138516
+ args: {
138517
+ frame: event.args.frame,
138518
+ context: {
138519
+ ...event.args.context,
138520
+ },
138521
+ },
138522
+ });
138523
+ pageLoadEventsArray.push(syntheticSoftFcpEvent);
138524
+ }
137401
138525
  }
137402
138526
  function storePageLoadMetricAgainstNavigationId(navigation, event) {
137403
138527
  const frameId = getFrameIdForPageLoadEvent(event);
@@ -137413,7 +138537,7 @@ function storePageLoadMetricAgainstNavigationId(navigation, event) {
137413
138537
  if (isNavigationStart(event)) {
137414
138538
  return;
137415
138539
  }
137416
- if (isFirstContentfulPaint(event)) {
138540
+ if (isAnyFirstContentfulPaint(event)) {
137417
138541
  const fcpTime = Micro(event.ts - navigation.ts);
137418
138542
  const classification = scoreClassificationForFirstContentfulPaint(fcpTime);
137419
138543
  const metricScore = { event, metricName: "FCP" , classification, navigation, timing: fcpTime };
@@ -137523,7 +138647,7 @@ function storeMetricScore(frameId, navigation, metricScore) {
137523
138647
  metrics.set(metricScore.metricName, metricScore);
137524
138648
  }
137525
138649
  function getFrameIdForPageLoadEvent(event) {
137526
- if (isFirstContentfulPaint(event) || isInteractiveTime(event) ||
138650
+ if (isAnyFirstContentfulPaint(event) || isInteractiveTime(event) ||
137527
138651
  isAnyLargestContentfulPaintCandidate(event) || isNavigationStart(event) ||
137528
138652
  isSoftNavigationStart(event) || isLayoutShift(event) ||
137529
138653
  isFirstPaint(event)) {
@@ -137539,7 +138663,7 @@ function getFrameIdForPageLoadEvent(event) {
137539
138663
  assertNever(event, `Unexpected event type: ${event}`);
137540
138664
  }
137541
138665
  function getNavigationForPageLoadEvent(event) {
137542
- if (isFirstContentfulPaint(event) || isAnyLargestContentfulPaintCandidate(event) ||
138666
+ if (isAnyFirstContentfulPaint(event) || isAnyLargestContentfulPaintCandidate(event) ||
137543
138667
  isFirstPaint(event)) {
137544
138668
  const { navigationsByNavigationId, softNavigationsById } = data$p();
137545
138669
  let navigation;
@@ -137550,6 +138674,12 @@ function getNavigationForPageLoadEvent(event) {
137550
138674
  return null;
137551
138675
  }
137552
138676
  }
138677
+ else if (isSoftFirstContentfulPaint(event) && event.args.context?.performanceTimelineNavigationId) {
138678
+ navigation = softNavigationsById.get(event.args.context.performanceTimelineNavigationId);
138679
+ if (!navigation) {
138680
+ return null;
138681
+ }
138682
+ }
137553
138683
  else {
137554
138684
  const navigationId = event.args.data?.navigationId;
137555
138685
  if (!navigationId) {
@@ -137667,7 +138797,7 @@ async function finalize$u() {
137667
138797
  const allFinalLCPEvents = gatherFinalLCPEvents();
137668
138798
  const mainFrame = data$p().mainFrameId;
137669
138799
  const allEventsButLCP = pageLoadEventsArray.filter(event => !isAnyLargestContentfulPaintCandidate(event));
137670
- const markerEvents = [...allFinalLCPEvents, ...allEventsButLCP].filter(isMarkerEvent);
138800
+ const markerEvents = [...allEventsButLCP, ...allFinalLCPEvents].filter(isMarkerEvent);
137671
138801
  allMarkerEvents =
137672
138802
  markerEvents.filter(event => getFrameIdForPageLoadEvent(event) === mainFrame).sort((a, b) => a.ts - b.ts);
137673
138803
  }
@@ -148184,10 +149314,12 @@ const UIStrings$r = {
148184
149314
  wasmModuleCacheHit: 'Wasm module cache hit',
148185
149315
  wasmModuleCacheInvalid: 'Wasm module cache invalid',
148186
149316
  frameStartedLoading: 'Frame started loading',
149317
+ softNavigationStart: 'Soft navigation start',
148187
149318
  onloadEvent: 'Onload event',
148188
149319
  domcontentloadedEvent: 'DOMContentLoaded event',
148189
149320
  firstPaint: 'First Paint',
148190
149321
  firstContentfulPaint: 'First Contentful Paint',
149322
+ softFirstContentfulPaint: 'Soft First Contentful Paint',
148191
149323
  largestContentfulPaint: 'Largest Contentful Paint',
148192
149324
  softLargestContentfulPaint: 'Soft Largest Contentful Paint',
148193
149325
  timestamp: 'Timestamp',
@@ -148386,8 +149518,10 @@ function maybeInitSylesMap() {
148386
149518
  ["FrameStartedLoading" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.frameStartedLoading), defaultCategoryStyles.loading, true),
148387
149519
  ["MarkLoad" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.onloadEvent), defaultCategoryStyles.scripting, true),
148388
149520
  ["MarkDOMContent" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.domcontentloadedEvent), defaultCategoryStyles.scripting, true),
149521
+ ["SoftNavigationStart" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.softNavigationStart), defaultCategoryStyles.loading, true),
148389
149522
  ["firstPaint" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.firstPaint), defaultCategoryStyles.painting, true),
148390
149523
  ["firstContentfulPaint" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.firstContentfulPaint), defaultCategoryStyles.rendering, true),
149524
+ ["SyntheticSoftFirstContentfulPaint" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.softFirstContentfulPaint), defaultCategoryStyles.rendering, true),
148391
149525
  ["largestContentfulPaint::Candidate" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.largestContentfulPaint), defaultCategoryStyles.rendering, true),
148392
149526
  ["largestContentfulPaint::CandidateForSoftNavigation" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.softLargestContentfulPaint), defaultCategoryStyles.rendering, true),
148393
149527
  ["TimeStamp" ]: new TimelineRecordStyle(i18nString$c(UIStrings$r.timestamp), defaultCategoryStyles.scripting),
@@ -148493,9 +149627,11 @@ function setTimelineMainEventCategories(categories) {
148493
149627
  function markerDetailsForEvent(event) {
148494
149628
  let title = '';
148495
149629
  let color = 'var(--color-text-primary)';
148496
- if (isFirstContentfulPaint(event)) {
149630
+ if (isAnyFirstContentfulPaint(event)) {
148497
149631
  color = 'var(--sys-color-green-bright)';
148498
- title = "FCP" ;
149632
+ title = (isSoftFirstContentfulPaint(event)) ?
149633
+ "FCP*" :
149634
+ "FCP" ;
148499
149635
  }
148500
149636
  if (isAnyLargestContentfulPaintCandidate(event)) {
148501
149637
  color = 'var(--sys-color-green)';
@@ -148751,6 +149887,66 @@ var Show;
148751
149887
  },
148752
149888
  {
148753
149889
  'order': 15,
149890
+ 'show-by-default': false,
149891
+ 'title': 'iPhone 14',
149892
+ 'screen': {
149893
+ 'horizontal': {
149894
+ 'width': 844,
149895
+ 'height': 390,
149896
+ },
149897
+ 'device-pixel-ratio': 3,
149898
+ 'vertical': {
149899
+ 'width': 390,
149900
+ 'height': 844,
149901
+ },
149902
+ },
149903
+ 'capabilities': ['touch', 'mobile'],
149904
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
149905
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
149906
+ 'type': 'phone',
149907
+ },
149908
+ {
149909
+ 'order': 16,
149910
+ 'show-by-default': false,
149911
+ 'title': 'iPhone 14 Plus',
149912
+ 'screen': {
149913
+ 'horizontal': {
149914
+ 'width': 926,
149915
+ 'height': 428,
149916
+ },
149917
+ 'device-pixel-ratio': 3,
149918
+ 'vertical': {
149919
+ 'width': 428,
149920
+ 'height': 926,
149921
+ },
149922
+ },
149923
+ 'capabilities': ['touch', 'mobile'],
149924
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
149925
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
149926
+ 'type': 'phone',
149927
+ },
149928
+ {
149929
+ 'order': 17,
149930
+ 'show-by-default': false,
149931
+ 'title': 'iPhone 14 Pro',
149932
+ 'screen': {
149933
+ 'horizontal': {
149934
+ 'width': 852,
149935
+ 'height': 393,
149936
+ },
149937
+ 'device-pixel-ratio': 3,
149938
+ 'vertical': {
149939
+ 'width': 393,
149940
+ 'height': 852,
149941
+ },
149942
+ },
149943
+ 'capabilities': ['touch', 'mobile'],
149944
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
149945
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
149946
+ 'type': 'phone',
149947
+ },
149948
+ {
149949
+ 'order': 18,
148754
149950
  'show-by-default': true,
148755
149951
  'title': 'iPhone 14 Pro Max',
148756
149952
  'screen': {
@@ -148770,7 +149966,187 @@ var Show;
148770
149966
  'type': 'phone',
148771
149967
  },
148772
149968
  {
148773
- 'order': 16,
149969
+ 'order': 19,
149970
+ 'show-by-default': false,
149971
+ 'title': 'iPhone 15',
149972
+ 'screen': {
149973
+ 'horizontal': {
149974
+ 'width': 852,
149975
+ 'height': 393,
149976
+ },
149977
+ 'device-pixel-ratio': 3,
149978
+ 'vertical': {
149979
+ 'width': 393,
149980
+ 'height': 852,
149981
+ },
149982
+ },
149983
+ 'capabilities': ['touch', 'mobile'],
149984
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
149985
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
149986
+ 'type': 'phone',
149987
+ },
149988
+ {
149989
+ 'order': 20,
149990
+ 'show-by-default': false,
149991
+ 'title': 'iPhone 15 Plus',
149992
+ 'screen': {
149993
+ 'horizontal': {
149994
+ 'width': 932,
149995
+ 'height': 430,
149996
+ },
149997
+ 'device-pixel-ratio': 3,
149998
+ 'vertical': {
149999
+ 'width': 430,
150000
+ 'height': 932,
150001
+ },
150002
+ },
150003
+ 'capabilities': ['touch', 'mobile'],
150004
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150005
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150006
+ 'type': 'phone',
150007
+ },
150008
+ {
150009
+ 'order': 21,
150010
+ 'show-by-default': false,
150011
+ 'title': 'iPhone 15 Pro',
150012
+ 'screen': {
150013
+ 'horizontal': {
150014
+ 'width': 852,
150015
+ 'height': 393,
150016
+ },
150017
+ 'device-pixel-ratio': 3,
150018
+ 'vertical': {
150019
+ 'width': 393,
150020
+ 'height': 852,
150021
+ },
150022
+ },
150023
+ 'capabilities': ['touch', 'mobile'],
150024
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150025
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150026
+ 'type': 'phone',
150027
+ },
150028
+ {
150029
+ 'order': 22,
150030
+ 'show-by-default': true,
150031
+ 'title': 'iPhone 15 Pro Max',
150032
+ 'screen': {
150033
+ 'horizontal': {
150034
+ 'width': 932,
150035
+ 'height': 430,
150036
+ },
150037
+ 'device-pixel-ratio': 3,
150038
+ 'vertical': {
150039
+ 'width': 430,
150040
+ 'height': 932,
150041
+ },
150042
+ },
150043
+ 'capabilities': ['touch', 'mobile'],
150044
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150045
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150046
+ 'type': 'phone',
150047
+ },
150048
+ {
150049
+ 'order': 23,
150050
+ 'show-by-default': false,
150051
+ 'title': 'iPhone 16e',
150052
+ 'screen': {
150053
+ 'horizontal': {
150054
+ 'width': 844,
150055
+ 'height': 390,
150056
+ },
150057
+ 'device-pixel-ratio': 3,
150058
+ 'vertical': {
150059
+ 'width': 390,
150060
+ 'height': 844,
150061
+ },
150062
+ },
150063
+ 'capabilities': ['touch', 'mobile'],
150064
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150065
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150066
+ 'type': 'phone',
150067
+ },
150068
+ {
150069
+ 'order': 24,
150070
+ 'show-by-default': false,
150071
+ 'title': 'iPhone 16',
150072
+ 'screen': {
150073
+ 'horizontal': {
150074
+ 'width': 852,
150075
+ 'height': 393,
150076
+ },
150077
+ 'device-pixel-ratio': 3,
150078
+ 'vertical': {
150079
+ 'width': 393,
150080
+ 'height': 852,
150081
+ },
150082
+ },
150083
+ 'capabilities': ['touch', 'mobile'],
150084
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150085
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150086
+ 'type': 'phone',
150087
+ },
150088
+ {
150089
+ 'order': 25,
150090
+ 'show-by-default': false,
150091
+ 'title': 'iPhone 16 Plus',
150092
+ 'screen': {
150093
+ 'horizontal': {
150094
+ 'width': 932,
150095
+ 'height': 430,
150096
+ },
150097
+ 'device-pixel-ratio': 3,
150098
+ 'vertical': {
150099
+ 'width': 430,
150100
+ 'height': 932,
150101
+ },
150102
+ },
150103
+ 'capabilities': ['touch', 'mobile'],
150104
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150105
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150106
+ 'type': 'phone',
150107
+ },
150108
+ {
150109
+ 'order': 26,
150110
+ 'show-by-default': false,
150111
+ 'title': 'iPhone 16 Pro',
150112
+ 'screen': {
150113
+ 'horizontal': {
150114
+ 'width': 874,
150115
+ 'height': 402,
150116
+ },
150117
+ 'device-pixel-ratio': 3,
150118
+ 'vertical': {
150119
+ 'width': 402,
150120
+ 'height': 874,
150121
+ },
150122
+ },
150123
+ 'capabilities': ['touch', 'mobile'],
150124
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150125
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150126
+ 'type': 'phone',
150127
+ },
150128
+ {
150129
+ 'order': 27,
150130
+ 'show-by-default': true,
150131
+ 'title': 'iPhone 16 Pro Max',
150132
+ 'screen': {
150133
+ 'horizontal': {
150134
+ 'width': 956,
150135
+ 'height': 440,
150136
+ },
150137
+ 'device-pixel-ratio': 3,
150138
+ 'vertical': {
150139
+ 'width': 440,
150140
+ 'height': 956,
150141
+ },
150142
+ },
150143
+ 'capabilities': ['touch', 'mobile'],
150144
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150145
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150146
+ 'type': 'phone',
150147
+ },
150148
+ {
150149
+ 'order': 28,
148774
150150
  'show-by-default': false,
148775
150151
  'title': 'Pixel 3 XL',
148776
150152
  'screen': {
@@ -148790,7 +150166,7 @@ var Show;
148790
150166
  'type': 'phone',
148791
150167
  },
148792
150168
  {
148793
- 'order': 18,
150169
+ 'order': 30,
148794
150170
  'show-by-default': true,
148795
150171
  'title': 'Pixel 7',
148796
150172
  'screen': {
@@ -148810,7 +150186,147 @@ var Show;
148810
150186
  'type': 'phone',
148811
150187
  },
148812
150188
  {
148813
- 'order': 20,
150189
+ 'order': 31,
150190
+ 'show-by-default': true,
150191
+ 'title': 'Pixel 8',
150192
+ 'screen': {
150193
+ 'horizontal': {
150194
+ 'width': 915,
150195
+ 'height': 412,
150196
+ },
150197
+ 'device-pixel-ratio': 2.625,
150198
+ 'vertical': {
150199
+ 'width': 412,
150200
+ 'height': 915,
150201
+ },
150202
+ },
150203
+ 'capabilities': ['touch', 'mobile'],
150204
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150205
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 8', 'mobile': true },
150206
+ 'type': 'phone',
150207
+ },
150208
+ {
150209
+ 'order': 32,
150210
+ 'show-by-default': false,
150211
+ 'title': 'Pixel 8 Pro',
150212
+ 'screen': {
150213
+ 'horizontal': {
150214
+ 'width': 997,
150215
+ 'height': 448,
150216
+ },
150217
+ 'device-pixel-ratio': 3,
150218
+ 'vertical': {
150219
+ 'width': 448,
150220
+ 'height': 997,
150221
+ },
150222
+ },
150223
+ 'capabilities': ['touch', 'mobile'],
150224
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150225
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 8 Pro', 'mobile': true },
150226
+ 'type': 'phone',
150227
+ },
150228
+ {
150229
+ 'order': 33,
150230
+ 'show-by-default': false,
150231
+ 'title': 'Pixel 8a',
150232
+ 'screen': {
150233
+ 'horizontal': {
150234
+ 'width': 915,
150235
+ 'height': 412,
150236
+ },
150237
+ 'device-pixel-ratio': 2.625,
150238
+ 'vertical': {
150239
+ 'width': 412,
150240
+ 'height': 915,
150241
+ },
150242
+ },
150243
+ 'capabilities': ['touch', 'mobile'],
150244
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 8a) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150245
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 8a', 'mobile': true },
150246
+ 'type': 'phone',
150247
+ },
150248
+ {
150249
+ 'order': 34,
150250
+ 'show-by-default': true,
150251
+ 'title': 'Pixel 9',
150252
+ 'screen': {
150253
+ 'horizontal': {
150254
+ 'width': 924,
150255
+ 'height': 412,
150256
+ },
150257
+ 'device-pixel-ratio': 2.625,
150258
+ 'vertical': {
150259
+ 'width': 412,
150260
+ 'height': 924,
150261
+ },
150262
+ },
150263
+ 'capabilities': ['touch', 'mobile'],
150264
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150265
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 9', 'mobile': true },
150266
+ 'type': 'phone',
150267
+ },
150268
+ {
150269
+ 'order': 35,
150270
+ 'show-by-default': false,
150271
+ 'title': 'Pixel 9 Pro',
150272
+ 'screen': {
150273
+ 'horizontal': {
150274
+ 'width': 952,
150275
+ 'height': 427,
150276
+ },
150277
+ 'device-pixel-ratio': 3,
150278
+ 'vertical': {
150279
+ 'width': 427,
150280
+ 'height': 952,
150281
+ },
150282
+ },
150283
+ 'capabilities': ['touch', 'mobile'],
150284
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 9 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150285
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 9 Pro', 'mobile': true },
150286
+ 'type': 'phone',
150287
+ },
150288
+ {
150289
+ 'order': 36,
150290
+ 'show-by-default': false,
150291
+ 'title': 'Pixel 9 Pro XL',
150292
+ 'screen': {
150293
+ 'horizontal': {
150294
+ 'width': 997,
150295
+ 'height': 448,
150296
+ },
150297
+ 'device-pixel-ratio': 3,
150298
+ 'vertical': {
150299
+ 'width': 448,
150300
+ 'height': 997,
150301
+ },
150302
+ },
150303
+ 'capabilities': ['touch', 'mobile'],
150304
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 9 Pro XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150305
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 9 Pro XL', 'mobile': true },
150306
+ 'type': 'phone',
150307
+ },
150308
+ {
150309
+ 'order': 37,
150310
+ 'show-by-default': true,
150311
+ 'title': 'Pixel 10',
150312
+ 'screen': {
150313
+ 'horizontal': {
150314
+ 'width': 924,
150315
+ 'height': 412,
150316
+ },
150317
+ 'device-pixel-ratio': 2.625,
150318
+ 'vertical': {
150319
+ 'width': 412,
150320
+ 'height': 924,
150321
+ },
150322
+ },
150323
+ 'capabilities': ['touch', 'mobile'],
150324
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 16; Pixel 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150325
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '16', 'architecture': '', 'model': 'Pixel 10', 'mobile': true },
150326
+ 'type': 'phone',
150327
+ },
150328
+ {
150329
+ 'order': 38,
148814
150330
  'show-by-default': true,
148815
150331
  'title': 'Samsung Galaxy S8+',
148816
150332
  'screen': {
@@ -148830,7 +150346,7 @@ var Show;
148830
150346
  'type': 'phone',
148831
150347
  },
148832
150348
  {
148833
- 'order': 24,
150349
+ 'order': 39,
148834
150350
  'show-by-default': true,
148835
150351
  'title': 'Samsung Galaxy S20 Ultra',
148836
150352
  'screen': {
@@ -148850,7 +150366,7 @@ var Show;
148850
150366
  'type': 'phone',
148851
150367
  },
148852
150368
  {
148853
- 'order': 26,
150369
+ 'order': 40,
148854
150370
  'show-by-default': true,
148855
150371
  'title': 'iPad Mini',
148856
150372
  'screen': {
@@ -148870,7 +150386,7 @@ var Show;
148870
150386
  'type': 'tablet',
148871
150387
  },
148872
150388
  {
148873
- 'order': 28,
150389
+ 'order': 41,
148874
150390
  'show-by-default': true,
148875
150391
  'title': 'iPad Air',
148876
150392
  'screen': {
@@ -148890,7 +150406,7 @@ var Show;
148890
150406
  'type': 'tablet',
148891
150407
  },
148892
150408
  {
148893
- 'order': 29,
150409
+ 'order': 42,
148894
150410
  'show-by-default': true,
148895
150411
  'title': 'iPad Pro',
148896
150412
  'screen': {
@@ -148910,7 +150426,7 @@ var Show;
148910
150426
  'type': 'tablet',
148911
150427
  },
148912
150428
  {
148913
- 'order': 30,
150429
+ 'order': 43,
148914
150430
  'show-by-default': true,
148915
150431
  'title': 'Surface Pro 7',
148916
150432
  'screen': {
@@ -148929,7 +150445,7 @@ var Show;
148929
150445
  'type': 'tablet',
148930
150446
  },
148931
150447
  {
148932
- 'order': 32,
150448
+ 'order': 44,
148933
150449
  'show-by-default': true,
148934
150450
  'dual-screen': true,
148935
150451
  'title': 'Surface Duo',
@@ -148964,7 +150480,7 @@ var Show;
148964
150480
  ],
148965
150481
  },
148966
150482
  {
148967
- 'order': 34,
150483
+ 'order': 46,
148968
150484
  'show-by-default': true,
148969
150485
  'foldable-screen': true,
148970
150486
  'title': 'Galaxy Z Fold 5',
@@ -149013,7 +150529,7 @@ var Show;
149013
150529
  ],
149014
150530
  },
149015
150531
  {
149016
- 'order': 35,
150532
+ 'order': 47,
149017
150533
  'show-by-default': true,
149018
150534
  'foldable-screen': true,
149019
150535
  'title': 'Asus Zenbook Fold',
@@ -149066,7 +150582,7 @@ var Show;
149066
150582
  ],
149067
150583
  },
149068
150584
  {
149069
- 'order': 36,
150585
+ 'order': 48,
149070
150586
  'show-by-default': true,
149071
150587
  'title': 'Samsung Galaxy A51/71',
149072
150588
  'screen': {
@@ -153261,10 +154777,14 @@ class Diff {
153261
154777
  removedCount = 0;
153262
154778
  addedSize = 0;
153263
154779
  removedSize = 0;
153264
- deletedIndexes = [];
153265
- addedIndexes = [];
153266
154780
  countDelta;
153267
154781
  sizeDelta;
154782
+ addedIndexes = [];
154783
+ addedIds = [];
154784
+ addedSelfSizes = [];
154785
+ deletedIndexes = [];
154786
+ deletedIds = [];
154787
+ deletedSelfSizes = [];
153268
154788
  constructor(name) {
153269
154789
  this.name = name;
153270
154790
  }
@@ -153584,6 +155104,9 @@ class HeapSnapshotProxy extends HeapSnapshotProxyObject {
153584
155104
  nodeClassKey(snapshotObjectId) {
153585
155105
  return this.callMethodPromise('nodeClassKey', snapshotObjectId);
153586
155106
  }
155107
+ nodeIndexForId(nodeId) {
155108
+ return this.callMethodPromise('nodeIndexForId', nodeId);
155109
+ }
153587
155110
  createEdgesProvider(nodeIndex) {
153588
155111
  return this.callFactoryMethod('createEdgesProvider', HeapSnapshotProviderProxy, nodeIndex);
153589
155112
  }
@@ -153644,6 +155167,9 @@ class HeapSnapshotProxy extends HeapSnapshotProxyObject {
153644
155167
  getRetainingPaths(nodeIndex, maxDepth, maxNodes, maxSiblings) {
153645
155168
  return this.callMethodPromise('getRetainingPaths', nodeIndex, maxDepth, maxNodes, maxSiblings);
153646
155169
  }
155170
+ getDominatorsOf(nodeIndex) {
155171
+ return this.callMethodPromise('getDominatorsOf', nodeIndex);
155172
+ }
153647
155173
  unignoreNodeInRetainersView(nodeIndex) {
153648
155174
  return this.callMethodPromise('unignoreNodeInRetainersView', nodeIndex);
153649
155175
  }
@@ -155856,6 +157382,7 @@ const UIStrings$h = {
155856
157382
  CSSSelectorInternalMediaControlsOverlayCastButton: "The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.",
155857
157383
  CSSValueAppearanceSliderVertical: "CSS appearance value `slider-vertical` is not standardized and will be removed.",
155858
157384
  DataUrlInSvgUse: "Support for data: URLs in SVGUseElement is deprecated and it will be removed in the future.",
157385
+ DigitalCredentialsUnknownProtocol: "An unknown Digital Credentials protocol was requested in navigator.credentials.get() or create(). In a future release, unrecognized protocols will be blocked.",
155859
157386
  DocumentCreateEventKeyboardEvents: "document.createEvent('KeyboardEvents') is deprecated and will be removed. Use `new KeyboardEvent()` instead.",
155860
157387
  DocumentCreateEventTransitionEvent: "document.createEvent('TransitionEvent') is deprecated and will be removed. Use `new TransitionEvent()` instead.",
155861
157388
  ExampleBrowserProcessDeprecation: "This is an example for showing the code required for a browser process reported deprecation.",
@@ -155911,6 +157438,8 @@ const UIStrings$h = {
155911
157438
  UnloadHandler: "Unload event listeners are deprecated and will be removed.",
155912
157439
  V8SharedArrayBufferConstructedInExtensionWithoutIsolation: "Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.",
155913
157440
  WebBluetoothRemoteCharacteristicWriteValue: "`BluetoothRemoteGATTCharacteristic.writeValue()` is deprecated. Use `writeValueWithResponse()` or `writeValueWithoutResponse()` instead.",
157441
+ WebTransportDatagramDuplexStreamIncomingHighWaterMark: "WebTransportDatagramDuplexStream.incomingHighWaterMark has been renamed to incomingMaxBufferedDatagrams. incomingHighWaterMark will be removed in a future version of Chrome.",
157442
+ WebTransportDatagramDuplexStreamOutgoingHighWaterMark: "WebTransportDatagramDuplexStream.outgoingHighWaterMark has been renamed to outgoingMaxBufferedDatagrams. outgoingHighWaterMark will be removed in a future version of Chrome.",
155914
157443
  XHRJSONEncodingDetection: "UTF-16 is not supported by response json in `XMLHttpRequest`",
155915
157444
  XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload: "Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.",
155916
157445
  XSLT: "XSLTProcessor and XSLT Processing Instructions have been deprecated by all browsers. These features will be removed from this browser soon.",
@@ -155947,6 +157476,10 @@ const DEPRECATIONS_METADATA = {
155947
157476
  "chromeStatusFeature": 5128825141198848,
155948
157477
  "milestone": 119
155949
157478
  },
157479
+ "DigitalCredentialsUnknownProtocol": {
157480
+ "chromeStatusFeature": 6492906882990080,
157481
+ "milestone": 160
157482
+ },
155950
157483
  "DocumentCreateEventKeyboardEvents": {
155951
157484
  "chromeStatusFeature": 5095987863486464,
155952
157485
  "milestone": 151
@@ -156061,6 +157594,14 @@ const DEPRECATIONS_METADATA = {
156061
157594
  "WebBluetoothRemoteCharacteristicWriteValue": {
156062
157595
  "chromeStatusFeature": 5088568590598144
156063
157596
  },
157597
+ "WebTransportDatagramDuplexStreamIncomingHighWaterMark": {
157598
+ "chromeStatusFeature": 5143839699501056,
157599
+ "milestone": 156
157600
+ },
157601
+ "WebTransportDatagramDuplexStreamOutgoingHighWaterMark": {
157602
+ "chromeStatusFeature": 5143839699501056,
157603
+ "milestone": 156
157604
+ },
156064
157605
  "XHRJSONEncodingDetection": {
156065
157606
  "milestone": 93
156066
157607
  },
@@ -159048,6 +160589,9 @@ const issueCodeHandlers = new Map([
159048
160589
  SelectivePermissionsInterventionIssue.fromInspectorIssue,
159049
160590
  ],
159050
160591
  ]);
160592
+ function isIssueCodeSupported(code) {
160593
+ return issueCodeHandlers.has(code);
160594
+ }
159051
160595
  function createIssuesFromProtocolIssue(issuesModel, inspectorIssue) {
159052
160596
  const handler = issueCodeHandlers.get(inspectorIssue.code);
159053
160597
  if (handler) {
@@ -159321,7 +160865,8 @@ var mcp = /*#__PURE__*/Object.freeze({
159321
160865
  Target: Target,
159322
160866
  TargetManager: TargetManager,
159323
160867
  TraceEngine: trace,
159324
- createIssuesFromProtocolIssue: createIssuesFromProtocolIssue
160868
+ createIssuesFromProtocolIssue: createIssuesFromProtocolIssue,
160869
+ isIssueCodeSupported: isIssueCodeSupported
159325
160870
  });
159326
160871
 
159327
160872
  /**