chrome-devtools-frontend 1.0.1581708 → 1.0.1583146

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 (73) hide show
  1. package/front_end/core/root/Runtime.ts +0 -5
  2. package/front_end/core/sdk/NetworkManager.ts +63 -115
  3. package/front_end/core/sdk/RemoteObject.ts +7 -1
  4. package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +9 -24
  5. package/front_end/entrypoints/greendev_floaty/floaty.css +1 -1
  6. package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +1 -1
  7. package/front_end/generated/InspectorBackendCommands.ts +1 -1
  8. package/front_end/generated/SupportedCSSProperties.js +2 -0
  9. package/front_end/generated/protocol.ts +0 -6
  10. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +6 -6
  11. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +17 -9
  12. package/front_end/models/ai_assistance/agents/NetworkAgent.ts +2 -6
  13. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +66 -2
  14. package/front_end/models/greendev/Prototypes.ts +1 -10
  15. package/front_end/models/issues_manager/ConnectionAllowlistIssue.ts +75 -0
  16. package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +0 -30
  17. package/front_end/models/issues_manager/IssuesManager.ts +5 -0
  18. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowlistItemType.md +12 -0
  19. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidHeader.md +12 -0
  20. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidUrlPattern.md +8 -0
  21. package/front_end/models/issues_manager/descriptions/connectionAllowlistItemNotInnerList.md +12 -0
  22. package/front_end/models/issues_manager/descriptions/connectionAllowlistMoreThanOneList.md +7 -0
  23. package/front_end/models/issues_manager/descriptions/connectionAllowlistReportingEndpointNotToken.md +10 -0
  24. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  25. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +22 -4
  26. package/front_end/panels/ai_assistance/components/ChatInput.ts +7 -3
  27. package/front_end/panels/ai_assistance/components/ChatMessage.ts +4 -2
  28. package/front_end/panels/application/preloading/PreloadingView.ts +8 -1
  29. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +4 -1
  30. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +2 -1
  31. package/front_end/panels/application/preloading/components/PreloadingString.ts +12 -3
  32. package/front_end/panels/application/preloading/helper/PreloadingForward.ts +14 -0
  33. package/front_end/panels/autofill/AutofillView.ts +4 -8
  34. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +37 -3
  35. package/front_end/panels/changes/ChangesSidebar.ts +2 -6
  36. package/front_end/panels/common/AiCodeGenerationTeaser.ts +27 -8
  37. package/front_end/panels/console/ConsoleSidebar.ts +3 -11
  38. package/front_end/panels/elements/ComputedStyleWidget.ts +41 -29
  39. package/front_end/panels/elements/ElementStatePaneWidget.ts +1 -1
  40. package/front_end/panels/elements/ElementsTreeElement.ts +487 -426
  41. package/front_end/panels/elements/EventListenersWidget.ts +2 -4
  42. package/front_end/panels/elements/PropertiesWidget.ts +1 -2
  43. package/front_end/panels/elements/StylePropertyTreeElement.ts +18 -2
  44. package/front_end/panels/elements/computedStyleWidget.css +30 -0
  45. package/front_end/panels/lighthouse/LighthouseStartView.ts +3 -5
  46. package/front_end/panels/lighthouse/lighthouseStartView.css +6 -0
  47. package/front_end/panels/network/NetworkLogView.ts +67 -108
  48. package/front_end/panels/network/RequestConditionsDrawer.ts +40 -131
  49. package/front_end/panels/network/RequestInitiatorView.ts +19 -8
  50. package/front_end/panels/network/network-meta.ts +4 -27
  51. package/front_end/panels/settings/AISettingsTab.ts +1 -5
  52. package/front_end/panels/settings/SettingsScreen.ts +0 -51
  53. package/front_end/panels/settings/WorkspaceSettingsTab.ts +1 -1
  54. package/front_end/panels/sources/CallStackSidebarPane.ts +2 -2
  55. package/front_end/panels/timeline/AnimationsTrackAppender.ts +4 -1
  56. package/front_end/panels/timeline/InteractionsTrackAppender.ts +1 -1
  57. package/front_end/panels/timeline/TimelineUIUtils.ts +13 -16
  58. package/front_end/third_party/chromium/README.chromium +1 -1
  59. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +5 -1
  60. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +8 -0
  61. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +8 -0
  62. package/front_end/ui/components/text_editor/config.ts +6 -0
  63. package/front_end/ui/legacy/Toolbar.ts +16 -8
  64. package/front_end/ui/legacy/Treeoutline.ts +4 -4
  65. package/front_end/ui/legacy/UIUtils.ts +35 -4
  66. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +6 -11
  67. package/front_end/ui/legacy/components/utils/Linkifier.ts +4 -7
  68. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  69. package/package.json +1 -1
  70. package/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataHttpNotFound.md +0 -1
  71. package/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataInvalidResponse.md +0 -1
  72. package/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataNoResponse.md +0 -1
  73. package/front_end/panels/elements/computedStyleSidebarPane.css +0 -18
