chrome-devtools-mcp 0.24.0 → 0.25.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 (25) hide show
  1. package/README.md +22 -5
  2. package/build/src/McpPage.js +4 -4
  3. package/build/src/McpResponse.js +18 -16
  4. package/build/src/TextSnapshot.js +2 -2
  5. package/build/src/bin/chrome-devtools-cli-options.js +27 -4
  6. package/build/src/bin/chrome-devtools-mcp-cli-options.js +8 -5
  7. package/build/src/bin/chrome-devtools-mcp-main.js +0 -5
  8. package/build/src/third_party/THIRD_PARTY_NOTICES +3 -3
  9. package/build/src/third_party/bundled-packages.json +2 -2
  10. package/build/src/third_party/devtools-formatter-worker.js +18 -0
  11. package/build/src/third_party/devtools-heap-snapshot-worker.js +18 -0
  12. package/build/src/third_party/index.js +578 -278
  13. package/build/src/third_party/issue-descriptions/genericFormModelContextMissingToolDescription.md +5 -0
  14. package/build/src/third_party/issue-descriptions/genericFormModelContextMissingToolName.md +5 -0
  15. package/build/src/third_party/issue-descriptions/genericFormModelContextParameterMissingName.md +5 -0
  16. package/build/src/third_party/issue-descriptions/genericFormModelContextParameterMissingTitleAndDescription.md +5 -0
  17. package/build/src/third_party/issue-descriptions/genericFormModelContextRequiredParameterMissingName.md +5 -0
  18. package/build/src/tools/categories.js +6 -3
  19. package/build/src/tools/input.js +44 -0
  20. package/build/src/tools/pages.js +5 -5
  21. package/build/src/tools/{inPage.js → thirdPartyDeveloper.js} +15 -15
  22. package/build/src/tools/tools.js +2 -2
  23. package/build/src/tools/webmcp.js +2 -4
  24. package/build/src/version.js +1 -1
  25. package/package.json +3 -4