@@ -58,9 +58,12 @@ export const markdownLinks = new Map<string, string>([
58
58
  ['signatureHeader', 'https://www.rfc-editor.org/rfc/rfc9421.html#name-the-signature-http-field'],
59
59
  ['signatureInputHeader', 'https://www.rfc-editor.org/rfc/rfc9421.html#name-the-signature-input-http-fi'],
60
60
  ['signatureParameters', 'https://www.rfc-editor.org/rfc/rfc9421.html#name-signature-parameters'],
61
- ['sfDictionary', 'https://www.rfc-editor.org/rfc/rfc8941.html#name-dictionaries'],
62
61
  ['sfByteSequence', 'https://www.rfc-editor.org/rfc/rfc8941.html#name-byte-sequences'],
62
+ ['sfDictionary', 'https://www.rfc-editor.org/rfc/rfc8941.html#name-dictionaries'],
63
63
  ['sfInnerList', 'https://www.rfc-editor.org/rfc/rfc8941.html#name-inner-lists'],
64
+ ['sfList', 'https://www.rfc-editor.org/rfc/rfc8941.html#name-lists'],
65
+ ['sfString', 'https://www.rfc-editor.org/rfc/rfc8941.html#name-strings'],
66
+ ['sfToken', 'https://www.rfc-editor.org/rfc/rfc8941.html#name-tokens'],
64
67
  ['componentParameterSf', 'https://www.rfc-editor.org/rfc/rfc9421.html#name-strict-serialization-of-htt'],
65
68
  ['componentParameterReq', 'https://www.rfc-editor.org/rfc/rfc9421.html#content-request-response'],
66
69
  [
@@ -74,6 +77,7 @@ export const markdownLinks = new Map<string, string>([
74
77
  'https://privacysandbox.com/news/update-on-plans-for-privacy-sandbox-technologies/',
75
78
  'https://privacysandbox.com/news/update-on-plans-for-privacy-sandbox-technologies/'
76
79
  ],
80
+ ['urlPatternSpec', 'https://urlpattern.spec.whatwg.org/'],
77
81
  ]);
78
82
 
79
83
  export const getMarkdownLink = (key: string): string => {
@@ -18,6 +18,7 @@ import {
18
18
  acceptAiAutoCompleteSuggestion,
19
19
  aiAutoCompleteSuggestion,
20
20
  aiAutoCompleteSuggestionState,
21
+ AiSuggestionSource,
21
22
  hasActiveAiSuggestion,
22
23
  setAiAutoCompleteSuggestion,
23
24
  showCompletionHint,
@@ -201,6 +202,12 @@ export class AiCodeCompletionProvider {
201
202
  if (!this.#aiCodeCompletion || !this.#editor || !hasActiveAiSuggestion(this.#editor.state)) {
202
203
  return false;
203
204
  }
205
+ if (this.#editor.state.field(aiAutoCompleteSuggestionState)?.source === AiSuggestionSource.GENERATION) {
206
+ // If the suggestion is from code generation, we don't want to
207
+ // dismiss it here. The user should use the code generation
208
+ // provider's keymap to dismiss the suggestion.
209
+ return false;
210
+ }
204
211
  this.#editor.dispatch({
205
212
  effects: setAiAutoCompleteSuggestion.of(null),
206
213
  });
@@ -347,6 +354,7 @@ export class AiCodeCompletionProvider {
347
354
  startTime,
348
355
  clearCachedRequest: this.clearCache.bind(this),
349
356
  onImpression: this.#aiCodeCompletion?.registerUserImpression.bind(this.#aiCodeCompletion),
357
+ source: AiSuggestionSource.COMPLETION,
350
358
  })
351
359
  });
352
360
  }
@@ -19,6 +19,7 @@ import {
19
19
  acceptAiAutoCompleteSuggestion,
20
20
  aiAutoCompleteSuggestion,
21
21
  aiAutoCompleteSuggestionState,
22
+ AiSuggestionSource,
22
23
  hasActiveAiSuggestion,
23
24
  setAiAutoCompleteSuggestion,
24
25
  } from './config.js';