@@ -50666,7 +50666,7 @@ function mergeUint8Arrays(items) {
50666
50666
  * Copyright 2025 Google Inc.
50667
50667
  * SPDX-License-Identifier: Apache-2.0
50668
50668
  */
50669
- const packageVersion = '24.42.0';
50669
+ const packageVersion = '24.43.0';
50670
50670
 
50671
50671
  /**
50672
50672
  * @license
@@ -51466,7 +51466,7 @@ const _isElementHandle = Symbol('_isElementHandle');
51466
51466
  * Copyright 2022 Google Inc.
51467
51467
  * SPDX-License-Identifier: Apache-2.0
51468
51468
  */
51469
- function isErrorLike$1(obj) {
51469
+ function isErrorLike$2(obj) {
51470
51470
  return (typeof obj === 'object' && obj !== null && 'name' in obj && 'message' in obj);
51471
51471
  }
51472
51472
  function rewriteError$1(error, message, originalMessage) {
@@ -51849,7 +51849,7 @@ class QueryHandler {
51849
51849
  }
51850
51850
  }
51851
51851
  catch (error) {
51852
- if (!isErrorLike$1(error)) {
51852
+ if (!isErrorLike$2(error)) {
51853
51853
  throw error;
51854
51854
  }
51855
51855
  if (error.name === 'AbortError') {
@@ -52980,22 +52980,28 @@ class Locator extends EventEmitter {
52980
52980
  return 'typeable-input';
52981
52981
  }
52982
52982
  if (el instanceof HTMLInputElement) {
52983
- if (new Set([
52984
- 'textarea',
52985
- 'text',
52986
- 'url',
52987
- 'tel',
52988
- 'search',
52989
- 'password',
52990
- 'number',
52991
- 'email',
52992
- ]).has(el.type)) {
52993
- return 'typeable-input';
52994
- }
52995
- else {
52996
- return 'other-input';
52983
+ switch (el.type) {
52984
+ case 'checkbox':
52985
+ case 'radio':
52986
+ return 'checkable-input';
52987
+ case 'text':
52988
+ case 'url':
52989
+ case 'tel':
52990
+ case 'search':
52991
+ case 'password':
52992
+ case 'number':
52993
+ case 'email':
52994
+ return 'typeable-input';
52995
+ default:
52996
+ return 'other-input';
52997
52997
  }
52998
52998
  }
52999
+ switch (el.getAttribute('role')) {
53000
+ case 'checkbox':
53001
+ case 'radio':
53002
+ case 'switch':
53003
+ return 'checkable-input';
53004
+ }
52999
53005
  if (el.isContentEditable) {
53000
53006
  return 'contenteditable';
53001
53007
  }
@@ -53006,43 +53012,66 @@ class Locator extends EventEmitter {
53006
53012
  return from(handle.focus()).pipe(mergeMap(() => {
53007
53013
  return from(handle.evaluate((input, newValue) => {
53008
53014
  const element = input;
53015
+ const valString = String(newValue);
53009
53016
  const currentValue = element.isContentEditable
53010
53017
  ? element.innerText
53011
53018
  : element.value;
53012
- if (currentValue === newValue) {
53019
+ if (currentValue === valString) {
53013
53020
  return;
53014
53021
  }
53015
53022
  if (element.isContentEditable) {
53016
- element.innerText = newValue;
53023
+ element.innerText = valString;
53017
53024
  }
53018
53025
  else {
53019
- element.value = newValue;
53026
+ element.value = valString;
53020
53027
  }
53021
53028
  element.dispatchEvent(new Event('input', { bubbles: true }));
53022
53029
  element.dispatchEvent(new Event('change', { bubbles: true }));
53023
53030
  }, value));
53024
53031
  }));
53025
53032
  };
53033
+ const toggleIfNeeded = () => {
53034
+ return from(handle.evaluate(toggleEl => {
53035
+ if (toggleEl.indeterminate ||
53036
+ toggleEl.getAttribute('aria-checked') === 'mixed') {
53037
+ return 'mixed';
53038
+ }
53039
+ return (toggleEl.checked ||
53040
+ toggleEl.getAttribute('aria-checked') === 'true');
53041
+ })).pipe(mergeMap(currentState => {
53042
+ if (currentState === 'mixed' || currentState !== !!value) {
53043
+ return from(handle.click());
53044
+ }
53045
+ return of(undefined);
53046
+ }));
53047
+ };
53026
53048
  switch (inputType) {
53049
+ case 'checkable-input':
53050
+ return toggleIfNeeded();
53027
53051
  case 'select':
53028
53052
  return from(handle.select(value).then(noop));
53029
53053
  case 'contenteditable':
53030
53054
  case 'typeable-input':
53031
- if (value.length < typingThreshold) {
53055
+ if (typeof value === 'string' &&
53056
+ value.length < typingThreshold) {
53032
53057
  return from(handle.evaluate((input, newValue) => {
53033
53058
  const element = input;
53059
+ const valString = String(newValue);
53034
53060
  const currentValue = element.isContentEditable
53035
53061
  ? element.innerText
53036
53062
  : input.value;
53037
- if (newValue.length <= currentValue.length ||
53038
- !newValue.startsWith(currentValue)) {
53063
+ if (currentValue === valString) {
53064
+ return '';
53065
+ }
53066
+ if (!valString.startsWith(currentValue) ||
53067
+ !currentValue) {
53039
53068
  if (element.isContentEditable) {
53040
53069
  element.innerText = '';
53041
53070
  }
53042
53071
  else {
53043
53072
  input.value = '';
53044
53073
  }
53045
- return newValue;
53074
+ return valString;
53046
53075
  }
53047
53076
  if (element.isContentEditable) {
53048
53077
  element.innerText = '';
@@ -53052,7 +53081,7 @@ class Locator extends EventEmitter {
53052
53081
  input.value = '';
53053
53082
  input.value = currentValue;
53054
53083
  }
53055
- return newValue.substring(currentValue.length);
53084
+ return valString.substring(currentValue.length);
53056
53085
  }, value)).pipe(mergeMap(textToType => {
53057
53086
  if (!textToType) {
53058
53087
  return of(undefined);
@@ -55852,7 +55881,7 @@ class WaitTask {
55852
55881
  }
55853
55882
  }
55854
55883
  getBadError(error) {
55855
- if (isErrorLike$1(error)) {
55884
+ if (isErrorLike$2(error)) {
55856
55885
  if (error.message.includes('Execution context is not available in detached frame')) {
55857
55886
  return new Error('Waiting failed: Frame detached');
55858
55887
  }
@@ -56610,7 +56639,7 @@ let Binding$2 = class Binding {
56610
56639
  }
56611
56640
  }
56612
56641
  catch (error) {
56613
- if (isErrorLike$1(error)) {
56642
+ if (isErrorLike$2(error)) {
56614
56643
  await context
56615
56644
  .evaluate((name, seq, message, stack) => {
56616
56645
  const error = new Error(message);
@@ -57576,7 +57605,7 @@ let EmulationManager = (() => {
57576
57605
  });
57577
57606
  }
57578
57607
  catch (error) {
57579
- if (isErrorLike$1(error) && error.message.includes('Invalid timezone')) {
57608
+ if (isErrorLike$2(error) && error.message.includes('Invalid timezone')) {
57580
57609
  throw new Error(`Invalid timezone ID: ${timezoneState.timezoneId}`);
57581
57610
  }
57582
57611
  throw error;
@@ -59425,7 +59454,7 @@ let CdpFrame = (() => {
59425
59454
  : null;
59426
59455
  }
59427
59456
  catch (error) {
59428
- if (isErrorLike$1(error)) {
59457
+ if (isErrorLike$2(error)) {
59429
59458
  return error;
59430
59459
  }
59431
59460
  throw error;
@@ -60162,7 +60191,7 @@ let NetworkManager$1 = class NetworkManager extends EventEmitter {
60162
60191
  this.#networkEnabled = networkEnabled ?? true;
60163
60192
  }
60164
60193
  #canIgnoreError(error) {
60165
- return (isErrorLike$1(error) &&
60194
+ return (isErrorLike$2(error) &&
60166
60195
  (isTargetClosedError(error) ||
60167
60196
  error.message.includes('Not supported') ||
60168
60197
  error.message.includes("wasn't found")));
@@ -60811,7 +60840,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
60811
60840
  }
60812
60841
  catch (error) {
60813
60842
  this.#frameTreeHandled?.resolve();
60814
- if (isErrorLike$1(error) && isTargetClosedError(error)) {
60843
+ if (isErrorLike$2(error) && isTargetClosedError(error)) {
60815
60844
  return;
60816
60845
  }
60817
60846
  throw error;
@@ -62008,7 +62037,7 @@ class Tracing {
62008
62037
  contentDeferred.resolve(typedArray ?? undefined);
62009
62038
  }
62010
62039
  catch (error) {
62011
- if (isErrorLike$1(error)) {
62040
+ if (isErrorLike$2(error)) {
62012
62041
  contentDeferred.reject(error);
62013
62042
  }
62014
62043
  else {
@@ -62281,7 +62310,7 @@ class CdpPage extends Page {
62281
62310
  await page.setViewport(defaultViewport);
62282
62311
  }
62283
62312
  catch (err) {
62284
- if (isErrorLike$1(err) && isTargetClosedError(err)) {
62313
+ if (isErrorLike$2(err) && isTargetClosedError(err)) {
62285
62314
  debugError(err);
62286
62315
  }
62287
62316
  else {
@@ -62484,7 +62513,7 @@ class CdpPage extends Page {
62484
62513
  ]);
62485
62514
  }
62486
62515
  catch (err) {
62487
- if (isErrorLike$1(err) && isTargetClosedError(err)) {
62516
+ if (isErrorLike$2(err) && isTargetClosedError(err)) {
62488
62517
  debugError(err);
62489
62518
  }
62490
62519
  else {
@@ -62542,6 +62571,10 @@ class CdpPage extends Page {
62542
62571
  async openDevTools() {
62543
62572
  const pageTargetId = this.target()._targetId;
62544
62573
  const browser = this.browser();
62574
+ const devtoolsTargetId = await browser._hasDevToolsTarget(this.target()._targetId);
62575
+ if (devtoolsTargetId) {
62576
+ return await browser._getDevToolsTargetPage(devtoolsTargetId);
62577
+ }
62545
62578
  const devtoolsPage = await browser._createDevToolsPage(pageTargetId);
62546
62579
  return devtoolsPage;
62547
62580
  }
@@ -63390,7 +63423,7 @@ class CdpExtension extends Extension {
63390
63423
  });
63391
63424
  }
63392
63425
  #canIgnoreError(error) {
63393
- return (isErrorLike$1(error) &&
63426
+ return (isErrorLike$2(error) &&
63394
63427
  (isTargetClosedError(error) ||
63395
63428
  error.message.includes('No target with given id found')));
63396
63429
  }
@@ -64433,14 +64466,19 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64433
64466
  #discoveryFilter = [{}];
64434
64467
  #targetsIdsForInit = new Set();
64435
64468
  #initialAttachDone = false;
64436
- #blockList;
64437
- constructor(connection, targetFactory, targetFilterCallback, waitForInitiallyDiscoveredTargets = true, networkConditions) {
64469
+ #blocklist = [];
64470
+ #allowlist = [];
64471
+ constructor(connection, targetFactory, targetFilterCallback, waitForInitiallyDiscoveredTargets = true, blocklist, allowlist) {
64438
64472
  super();
64473
+ if (blocklist && allowlist) {
64474
+ throw new Error('Cannot specify both blockList and allowList');
64475
+ }
64439
64476
  this.#connection = connection;
64440
64477
  this.#targetFilterCallback = targetFilterCallback;
64441
64478
  this.#targetFactory = targetFactory;
64442
64479
  this.#waitForInitiallyDiscoveredTargets = waitForInitiallyDiscoveredTargets;
64443
- this.#blockList = networkConditions;
64480
+ this.#blocklist = this.#mapPatterns(blocklist);
64481
+ this.#allowlist = this.#mapPatterns(allowlist);
64444
64482
  this.#connection.on('Target.targetCreated', this.#onTargetCreated);
64445
64483
  this.#connection.on('Target.targetDestroyed', this.#onTargetDestroyed);
64446
64484
  this.#connection.on('Target.targetInfoChanged', this.#onTargetInfoChanged);
@@ -64677,40 +64715,69 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64677
64715
  this.emit("targetGone" , target);
64678
64716
  };
64679
64717
  #isUrlAllowed = (url) => {
64680
- if (!this.#blockList) {
64718
+ if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {
64681
64719
  return true;
64682
64720
  }
64683
64721
  if (!url || url === 'about:blank') {
64684
64722
  return true;
64685
64723
  }
64686
- for (const rule of this.#blockList) {
64687
- try {
64688
- const pattern = new Y(rule);
64689
- if (pattern.test(url)) {
64690
- return false;
64691
- }
64724
+ for (const item of this.#blocklist) {
64725
+ if (item.pattern.test(url)) {
64726
+ return false;
64692
64727
  }
64693
- catch {
64694
- debugError(`Invalid URL pattern: ${rule}`);
64728
+ }
64729
+ if (this.#allowlist.length > 0) {
64730
+ for (const item of this.#allowlist) {
64731
+ if (item.pattern.test(url)) {
64732
+ return true;
64733
+ }
64695
64734
  }
64735
+ return false;
64696
64736
  }
64697
64737
  return true;
64698
64738
  };
64739
+ #mapPatterns(rules) {
64740
+ const result = [];
64741
+ for (const rule of rules ?? []) {
64742
+ result.push({ pattern: new Y(rule), rule });
64743
+ }
64744
+ return result;
64745
+ }
64699
64746
  #maybeSetupNetworkConditions = async (session) => {
64700
- if (!this.#blockList?.length) {
64747
+ if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {
64701
64748
  return;
64702
64749
  }
64703
- const matchedNetworkConditions = this.#blockList.map(pattern => {
64704
- return {
64705
- urlPattern: pattern,
64750
+ const matchedNetworkConditions = [];
64751
+ for (const item of this.#blocklist) {
64752
+ matchedNetworkConditions.push({
64753
+ urlPattern: item.rule,
64754
+ offline: true,
64706
64755
  latency: 0,
64707
64756
  downloadThroughput: -1,
64708
64757
  uploadThroughput: -1,
64709
- };
64710
- });
64758
+ });
64759
+ }
64760
+ if (this.#allowlist.length > 0) {
64761
+ for (const item of this.#allowlist) {
64762
+ matchedNetworkConditions.push({
64763
+ urlPattern: item.rule,
64764
+ offline: false,
64765
+ latency: 0,
64766
+ downloadThroughput: -1,
64767
+ uploadThroughput: -1,
64768
+ });
64769
+ }
64770
+ matchedNetworkConditions.push({
64771
+ urlPattern: '',
64772
+ offline: true,
64773
+ latency: 0,
64774
+ downloadThroughput: -1,
64775
+ uploadThroughput: -1,
64776
+ });
64777
+ }
64711
64778
  await session.send('Network.emulateNetworkConditionsByRule', {
64779
+ offline: this.#blocklist.length > 0 ? true : undefined,
64712
64780
  matchedNetworkConditions,
64713
- offline: true,
64714
64781
  });
64715
64782
  };
64716
64783
  };
@@ -64725,8 +64792,15 @@ function isDevToolsPageTarget(url) {
64725
64792
  }
64726
64793
  class CdpBrowser extends Browser$1 {
64727
64794
  protocol = 'cdp';
64728
- static async _create(connection, contextIds, acceptInsecureCerts, defaultViewport, downloadBehavior, process, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets = true, networkEnabled = true, issuesEnabled = true, handleDevToolsAsPage = false, blockList) {
64729
- const browser = new CdpBrowser(connection, contextIds, defaultViewport, process, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets, networkEnabled, issuesEnabled, handleDevToolsAsPage, blockList);
64795
+ static async _create(connection, contextIds, acceptInsecureCerts, defaultViewport, downloadBehavior, process, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets = true, networkEnabled = true, issuesEnabled = true, handleDevToolsAsPage = false, blocklist, allowlist) {
64796
+ const browser = new CdpBrowser(connection, contextIds, defaultViewport, process, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets, networkEnabled, issuesEnabled, handleDevToolsAsPage, blocklist, allowlist);
64797
+ if (allowlist) {
64798
+ const version = await browser.#getVersion();
64799
+ const majorVersion = parseInt(version.product.match(/\d+/)?.[0] ?? '0', 10);
64800
+ if (majorVersion < 149) {
64801
+ throw new Error('The allowlist option require Chrome 149 or greater.');
64802
+ }
64803
+ }
64730
64804
  if (acceptInsecureCerts) {
64731
64805
  await connection.send('Security.setIgnoreCertificateErrors', {
64732
64806
  ignore: true,
@@ -64748,7 +64822,7 @@ class CdpBrowser extends Browser$1 {
64748
64822
  #targetManager;
64749
64823
  #handleDevToolsAsPage = false;
64750
64824
  #extensions = new Map();
64751
- constructor(connection, contextIds, defaultViewport, process, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets = true, networkEnabled = true, issuesEnabled = true, handleDevToolsAsPage = false, networkConditions) {
64825
+ constructor(connection, contextIds, defaultViewport, process, closeCallback, targetFilterCallback, isPageTargetCallback, waitForInitiallyDiscoveredTargets = true, networkEnabled = true, issuesEnabled = true, handleDevToolsAsPage = false, blocklist, allowlist) {
64752
64826
  super();
64753
64827
  this.#networkEnabled = networkEnabled;
64754
64828
  this.#issuesEnabled = issuesEnabled;
@@ -64763,7 +64837,7 @@ class CdpBrowser extends Browser$1 {
64763
64837
  });
64764
64838
  this.#handleDevToolsAsPage = handleDevToolsAsPage;
64765
64839
  this.#setIsPageTargetCallback(isPageTargetCallback);
64766
- this.#targetManager = new TargetManager$1(connection, this.#createTarget, this.#targetFilterCallback, waitForInitiallyDiscoveredTargets, networkConditions);
64840
+ this.#targetManager = new TargetManager$1(connection, this.#createTarget, this.#targetFilterCallback, waitForInitiallyDiscoveredTargets, blocklist, allowlist);
64767
64841
  this.#defaultContext = new CdpBrowserContext(this.#connection, this);
64768
64842
  for (const contextId of contextIds) {
64769
64843
  this.#contexts.set(contextId, new CdpBrowserContext(this.#connection, this, contextId));
@@ -64931,20 +65005,23 @@ class CdpBrowser extends Browser$1 {
64931
65005
  const openDevToolsResponse = await this.#connection.send('Target.openDevTools', {
64932
65006
  targetId: pageTargetId,
64933
65007
  });
65008
+ return await this._getDevToolsTargetPage(openDevToolsResponse.targetId);
65009
+ }
65010
+ async _getDevToolsTargetPage(devtoolsTargetId) {
64934
65011
  const target = (await this.waitForTarget(t => {
64935
- return t._targetId === openDevToolsResponse.targetId;
65012
+ return t._targetId === devtoolsTargetId;
64936
65013
  }));
64937
65014
  if (!target) {
64938
- throw new Error(`Missing target for DevTools page (id = ${pageTargetId})`);
65015
+ throw new Error(`Missing target for DevTools page (id = ${devtoolsTargetId})`);
64939
65016
  }
64940
65017
  const initialized = (await target._initializedDeferred.valueOrThrow()) ===
64941
65018
  InitializationStatus.SUCCESS;
64942
65019
  if (!initialized) {
64943
- throw new Error(`Failed to create target for DevTools page (id = ${pageTargetId})`);
65020
+ throw new Error(`Failed to create target for DevTools page (id = ${devtoolsTargetId})`);
64944
65021
  }
64945
65022
  const page = await target.page();
64946
65023
  if (!page) {
64947
- throw new Error(`Failed to create a DevTools Page for target (id = ${pageTargetId})`);
65024
+ throw new Error(`Failed to create a DevTools Page for target (id = ${devtoolsTargetId})`);
64948
65025
  }
64949
65026
  return page;
64950
65027
  }
@@ -65079,13 +65156,13 @@ class CdpBrowser extends Browser$1 {
65079
65156
  * SPDX-License-Identifier: Apache-2.0
65080
65157
  */
65081
65158
  async function _connectToCdpBrowser(connectionTransport, url, options) {
65082
- const { acceptInsecureCerts = false, networkEnabled = true, issuesEnabled = true, defaultViewport = DEFAULT_VIEWPORT, downloadBehavior, targetFilter, _isPageTarget: isPageTarget, slowMo = 0, protocolTimeout, handleDevToolsAsPage, idGenerator = createIncrementalIdGenerator(), blockList, } = options;
65159
+ const { acceptInsecureCerts = false, networkEnabled = true, issuesEnabled = true, defaultViewport = DEFAULT_VIEWPORT, downloadBehavior, targetFilter, _isPageTarget: isPageTarget, slowMo = 0, protocolTimeout, handleDevToolsAsPage, idGenerator = createIncrementalIdGenerator(), blocklist, allowlist, } = options;
65083
65160
  const connection = new Connection(url, connectionTransport, slowMo, protocolTimeout,
65084
65161
  false, idGenerator);
65085
65162
  const { browserContextIds } = await connection.send('Target.getBrowserContexts');
65086
65163
  const browser = await CdpBrowser._create(connection, browserContextIds, acceptInsecureCerts, defaultViewport, downloadBehavior, undefined, () => {
65087
65164
  return connection.send('Browser.close').catch(debugError);
65088
- }, targetFilter, isPageTarget, undefined, networkEnabled, issuesEnabled, handleDevToolsAsPage, blockList);
65165
+ }, targetFilter, isPageTarget, undefined, networkEnabled, issuesEnabled, handleDevToolsAsPage, blocklist, allowlist);
65089
65166
  return browser;
65090
65167
  }
65091
65168
 
@@ -66813,6 +66890,9 @@ const getWebSocketTransportClass = async () => {
66813
66890
  .BrowserWebSocketTransport;
66814
66891
  };
66815
66892
  async function _connectToBrowser(options) {
66893
+ if (options.blocklist && options.allowlist) {
66894
+ throw new Error('Cannot specify both blocklist and allowlist');
66895
+ }
66816
66896
  const { connectionTransport, endpointUrl } = await getConnectionTransport(options);
66817
66897
  if (options.protocol === 'webDriverBiDi') {
66818
66898
  const bidiBrowser = await _connectToBiDiBrowser(connectionTransport, endpointUrl, options);
@@ -66906,7 +66986,7 @@ async function getWSEndpoint(browserURL) {
66906
66986
  return data.webSocketDebuggerUrl;
66907
66987
  }
66908
66988
  catch (error) {
66909
- if (isErrorLike$1(error)) {
66989
+ if (isErrorLike$2(error)) {
66910
66990
  error.message =
66911
66991
  `Failed to fetch browser webSocket URL from ${endpointURL}: ` +
66912
66992
  error.message;
@@ -66951,9 +67031,9 @@ class Puppeteer {
66951
67031
  * SPDX-License-Identifier: Apache-2.0
66952
67032
  */
66953
67033
  const PUPPETEER_REVISIONS = Object.freeze({
66954
- chrome: '147.0.7727.57',
66955
- 'chrome-headless-shell': '147.0.7727.57',
66956
- firefox: 'stable_149.0.2',
67034
+ chrome: '148.0.7778.97',
67035
+ 'chrome-headless-shell': '148.0.7778.97',
67036
+ firefox: 'stable_150.0.1',
66957
67037
  });
66958
67038
 
66959
67039
  /**
@@ -95003,7 +95083,7 @@ class Process {
95003
95083
  }
95004
95084
  }
95005
95085
  catch (error) {
95006
- throw new Error(`${PROCESS_ERROR_EXPLANATION}\nError cause: ${isErrorLike(error) ? error.stack : error}`);
95086
+ throw new Error(`${PROCESS_ERROR_EXPLANATION}\nError cause: ${isErrorLike$1(error) ? error.stack : error}`);
95007
95087
  }
95008
95088
  }
95009
95089
  this.#clearListeners();
@@ -95099,11 +95179,11 @@ function pidExists(pid) {
95099
95179
  throw error;
95100
95180
  }
95101
95181
  }
95102
- function isErrorLike(obj) {
95182
+ function isErrorLike$1(obj) {
95103
95183
  return (typeof obj === 'object' && obj !== null && 'name' in obj && 'message' in obj);
95104
95184
  }
95105
95185
  function isErrnoException(obj) {
95106
- return (isErrorLike(obj) &&
95186
+ return (isErrorLike$1(obj) &&
95107
95187
  ('errno' in obj || 'code' in obj || 'path' in obj || 'syscall' in obj));
95108
95188
  }
95109
95189
  class TimeoutError extends Error {
@@ -95465,12 +95545,12 @@ function requirePermessageDeflate () {
95465
95545
  const kError = Symbol('error');
95466
95546
  let zlibLimiter;
95467
95547
  class PerMessageDeflate {
95468
- constructor(options, isServer, maxPayload) {
95469
- this._maxPayload = maxPayload | 0;
95548
+ constructor(options) {
95470
95549
  this._options = options || {};
95471
95550
  this._threshold =
95472
95551
  this._options.threshold !== undefined ? this._options.threshold : 1024;
95473
- this._isServer = !!isServer;
95552
+ this._maxPayload = this._options.maxPayload | 0;
95553
+ this._isServer = !!this._options.isServer;
95474
95554
  this._deflate = null;
95475
95555
  this._inflate = null;
95476
95556
  this.params = null;
@@ -97458,7 +97538,7 @@ function requireWebsocket () {
97458
97538
  } else {
97459
97539
  try {
97460
97540
  parsedUrl = new URL(address);
97461
- } catch (e) {
97541
+ } catch {
97462
97542
  throw new SyntaxError(`Invalid URL: ${address}`);
97463
97543
  }
97464
97544
  }
@@ -97511,11 +97591,11 @@ function requireWebsocket () {
97511
97591
  opts.path = parsedUrl.pathname + parsedUrl.search;
97512
97592
  opts.timeout = opts.handshakeTimeout;
97513
97593
  if (opts.perMessageDeflate) {
97514
- perMessageDeflate = new PerMessageDeflate(
97515
- opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},
97516
- false,
97517
- opts.maxPayload
97518
- );
97594
+ perMessageDeflate = new PerMessageDeflate({
97595
+ ...opts.perMessageDeflate,
97596
+ isServer: false,
97597
+ maxPayload: opts.maxPayload
97598
+ });
97519
97599
  opts.headers['Sec-WebSocket-Extensions'] = format({
97520
97600
  [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
97521
97601
  });
@@ -97978,13 +98058,14 @@ function requireStream () {
97978
98058
 
97979
98059
  requireStream();
97980
98060
 
98061
+ requireExtension();
98062
+
98063
+ requirePermessageDeflate();
98064
+
97981
98065
  requireReceiver();
97982
98066
 
97983
98067
  requireSender();
97984
98068
 
97985
- var websocketExports = requireWebsocket();
97986
- var WebSocket$1 = /*@__PURE__*/getDefaultExportFromCjs(websocketExports);
97987
-
97988
98069
  var subprotocol;
97989
98070
  var hasRequiredSubprotocol;
97990
98071
 
@@ -98035,6 +98116,11 @@ function requireSubprotocol () {
98035
98116
  return subprotocol;
98036
98117
  }
98037
98118
 
98119
+ requireSubprotocol();
98120
+
98121
+ var websocketExports = requireWebsocket();
98122
+ var WebSocket$1 = /*@__PURE__*/getDefaultExportFromCjs(websocketExports);
98123
+
98038
98124
  var websocketServer;
98039
98125
  var hasRequiredWebsocketServer;
98040
98126
 
@@ -98221,11 +98307,11 @@ function requireWebsocketServer () {
98221
98307
  this.options.perMessageDeflate &&
98222
98308
  secWebSocketExtensions !== undefined
98223
98309
  ) {
98224
- const perMessageDeflate = new PerMessageDeflate(
98225
- this.options.perMessageDeflate,
98226
- true,
98227
- this.options.maxPayload
98228
- );
98310
+ const perMessageDeflate = new PerMessageDeflate({
98311
+ ...this.options.perMessageDeflate,
98312
+ isServer: true,
98313
+ maxPayload: this.options.maxPayload
98314
+ });
98229
98315
  try {
98230
98316
  const offers = extension.parse(secWebSocketExtensions);
98231
98317
  if (offers[PerMessageDeflate.extensionName]) {
@@ -98509,7 +98595,10 @@ class BrowserLauncher {
98509
98595
  return this.#browser;
98510
98596
  }
98511
98597
  async launch(options = {}) {
98512
- const { dumpio = false, enableExtensions = false, env = process.env, handleSIGINT = true, handleSIGTERM = true, handleSIGHUP = true, acceptInsecureCerts = false, networkEnabled = true, issuesEnabled = true, defaultViewport = DEFAULT_VIEWPORT, downloadBehavior, slowMo = 0, timeout = 30000, waitForInitialPage = true, protocolTimeout, handleDevToolsAsPage, idGenerator = createIncrementalIdGenerator(), blockList, } = options;
98598
+ if (options.blocklist && options.allowlist) {
98599
+ throw new Error('Cannot specify both blocklist and allowlist');
98600
+ }
98601
+ const { dumpio = false, enableExtensions = false, env = process.env, handleSIGINT = true, handleSIGTERM = true, handleSIGHUP = true, acceptInsecureCerts = false, networkEnabled = true, issuesEnabled = true, defaultViewport = DEFAULT_VIEWPORT, downloadBehavior, slowMo = 0, timeout = 30000, waitForInitialPage = true, protocolTimeout, handleDevToolsAsPage, idGenerator = createIncrementalIdGenerator(), blocklist, allowlist, } = options;
98513
98602
  let { protocol } = options;
98514
98603
  if (this.#browser === 'firefox' && protocol === undefined) {
98515
98604
  protocol = 'webDriverBiDi';
@@ -98595,7 +98684,7 @@ class BrowserLauncher {
98595
98684
  });
98596
98685
  }
98597
98686
  else {
98598
- browser = await CdpBrowser._create(cdpConnection, [], acceptInsecureCerts, defaultViewport, downloadBehavior, browserProcess.nodeProcess, browserCloseCallback, options.targetFilter, undefined, undefined, networkEnabled, issuesEnabled, handleDevToolsAsPage, blockList);
98687
+ browser = await CdpBrowser._create(cdpConnection, [], acceptInsecureCerts, defaultViewport, downloadBehavior, browserProcess.nodeProcess, browserCloseCallback, options.targetFilter, undefined, undefined, networkEnabled, issuesEnabled, handleDevToolsAsPage, blocklist, allowlist);
98599
98688
  }
98600
98689
  }
98601
98690
  }
@@ -98887,6 +98976,7 @@ class ChromeLauncher extends BrowserLauncher {
98887
98976
  'AcceptCHFrame',
98888
98977
  'MediaRouter',
98889
98978
  'OptimizationHints',
98979
+ 'WebUIReloadButton',
98890
98980
  ...(turnOnExperimentalFeaturesForTesting
98891
98981
  ? []
98892
98982
  : [
@@ -99632,8 +99722,13 @@ function decode$1(input) {
99632
99722
  }
99633
99723
  return bytes;
99634
99724
  }
99635
- function encode(input) {
99636
- return new Promise((resolve, reject) => {
99725
+ async function encode(input) {
99726
+ if (typeof FileReader === 'undefined') {
99727
+ const blob = new Blob([input]);
99728
+ const arrayBuffer = await blob.arrayBuffer();
99729
+ return globalThis.Buffer.from(arrayBuffer).toString('base64');
99730
+ }
99731
+ return await new Promise((resolve, reject) => {
99637
99732
  const reader = new FileReader();
99638
99733
  reader.onerror = () => reject(new Error('failed to convert to base64: internal error'));
99639
99734
  reader.onload = () => {
@@ -99874,6 +99969,15 @@ const HOST_RUNTIME$2 = {
99874
99969
  return new WebWorker(url);
99875
99970
  },
99876
99971
  workerScope: new WebWorkerScope(),
99972
+ getOnLine() {
99973
+ return navigator.onLine;
99974
+ },
99975
+ getUserAgent() {
99976
+ return navigator.userAgent;
99977
+ },
99978
+ getLocalStorage() {
99979
+ return 'localStorage' in globalThis ? globalThis.localStorage : undefined;
99980
+ },
99877
99981
  };
99878
99982
 
99879
99983
  var HostRuntime$1 = /*#__PURE__*/Object.freeze({
@@ -99956,6 +100060,15 @@ const HOST_RUNTIME$1 = {
99956
100060
  return new NodeWorker(url);
99957
100061
  },
99958
100062
  workerScope: new NodeWorkerScope(),
100063
+ getOnLine() {
100064
+ return true;
100065
+ },
100066
+ getUserAgent() {
100067
+ return 'Node.js';
100068
+ },
100069
+ getLocalStorage() {
100070
+ return undefined;
100071
+ },
99959
100072
  };
99960
100073
 
99961
100074
  var HostRuntime = /*#__PURE__*/Object.freeze({
@@ -104959,9 +105072,10 @@ function getLocaleFetchUrl(locale, location) {
104959
105072
  const path = LOCAL_FETCH_PATTERN.replace('@LOCALE@', locale);
104960
105073
  return new URL(path, import.meta.url).toString();
104961
105074
  }
104962
- async function fetchAndRegisterLocaleData(locale, location = self.location.toString()) {
105075
+ async function fetchAndRegisterLocaleData(locale,
105076
+ location = globalThis.location?.toString() ?? '') {
104963
105077
  const localeDataTextPromise = fetch(getLocaleFetchUrl(locale)).then(result => result.json());
104964
- const timeoutPromise = new Promise((_, reject) => window.setTimeout(() => reject(new Error('timed out fetching locale')), 5000));
105078
+ const timeoutPromise = new Promise((_, reject) => globalThis.setTimeout(() => reject(new Error('timed out fetching locale')), 5000));
104965
105079
  const localeData = await Promise.race([timeoutPromise, localeDataTextPromise]);
104966
105080
  i18nInstance.registerLocaleData(locale, localeData);
104967
105081
  }
@@ -110656,7 +110770,7 @@ function registerCommands(inspectorBackend) {
110656
110770
  inspectorBackend.registerType("Cast.Sink", [{ "name": "name", "type": "string", "optional": false, "description": "", "typeRef": null }, { "name": "id", "type": "string", "optional": false, "description": "", "typeRef": null }, { "name": "session", "type": "string", "optional": true, "description": "Text describing the current session. Present only if there is an active session on the sink.", "typeRef": null }]);
110657
110771
  inspectorBackend.registerCommand("CrashReportContext.getEntries", [], ["entries"], "Returns all entries in the CrashReportContext across all frames in the page.");
110658
110772
  inspectorBackend.registerType("CrashReportContext.CrashReportContextEntry", [{ "name": "key", "type": "string", "optional": false, "description": "", "typeRef": null }, { "name": "value", "type": "string", "optional": false, "description": "", "typeRef": null }, { "name": "frameId", "type": "string", "optional": false, "description": "The ID of the frame where the key-value pair was set.", "typeRef": "Page.FrameId" }]);
110659
- inspectorBackend.registerEnum("DOM.PseudoType", { FirstLine: "first-line", FirstLetter: "first-letter", Checkmark: "checkmark", Before: "before", After: "after", ExpandIcon: "expand-icon", PickerIcon: "picker-icon", InterestHint: "interest-hint", Marker: "marker", Backdrop: "backdrop", Column: "column", Selection: "selection", SearchText: "search-text", TargetText: "target-text", SpellingError: "spelling-error", GrammarError: "grammar-error", Highlight: "highlight", FirstLineInherited: "first-line-inherited", ScrollMarker: "scroll-marker", ScrollMarkerGroup: "scroll-marker-group", ScrollButton: "scroll-button", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button", ViewTransition: "view-transition", ViewTransitionGroup: "view-transition-group", ViewTransitionImagePair: "view-transition-image-pair", ViewTransitionGroupChildren: "view-transition-group-children", ViewTransitionOld: "view-transition-old", ViewTransitionNew: "view-transition-new", Placeholder: "placeholder", FileSelectorButton: "file-selector-button", DetailsContent: "details-content", Picker: "picker", PermissionIcon: "permission-icon", OverscrollAreaParent: "overscroll-area-parent" });
110773
+ inspectorBackend.registerEnum("DOM.PseudoType", { FirstLine: "first-line", FirstLetter: "first-letter", Checkmark: "checkmark", Before: "before", After: "after", ExpandIcon: "expand-icon", PickerIcon: "picker-icon", InterestButton: "interest-button", Marker: "marker", Backdrop: "backdrop", Column: "column", Selection: "selection", SearchText: "search-text", TargetText: "target-text", SpellingError: "spelling-error", GrammarError: "grammar-error", Highlight: "highlight", FirstLineInherited: "first-line-inherited", ScrollMarker: "scroll-marker", ScrollMarkerGroup: "scroll-marker-group", ScrollButton: "scroll-button", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button", ViewTransition: "view-transition", ViewTransitionGroup: "view-transition-group", ViewTransitionImagePair: "view-transition-image-pair", ViewTransitionGroupChildren: "view-transition-group-children", ViewTransitionOld: "view-transition-old", ViewTransitionNew: "view-transition-new", Placeholder: "placeholder", FileSelectorButton: "file-selector-button", DetailsContent: "details-content", Picker: "picker", PermissionIcon: "permission-icon", OverscrollAreaParent: "overscroll-area-parent" });
110660
110774
  inspectorBackend.registerEnum("DOM.ShadowRootType", { UserAgent: "user-agent", Open: "open", Closed: "closed" });
110661
110775
  inspectorBackend.registerEnum("DOM.CompatibilityMode", { QuirksMode: "QuirksMode", LimitedQuirksMode: "LimitedQuirksMode", NoQuirksMode: "NoQuirksMode" });
110662
110776
  inspectorBackend.registerEnum("DOM.PhysicalAxes", { Horizontal: "Horizontal", Vertical: "Vertical", Both: "Both" });
@@ -110876,10 +110990,10 @@ function registerCommands(inspectorBackend) {
110876
110990
  inspectorBackend.registerCommand("EventBreakpoints.removeInstrumentationBreakpoint", [{ "name": "eventName", "type": "string", "optional": false, "description": "Instrumentation name to stop on.", "typeRef": null }], [], "Removes breakpoint on particular native event.");
110877
110991
  inspectorBackend.registerCommand("EventBreakpoints.disable", [], [], "Removes all breakpoints");
110878
110992
  inspectorBackend.registerEnum("Extensions.StorageArea", { Session: "session", Local: "local", Sync: "sync", Managed: "managed" });
110879
- inspectorBackend.registerCommand("Extensions.triggerAction", [{ "name": "id", "type": "string", "optional": false, "description": "Extension id.", "typeRef": null }, { "name": "targetId", "type": "string", "optional": false, "description": "A tab target ID to trigger the default extension action on.", "typeRef": null }], [], "Runs an extension default action. Available if the client is connected using the --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging flag is set.");
110880
- inspectorBackend.registerCommand("Extensions.loadUnpacked", [{ "name": "path", "type": "string", "optional": false, "description": "Absolute file path.", "typeRef": null }, { "name": "enableInIncognito", "type": "boolean", "optional": true, "description": "Enable the extension in incognito", "typeRef": null }], ["id"], "Installs an unpacked extension from the filesystem similar to --load-extension CLI flags. Returns extension ID once the extension has been installed. Available if the client is connected using the --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging flag is set.");
110881
- inspectorBackend.registerCommand("Extensions.getExtensions", [], ["extensions"], "Gets a list of all unpacked extensions. Available if the client is connected using the --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging flag is set.");
110882
- inspectorBackend.registerCommand("Extensions.uninstall", [{ "name": "id", "type": "string", "optional": false, "description": "Extension id.", "typeRef": null }], [], "Uninstalls an unpacked extension (others not supported) from the profile. Available if the client is connected using the --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging.");
110993
+ inspectorBackend.registerCommand("Extensions.triggerAction", [{ "name": "id", "type": "string", "optional": false, "description": "Extension id.", "typeRef": null }, { "name": "targetId", "type": "string", "optional": false, "description": "A tab target ID to trigger the default extension action on.", "typeRef": null }], [], "Runs an extension default action.");
110994
+ inspectorBackend.registerCommand("Extensions.loadUnpacked", [{ "name": "path", "type": "string", "optional": false, "description": "Absolute file path.", "typeRef": null }, { "name": "enableInIncognito", "type": "boolean", "optional": true, "description": "Enable the extension in incognito", "typeRef": null }], ["id"], "Installs an unpacked extension from the filesystem similar to --load-extension CLI flags. Returns extension ID once the extension has been installed.");
110995
+ inspectorBackend.registerCommand("Extensions.getExtensions", [], ["extensions"], "Gets a list of all unpacked extensions.");
110996
+ inspectorBackend.registerCommand("Extensions.uninstall", [{ "name": "id", "type": "string", "optional": false, "description": "Extension id.", "typeRef": null }], [], "Uninstalls an unpacked extension (others not supported) from the profile.");
110883
110997
  inspectorBackend.registerCommand("Extensions.getStorageItems", [{ "name": "id", "type": "string", "optional": false, "description": "ID of extension.", "typeRef": null }, { "name": "storageArea", "type": "string", "optional": false, "description": "StorageArea to retrieve data from.", "typeRef": "Extensions.StorageArea" }, { "name": "keys", "type": "array", "optional": true, "description": "Keys to retrieve.", "typeRef": "string" }], ["data"], "Gets data from extension storage in the given `storageArea`. If `keys` is specified, these are used to filter the result.");
110884
110998
  inspectorBackend.registerCommand("Extensions.removeStorageItems", [{ "name": "id", "type": "string", "optional": false, "description": "ID of extension.", "typeRef": null }, { "name": "storageArea", "type": "string", "optional": false, "description": "StorageArea to remove data from.", "typeRef": "Extensions.StorageArea" }, { "name": "keys", "type": "array", "optional": false, "description": "Keys to remove.", "typeRef": "string" }], [], "Removes `keys` from extension storage in the given `storageArea`.");
110885
110999
  inspectorBackend.registerCommand("Extensions.clearStorageItems", [{ "name": "id", "type": "string", "optional": false, "description": "ID of extension.", "typeRef": null }, { "name": "storageArea", "type": "string", "optional": false, "description": "StorageArea to remove data from.", "typeRef": "Extensions.StorageArea" }], [], "Clears extension storage in the given `storageArea`.");
@@ -111291,7 +111405,7 @@ function registerCommands(inspectorBackend) {
111291
111405
  inspectorBackend.registerEnum("Page.SecureContextType", { Secure: "Secure", SecureLocalhost: "SecureLocalhost", InsecureScheme: "InsecureScheme", InsecureAncestor: "InsecureAncestor" });
111292
111406
  inspectorBackend.registerEnum("Page.CrossOriginIsolatedContextType", { Isolated: "Isolated", NotIsolated: "NotIsolated", NotIsolatedFeatureDisabled: "NotIsolatedFeatureDisabled" });
111293
111407
  inspectorBackend.registerEnum("Page.GatedAPIFeatures", { SharedArrayBuffers: "SharedArrayBuffers", SharedArrayBuffersTransferAllowed: "SharedArrayBuffersTransferAllowed", PerformanceMeasureMemory: "PerformanceMeasureMemory", PerformanceProfile: "PerformanceProfile" });
111294
- 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", 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" });
111408
+ 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" });
111295
111409
  inspectorBackend.registerEnum("Page.PermissionsPolicyBlockReason", { Header: "Header", IframeAttribute: "IframeAttribute", InFencedFrameTree: "InFencedFrameTree", InIsolatedApp: "InIsolatedApp" });
111296
111410
  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" });
111297
111411
  inspectorBackend.registerEnum("Page.OriginTrialStatus", { Enabled: "Enabled", ValidTokenNotProvided: "ValidTokenNotProvided", OSNotSupported: "OSNotSupported", TrialNotAllowed: "TrialNotAllowed" });
@@ -111302,7 +111416,7 @@ function registerCommands(inspectorBackend) {
111302
111416
  inspectorBackend.registerEnum("Page.ClientNavigationDisposition", { CurrentTab: "currentTab", NewTab: "newTab", NewWindow: "newWindow", Download: "download" });
111303
111417
  inspectorBackend.registerEnum("Page.ReferrerPolicy", { NoReferrer: "noReferrer", NoReferrerWhenDowngrade: "noReferrerWhenDowngrade", Origin: "origin", OriginWhenCrossOrigin: "originWhenCrossOrigin", SameOrigin: "sameOrigin", StrictOrigin: "strictOrigin", StrictOriginWhenCrossOrigin: "strictOriginWhenCrossOrigin", UnsafeUrl: "unsafeUrl" });
111304
111418
  inspectorBackend.registerEnum("Page.NavigationType", { Navigation: "Navigation", BackForwardCacheRestore: "BackForwardCacheRestore" });
111305
- inspectorBackend.registerEnum("Page.BackForwardCacheNotRestoredReason", { NotPrimaryMainFrame: "NotPrimaryMainFrame", BackForwardCacheDisabled: "BackForwardCacheDisabled", RelatedActiveContentsExist: "RelatedActiveContentsExist", HTTPStatusNotOK: "HTTPStatusNotOK", SchemeNotHTTPOrHTTPS: "SchemeNotHTTPOrHTTPS", Loading: "Loading", WasGrantedMediaAccess: "WasGrantedMediaAccess", DisableForRenderFrameHostCalled: "DisableForRenderFrameHostCalled", DomainNotAllowed: "DomainNotAllowed", HTTPMethodNotGET: "HTTPMethodNotGET", SubframeIsNavigating: "SubframeIsNavigating", Timeout: "Timeout", CacheLimit: "CacheLimit", JavaScriptExecution: "JavaScriptExecution", RendererProcessKilled: "RendererProcessKilled", RendererProcessCrashed: "RendererProcessCrashed", SchedulerTrackedFeatureUsed: "SchedulerTrackedFeatureUsed", ConflictingBrowsingInstance: "ConflictingBrowsingInstance", CacheFlushed: "CacheFlushed", ServiceWorkerVersionActivation: "ServiceWorkerVersionActivation", SessionRestored: "SessionRestored", ServiceWorkerPostMessage: "ServiceWorkerPostMessage", EnteredBackForwardCacheBeforeServiceWorkerHostAdded: "EnteredBackForwardCacheBeforeServiceWorkerHostAdded", RenderFrameHostReused_SameSite: "RenderFrameHostReused_SameSite", RenderFrameHostReused_CrossSite: "RenderFrameHostReused_CrossSite", ServiceWorkerClaim: "ServiceWorkerClaim", IgnoreEventAndEvict: "IgnoreEventAndEvict", HaveInnerContents: "HaveInnerContents", TimeoutPuttingInCache: "TimeoutPuttingInCache", BackForwardCacheDisabledByLowMemory: "BackForwardCacheDisabledByLowMemory", BackForwardCacheDisabledByCommandLine: "BackForwardCacheDisabledByCommandLine", NetworkRequestDatAPIpeDrainedAsBytesConsumer: "NetworkRequestDatapipeDrainedAsBytesConsumer", NetworkRequestRedirected: "NetworkRequestRedirected", NetworkRequestTimeout: "NetworkRequestTimeout", NetworkExceedsBufferLimit: "NetworkExceedsBufferLimit", NavigationCancelledWhileRestoring: "NavigationCancelledWhileRestoring", NotMostRecentNavigationEntry: "NotMostRecentNavigationEntry", BackForwardCacheDisabledForPrerender: "BackForwardCacheDisabledForPrerender", UserAgentOverrideDiffers: "UserAgentOverrideDiffers", ForegroundCacheLimit: "ForegroundCacheLimit", ForwardCacheDisabled: "ForwardCacheDisabled", BrowsingInstanceNotSwapped: "BrowsingInstanceNotSwapped", BackForwardCacheDisabledForDelegate: "BackForwardCacheDisabledForDelegate", UnloadHandlerExistsInMainFrame: "UnloadHandlerExistsInMainFrame", UnloadHandlerExistsInSubFrame: "UnloadHandlerExistsInSubFrame", ServiceWorkerUnregistration: "ServiceWorkerUnregistration", CacheControlNoStore: "CacheControlNoStore", CacheControlNoStoreCookieModified: "CacheControlNoStoreCookieModified", CacheControlNoStoreHTTPOnlyCookieModified: "CacheControlNoStoreHTTPOnlyCookieModified", NoResponseHead: "NoResponseHead", Unknown: "Unknown", ActivationNavigationsDisallowedForBug1234857: "ActivationNavigationsDisallowedForBug1234857", ErrorDocument: "ErrorDocument", FencedFramesEmbedder: "FencedFramesEmbedder", CookieDisabled: "CookieDisabled", HTTPAuthRequired: "HTTPAuthRequired", CookieFlushed: "CookieFlushed", BroadcastChannelOnMessage: "BroadcastChannelOnMessage", WebViewSettingsChanged: "WebViewSettingsChanged", WebViewJavaScriptObjectChanged: "WebViewJavaScriptObjectChanged", WebViewMessageListenerInjected: "WebViewMessageListenerInjected", WebViewSafeBrowsingAllowlistChanged: "WebViewSafeBrowsingAllowlistChanged", WebViewDocumentStartJavascriptChanged: "WebViewDocumentStartJavascriptChanged", WebSocket: "WebSocket", WebTransport: "WebTransport", WebRTC: "WebRTC", MainResourceHasCacheControlNoStore: "MainResourceHasCacheControlNoStore", MainResourceHasCacheControlNoCache: "MainResourceHasCacheControlNoCache", SubresourceHasCacheControlNoStore: "SubresourceHasCacheControlNoStore", SubresourceHasCacheControlNoCache: "SubresourceHasCacheControlNoCache", ContainsPlugins: "ContainsPlugins", DocumentLoaded: "DocumentLoaded", OutstandingNetworkRequestOthers: "OutstandingNetworkRequestOthers", RequestedMIDIPermission: "RequestedMIDIPermission", RequestedAudioCapturePermission: "RequestedAudioCapturePermission", RequestedVideoCapturePermission: "RequestedVideoCapturePermission", RequestedBackForwardCacheBlockedSensors: "RequestedBackForwardCacheBlockedSensors", RequestedBackgroundWorkPermission: "RequestedBackgroundWorkPermission", BroadcastChannel: "BroadcastChannel", WebXR: "WebXR", SharedWorker: "SharedWorker", SharedWorkerMessage: "SharedWorkerMessage", SharedWorkerWithNoActiveClient: "SharedWorkerWithNoActiveClient", WebLocks: "WebLocks", WebLocksContention: "WebLocksContention", WebHID: "WebHID", WebBluetooth: "WebBluetooth", WebShare: "WebShare", RequestedStorageAccessGrant: "RequestedStorageAccessGrant", WebNfc: "WebNfc", OutstandingNetworkRequestFetch: "OutstandingNetworkRequestFetch", OutstandingNetworkRequestXHR: "OutstandingNetworkRequestXHR", AppBanner: "AppBanner", Printing: "Printing", WebDatabase: "WebDatabase", PictureInPicture: "PictureInPicture", SpeechRecognizer: "SpeechRecognizer", IdleManager: "IdleManager", PaymentManager: "PaymentManager", SpeechSynthesis: "SpeechSynthesis", KeyboardLock: "KeyboardLock", WebOTPService: "WebOTPService", OutstandingNetworkRequestDirectSocket: "OutstandingNetworkRequestDirectSocket", InjectedJavascript: "InjectedJavascript", InjectedStyleSheet: "InjectedStyleSheet", KeepaliveRequest: "KeepaliveRequest", IndexedDBEvent: "IndexedDBEvent", Dummy: "Dummy", JsNetworkRequestReceivedCacheControlNoStoreResource: "JsNetworkRequestReceivedCacheControlNoStoreResource", WebRTCUsedWithCCNS: "WebRTCUsedWithCCNS", WebTransportUsedWithCCNS: "WebTransportUsedWithCCNS", WebSocketUsedWithCCNS: "WebSocketUsedWithCCNS", SmartCard: "SmartCard", LiveMediaStreamTrack: "LiveMediaStreamTrack", UnloadHandler: "UnloadHandler", ParserAborted: "ParserAborted", ContentSecurityHandler: "ContentSecurityHandler", ContentWebAuthenticationAPI: "ContentWebAuthenticationAPI", ContentFileChooser: "ContentFileChooser", ContentSerial: "ContentSerial", ContentFileSystemAccess: "ContentFileSystemAccess", ContentMediaDevicesDispatcherHost: "ContentMediaDevicesDispatcherHost", ContentWebBluetooth: "ContentWebBluetooth", ContentWebUSB: "ContentWebUSB", ContentMediaSessionService: "ContentMediaSessionService", ContentScreenReader: "ContentScreenReader", ContentDiscarded: "ContentDiscarded", EmbedderPopupBlockerTabHelper: "EmbedderPopupBlockerTabHelper", EmbedderSafeBrowsingTriggeredPopupBlocker: "EmbedderSafeBrowsingTriggeredPopupBlocker", EmbedderSafeBrowsingThreatDetails: "EmbedderSafeBrowsingThreatDetails", EmbedderAppBannerManager: "EmbedderAppBannerManager", EmbedderDomDistillerViewerSource: "EmbedderDomDistillerViewerSource", EmbedderDomDistillerSelfDeletingRequestDelegate: "EmbedderDomDistillerSelfDeletingRequestDelegate", EmbedderOomInterventionTabHelper: "EmbedderOomInterventionTabHelper", EmbedderOfflinePage: "EmbedderOfflinePage", EmbedderChromePasswordManagerClientBindCredentialManager: "EmbedderChromePasswordManagerClientBindCredentialManager", EmbedderPermissionRequestManager: "EmbedderPermissionRequestManager", EmbedderModalDialog: "EmbedderModalDialog", EmbedderExtensions: "EmbedderExtensions", EmbedderExtensionMessaging: "EmbedderExtensionMessaging", EmbedderExtensionMessagingForOpenPort: "EmbedderExtensionMessagingForOpenPort", EmbedderExtensionSentMessageToCachedFrame: "EmbedderExtensionSentMessageToCachedFrame", RequestedByWebViewClient: "RequestedByWebViewClient", PostMessageByWebViewClient: "PostMessageByWebViewClient", CacheControlNoStoreDeviceBoundSessionTerminated: "CacheControlNoStoreDeviceBoundSessionTerminated", CacheLimitPrunedOnModerateMemoryPressure: "CacheLimitPrunedOnModerateMemoryPressure", CacheLimitPrunedOnCriticalMemoryPressure: "CacheLimitPrunedOnCriticalMemoryPressure" });
111419
+ inspectorBackend.registerEnum("Page.BackForwardCacheNotRestoredReason", { NotPrimaryMainFrame: "NotPrimaryMainFrame", BackForwardCacheDisabled: "BackForwardCacheDisabled", RelatedActiveContentsExist: "RelatedActiveContentsExist", HTTPStatusNotOK: "HTTPStatusNotOK", SchemeNotHTTPOrHTTPS: "SchemeNotHTTPOrHTTPS", Loading: "Loading", WasGrantedMediaAccess: "WasGrantedMediaAccess", DisableForRenderFrameHostCalled: "DisableForRenderFrameHostCalled", DomainNotAllowed: "DomainNotAllowed", HTTPMethodNotGET: "HTTPMethodNotGET", SubframeIsNavigating: "SubframeIsNavigating", Timeout: "Timeout", CacheLimit: "CacheLimit", JavaScriptExecution: "JavaScriptExecution", RendererProcessKilled: "RendererProcessKilled", RendererProcessCrashed: "RendererProcessCrashed", SchedulerTrackedFeatureUsed: "SchedulerTrackedFeatureUsed", ConflictingBrowsingInstance: "ConflictingBrowsingInstance", CacheFlushed: "CacheFlushed", ServiceWorkerVersionActivation: "ServiceWorkerVersionActivation", SessionRestored: "SessionRestored", ServiceWorkerPostMessage: "ServiceWorkerPostMessage", EnteredBackForwardCacheBeforeServiceWorkerHostAdded: "EnteredBackForwardCacheBeforeServiceWorkerHostAdded", RenderFrameHostReused_SameSite: "RenderFrameHostReused_SameSite", RenderFrameHostReused_CrossSite: "RenderFrameHostReused_CrossSite", ServiceWorkerClaim: "ServiceWorkerClaim", IgnoreEventAndEvict: "IgnoreEventAndEvict", HaveInnerContents: "HaveInnerContents", TimeoutPuttingInCache: "TimeoutPuttingInCache", BackForwardCacheDisabledByLowMemory: "BackForwardCacheDisabledByLowMemory", BackForwardCacheDisabledByCommandLine: "BackForwardCacheDisabledByCommandLine", NetworkRequestDatAPIpeDrainedAsBytesConsumer: "NetworkRequestDatapipeDrainedAsBytesConsumer", NetworkRequestRedirected: "NetworkRequestRedirected", NetworkRequestTimeout: "NetworkRequestTimeout", NetworkExceedsBufferLimit: "NetworkExceedsBufferLimit", NavigationCancelledWhileRestoring: "NavigationCancelledWhileRestoring", NotMostRecentNavigationEntry: "NotMostRecentNavigationEntry", BackForwardCacheDisabledForPrerender: "BackForwardCacheDisabledForPrerender", UserAgentOverrideDiffers: "UserAgentOverrideDiffers", ForegroundCacheLimit: "ForegroundCacheLimit", ForwardCacheDisabled: "ForwardCacheDisabled", BrowsingInstanceNotSwapped: "BrowsingInstanceNotSwapped", BackForwardCacheDisabledForDelegate: "BackForwardCacheDisabledForDelegate", UnloadHandlerExistsInMainFrame: "UnloadHandlerExistsInMainFrame", UnloadHandlerExistsInSubFrame: "UnloadHandlerExistsInSubFrame", ServiceWorkerUnregistration: "ServiceWorkerUnregistration", CacheControlNoStore: "CacheControlNoStore", CacheControlNoStoreCookieModified: "CacheControlNoStoreCookieModified", CacheControlNoStoreHTTPOnlyCookieModified: "CacheControlNoStoreHTTPOnlyCookieModified", NoResponseHead: "NoResponseHead", Unknown: "Unknown", ActivationNavigationsDisallowedForBug1234857: "ActivationNavigationsDisallowedForBug1234857", ErrorDocument: "ErrorDocument", FencedFramesEmbedder: "FencedFramesEmbedder", CookieDisabled: "CookieDisabled", HTTPAuthRequired: "HTTPAuthRequired", CookieFlushed: "CookieFlushed", BroadcastChannelOnMessage: "BroadcastChannelOnMessage", WebViewSettingsChanged: "WebViewSettingsChanged", WebViewJavaScriptObjectChanged: "WebViewJavaScriptObjectChanged", WebViewMessageListenerInjected: "WebViewMessageListenerInjected", WebViewSafeBrowsingAllowlistChanged: "WebViewSafeBrowsingAllowlistChanged", WebViewDocumentStartJavascriptChanged: "WebViewDocumentStartJavascriptChanged", WebSocket: "WebSocket", WebTransport: "WebTransport", WebRTC: "WebRTC", MainResourceHasCacheControlNoStore: "MainResourceHasCacheControlNoStore", MainResourceHasCacheControlNoCache: "MainResourceHasCacheControlNoCache", SubresourceHasCacheControlNoStore: "SubresourceHasCacheControlNoStore", SubresourceHasCacheControlNoCache: "SubresourceHasCacheControlNoCache", ContainsPlugins: "ContainsPlugins", DocumentLoaded: "DocumentLoaded", OutstandingNetworkRequestOthers: "OutstandingNetworkRequestOthers", RequestedMIDIPermission: "RequestedMIDIPermission", RequestedAudioCapturePermission: "RequestedAudioCapturePermission", RequestedVideoCapturePermission: "RequestedVideoCapturePermission", RequestedBackForwardCacheBlockedSensors: "RequestedBackForwardCacheBlockedSensors", RequestedBackgroundWorkPermission: "RequestedBackgroundWorkPermission", BroadcastChannel: "BroadcastChannel", WebXR: "WebXR", SharedWorker: "SharedWorker", SharedWorkerMessage: "SharedWorkerMessage", SharedWorkerWithNoActiveClient: "SharedWorkerWithNoActiveClient", WebLocks: "WebLocks", WebLocksContention: "WebLocksContention", WebHID: "WebHID", WebBluetooth: "WebBluetooth", WebShare: "WebShare", RequestedStorageAccessGrant: "RequestedStorageAccessGrant", WebNfc: "WebNfc", OutstandingNetworkRequestFetch: "OutstandingNetworkRequestFetch", OutstandingNetworkRequestXHR: "OutstandingNetworkRequestXHR", AppBanner: "AppBanner", Printing: "Printing", WebDatabase: "WebDatabase", PictureInPicture: "PictureInPicture", SpeechRecognizer: "SpeechRecognizer", IdleManager: "IdleManager", PaymentManager: "PaymentManager", SpeechSynthesis: "SpeechSynthesis", KeyboardLock: "KeyboardLock", WebOTPService: "WebOTPService", OutstandingNetworkRequestDirectSocket: "OutstandingNetworkRequestDirectSocket", InjectedJavascript: "InjectedJavascript", InjectedStyleSheet: "InjectedStyleSheet", KeepaliveRequest: "KeepaliveRequest", IndexedDBEvent: "IndexedDBEvent", Dummy: "Dummy", JsNetworkRequestReceivedCacheControlNoStoreResource: "JsNetworkRequestReceivedCacheControlNoStoreResource", WebRTCUsedWithCCNS: "WebRTCUsedWithCCNS", WebTransportUsedWithCCNS: "WebTransportUsedWithCCNS", WebSocketUsedWithCCNS: "WebSocketUsedWithCCNS", SmartCard: "SmartCard", LiveMediaStreamTrack: "LiveMediaStreamTrack", UnloadHandler: "UnloadHandler", ParserAborted: "ParserAborted", ContentSecurityHandler: "ContentSecurityHandler", ContentWebAuthenticationAPI: "ContentWebAuthenticationAPI", ContentFileChooser: "ContentFileChooser", ContentSerial: "ContentSerial", ContentFileSystemAccess: "ContentFileSystemAccess", ContentMediaDevicesDispatcherHost: "ContentMediaDevicesDispatcherHost", ContentWebBluetooth: "ContentWebBluetooth", ContentWebUSB: "ContentWebUSB", ContentMediaSessionService: "ContentMediaSessionService", ContentScreenReader: "ContentScreenReader", ContentDiscarded: "ContentDiscarded", EmbedderPopupBlockerTabHelper: "EmbedderPopupBlockerTabHelper", EmbedderSafeBrowsingTriggeredPopupBlocker: "EmbedderSafeBrowsingTriggeredPopupBlocker", EmbedderSafeBrowsingThreatDetails: "EmbedderSafeBrowsingThreatDetails", EmbedderAppBannerManager: "EmbedderAppBannerManager", EmbedderDomDistillerViewerSource: "EmbedderDomDistillerViewerSource", EmbedderDomDistillerSelfDeletingRequestDelegate: "EmbedderDomDistillerSelfDeletingRequestDelegate", EmbedderOomInterventionTabHelper: "EmbedderOomInterventionTabHelper", EmbedderOfflinePage: "EmbedderOfflinePage", EmbedderChromePasswordManagerClientBindCredentialManager: "EmbedderChromePasswordManagerClientBindCredentialManager", EmbedderPermissionRequestManager: "EmbedderPermissionRequestManager", EmbedderModalDialog: "EmbedderModalDialog", EmbedderExtensions: "EmbedderExtensions", EmbedderExtensionMessaging: "EmbedderExtensionMessaging", EmbedderExtensionMessagingForOpenPort: "EmbedderExtensionMessagingForOpenPort", EmbedderExtensionSentMessageToCachedFrame: "EmbedderExtensionSentMessageToCachedFrame", EmbedderExtensionFrame: "EmbedderExtensionFrame", RequestedByWebViewClient: "RequestedByWebViewClient", PostMessageByWebViewClient: "PostMessageByWebViewClient", CacheControlNoStoreDeviceBoundSessionTerminated: "CacheControlNoStoreDeviceBoundSessionTerminated", CacheLimitPrunedOnModerateMemoryPressure: "CacheLimitPrunedOnModerateMemoryPressure", CacheLimitPrunedOnCriticalMemoryPressure: "CacheLimitPrunedOnCriticalMemoryPressure" });
111306
111420
  inspectorBackend.registerEnum("Page.BackForwardCacheNotRestoredReasonType", { SupportPending: "SupportPending", PageSupportNeeded: "PageSupportNeeded", Circumstantial: "Circumstantial" });
111307
111421
  inspectorBackend.registerEvent("Page.domContentEventFired", ["timestamp"]);
111308
111422
  inspectorBackend.registerEnum("Page.FileChooserOpenedEventMode", { SelectSingle: "selectSingle", SelectMultiple: "selectMultiple" });
@@ -111730,7 +111844,7 @@ function registerCommands(inspectorBackend) {
111730
111844
  inspectorBackend.registerCommand("WebMCP.disable", [], [], "Disables the WebMCP domain.");
111731
111845
  inspectorBackend.registerCommand("WebMCP.invokeTool", [{ "name": "frameId", "type": "string", "optional": false, "description": "Frame in which to invoke the tool.", "typeRef": "Page.FrameId" }, { "name": "toolName", "type": "string", "optional": false, "description": "Name of the tool to invoke.", "typeRef": null }, { "name": "input", "type": "object", "optional": false, "description": "Input parameters for the tool, matching the tool's inputSchema.", "typeRef": null }], ["invocationId"], "Invokes a registered tool.");
111732
111846
  inspectorBackend.registerCommand("WebMCP.cancelInvocation", [{ "name": "invocationId", "type": "string", "optional": false, "description": "Invocation identifier to cancel.", "typeRef": null }], [], "Cancels a pending tool invocation.");
111733
- inspectorBackend.registerType("WebMCP.Annotation", [{ "name": "readOnly", "type": "boolean", "optional": true, "description": "A hint indicating that the tool does not modify any state.", "typeRef": null }, { "name": "autosubmit", "type": "boolean", "optional": true, "description": "If the declarative tool was declared with the autosubmit attribute.", "typeRef": null }]);
111847
+ inspectorBackend.registerType("WebMCP.Annotation", [{ "name": "readOnly", "type": "boolean", "optional": true, "description": "A hint indicating that the tool does not modify any state.", "typeRef": null }, { "name": "untrustedContent", "type": "boolean", "optional": true, "description": "A hint indicating that the tool output may contain untrusted content, ex: UGC, 3rd party data.", "typeRef": null }, { "name": "autosubmit", "type": "boolean", "optional": true, "description": "If the declarative tool was declared with the autosubmit attribute.", "typeRef": null }]);
111734
111848
  inspectorBackend.registerType("WebMCP.Tool", [{ "name": "name", "type": "string", "optional": false, "description": "Tool name.", "typeRef": null }, { "name": "description", "type": "string", "optional": false, "description": "Tool description.", "typeRef": null }, { "name": "inputSchema", "type": "object", "optional": true, "description": "Schema for the tool's input parameters.", "typeRef": null }, { "name": "annotations", "type": "object", "optional": true, "description": "Optional annotations for the tool.", "typeRef": "WebMCP.Annotation" }, { "name": "frameId", "type": "string", "optional": false, "description": "Frame identifier associated with the tool registration.", "typeRef": "Page.FrameId" }, { "name": "backendNodeId", "type": "number", "optional": true, "description": "Optional node ID for declarative tools.", "typeRef": "DOM.BackendNodeId" }, { "name": "stackTrace", "type": "object", "optional": true, "description": "The stack trace at the time of the registration.", "typeRef": "Runtime.StackTrace" }]);
111735
111849
  inspectorBackend.registerType("WebMCP.RemovedTool", [{ "name": "name", "type": "string", "optional": false, "description": "Tool name.", "typeRef": null }, { "name": "frameId", "type": "string", "optional": false, "description": "Frame identifier associated with the tool registration.", "typeRef": "Page.FrameId" }]);
111736
111850
  inspectorBackend.registerEnum("Debugger.ScopeType", { Global: "global", Local: "local", With: "with", Closure: "closure", Catch: "catch", Block: "block", Script: "script", Eval: "eval", Module: "module", WasmExpressionStack: "wasm-expression-stack" });
@@ -114256,11 +114370,12 @@ var ErrorType;
114256
114370
  ErrorType["ABORT"] = "ABORT";
114257
114371
  })(ErrorType || (ErrorType = {}));
114258
114372
  function setDebugDispatchHttpRequestEnabled(enabled) {
114373
+ const localStorage = HOST_RUNTIME.getLocalStorage();
114259
114374
  if (enabled) {
114260
- localStorage.setItem('debugDispatchHttpRequestEnabled', 'true');
114375
+ localStorage?.setItem('debugDispatchHttpRequestEnabled', 'true');
114261
114376
  }
114262
114377
  else {
114263
- localStorage.removeItem('debugDispatchHttpRequestEnabled');
114378
+ localStorage?.removeItem('debugDispatchHttpRequestEnabled');
114264
114379
  }
114265
114380
  }
114266
114381
  globalThis.setDebugDispatchHttpRequestEnabled = setDebugDispatchHttpRequestEnabled;
@@ -115650,10 +115765,10 @@ const generatedProperties = [
115650
115765
  "column-height",
115651
115766
  "column-rule-break",
115652
115767
  "column-rule-color",
115653
- "column-rule-edge-inset-end",
115654
- "column-rule-edge-inset-start",
115655
- "column-rule-interior-inset-end",
115656
- "column-rule-interior-inset-start",
115768
+ "column-rule-inset-cap-end",
115769
+ "column-rule-inset-cap-start",
115770
+ "column-rule-inset-junction-end",
115771
+ "column-rule-inset-junction-start",
115657
115772
  "column-rule-style",
115658
115773
  "column-rule-visibility-items",
115659
115774
  "column-rule-width",
@@ -115883,10 +115998,10 @@ const generatedProperties = [
115883
115998
  "row-gap",
115884
115999
  "row-rule-break",
115885
116000
  "row-rule-color",
115886
- "row-rule-edge-inset-end",
115887
- "row-rule-edge-inset-start",
115888
- "row-rule-interior-inset-end",
115889
- "row-rule-interior-inset-start",
116001
+ "row-rule-inset-cap-end",
116002
+ "row-rule-inset-cap-start",
116003
+ "row-rule-inset-junction-end",
116004
+ "row-rule-inset-junction-start",
115890
116005
  "row-rule-style",
115891
116006
  "row-rule-visibility-items",
115892
116007
  "row-rule-width",
@@ -116306,7 +116421,7 @@ const generatedProperties = [
116306
116421
  {
116307
116422
  "inherited": true,
116308
116423
  "keywords": [
116309
- "auto",
116424
+ "ellipsis",
116310
116425
  "no-ellipsis"
116311
116426
  ],
116312
116427
  "name": "block-ellipsis"
@@ -116974,68 +117089,68 @@ const generatedProperties = [
116974
117089
  },
116975
117090
  {
116976
117091
  "longhands": [
116977
- "column-rule-edge-inset-start",
116978
- "column-rule-edge-inset-end"
117092
+ "column-rule-inset-cap-start",
117093
+ "column-rule-inset-cap-end",
117094
+ "column-rule-inset-junction-start",
117095
+ "column-rule-inset-junction-end"
116979
117096
  ],
116980
- "name": "column-rule-edge-inset"
117097
+ "name": "column-rule-inset"
116981
117098
  },
116982
117099
  {
116983
- "inherited": false,
116984
- "keywords": [
116985
- "overlap-join"
117100
+ "longhands": [
117101
+ "column-rule-inset-cap-start",
117102
+ "column-rule-inset-cap-end"
116986
117103
  ],
116987
- "name": "column-rule-edge-inset-end"
117104
+ "name": "column-rule-inset-cap"
116988
117105
  },
116989
117106
  {
116990
117107
  "inherited": false,
116991
117108
  "keywords": [
116992
117109
  "overlap-join"
116993
117110
  ],
116994
- "name": "column-rule-edge-inset-start"
117111
+ "name": "column-rule-inset-cap-end"
116995
117112
  },
116996
117113
  {
116997
- "longhands": [
116998
- "column-rule-edge-inset-start",
116999
- "column-rule-edge-inset-end",
117000
- "column-rule-interior-inset-start",
117001
- "column-rule-interior-inset-end"
117114
+ "inherited": false,
117115
+ "keywords": [
117116
+ "overlap-join"
117002
117117
  ],
117003
- "name": "column-rule-inset"
117118
+ "name": "column-rule-inset-cap-start"
117004
117119
  },
117005
117120
  {
117006
117121
  "longhands": [
117007
- "column-rule-edge-inset-end",
117008
- "column-rule-interior-inset-end"
117122
+ "column-rule-inset-cap-end",
117123
+ "column-rule-inset-junction-end"
117009
117124
  ],
117010
117125
  "name": "column-rule-inset-end"
117011
117126
  },
117012
117127
  {
117013
117128
  "longhands": [
117014
- "column-rule-edge-inset-start",
117015
- "column-rule-interior-inset-start"
117129
+ "column-rule-inset-junction-start",
117130
+ "column-rule-inset-junction-end"
117016
117131
  ],
117017
- "name": "column-rule-inset-start"
117018
- },
117019
- {
117020
- "longhands": [
117021
- "column-rule-interior-inset-start",
117022
- "column-rule-interior-inset-end"
117023
- ],
117024
- "name": "column-rule-interior-inset"
117132
+ "name": "column-rule-inset-junction"
117025
117133
  },
117026
117134
  {
117027
117135
  "inherited": false,
117028
117136
  "keywords": [
117029
117137
  "overlap-join"
117030
117138
  ],
117031
- "name": "column-rule-interior-inset-end"
117139
+ "name": "column-rule-inset-junction-end"
117032
117140
  },
117033
117141
  {
117034
117142
  "inherited": false,
117035
117143
  "keywords": [
117036
117144
  "overlap-join"
117037
117145
  ],
117038
- "name": "column-rule-interior-inset-start"
117146
+ "name": "column-rule-inset-junction-start"
117147
+ },
117148
+ {
117149
+ "longhands": [
117150
+ "column-rule-inset-cap-start",
117151
+ "column-rule-inset-junction-start"
117152
+ ],
117153
+ "name": "column-rule-inset-start"
117039
117154
  },
117040
117155
  {
117041
117156
  "keywords": [
@@ -117175,7 +117290,7 @@ const generatedProperties = [
117175
117290
  },
117176
117291
  {
117177
117292
  "keywords": [
117178
- "auto",
117293
+ "normal",
117179
117294
  "collapse",
117180
117295
  "-webkit-legacy"
117181
117296
  ],
@@ -119070,68 +119185,68 @@ const generatedProperties = [
119070
119185
  },
119071
119186
  {
119072
119187
  "longhands": [
119073
- "row-rule-edge-inset-start",
119074
- "row-rule-edge-inset-end"
119188
+ "row-rule-inset-cap-start",
119189
+ "row-rule-inset-cap-end",
119190
+ "row-rule-inset-junction-start",
119191
+ "row-rule-inset-junction-end"
119075
119192
  ],
119076
- "name": "row-rule-edge-inset"
119193
+ "name": "row-rule-inset"
119077
119194
  },
119078
119195
  {
119079
- "inherited": false,
119080
- "keywords": [
119081
- "overlap-join"
119196
+ "longhands": [
119197
+ "row-rule-inset-cap-start",
119198
+ "row-rule-inset-cap-end"
119082
119199
  ],
119083
- "name": "row-rule-edge-inset-end"
119200
+ "name": "row-rule-inset-cap"
119084
119201
  },
119085
119202
  {
119086
119203
  "inherited": false,
119087
119204
  "keywords": [
119088
119205
  "overlap-join"
119089
119206
  ],
119090
- "name": "row-rule-edge-inset-start"
119207
+ "name": "row-rule-inset-cap-end"
119091
119208
  },
119092
119209
  {
119093
- "longhands": [
119094
- "row-rule-edge-inset-start",
119095
- "row-rule-edge-inset-end",
119096
- "row-rule-interior-inset-start",
119097
- "row-rule-interior-inset-end"
119210
+ "inherited": false,
119211
+ "keywords": [
119212
+ "overlap-join"
119098
119213
  ],
119099
- "name": "row-rule-inset"
119214
+ "name": "row-rule-inset-cap-start"
119100
119215
  },
119101
119216
  {
119102
119217
  "longhands": [
119103
- "row-rule-edge-inset-end",
119104
- "row-rule-interior-inset-end"
119218
+ "row-rule-inset-cap-end",
119219
+ "row-rule-inset-junction-end"
119105
119220
  ],
119106
119221
  "name": "row-rule-inset-end"
119107
119222
  },
119108
119223
  {
119109
119224
  "longhands": [
119110
- "row-rule-edge-inset-start",
119111
- "row-rule-interior-inset-start"
119112
- ],
119113
- "name": "row-rule-inset-start"
119114
- },
119115
- {
119116
- "longhands": [
119117
- "row-rule-interior-inset-start",
119118
- "row-rule-interior-inset-end"
119225
+ "row-rule-inset-junction-start",
119226
+ "row-rule-inset-junction-end"
119119
119227
  ],
119120
- "name": "row-rule-interior-inset"
119228
+ "name": "row-rule-inset-junction"
119121
119229
  },
119122
119230
  {
119123
119231
  "inherited": false,
119124
119232
  "keywords": [
119125
119233
  "overlap-join"
119126
119234
  ],
119127
- "name": "row-rule-interior-inset-end"
119235
+ "name": "row-rule-inset-junction-end"
119128
119236
  },
119129
119237
  {
119130
119238
  "inherited": false,
119131
119239
  "keywords": [
119132
119240
  "overlap-join"
119133
119241
  ],
119134
- "name": "row-rule-interior-inset-start"
119242
+ "name": "row-rule-inset-junction-start"
119243
+ },
119244
+ {
119245
+ "longhands": [
119246
+ "row-rule-inset-cap-start",
119247
+ "row-rule-inset-junction-start"
119248
+ ],
119249
+ "name": "row-rule-inset-start"
119135
119250
  },
119136
119251
  {
119137
119252
  "keywords": [
@@ -119180,7 +119295,7 @@ const generatedProperties = [
119180
119295
  "inherited": true,
119181
119296
  "keywords": [
119182
119297
  "auto",
119183
- "none"
119298
+ "spaces"
119184
119299
  ],
119185
119300
  "name": "ruby-overhang"
119186
119301
  },
@@ -119219,52 +119334,52 @@ const generatedProperties = [
119219
119334
  },
119220
119335
  {
119221
119336
  "longhands": [
119222
- "row-rule-edge-inset-start",
119223
- "row-rule-edge-inset-end",
119224
- "column-rule-edge-inset-start",
119225
- "column-rule-edge-inset-end"
119337
+ "row-rule-inset-cap-start",
119338
+ "row-rule-inset-cap-end",
119339
+ "row-rule-inset-junction-start",
119340
+ "row-rule-inset-junction-end",
119341
+ "column-rule-inset-cap-start",
119342
+ "column-rule-inset-cap-end",
119343
+ "column-rule-inset-junction-start",
119344
+ "column-rule-inset-junction-end"
119226
119345
  ],
119227
- "name": "rule-edge-inset"
119346
+ "name": "rule-inset"
119228
119347
  },
119229
119348
  {
119230
119349
  "longhands": [
119231
- "row-rule-edge-inset-start",
119232
- "row-rule-edge-inset-end",
119233
- "row-rule-interior-inset-start",
119234
- "row-rule-interior-inset-end",
119235
- "column-rule-edge-inset-start",
119236
- "column-rule-edge-inset-end",
119237
- "column-rule-interior-inset-start",
119238
- "column-rule-interior-inset-end"
119350
+ "row-rule-inset-cap-start",
119351
+ "row-rule-inset-cap-end",
119352
+ "column-rule-inset-cap-start",
119353
+ "column-rule-inset-cap-end"
119239
119354
  ],
119240
- "name": "rule-inset"
119355
+ "name": "rule-inset-cap"
119241
119356
  },
119242
119357
  {
119243
119358
  "longhands": [
119244
- "column-rule-edge-inset-end",
119245
- "column-rule-interior-inset-end",
119246
- "row-rule-edge-inset-end",
119247
- "row-rule-interior-inset-end"
119359
+ "column-rule-inset-cap-end",
119360
+ "column-rule-inset-junction-end",
119361
+ "row-rule-inset-cap-end",
119362
+ "row-rule-inset-junction-end"
119248
119363
  ],
119249
119364
  "name": "rule-inset-end"
119250
119365
  },
119251
119366
  {
119252
119367
  "longhands": [
119253
- "column-rule-edge-inset-start",
119254
- "column-rule-interior-inset-start",
119255
- "row-rule-edge-inset-start",
119256
- "row-rule-interior-inset-start"
119368
+ "row-rule-inset-junction-start",
119369
+ "row-rule-inset-junction-end",
119370
+ "column-rule-inset-junction-start",
119371
+ "column-rule-inset-junction-end"
119257
119372
  ],
119258
- "name": "rule-inset-start"
119373
+ "name": "rule-inset-junction"
119259
119374
  },
119260
119375
  {
119261
119376
  "longhands": [
119262
- "row-rule-interior-inset-start",
119263
- "row-rule-interior-inset-end",
119264
- "column-rule-interior-inset-start",
119265
- "column-rule-interior-inset-end"
119377
+ "column-rule-inset-cap-start",
119378
+ "column-rule-inset-junction-start",
119379
+ "row-rule-inset-cap-start",
119380
+ "row-rule-inset-junction-start"
119266
119381
  ],
119267
- "name": "rule-interior-inset"
119382
+ "name": "rule-inset-start"
119268
119383
  },
119269
119384
  {
119270
119385
  "inherited": false,
@@ -120554,7 +120669,7 @@ const generatedPropertyValues = {
120554
120669
  },
120555
120670
  "block-ellipsis": {
120556
120671
  "values": [
120557
- "auto",
120672
+ "ellipsis",
120558
120673
  "no-ellipsis"
120559
120674
  ]
120560
120675
  },
@@ -120884,22 +120999,22 @@ const generatedPropertyValues = {
120884
120999
  "currentcolor"
120885
121000
  ]
120886
121001
  },
120887
- "column-rule-edge-inset-end": {
121002
+ "column-rule-inset-cap-end": {
120888
121003
  "values": [
120889
121004
  "overlap-join"
120890
121005
  ]
120891
121006
  },
120892
- "column-rule-edge-inset-start": {
121007
+ "column-rule-inset-cap-start": {
120893
121008
  "values": [
120894
121009
  "overlap-join"
120895
121010
  ]
120896
121011
  },
120897
- "column-rule-interior-inset-end": {
121012
+ "column-rule-inset-junction-end": {
120898
121013
  "values": [
120899
121014
  "overlap-join"
120900
121015
  ]
120901
121016
  },
120902
- "column-rule-interior-inset-start": {
121017
+ "column-rule-inset-junction-start": {
120903
121018
  "values": [
120904
121019
  "overlap-join"
120905
121020
  ]
@@ -120997,7 +121112,7 @@ const generatedPropertyValues = {
120997
121112
  },
120998
121113
  "continue": {
120999
121114
  "values": [
121000
- "auto",
121115
+ "normal",
121001
121116
  "collapse",
121002
121117
  "-webkit-legacy"
121003
121118
  ]
@@ -122055,22 +122170,22 @@ const generatedPropertyValues = {
122055
122170
  "currentcolor"
122056
122171
  ]
122057
122172
  },
122058
- "row-rule-edge-inset-end": {
122173
+ "row-rule-inset-cap-end": {
122059
122174
  "values": [
122060
122175
  "overlap-join"
122061
122176
  ]
122062
122177
  },
122063
- "row-rule-edge-inset-start": {
122178
+ "row-rule-inset-cap-start": {
122064
122179
  "values": [
122065
122180
  "overlap-join"
122066
122181
  ]
122067
122182
  },
122068
- "row-rule-interior-inset-end": {
122183
+ "row-rule-inset-junction-end": {
122069
122184
  "values": [
122070
122185
  "overlap-join"
122071
122186
  ]
122072
122187
  },
122073
- "row-rule-interior-inset-start": {
122188
+ "row-rule-inset-junction-start": {
122074
122189
  "values": [
122075
122190
  "overlap-join"
122076
122191
  ]
@@ -122115,7 +122230,7 @@ const generatedPropertyValues = {
122115
122230
  "ruby-overhang": {
122116
122231
  "values": [
122117
122232
  "auto",
122118
- "none"
122233
+ "spaces"
122119
122234
  ]
122120
122235
  },
122121
122236
  "ruby-position": {
@@ -129826,7 +129941,7 @@ class Base64TextDecoder {
129826
129941
  void this.#decoder.readable.pipeTo(new WritableStream({ write: onTextChunk }));
129827
129942
  }
129828
129943
  async addBase64Chunk(chunk) {
129829
- const binString = window.atob(chunk);
129944
+ const binString = globalThis.atob(chunk);
129830
129945
  const bytes = Uint8Array.from(binString, m => m.codePointAt(0));
129831
129946
  await this.#writer.ready;
129832
129947
  await this.#writer.write(bytes);
@@ -132046,10 +132161,14 @@ class NetworkManager extends SDKModel {
132046
132161
  }
132047
132162
  void this.#networkAgent.invoke_enable({
132048
132163
  maxPostDataSize: MAX_EAGER_POST_REQUEST_BODY_LENGTH,
132049
- enableDurableMessages: hostConfig.devToolsEnableDurableMessages?.enabled,
132050
132164
  maxTotalBufferSize: MAX_RESPONSE_BODY_TOTAL_BUFFER_LENGTH,
132051
132165
  reportDirectSocketTraffic: true,
132052
132166
  });
132167
+ if (hostConfig.devToolsEnableDurableMessages?.enabled) {
132168
+ const preserveLogSetting = settings.moduleSetting('network-log.preserve-log');
132169
+ this.#updateDurableMessages(preserveLogSetting.get());
132170
+ preserveLogSetting.addChangeListener(this.preserveLogChanged, this);
132171
+ }
132053
132172
  void this.#networkAgent.invoke_setAttachDebugStack({ enabled: true });
132054
132173
  this.#bypassServiceWorkerSetting = settings.createSetting('bypass-service-worker', false);
132055
132174
  if (this.#bypassServiceWorkerSetting.get()) {
@@ -132147,7 +132266,7 @@ class NetworkManager extends SDKModel {
132147
132266
  try {
132148
132267
  const { postData, base64Encoded } = await manager.#networkAgent.invoke_getRequestPostData({ requestId });
132149
132268
  if (base64Encoded && postData) {
132150
- const binaryString = window.atob(postData);
132269
+ const binaryString = globalThis.atob(postData);
132151
132270
  const bytes = new Uint8Array(binaryString.length);
132152
132271
  for (let i = 0; i < binaryString.length; i++) {
132153
132272
  bytes[i] = binaryString.charCodeAt(i);
@@ -132219,9 +132338,23 @@ class NetworkManager extends SDKModel {
132219
132338
  cacheDisabledSettingChanged({ data: enabled }) {
132220
132339
  void this.#networkAgent.invoke_setCacheDisabled({ cacheDisabled: enabled });
132221
132340
  }
132341
+ preserveLogChanged({ data: enabled }) {
132342
+ this.#updateDurableMessages(enabled);
132343
+ }
132344
+ #updateDurableMessages(enabled) {
132345
+ if (enabled) {
132346
+ void this.#networkAgent.invoke_configureDurableMessages({
132347
+ maxTotalBufferSize: MAX_RESPONSE_BODY_TOTAL_BUFFER_LENGTH,
132348
+ });
132349
+ }
132350
+ else {
132351
+ void this.#networkAgent.invoke_configureDurableMessages({});
132352
+ }
132353
+ }
132222
132354
  dispose() {
132223
132355
  const settings = this.target().targetManager().settings;
132224
132356
  settings.moduleSetting('cache-disabled').removeChangeListener(this.cacheDisabledSettingChanged, this);
132357
+ settings.moduleSetting('network-log.preserve-log').removeChangeListener(this.preserveLogChanged, this);
132225
132358
  }
132226
132359
  bypassServiceWorkerChanged() {
132227
132360
  void this.#networkAgent.invoke_setBypassServiceWorker({ bypass: this.#bypassServiceWorkerSetting.get() });
@@ -148349,8 +148482,14 @@ function parseMessage(stack) {
148349
148482
  }
148350
148483
  function augmentRawFramesWithScriptIds(rawFrames, protocolStackTrace) {
148351
148484
  for (const rawFrame of rawFrames) {
148352
- const protocolFrame = protocolStackTrace.callFrames.find(frame => rawFrame.url === frame.url && rawFrame.lineNumber === frame.lineNumber &&
148353
- rawFrame.columnNumber === frame.columnNumber);
148485
+ const isWasm = rawFrame.parsedFrameInfo?.isWasm;
148486
+ const protocolFrame = protocolStackTrace.callFrames.find(frame => {
148487
+ if (isWasm) {
148488
+ return rawFrame.url === frame.url && rawFrame.columnNumber === frame.columnNumber;
148489
+ }
148490
+ return rawFrame.url === frame.url && rawFrame.lineNumber === frame.lineNumber &&
148491
+ rawFrame.columnNumber === frame.columnNumber;
148492
+ });
148354
148493
  if (protocolFrame) {
148355
148494
  rawFrame.scriptId = protocolFrame.scriptId;
148356
148495
  }
@@ -148565,6 +148704,13 @@ class DebuggableFrameImpl {
148565
148704
  }
148566
148705
 
148567
148706
  // Copyright 2022 The Chromium Authors
148707
+ function concatErrorDescriptionAndIssueSummary(description, issueSummary) {
148708
+ const pos = description.indexOf('\n');
148709
+ const prefix = pos === -1 ? description : description.substring(0, pos);
148710
+ const suffix = pos === -1 ? '' : description.substring(pos);
148711
+ description = `${prefix}. ${issueSummary}${suffix}`;
148712
+ return description;
148713
+ }
148568
148714
  function parseSourcePositionsFromErrorStack(runtimeModel, stack) {
148569
148715
  if (!(/\n\s*at\s/.test(stack) || stack.startsWith('SyntaxError:'))) {
148570
148716
  return null;
@@ -148668,6 +148814,7 @@ function framesMatch(parsedFrame, protocolFrame) {
148668
148814
  var ErrorStackParser = /*#__PURE__*/Object.freeze({
148669
148815
  __proto__: null,
148670
148816
  augmentErrorStackWithScriptIds: augmentErrorStackWithScriptIds,
148817
+ concatErrorDescriptionAndIssueSummary: concatErrorDescriptionAndIssueSummary,
148671
148818
  parseSourcePositionsFromErrorStack: parseSourcePositionsFromErrorStack
148672
148819
  });
148673
148820
 
@@ -152844,7 +152991,29 @@ class ResourceScriptFile extends ObjectWrapper {
152844
152991
  }
152845
152992
 
152846
152993
  // Copyright 2026 The Chromium Authors
152847
- class SymbolizedError extends ObjectWrapper {
152994
+ function isErrorLike(stack) {
152995
+ return /\n\s*at\s/.test(stack) || stack.startsWith('SyntaxError:');
152996
+ }
152997
+ class UnparsableError extends ObjectWrapper {
152998
+ errorStack;
152999
+ cause;
153000
+ constructor(errorStack, cause) {
153001
+ super();
153002
+ this.errorStack = errorStack;
153003
+ this.cause = cause;
153004
+ this.cause?.addEventListener("UPDATED" , this.#fireUpdated, this);
153005
+ }
153006
+ dispose() {
153007
+ this.cause?.removeEventListener("UPDATED" , this.#fireUpdated, this);
153008
+ if (this.cause instanceof SymbolizedErrorObject || this.cause instanceof UnparsableError) {
153009
+ this.cause.dispose();
153010
+ }
153011
+ }
153012
+ #fireUpdated() {
153013
+ this.dispatchEventToListeners("UPDATED" );
153014
+ }
153015
+ }
153016
+ class SymbolizedErrorObject extends ObjectWrapper {
152848
153017
  message;
152849
153018
  stackTrace;
152850
153019
  cause;
@@ -152859,12 +153028,46 @@ class SymbolizedError extends ObjectWrapper {
152859
153028
  dispose() {
152860
153029
  this.stackTrace.removeEventListener("UPDATED" , this.#fireUpdated, this);
152861
153030
  this.cause?.removeEventListener("UPDATED" , this.#fireUpdated, this);
152862
- this.cause?.dispose();
153031
+ if (this.cause instanceof SymbolizedErrorObject || this.cause instanceof UnparsableError) {
153032
+ this.cause.dispose();
153033
+ }
152863
153034
  }
152864
153035
  #fireUpdated() {
152865
153036
  this.dispatchEventToListeners("UPDATED" );
152866
153037
  }
152867
153038
  }
153039
+ class SymbolizedSyntaxError extends ObjectWrapper {
153040
+ message;
153041
+ #uiLocation = null;
153042
+ constructor(message) {
153043
+ super();
153044
+ this.message = message;
153045
+ }
153046
+ get uiLocation() {
153047
+ return this.#uiLocation;
153048
+ }
153049
+ static async fromExceptionDetails(target, debuggerWorkspaceBinding, exceptionDetails) {
153050
+ const { exception, scriptId, lineNumber, columnNumber } = exceptionDetails;
153051
+ if (!exception || exception.subtype !== 'error' || exception.className !== 'SyntaxError') {
153052
+ throw new Error('SymbolizedSyntaxError.fromExceptionDetails expects a SyntaxError');
153053
+ }
153054
+ if (!scriptId) {
153055
+ return null;
153056
+ }
153057
+ const debuggerModel = target.model(DebuggerModel);
153058
+ if (!debuggerModel) {
153059
+ return null;
153060
+ }
153061
+ const rawLocation = debuggerModel.createRawLocationByScriptId(scriptId, lineNumber, columnNumber);
153062
+ const symbolizedSyntaxError = new SymbolizedSyntaxError(exception.description || '');
153063
+ await debuggerWorkspaceBinding.createLiveLocation(rawLocation, symbolizedSyntaxError.#update.bind(symbolizedSyntaxError), new LiveLocationPool());
153064
+ return symbolizedSyntaxError;
153065
+ }
153066
+ async #update(liveLocation) {
153067
+ this.#uiLocation = await liveLocation.uiLocation();
153068
+ this.dispatchEventToListeners("UPDATED" );
153069
+ }
153070
+ }
152868
153071
 
152869
153072
  // Copyright 2014 The Chromium Authors
152870
153073
  class DebuggerWorkspaceBinding {
@@ -153016,9 +153219,18 @@ class DebuggerWorkspaceBinding {
153016
153219
  ]);
153017
153220
  fetchedExceptionDetails = details;
153018
153221
  causeRemoteObject = causeRemote;
153222
+ if (remoteObject.className === 'SyntaxError' && fetchedExceptionDetails) {
153223
+ const syntaxError = await SymbolizedSyntaxError.fromExceptionDetails(remoteObject.runtimeModel().target(), this, fetchedExceptionDetails);
153224
+ if (syntaxError) {
153225
+ return syntaxError;
153226
+ }
153227
+ }
153019
153228
  }
153020
153229
  else if (remoteObject.type === 'string') {
153021
153230
  errorStack = remoteObject.description || '';
153231
+ if (!isErrorLike(errorStack)) {
153232
+ return null;
153233
+ }
153022
153234
  }
153023
153235
  else {
153024
153236
  return null;
@@ -153027,11 +153239,15 @@ class DebuggerWorkspaceBinding {
153027
153239
  this.createStackTraceFromErrorStackLikeString(remoteObject.runtimeModel().target(), errorStack, fetchedExceptionDetails),
153028
153240
  causeRemoteObject ? this.createSymbolizedError(causeRemoteObject) : Promise.resolve(null),
153029
153241
  ]);
153242
+ const issueSummary = fetchedExceptionDetails?.exceptionMetaData?.issueSummary;
153243
+ if (typeof issueSummary === 'string') {
153244
+ errorStack = concatErrorDescriptionAndIssueSummary(errorStack, issueSummary);
153245
+ }
153030
153246
  if (!stackTrace) {
153031
- return null;
153247
+ return new UnparsableError(errorStack, cause);
153032
153248
  }
153033
153249
  const message = parseMessage(errorStack);
153034
- return new SymbolizedError(message, stackTrace, cause);
153250
+ return new SymbolizedErrorObject(message, stackTrace, cause);
153035
153251
  }
153036
153252
  async createLiveLocation(rawLocation, updateDelegate, locationPool) {
153037
153253
  const modelData = this.#debuggerModelToData.get(rawLocation.debuggerModel);
@@ -155198,7 +155414,12 @@ class NetworkRequestFormatter {
155198
155414
  static formatFailureReasons(reasons) {
155199
155415
  const lines = [];
155200
155416
  if (reasons.blockedReason) {
155201
- lines.push(`Blocked reason: ${reasons.blockedReason}`);
155417
+ if (reasons.blockedReason === "inspector" ) {
155418
+ lines.push('Blocked reason: a custom network condition in DevTools is blocking this request');
155419
+ }
155420
+ else {
155421
+ lines.push(`Blocked reason: ${reasons.blockedReason}`);
155422
+ }
155202
155423
  }
155203
155424
  if (reasons.corsErrorStatus) {
155204
155425
  lines.push(`CORS error: ${reasons.corsErrorStatus.corsError} ${reasons.corsErrorStatus.failedParameter}`);
@@ -164648,13 +164869,61 @@ var Statistics = /*#__PURE__*/Object.freeze({
164648
164869
  linearInterpolation: linearInterpolation
164649
164870
  });
164650
164871
 
164872
+ // Copyright 2024 The Chromium Authors
164873
+ var InsightWarning;
164874
+ (function (InsightWarning) {
164875
+ InsightWarning["NO_FP"] = "NO_FP";
164876
+ InsightWarning["NO_LCP"] = "NO_LCP";
164877
+ InsightWarning["NO_DOCUMENT_REQUEST"] = "NO_DOCUMENT_REQUEST";
164878
+ InsightWarning["NO_LAYOUT"] = "NO_LAYOUT";
164879
+ })(InsightWarning || (InsightWarning = {}));
164880
+ var InsightCategory;
164881
+ (function (InsightCategory) {
164882
+ InsightCategory["ALL"] = "All";
164883
+ InsightCategory["INP"] = "INP";
164884
+ InsightCategory["LCP"] = "LCP";
164885
+ InsightCategory["CLS"] = "CLS";
164886
+ })(InsightCategory || (InsightCategory = {}));
164887
+ var InsightKeys;
164888
+ (function (InsightKeys) {
164889
+ InsightKeys["LCP_BREAKDOWN"] = "LCPBreakdown";
164890
+ InsightKeys["INP_BREAKDOWN"] = "INPBreakdown";
164891
+ InsightKeys["CLS_CULPRITS"] = "CLSCulprits";
164892
+ InsightKeys["THIRD_PARTIES"] = "ThirdParties";
164893
+ InsightKeys["DOCUMENT_LATENCY"] = "DocumentLatency";
164894
+ InsightKeys["DOM_SIZE"] = "DOMSize";
164895
+ InsightKeys["DUPLICATE_JAVASCRIPT"] = "DuplicatedJavaScript";
164896
+ InsightKeys["FONT_DISPLAY"] = "FontDisplay";
164897
+ InsightKeys["FORCED_REFLOW"] = "ForcedReflow";
164898
+ InsightKeys["IMAGE_DELIVERY"] = "ImageDelivery";
164899
+ InsightKeys["LCP_DISCOVERY"] = "LCPDiscovery";
164900
+ InsightKeys["LEGACY_JAVASCRIPT"] = "LegacyJavaScript";
164901
+ InsightKeys["NETWORK_DEPENDENCY_TREE"] = "NetworkDependencyTree";
164902
+ InsightKeys["RENDER_BLOCKING"] = "RenderBlocking";
164903
+ InsightKeys["SLOW_CSS_SELECTOR"] = "SlowCSSSelector";
164904
+ InsightKeys["VIEWPORT"] = "Viewport";
164905
+ InsightKeys["MODERN_HTTP"] = "ModernHTTP";
164906
+ InsightKeys["CACHE"] = "Cache";
164907
+ InsightKeys["CHARACTER_SET"] = "CharacterSet";
164908
+ })(InsightKeys || (InsightKeys = {}));
164909
+
164910
+ var types$1 = /*#__PURE__*/Object.freeze({
164911
+ __proto__: null,
164912
+ get InsightCategory () { return InsightCategory; },
164913
+ get InsightKeys () { return InsightKeys; },
164914
+ get InsightWarning () { return InsightWarning; }
164915
+ });
164916
+
164651
164917
  // Copyright 2024 The Chromium Authors
164652
164918
  const GRAPH_SAVINGS_PRECISION = 50;
164653
164919
  function getInsight(insightName, insightSet) {
164654
164920
  return insightSet.model[insightName];
164655
164921
  }
164922
+ function isInsightKey(key) {
164923
+ return Object.values(InsightKeys).includes(key);
164924
+ }
164656
164925
  function getLCP(insightSet) {
164657
- const insight = getInsight("LCPBreakdown" , insightSet);
164926
+ const insight = getInsight(InsightKeys.LCP_BREAKDOWN, insightSet);
164658
164927
  if (!insight || !insight.lcpMs || !insight.lcpEvent) {
164659
164928
  return null;
164660
164929
  }
@@ -164662,7 +164931,7 @@ function getLCP(insightSet) {
164662
164931
  return { value, event: insight.lcpEvent };
164663
164932
  }
164664
164933
  function getINP(insightSet) {
164665
- const insight = getInsight("INPBreakdown" , insightSet);
164934
+ const insight = getInsight(InsightKeys.INP_BREAKDOWN, insightSet);
164666
164935
  if (!insight?.longestInteractionEvent?.dur) {
164667
164936
  return null;
164668
164937
  }
@@ -164670,7 +164939,7 @@ function getINP(insightSet) {
164670
164939
  return { value, event: insight.longestInteractionEvent };
164671
164940
  }
164672
164941
  function getCLS(insightSet) {
164673
- const insight = getInsight("CLSCulprits" , insightSet);
164942
+ const insight = getInsight(InsightKeys.CLS_CULPRITS, insightSet);
164674
164943
  if (!insight) {
164675
164944
  return { value: 0, worstClusterEvent: null };
164676
164945
  }
@@ -164930,33 +165199,12 @@ var Common = /*#__PURE__*/Object.freeze({
164930
165199
  getInsight: getInsight,
164931
165200
  getLCP: getLCP,
164932
165201
  insightBounds: insightBounds,
165202
+ isInsightKey: isInsightKey,
164933
165203
  isRequestCompressed: isRequestCompressed,
164934
165204
  isRequestServedFromBrowserCache: isRequestServedFromBrowserCache,
164935
165205
  metricSavingsForWastedBytes: metricSavingsForWastedBytes
164936
165206
  });
164937
165207
 
164938
- // Copyright 2024 The Chromium Authors
164939
- var InsightWarning;
164940
- (function (InsightWarning) {
164941
- InsightWarning["NO_FP"] = "NO_FP";
164942
- InsightWarning["NO_LCP"] = "NO_LCP";
164943
- InsightWarning["NO_DOCUMENT_REQUEST"] = "NO_DOCUMENT_REQUEST";
164944
- InsightWarning["NO_LAYOUT"] = "NO_LAYOUT";
164945
- })(InsightWarning || (InsightWarning = {}));
164946
- var InsightCategory;
164947
- (function (InsightCategory) {
164948
- InsightCategory["ALL"] = "All";
164949
- InsightCategory["INP"] = "INP";
164950
- InsightCategory["LCP"] = "LCP";
164951
- InsightCategory["CLS"] = "CLS";
164952
- })(InsightCategory || (InsightCategory = {}));
164953
-
164954
- var types$1 = /*#__PURE__*/Object.freeze({
164955
- __proto__: null,
164956
- get InsightCategory () { return InsightCategory; },
164957
- get InsightWarning () { return InsightWarning; }
164958
- });
164959
-
164960
165208
  // Copyright 2025 The Chromium Authors
164961
165209
  const UIStrings$J = {
164962
165210
  title: 'Use efficient cache lifetimes',
@@ -164971,7 +165219,7 @@ const i18nString$v = getLocalizedString.bind(undefined, str_$I);
164971
165219
  const IGNORE_THRESHOLD_IN_PERCENT = 0.925;
164972
165220
  function finalize$i(partialModel) {
164973
165221
  return {
164974
- insightKey: "Cache" ,
165222
+ insightKey: InsightKeys.CACHE,
164975
165223
  strings: UIStrings$J,
164976
165224
  title: i18nString$v(UIStrings$J.title),
164977
165225
  description: i18nString$v(UIStrings$J.description),
@@ -165045,7 +165293,7 @@ function cachingDisabled(headers, parsedCacheControl) {
165045
165293
  return false;
165046
165294
  }
165047
165295
  function isCacheInsight(model) {
165048
- return model.insightKey === "Cache" ;
165296
+ return model.insightKey === InsightKeys.CACHE;
165049
165297
  }
165050
165298
  function generateInsight$i(data, context) {
165051
165299
  const isWithinContext = (event) => eventIsInBounds(event, context.bounds);
@@ -165132,7 +165380,7 @@ const str_$H = registerUIStrings('models/trace/insights/CharacterSet.ts', UIStri
165132
165380
  const i18nString$u = getLocalizedString.bind(undefined, str_$H);
165133
165381
  const CHARSET_HTTP_REGEX = /charset\s*=\s*[a-zA-Z0-9\-_:.()]{2,}/i;
165134
165382
  function isCharacterSetInsight(model) {
165135
- return model.insightKey === "CharacterSet" ;
165383
+ return model.insightKey === InsightKeys.CHARACTER_SET;
165136
165384
  }
165137
165385
  function finalize$h(partialModel) {
165138
165386
  let hasFailure = false;
@@ -165140,7 +165388,7 @@ function finalize$h(partialModel) {
165140
165388
  hasFailure = !partialModel.data.checklist.httpCharset.value && !partialModel.data.checklist.metaCharset.value;
165141
165389
  }
165142
165390
  return {
165143
- insightKey: "CharacterSet" ,
165391
+ insightKey: InsightKeys.CHARACTER_SET,
165144
165392
  strings: UIStrings$I,
165145
165393
  title: i18nString$u(UIStrings$I.title),
165146
165394
  description: i18nString$u(UIStrings$I.description),
@@ -165459,7 +165707,7 @@ function getUnsizedImageRootCauses(unsizedImageEvents, paintImageEvents, shiftsB
165459
165707
  return rootCausesByShift;
165460
165708
  }
165461
165709
  function isCLSCulpritsInsight(insight) {
165462
- return insight.insightKey === "CLSCulprits" ;
165710
+ return insight.insightKey === InsightKeys.CLS_CULPRITS;
165463
165711
  }
165464
165712
  function getFontRootCauses(networkRequests, prePaintEvents, shiftsByPrePaint, rootCausesByShift) {
165465
165713
  const fontRequests = networkRequests.filter(req => req.args.data.resourceType === 'Font' && req.args.data.mimeType.startsWith('font'));
@@ -165534,7 +165782,7 @@ function finalize$g(partialModel) {
165534
165782
  }
165535
165783
  }
165536
165784
  return {
165537
- insightKey: "CLSCulprits" ,
165785
+ insightKey: InsightKeys.CLS_CULPRITS,
165538
165786
  strings: UIStrings$H,
165539
165787
  title: i18nString$t(UIStrings$H.title),
165540
165788
  description: i18nString$t(UIStrings$H.description),
@@ -165699,7 +165947,7 @@ function finalize$f(partialModel) {
165699
165947
  !partialModel.data.checklist.serverResponseIsFast.value || !partialModel.data.checklist.noRedirects.value;
165700
165948
  }
165701
165949
  return {
165702
- insightKey: "DocumentLatency" ,
165950
+ insightKey: InsightKeys.DOCUMENT_LATENCY,
165703
165951
  strings: UIStrings$G,
165704
165952
  title: i18nString$s(UIStrings$G.title),
165705
165953
  description: i18nString$s(UIStrings$G.description),
@@ -165841,7 +166089,7 @@ const STYLE_RECALC_ELEMENTS_THRESHOLD = 300;
165841
166089
  function finalize$e(partialModel) {
165842
166090
  const relatedEvents = [...partialModel.largeLayoutUpdates, ...partialModel.largeStyleRecalcs];
165843
166091
  return {
165844
- insightKey: "DOMSize" ,
166092
+ insightKey: InsightKeys.DOM_SIZE,
165845
166093
  strings: UIStrings$F,
165846
166094
  title: i18nString$r(UIStrings$F.title),
165847
166095
  description: i18nString$r(UIStrings$F.description),
@@ -165853,7 +166101,7 @@ function finalize$e(partialModel) {
165853
166101
  };
165854
166102
  }
165855
166103
  function isDomSizeInsight(model) {
165856
- return model.insightKey === "DOMSize" ;
166104
+ return model.insightKey === InsightKeys.DOM_SIZE;
165857
166105
  }
165858
166106
  function generateInsight$e(data, context) {
165859
166107
  const isWithinContext = (event) => eventIsInBounds(event, context.bounds);
@@ -165962,13 +166210,14 @@ const UIStrings$E = {
165962
166210
  description: 'Remove large, [duplicate JavaScript modules](https://developer.chrome.com/docs/performance/insights/duplicated-javascript) from bundles to reduce unnecessary bytes consumed by network activity.',
165963
166211
  columnSource: 'Source',
165964
166212
  columnDuplicatedBytes: 'Duplicated bytes',
166213
+ noDuplicatedJavaScript: 'No duplicated JavaScript found',
165965
166214
  };
165966
166215
  const str_$D = registerUIStrings('models/trace/insights/DuplicatedJavaScript.ts', UIStrings$E);
165967
166216
  const i18nString$q = getLocalizedString.bind(undefined, str_$D);
165968
166217
  function finalize$d(partialModel) {
165969
166218
  const requests = partialModel.scriptsWithDuplication.map(script => script.request).filter(e => !!e);
165970
166219
  return {
165971
- insightKey: "DuplicatedJavaScript" ,
166220
+ insightKey: InsightKeys.DUPLICATE_JAVASCRIPT,
165972
166221
  strings: UIStrings$E,
165973
166222
  title: i18nString$q(UIStrings$E.title),
165974
166223
  description: i18nString$q(UIStrings$E.description),
@@ -165980,7 +166229,7 @@ function finalize$d(partialModel) {
165980
166229
  };
165981
166230
  }
165982
166231
  function isDuplicatedJavaScriptInsight(model) {
165983
- return model.insightKey === "DuplicatedJavaScript" ;
166232
+ return model.insightKey === InsightKeys.DUPLICATE_JAVASCRIPT;
165984
166233
  }
165985
166234
  function generateInsight$d(data, context) {
165986
166235
  const scripts = data.Scripts.scripts.filter(script => {
@@ -166047,12 +166296,13 @@ const UIStrings$D = {
166047
166296
  description: 'Consider setting [`font-display`](https://developer.chrome.com/docs/performance/insights/font-display) to `swap` or `optional` to ensure text is consistently visible. `swap` can be further optimized to mitigate layout shifts with [font metric overrides](https://developer.chrome.com/blog/font-fallbacks).',
166048
166297
  fontColumn: 'Font',
166049
166298
  wastedTimeColumn: 'Wasted time',
166299
+ noFonts: 'No fonts with suboptimal font-display found',
166050
166300
  };
166051
166301
  const str_$C = registerUIStrings('models/trace/insights/FontDisplay.ts', UIStrings$D);
166052
166302
  const i18nString$p = getLocalizedString.bind(undefined, str_$C);
166053
166303
  function finalize$c(partialModel) {
166054
166304
  return {
166055
- insightKey: "FontDisplay" ,
166305
+ insightKey: InsightKeys.FONT_DISPLAY,
166056
166306
  strings: UIStrings$D,
166057
166307
  title: i18nString$p(UIStrings$D.title),
166058
166308
  description: i18nString$p(UIStrings$D.description),
@@ -166063,7 +166313,7 @@ function finalize$c(partialModel) {
166063
166313
  };
166064
166314
  }
166065
166315
  function isFontDisplayInsight(model) {
166066
- return model.insightKey === "FontDisplay" ;
166316
+ return model.insightKey === InsightKeys.FONT_DISPLAY;
166067
166317
  }
166068
166318
  function generateInsight$c(data, context) {
166069
166319
  const fonts = [];
@@ -166185,7 +166435,7 @@ function getLargestTopLevelFunctionData(forcedReflowEvents, traceParsedData) {
166185
166435
  }
166186
166436
  function finalize$b(partialModel) {
166187
166437
  return {
166188
- insightKey: "ForcedReflow" ,
166438
+ insightKey: InsightKeys.FORCED_REFLOW,
166189
166439
  strings: UIStrings$C,
166190
166440
  title: i18nString$o(UIStrings$C.title),
166191
166441
  description: i18nString$o(UIStrings$C.description),
@@ -166201,7 +166451,7 @@ function getBottomCallFrameForEvent(event, traceParsedData) {
166201
166451
  return profileStackTrace?.callFrames[0] ?? eventTopCallFrame ?? null;
166202
166452
  }
166203
166453
  function isForcedReflowInsight(model) {
166204
- return model.insightKey === "ForcedReflow" ;
166454
+ return model.insightKey === InsightKeys.FORCED_REFLOW;
166205
166455
  }
166206
166456
  function generateInsight$b(traceParsedData, context) {
166207
166457
  const isWithinContext = (event) => {
@@ -166310,7 +166560,7 @@ function getOptimizationMessageWithBytes(optimization) {
166310
166560
  }
166311
166561
  function finalize$a(partialModel) {
166312
166562
  return {
166313
- insightKey: "ImageDelivery" ,
166563
+ insightKey: InsightKeys.IMAGE_DELIVERY,
166314
166564
  strings: UIStrings$B,
166315
166565
  title: i18nString$n(UIStrings$B.title),
166316
166566
  description: i18nString$n(UIStrings$B.description),
@@ -166466,7 +166716,7 @@ const UIStrings$A = {
166466
166716
  const str_$z = registerUIStrings('models/trace/insights/INPBreakdown.ts', UIStrings$A);
166467
166717
  const i18nString$m = getLocalizedString.bind(undefined, str_$z);
166468
166718
  function isINPBreakdownInsight(insight) {
166469
- return insight.insightKey === "INPBreakdown" ;
166719
+ return insight.insightKey === InsightKeys.INP_BREAKDOWN;
166470
166720
  }
166471
166721
  function finalize$9(partialModel) {
166472
166722
  let state = 'pass';
@@ -166480,7 +166730,7 @@ function finalize$9(partialModel) {
166480
166730
  }
166481
166731
  }
166482
166732
  return {
166483
- insightKey: "INPBreakdown" ,
166733
+ insightKey: InsightKeys.INP_BREAKDOWN,
166484
166734
  strings: UIStrings$A,
166485
166735
  title: i18nString$m(UIStrings$A.title),
166486
166736
  description: i18nString$m(UIStrings$A.description),
@@ -166626,7 +166876,7 @@ function finalize$8(partialModel) {
166626
166876
  }
166627
166877
  }
166628
166878
  return {
166629
- insightKey: "LCPBreakdown" ,
166879
+ insightKey: InsightKeys.LCP_BREAKDOWN,
166630
166880
  strings: UIStrings$z,
166631
166881
  title: i18nString$l(UIStrings$z.title),
166632
166882
  description: i18nString$l(UIStrings$z.description),
@@ -166719,7 +166969,7 @@ function finalize$7(partialModel) {
166719
166969
  [partialModel.lcpEvent, partialModel.lcpRequest] :
166720
166970
  [];
166721
166971
  return {
166722
- insightKey: "LCPDiscovery" ,
166972
+ insightKey: InsightKeys.LCP_DISCOVERY,
166723
166973
  strings: UIStrings$y,
166724
166974
  title: i18nString$k(UIStrings$y.title),
166725
166975
  description: i18nString$k(UIStrings$y.description),
@@ -167760,6 +168010,7 @@ const UIStrings$x = {
167760
168010
  description: 'Polyfills and transforms enable older browsers to use new JavaScript features. However, many aren\'t necessary for modern browsers. Consider modifying your JavaScript build process to not transpile [Baseline](https://web.dev/articles/baseline-and-polyfills) features, unless you know you must support older browsers. [Learn why most sites can deploy ES6+ code without transpiling](https://developer.chrome.com/docs/performance/insights/legacy-javascript)',
167761
168011
  columnScript: 'Script',
167762
168012
  columnWastedBytes: 'Wasted bytes',
168013
+ noLegacyJavaScript: 'No legacy JavaScript found',
167763
168014
  };
167764
168015
  const str_$w = registerUIStrings('models/trace/insights/LegacyJavaScript.ts', UIStrings$x);
167765
168016
  const i18nString$j = getLocalizedString.bind(undefined, str_$w);
@@ -167767,7 +168018,7 @@ const BYTE_THRESHOLD = 5000;
167767
168018
  function finalize$6(partialModel) {
167768
168019
  const requests = [...partialModel.legacyJavaScriptResults.keys()].map(script => script.request).filter(e => !!e);
167769
168020
  return {
167770
- insightKey: "LegacyJavaScript" ,
168021
+ insightKey: InsightKeys.LEGACY_JAVASCRIPT,
167771
168022
  strings: UIStrings$x,
167772
168023
  title: i18nString$j(UIStrings$x.title),
167773
168024
  description: i18nString$j(UIStrings$x.description),
@@ -167779,7 +168030,7 @@ function finalize$6(partialModel) {
167779
168030
  };
167780
168031
  }
167781
168032
  function isLegacyJavaScript(model) {
167782
- return model.insightKey === "LegacyJavaScript" ;
168033
+ return model.insightKey === InsightKeys.LEGACY_JAVASCRIPT;
167783
168034
  }
167784
168035
  function generateInsight$6(data, context) {
167785
168036
  const scripts = data.Scripts.scripts.filter(script => {
@@ -167848,7 +168099,7 @@ const UIStrings$w = {
167848
168099
  const str_$v = registerUIStrings('models/trace/insights/ModernHTTP.ts', UIStrings$w);
167849
168100
  const i18nString$i = getLocalizedString.bind(undefined, str_$v);
167850
168101
  function isModernHTTPInsight(model) {
167851
- return model.insightKey === "ModernHTTP" ;
168102
+ return model.insightKey === InsightKeys.MODERN_HTTP;
167852
168103
  }
167853
168104
  function isMultiplexableStaticAsset(request, entityMappings, firstPartyEntity) {
167854
168105
  if (!STATIC_RESOURCE_TYPES.has(request.args.data.resourceType)) {
@@ -167944,7 +168195,7 @@ function computeMetricSavings(http1Requests, context) {
167944
168195
  }
167945
168196
  function finalize$5(partialModel) {
167946
168197
  return {
167947
- insightKey: "ModernHTTP" ,
168198
+ insightKey: InsightKeys.MODERN_HTTP,
167948
168199
  strings: UIStrings$w,
167949
168200
  title: i18nString$i(UIStrings$w.title),
167950
168201
  description: i18nString$i(UIStrings$w.description),
@@ -168024,7 +168275,7 @@ const IGNORE_THRESHOLD_IN_MILLISECONDS = Milli(50);
168024
168275
  const TOO_MANY_PRECONNECTS_THRESHOLD = 4;
168025
168276
  function finalize$4(partialModel) {
168026
168277
  return {
168027
- insightKey: "NetworkDependencyTree" ,
168278
+ insightKey: InsightKeys.NETWORK_DEPENDENCY_TREE,
168028
168279
  strings: UIStrings$v,
168029
168280
  title: i18nString$h(UIStrings$v.title),
168030
168281
  description: i18nString$h(UIStrings$v.description),
@@ -168363,7 +168614,7 @@ function generatePreconnectCandidates(data, context, contextRequests) {
168363
168614
  return preconnectCandidates.slice(0, TOO_MANY_PRECONNECTS_THRESHOLD);
168364
168615
  }
168365
168616
  function isNetworkDependencyTreeInsight(model) {
168366
- return model.insightKey === "NetworkDependencyTree" ;
168617
+ return model.insightKey === InsightKeys.NETWORK_DEPENDENCY_TREE;
168367
168618
  }
168368
168619
  function generateInsight$4(data, context) {
168369
168620
  if (!context.navigation) {
@@ -168499,7 +168750,7 @@ function computeSavings(data, context, renderBlockingRequests) {
168499
168750
  }
168500
168751
  function finalize$3(partialModel) {
168501
168752
  return {
168502
- insightKey: "RenderBlocking" ,
168753
+ insightKey: InsightKeys.RENDER_BLOCKING,
168503
168754
  strings: UIStrings$u,
168504
168755
  title: i18nString$g(UIStrings$u.title),
168505
168756
  description: i18nString$g(UIStrings$u.description),
@@ -168623,7 +168874,7 @@ function aggregateSelectorStats(data, context) {
168623
168874
  }
168624
168875
  function finalize$2(partialModel) {
168625
168876
  return {
168626
- insightKey: "SlowCSSSelector" ,
168877
+ insightKey: InsightKeys.SLOW_CSS_SELECTOR,
168627
168878
  strings: UIStrings$t,
168628
168879
  title: i18nString$f(UIStrings$t.title),
168629
168880
  description: i18nString$f(UIStrings$t.description),
@@ -168634,7 +168885,7 @@ function finalize$2(partialModel) {
168634
168885
  };
168635
168886
  }
168636
168887
  function isSlowCSSSelectorInsight(model) {
168637
- return model.insightKey === "SlowCSSSelector" ;
168888
+ return model.insightKey === InsightKeys.SLOW_CSS_SELECTOR;
168638
168889
  }
168639
168890
  function generateInsight$2(data, context) {
168640
168891
  const selectorStatsData = data.SelectorStats;
@@ -168708,7 +168959,7 @@ function getRelatedEvents(summaries, firstPartyEntity) {
168708
168959
  }
168709
168960
  function finalize$1(partialModel) {
168710
168961
  return {
168711
- insightKey: "ThirdParties" ,
168962
+ insightKey: InsightKeys.THIRD_PARTIES,
168712
168963
  strings: UIStrings$s,
168713
168964
  title: i18nString$e(UIStrings$s.title),
168714
168965
  description: i18nString$e(UIStrings$s.description),
@@ -168721,7 +168972,7 @@ function finalize$1(partialModel) {
168721
168972
  };
168722
168973
  }
168723
168974
  function isThirdPartyInsight(model) {
168724
- return model.insightKey === "ThirdParties" ;
168975
+ return model.insightKey === InsightKeys.THIRD_PARTIES;
168725
168976
  }
168726
168977
  function generateInsight$1(data, context) {
168727
168978
  const entitySummaries = summarizeByThirdParty(data, context.bounds);
@@ -168782,7 +169033,7 @@ const str_$q = registerUIStrings('models/trace/insights/Viewport.ts', UIStrings$
168782
169033
  const i18nString$d = getLocalizedString.bind(undefined, str_$q);
168783
169034
  function finalize(partialModel) {
168784
169035
  return {
168785
- insightKey: "Viewport" ,
169036
+ insightKey: InsightKeys.VIEWPORT,
168786
169037
  strings: UIStrings$r,
168787
169038
  title: i18nString$d(UIStrings$r.title),
168788
169039
  description: i18nString$d(UIStrings$r.description),
@@ -168793,7 +169044,7 @@ function finalize(partialModel) {
168793
169044
  };
168794
169045
  }
168795
169046
  function isViewportInsight(model) {
168796
- return model.insightKey === "Viewport" ;
169047
+ return model.insightKey === InsightKeys.VIEWPORT;
168797
169048
  }
168798
169049
  function generateInsight(data, context) {
168799
169050
  const viewportEvent = data.UserInteractions.parseMetaViewportEvents.find(event => {
@@ -181495,6 +181746,7 @@ const UIStrings$g = {
181495
181746
  PrefixedVideoExitFullScreen: "HTMLVideoElement.webkitExitFullScreen() is deprecated. Please use Document.exitFullscreen() instead.",
181496
181747
  PrefixedVideoExitFullscreen: "HTMLVideoElement.webkitExitFullscreen() is deprecated. Please use Document.exitFullscreen() instead.",
181497
181748
  PrefixedVideoSupportsFullscreen: "HTMLVideoElement.webkitSupportsFullscreen is deprecated. Please use Document.fullscreenEnabled instead.",
181749
+ PreventSvgFilterPaint: "SVG filters cannot be applied to cross-origin iframes, restricted iframes (e.g., sandboxed), or plugins.",
181498
181750
  RangeExpand: "Range.expand() is deprecated. Please use Selection.modify() instead.",
181499
181751
  RelatedWebsiteSets: "`Related Website Sets` is deprecated and will be removed. See https://privacysandbox.com/news/update-on-plans-for-privacy-sandbox-technologies/ for more details.",
181500
181752
  RequestedSubresourceWithEmbeddedCredentials: "Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.",
@@ -181615,6 +181867,9 @@ const DEPRECATIONS_METADATA = {
181615
181867
  "chromeStatusFeature": 5176235376246784,
181616
181868
  "milestone": 106
181617
181869
  },
181870
+ "PreventSvgFilterPaint": {
181871
+ "chromeStatusFeature": 5117170452398080
181872
+ },
181618
181873
  "RTCConstraintEnableDtlsSrtpFalse": {
181619
181874
  "milestone": 97
181620
181875
  },
@@ -181963,6 +182218,26 @@ const genericNavigationEntryMarkedSkippable = {
181963
182218
  linkTitle: i18nLazyString$7(UIStrings$e.historyManipulationInterventionPageTitle),
181964
182219
  }],
181965
182220
  };
182221
+ const genericFormModelContextMissingToolName = {
182222
+ file: 'genericFormModelContextMissingToolName.md',
182223
+ links: [],
182224
+ };
182225
+ const genericFormModelContextMissingToolDescription = {
182226
+ file: 'genericFormModelContextMissingToolDescription.md',
182227
+ links: [],
182228
+ };
182229
+ const genericFormModelContextParameterMissingTitleAndDescription = {
182230
+ file: 'genericFormModelContextParameterMissingTitleAndDescription.md',
182231
+ links: [],
182232
+ };
182233
+ const genericFormModelContextRequiredParameterMissingName = {
182234
+ file: 'genericFormModelContextRequiredParameterMissingName.md',
182235
+ links: [],
182236
+ };
182237
+ const genericFormModelContextParameterMissingName = {
182238
+ file: 'genericFormModelContextParameterMissingName.md',
182239
+ links: [],
182240
+ };
181966
182241
  const issueDescriptions$4 = new Map([
181967
182242
  ["FormLabelForNameError" , genericFormLabelForNameError],
181968
182243
  ["FormInputWithNoLabelError" , genericFormInputWithNoLabelError],
@@ -182003,6 +182278,26 @@ const issueDescriptions$4 = new Map([
182003
182278
  "NavigationEntryMarkedSkippable" ,
182004
182279
  genericNavigationEntryMarkedSkippable,
182005
182280
  ],
182281
+ [
182282
+ "FormModelContextMissingToolName" ,
182283
+ genericFormModelContextMissingToolName,
182284
+ ],
182285
+ [
182286
+ "FormModelContextMissingToolDescription" ,
182287
+ genericFormModelContextMissingToolDescription,
182288
+ ],
182289
+ [
182290
+ "FormModelContextParameterMissingTitleAndDescription" ,
182291
+ genericFormModelContextParameterMissingTitleAndDescription,
182292
+ ],
182293
+ [
182294
+ "FormModelContextRequiredParameterMissingName" ,
182295
+ genericFormModelContextRequiredParameterMissingName,
182296
+ ],
182297
+ [
182298
+ "FormModelContextParameterMissingName" ,
182299
+ genericFormModelContextParameterMissingName,
182300
+ ],
182006
182301
  ]);
182007
182302
  const issueTypes = new Map([
182008
182303
  ["FormLabelForNameError" , "PageError" ],
@@ -182018,6 +182313,11 @@ const issueTypes = new Map([
182018
182313
  ["FormLabelForMatchesNonExistingIdError" , "PageError" ],
182019
182314
  ["FormLabelHasNeitherForNorNestedInputError" , "Improvement" ],
182020
182315
  ["FormInputHasWrongButWellIntendedAutocompleteValueError" , "Improvement" ],
182316
+ ["FormModelContextMissingToolName" , "PageError" ],
182317
+ ["FormModelContextMissingToolDescription" , "PageError" ],
182318
+ ["FormModelContextParameterMissingTitleAndDescription" , "PageError" ],
182319
+ ["FormModelContextRequiredParameterMissingName" , "PageError" ],
182320
+ ["FormModelContextParameterMissingName" , "PageError" ],
182021
182321
  ]);
182022
182322
 
182023
182323
  // Copyright 2020 The Chromium Authors