@@ -159,6 +160,12 @@ export class AiCodeGenerationProvider {
159
160
  return false;
160
161
  }
161
162
  if (hasActiveAiSuggestion(this.#editor.state)) {
163
+ if (this.#editor.state.field(aiAutoCompleteSuggestionState)?.source === AiSuggestionSource.COMPLETION) {
164
+ // If the suggestion is from code completion, we don't want to
165
+ // dismiss it here. The user should use the code completion
166
+ // provider's keymap to dismiss the suggestion.
167
+ return false;
168
+ }
162
169
  this.#dismissTeaserAndSuggestion();
163
170
  return true;
164
171
  }
@@ -341,6 +348,7 @@ export class AiCodeGenerationProvider {
341
348
  sampleId: topSample.sampleId,
342
349
  startTime,
343
350
  onImpression: this.#aiCodeGeneration?.registerUserImpression.bind(this.#aiCodeGeneration),
351
+ source: AiSuggestionSource.GENERATION,
344
352
  }),
345
353
  setAiCodeGenerationTeaserMode.of(AiCodeGenerationTeaserMode.ACTIVE)
346
354
  ]
@@ -483,6 +483,11 @@ export function contentIncludingHint(view: CM.EditorView): string {
483
483
 
484
484
  export const setAiAutoCompleteSuggestion = CM.StateEffect.define<ActiveSuggestion|null>();
485
485
 
486
+ export const enum AiSuggestionSource {
487
+ COMPLETION = 'completion',
488
+ GENERATION = 'generation',
489
+ }
490
+
486
491
  export interface ActiveSuggestion {
487
492
  text: string;
488
493
  from: number;
@@ -491,6 +496,7 @@ export interface ActiveSuggestion {
491
496
  startTime: number;
492
497
  onImpression: (rpcGlobalId: Host.AidaClient.RpcGlobalId, latency: number, sampleId?: number) => void;
493
498
  clearCachedRequest?: () => void;
499
+ source: AiSuggestionSource;
494
500
  }
495
501
 
496
502
  export const aiAutoCompleteSuggestionState = CM.StateField.define<ActiveSuggestion|null>({
@@ -835,7 +835,7 @@ export class ToolbarInputElement extends HTMLElement {
835
835
 
836
836
  item?: ToolbarInput;
837
837
  datalist: HTMLDataListElement|null = null;
838
- value: string|undefined = undefined;
838
+ #value: string|undefined = undefined;
839
839
  #disabled = false;
840
840
 
841
841
  connectedCallback(): void {
@@ -862,8 +862,8 @@ export class ToolbarInputElement extends HTMLElement {
862
862
  /* shrinkFactor=*/ undefined, tooltip, this.datalist ? this.#onAutocomplete.bind(this) : undefined,
863
863
  /* dynamicCompletions=*/ undefined, jslogContext, this);
864
864
  }
865
- if (this.value) {
866
- this.item.setValue(this.value);
865
+ if (this.#value) {
866
+ this.item.setValue(this.#value);
867
867
  }
868
868
  if (this.#disabled) {
869
869
  this.item.setEnabled(false);
@@ -894,7 +894,7 @@ export class ToolbarInputElement extends HTMLElement {
894
894
  if (this.item && this.item.value() !== newValue) {
895
895
  this.item.setValue(newValue, true);
896
896
  } else {
897
- this.value = newValue;
897
+ this.#value = newValue;
898
898
  }
899
899
  } else if (name === 'disabled') {
900
900
  this.#disabled = typeof newValue === 'string';
@@ -904,6 +904,14 @@ export class ToolbarInputElement extends HTMLElement {
904
904
  }
905
905
  }
906
906
 
907
+ get value(): string {
908
+ return this.item ? this.item.value() : (this.#value ?? '');
909
+ }
910
+
911
+ set value(value: string) {
912
+ this.setAttribute('value', value);
913
+ }
914
+
907
915
  set disabled(disabled: boolean) {
908
916
  if (disabled) {
909
917
  this.setAttribute('disabled', '');
@@ -1321,11 +1329,11 @@ export class ToolbarCheckbox extends ToolbarItem<void> {
1321
1329
  constructor(
1322
1330
  text: Common.UIString.LocalizedString, tooltip?: Common.UIString.LocalizedString,
1323
1331
  listener?: ((arg0: MouseEvent) => void), jslogContext?: string) {
1324
- const checkboxLabel = CheckboxLabel.create(text, undefined, undefined, jslogContext);
1332
+ // Pass tooltip to CheckboxLabel.create so it's set on the inner input/text elements,
1333
+ // rather than installing it on the wrapper element which causes screen readers to
1334
+ // incorrectly announce it as a group name.
1335
+ const checkboxLabel = CheckboxLabel.create(text, undefined, undefined, jslogContext, undefined, tooltip);
1325
1336
  super(checkboxLabel);
1326
- if (tooltip) {
1327
- Tooltip.install(this.element, tooltip);
1328
- }
1329
1337
  if (listener) {
1330
1338
  this.element.addEventListener('click', listener, false);
1331
1339
  }
@@ -1704,7 +1704,7 @@ export class TreeViewElement extends HTMLElementWithLightDOMTemplate {
1704
1704
  super();
1705
1705
  this.#treeOutline.addEventListener(Events.ElementSelected, event => {
1706
1706
  if (event.data instanceof TreeViewTreeElement) {
1707
- this.dispatchEvent(new TreeViewElement.SelectEvent(event.data.configElement));
1707
+ event.data.listItemElement.dispatchEvent(new TreeViewElement.SelectEvent());
1708
1708
  }
1709
1709
  });
1710
1710
  this.#treeOutline.addEventListener(Events.ElementExpanded, event => {
@@ -1859,9 +1859,9 @@ export class TreeViewElement extends HTMLElementWithLightDOMTemplate {
1859
1859
  }
1860
1860
 
1861
1861
  export namespace TreeViewElement {
1862
- export class SelectEvent extends CustomEvent<HTMLLIElement> {
1863
- constructor(detail: HTMLLIElement) {
1864
- super('select', {detail});
1862
+ export class SelectEvent extends CustomEvent<void> {
1863
+ constructor() {
1864
+ super('select');
1865
1865
  }
1866
1866
  }
1867
1867
 
@@ -1173,7 +1173,7 @@ export class CheckboxLabel extends HTMLElement {
1173
1173
 
1174
1174
  static create(
1175
1175
  title?: Platform.UIString.LocalizedString, checked?: boolean, subtitle?: Platform.UIString.LocalizedString,
1176
- jslogContext?: string, small?: boolean): CheckboxLabel {
1176
+ jslogContext?: string, small?: boolean, tooltip?: Platform.UIString.LocalizedString): CheckboxLabel {
1177
1177
  const element = document.createElement('devtools-checkbox');
1178
1178
  element.#checkboxElement.checked = Boolean(checked);
1179
1179
  if (jslogContext) {
@@ -1182,11 +1182,17 @@ export class CheckboxLabel extends HTMLElement {
1182
1182
  }
1183
1183
  if (title !== undefined) {
1184
1184
  element.#textElement.textContent = title;
1185
- element.#checkboxElement.title = title;
1186
1185
  if (subtitle !== undefined) {
1187
1186
  element.#textElement.createChild('div', 'devtools-checkbox-subtitle').textContent = subtitle;
1188
1187
  }
1189
1188
  }
1189
+ // checkboxElement tooltip: tooltip first, then title (custom tooltip takes precedence for the input)
1190
+ const inputTooltip = tooltip ?? title;
1191
+ if (inputTooltip) {
1192
+ element.#checkboxElement.title = inputTooltip;
1193
+ // Set aria-description for screen reader announcement
1194
+ element.#checkboxElement.setAttribute('aria-description', inputTooltip);
1195
+ }
1190
1196
  element.#checkboxElement.classList.toggle('small', small);
1191
1197
  return element;
1192
1198
  }
@@ -2069,7 +2075,7 @@ export class HTMLElementWithLightDOMTemplate extends HTMLElement {
2069
2075
  HTMLElementWithLightDOMTemplate.patchLitTemplate(value);
2070
2076
  return value;
2071
2077
  }
2072
- if (Array.isArray(value)) {
2078
+ if (Array.isArray(value) || value instanceof Iterator) {
2073
2079
  return value.map(patchValue);
2074
2080
  }
2075
2081
 
@@ -2187,13 +2193,29 @@ export const bindCheckboxImpl = function(
2187
2193
  };
2188
2194
  };
2189
2195
 
2196
+ export type BindToSettingOpts = ((newSettingValue: string) => boolean)|{
2197
+ validator?: (newSettingValue: string) => boolean,
2198
+ jslog?: boolean,
2199
+ };
2190
2200
  export const bindToSetting =
2191
2201
  (settingOrName: string|Common.Settings.Setting<boolean|string>|Common.Settings.RegExpSetting,
2192
- stringValidator?: (newSettingValue: string) => boolean): ReturnType<typeof Directives.ref> => {
2202
+ optionsOrValidator?: BindToSettingOpts): ReturnType<typeof Directives.ref> => {
2193
2203
  const setting = typeof settingOrName === 'string' ?
2194
2204
  Common.Settings.Settings.instance().moduleSetting(settingOrName) :
2195
2205
  settingOrName;
2196
2206
 
2207
+ let stringValidator: ((newSettingValue: string) => boolean)|undefined;
2208
+ let jslog = true;
2209
+ if (typeof optionsOrValidator === 'function') {
2210
+ stringValidator = optionsOrValidator;
2211
+ } else if (optionsOrValidator) {
2212
+ stringValidator = optionsOrValidator.validator;
2213
+ if (optionsOrValidator.jslog !== undefined) {
2214
+ jslog = optionsOrValidator.jslog;
2215
+ }
2216
+ }
2217
+
2218
+ const jslogBuilder = jslog ? VisualLogging.toggle(setting.name).track({change: true}) : null;
2197
2219
  // We can't use `setValue` as the change listener directly, otherwise we won't
2198
2220
  // be able to remove it again.
2199
2221
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -2208,6 +2230,9 @@ export const bindToSetting =
2208
2230
  setting.removeChangeListener(settingChanged);
2209
2231
  return;
2210
2232
  }
2233
+ if (jslogBuilder) {
2234
+ e.setAttribute('jslog', jslogBuilder.toString());
2235
+ }
2211
2236
 
2212
2237
  setting.addChangeListener(settingChanged);
2213
2238
  setValue =
@@ -2223,6 +2248,9 @@ export const bindToSetting =
2223
2248
  return;
2224
2249
  }
2225
2250
 
2251
+ if (jslogBuilder) {
2252
+ e.setAttribute('jslog', jslogBuilder.toString());
2253
+ }
2226
2254
  setting.addChangeListener(settingChanged);
2227
2255
  setValue = bindInput(e as HTMLInputElement, setting.set.bind(setting), (value: string) => {
2228
2256
  try {
@@ -2243,6 +2271,9 @@ export const bindToSetting =
2243
2271
  return;
2244
2272
  }
2245
2273
 
2274
+ if (jslogBuilder) {
2275
+ e.setAttribute('jslog', jslogBuilder.toString());
2276
+ }
2246
2277
  setting.addChangeListener(settingChanged);
2247
2278
  setValue = bindInput(
2248
2279
  e as HTMLInputElement, setting.set.bind(setting), stringValidator ?? (() => true), /* numeric */ false);
@@ -96,7 +96,7 @@ function populateContextMenu(link: Element, event: Event): void {
96
96
  }
97
97
 
98
98
  // TODO(crbug.com/456517732): remove when all usages of runtimeStackTrace are migrated.
99
- export function buildStackTraceRowsForLegacyRuntimeStackTrace(
99
+ function buildStackTraceRowsForLegacyRuntimeStackTrace(
100
100
  stackTrace: Protocol.Runtime.StackTrace,
101
101
  target: SDK.Target.Target|null,
102
102
  linkifier: Linkifier,
@@ -159,7 +159,7 @@ export function buildStackTraceRowsForLegacyRuntimeStackTrace(
159
159
  return stackTraceRows;
160
160
  }
161
161
 
162
- export function buildStackTraceRows(
162
+ function buildStackTraceRows(
163
163
  stackTrace: StackTrace.StackTrace.StackTrace,
164
164
  target: SDK.Target.Target|null,
165
165
  linkifier: Linkifier,
@@ -189,14 +189,9 @@ export function buildStackTraceRows(
189
189
  inlineFrameIndex: 0,
190
190
  revealBreakpoint: previousStackFrameWasBreakpointCondition,
191
191
  });
192
- if (link) {
193
- link.setAttribute('jslog', `${VisualLogging.link('stack-trace').track({click: true})}`);
194
- link.addEventListener('contextmenu', populateContextMenu.bind(null, link));
192
+ link.setAttribute('jslog', `${VisualLogging.link('stack-trace').track({click: true})}`);
193
+ link.addEventListener('contextmenu', populateContextMenu.bind(null, link));
195
194
 
196
- if (!link.textContent) {
197
- link.textContent = i18nString(UIStrings.unknownSource);
198
- }
199
- }
200
195
  stackTraceRows.push({functionName, link});
201
196
  previousStackFrameWasBreakpointCondition = [
202
197
  SDK.DebuggerModel.COND_BREAKPOINT_SOURCE_URL,
@@ -306,12 +301,12 @@ export interface Options {
306
301
  expandable?: boolean;
307
302
  }
308
303
 
309
- export interface StackTraceRegularRow {
304
+ interface StackTraceRegularRow {
310
305
  functionName: string;
311
306
  link: HTMLElement|null;
312
307
  }
313
308
 
314
- export interface StackTraceAsyncRow {
309
+ interface StackTraceAsyncRow {
315
310
  asyncDescription: string;
316
311
  }
317
312
 
@@ -345,8 +345,7 @@ export class Linkifier extends Common.ObjectWrapper.ObjectWrapper<EventTypes> im
345
345
  }
346
346
 
347
347
  maybeLinkifyStackTraceFrame(
348
- target: SDK.Target.Target|null, frame: StackTrace.StackTrace.Frame, options?: LinkifyOptions): HTMLElement|null {
349
- let fallbackAnchor: HTMLElement|null = null;
348
+ target: SDK.Target.Target|null, frame: StackTrace.StackTrace.Frame, options?: LinkifyOptions): HTMLElement {
350
349
  const linkifyURLOptions: LinkifyURLOptions = {
351
350
  ...options,
352
351
  lineNumber: frame.line,
@@ -361,10 +360,8 @@ export class Linkifier extends Common.ObjectWrapper.ObjectWrapper<EventTypes> im
361
360
  omitOrigin: options?.omitOrigin,
362
361
  };
363
362
  const {className = ''} = linkifyURLOptions;
364
- if (frame.url) {
365
- fallbackAnchor = Linkifier.linkifyURL(frame.url as Platform.DevToolsPath.UrlString, linkifyURLOptions);
366
- }
367
- if (!target || target.isDisposed()) {
363
+ const fallbackAnchor = Linkifier.linkifyURL(frame.url as Platform.DevToolsPath.UrlString, linkifyURLOptions);
364
+ if (!target || target.isDisposed() || !frame.uiSourceCode) {
368
365
  return fallbackAnchor;
369
366
  }
370
367
 
@@ -383,7 +380,7 @@ export class Linkifier extends Common.ObjectWrapper.ObjectWrapper<EventTypes> im
383
380
  revealBreakpoint: options?.revealBreakpoint,
384
381
  };
385
382
 
386
- const uiLocation = frame.uiSourceCode?.uiLocation(frame.line, frame.column) ?? null;
383
+ const uiLocation = frame.uiSourceCode.uiLocation(frame.line, frame.column) ?? null;
387
384
  this.updateAnchorFromUILocation(link, linkDisplayOptions, uiLocation);
388
385
 
389
386
  const anchors = (this.anchorsByTarget.get(target) as Element[]);
@@ -1271,6 +1271,7 @@ export const knownContextValues = new Set([
1271
1271
  'device-bound-sessions-empty',
1272
1272
  'device-bound-sessions-preserve-log',
1273
1273
  'device-bound-sessions-request',
1274
+ 'device-bound-sessions-root',
1274
1275
  'device-fold',
1275
1276
  'device-frame-enable',
1276
1277
  'device-mode',
package/package.json CHANGED
@@ -105,5 +105,5 @@
105
105
  "flat-cache": "6.1.12"
106
106
  }
107
107
  },
108
- "version": "1.0.1581708"
108
+ "version": "1.0.1583146"
109
109
  }
@@ -1 +0,0 @@
1
- # The provider's client metadata endpoint cannot be found.
@@ -1 +0,0 @@
1
- # Provider's client metadata is invalid.
@@ -1 +0,0 @@
1
- # The response body is empty when fetching the provider's client metadata.
@@ -1,18 +0,0 @@
1
- /*
2
- * Copyright 2015 The Chromium Authors
3
- * Use of this source code is governed by a BSD-style license that can be
4
- * found in the LICENSE file.
5
- */
6
-
7
- .styles-sidebar-pane-toolbar {
8
- border-bottom: 1px solid var(--sys-color-divider);
9
- flex-shrink: 0;
10
- }
11
-
12
- .styles-sidebar-computed-style-widget {
13
- min-height: auto;
14
- }
15
-
16
- .styles-pane-toolbar {
17
- width: 100%;
18
- }