chrome-devtools-frontend 1.0.1668390 → 1.0.1669021
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/devtools-ci/SKILL.md +65 -0
- package/.agents/skills/gerrit-cli/SKILL.md +59 -0
- package/.agents/skills/gerrit-cli/references/commands.md +93 -0
- package/.agents/skills/gerrit-cli/references/workflows.md +56 -0
- package/.agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py +47 -0
- package/.agents/skills/gerrit-cli/scripts/import_upstream.py +230 -0
- package/docs/contributing/infrastructure.md +7 -1
- package/front_end/core/host/AidaClient.ts +66 -47
- package/front_end/core/host/GcaClient.ts +4 -6
- package/front_end/core/host/ResourceLoader.ts +4 -2
- package/front_end/core/root/Runtime.ts +0 -5
- package/front_end/core/sdk/ConsoleModel.ts +3 -2
- package/front_end/core/sdk/DebuggerModel.ts +14 -6
- package/front_end/core/sdk/SDKSettings.ts +19 -0
- package/front_end/core/sdk/sdk-meta.ts +0 -58
- package/front_end/generated/InspectorBackendCommands.ts +2 -2
- package/front_end/generated/protocol.ts +11 -3
- package/front_end/models/ai_assistance/AiUtils.ts +67 -4
- package/front_end/models/ai_assistance/StorageItem.ts +26 -5
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -19
- package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -3
- package/front_end/models/trace/handlers/RendererHandler.ts +20 -4
- package/front_end/models/trace/types/File.ts +1 -0
- package/front_end/models/workspace/UISourceCode.ts +0 -10
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +61 -182
- package/front_end/panels/ai_assistance/components/ChatInput.ts +25 -8
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +13 -69
- package/front_end/panels/ai_assistance/components/ChatView.ts +14 -8
- package/front_end/panels/ai_assistance/components/chatMessage.css +2 -20
- package/front_end/panels/application/ApplicationPanelSidebar.ts +2 -2
- package/front_end/panels/application/ApplicationPanelTreeElement.ts +41 -3
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +116 -79
- package/front_end/panels/application/ServiceWorkersView.ts +8 -8
- package/front_end/panels/application/application.ts +2 -0
- package/front_end/panels/application/components/AdsView.ts +10 -6
- package/front_end/panels/application/preloading/PreloadingView.ts +53 -45
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +111 -119
- package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +21 -23
- package/front_end/panels/application/serviceWorkerUpdateCycleView.css +105 -102
- package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +107 -96
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +17 -19
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +6 -6
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +28 -26
- package/front_end/panels/common/common.ts +1 -1
- package/front_end/panels/console/ConsoleInsightTeaser.ts +3 -6
- package/front_end/panels/console/ConsoleView.ts +6 -4
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
- package/front_end/panels/console/console-meta.ts +28 -0
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +3 -2
- package/front_end/panels/emulation/DeviceModeWrapper.ts +18 -4
- package/front_end/panels/explain/components/ConsoleInsight.ts +4 -6
- package/front_end/panels/explain/explain-meta.ts +7 -49
- package/front_end/panels/network/NetworkDataGridNode.ts +1 -1
- package/front_end/panels/network/NetworkLogView.ts +1 -0
- package/front_end/panels/network/OriginalResourceChunkView.ts +340 -0
- package/front_end/panels/network/ResourceChunkView.ts +72 -46
- package/front_end/panels/network/ResourceDirectSocketChunkView.ts +3 -2
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +3 -3
- package/front_end/panels/network/originalResourceChunkView.css +49 -0
- package/front_end/panels/screencast/ScreencastView.ts +401 -260
- package/front_end/panels/screencast/screencastView.css +113 -100
- package/front_end/panels/sensors/LocationsSettingsTab.ts +106 -122
- package/front_end/panels/sensors/locationsSettingsTab.css +4 -4
- package/front_end/panels/settings/AISettingsTab.ts +17 -100
- package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +2 -2
- package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
- package/front_end/panels/sources/AddSourceMapURLDialog.ts +3 -3
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +4 -3
- package/front_end/panels/sources/BreakpointEditDialog.ts +14 -14
- package/front_end/panels/sources/BreakpointsView.ts +14 -14
- package/front_end/panels/sources/CallStackSidebarPane.ts +6 -6
- package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
- package/front_end/panels/sources/CoveragePlugin.ts +7 -7
- package/front_end/panels/sources/DebuggerPausedMessage.ts +23 -23
- package/front_end/panels/sources/DebuggerPlugin.ts +29 -29
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +2 -2
- package/front_end/panels/sources/GoToLineQuickOpen.ts +10 -10
- package/front_end/panels/sources/NavigatorView.ts +34 -27
- package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
- package/front_end/panels/sources/PersistenceActions.ts +9 -9
- package/front_end/panels/sources/ProfilePlugin.ts +1 -1
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +5 -5
- package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
- package/front_end/panels/sources/SourcesNavigator.ts +20 -18
- package/front_end/panels/sources/SourcesPanel.ts +26 -25
- package/front_end/panels/sources/SourcesView.ts +5 -6
- package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
- package/front_end/panels/sources/ThreadsSidebarPane.ts +1 -1
- package/front_end/panels/sources/UISourceCodeFrame.ts +0 -2
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +7 -7
- package/front_end/panels/sources/components/HeadersView.ts +2 -2
- package/front_end/panels/sources/sources-meta.ts +109 -71
- package/front_end/panels/sources/sources.ts +0 -2
- package/front_end/panels/timeline/TimelineHistoryManager.ts +14 -3
- package/front_end/panels/timeline/TimelineLoader.ts +72 -42
- package/front_end/panels/timeline/TimelinePanel.ts +29 -4
- package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +187 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +91 -38
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +145 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js +8 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +1 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts +0 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js +0 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js +12 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +4 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +49 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts +0 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js +0 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +0 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +0 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +187 -1
- package/front_end/third_party/puppeteer/package/package.json +5 -5
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +155 -2
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +0 -2
- package/front_end/third_party/puppeteer/package/src/api/Dialog.ts +10 -2
- package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +0 -2
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -3
- package/front_end/third_party/puppeteer/package/src/api/Realm.ts +0 -1
- package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +4 -2
- package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +17 -0
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +5 -4
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +66 -0
- package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +0 -6
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/util.ts +4 -1
- package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +0 -3
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/disposable.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +9 -7
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +7 -8
- package/front_end/ui/legacy/Dialog.ts +12 -2
- package/front_end/ui/legacy/TabbedPane.ts +7 -2
- package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +40 -24
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -0
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -4
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +14 -7
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
- package/package.json +1 -1
- package/front_end/panels/sources/AiWarningInfobarPlugin.ts +0 -78
|
@@ -24,6 +24,11 @@ import {
|
|
|
24
24
|
type AddScreenParams,
|
|
25
25
|
type WindowBounds,
|
|
26
26
|
type WindowId,
|
|
27
|
+
type InstallPWAOptions,
|
|
28
|
+
type UninstallPWAOptions,
|
|
29
|
+
type LaunchPWAOptions,
|
|
30
|
+
type GetPWAStateOptions,
|
|
31
|
+
type PWAState,
|
|
27
32
|
} from '../api/Browser.js';
|
|
28
33
|
import {BrowserContextEvent} from '../api/BrowserContext.js';
|
|
29
34
|
import {CDPSessionEvent} from '../api/CDPSession.js';
|
|
@@ -523,6 +528,67 @@ export class CdpBrowser extends BrowserBase {
|
|
|
523
528
|
this.#extensions.delete(id);
|
|
524
529
|
}
|
|
525
530
|
|
|
531
|
+
override async installPWA(options: InstallPWAOptions): Promise<string> {
|
|
532
|
+
await this.#connection.send('PWA.install', {
|
|
533
|
+
manifestId: options.manifestId,
|
|
534
|
+
installUrlOrBundleUrl: options.installUrlOrBundleUrl,
|
|
535
|
+
});
|
|
536
|
+
if (options.displayMode) {
|
|
537
|
+
await this.#connection.send('PWA.changeAppUserSettings', {
|
|
538
|
+
manifestId: options.manifestId,
|
|
539
|
+
displayMode: options.displayMode,
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
return options.manifestId;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
override async uninstallPWA(options: UninstallPWAOptions): Promise<void> {
|
|
546
|
+
await this.#connection.send('PWA.uninstall', {
|
|
547
|
+
manifestId: options.manifestId,
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
override async launchPWA(options: LaunchPWAOptions): Promise<Page> {
|
|
552
|
+
// `PWA.launch` resolves with the id of the launched *tab* target (see the
|
|
553
|
+
// CDP `PWA.LaunchResponse` docs). Tab targets sit above page targets in the
|
|
554
|
+
// target hierarchy and are not exposed through `browser.targets()`, so the
|
|
555
|
+
// returned id can't be awaited directly.
|
|
556
|
+
const {targetId: tabTargetId} = await this.#connection.send('PWA.launch', {
|
|
557
|
+
manifestId: options.manifestId,
|
|
558
|
+
url: options.url,
|
|
559
|
+
});
|
|
560
|
+
const target = (await this.waitForTarget(
|
|
561
|
+
candidate => {
|
|
562
|
+
const tab = this.#targetManager.getAvailableTargets().get(tabTargetId);
|
|
563
|
+
if (tab?.type() !== 'tab') {
|
|
564
|
+
return false;
|
|
565
|
+
}
|
|
566
|
+
for (const child of tab._childTargets()) {
|
|
567
|
+
if (child === candidate) {
|
|
568
|
+
return true;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
return false;
|
|
572
|
+
},
|
|
573
|
+
{timeout: options.timeout},
|
|
574
|
+
)) as CdpTarget;
|
|
575
|
+
const page = await target.page();
|
|
576
|
+
if (!page) {
|
|
577
|
+
throw new Error(
|
|
578
|
+
`Failed to create a page for the launched PWA (manifestId = ${options.manifestId})`,
|
|
579
|
+
);
|
|
580
|
+
}
|
|
581
|
+
return page;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
override async getPWAState(options: GetPWAStateOptions): Promise<PWAState> {
|
|
585
|
+
const {badgeCount, fileHandlers} = await this.#connection.send(
|
|
586
|
+
'PWA.getOsAppState',
|
|
587
|
+
{manifestId: options.manifestId},
|
|
588
|
+
);
|
|
589
|
+
return {badgeCount, fileHandlers};
|
|
590
|
+
}
|
|
591
|
+
|
|
526
592
|
override async screens(): Promise<ScreenInfo[]> {
|
|
527
593
|
const {screenInfos} = await this.#connection.send(
|
|
528
594
|
'Emulation.getScreenInfos',
|
|
@@ -181,16 +181,10 @@ export class EventEmitter<
|
|
|
181
181
|
return this;
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
/**
|
|
185
|
-
* @internal
|
|
186
|
-
*/
|
|
187
184
|
[disposeSymbol](): void {
|
|
188
185
|
return void this[asyncDisposeSymbol]().catch(debugCatchError);
|
|
189
186
|
}
|
|
190
187
|
|
|
191
|
-
/**
|
|
192
|
-
* @internal
|
|
193
|
-
*/
|
|
194
188
|
async [asyncDisposeSymbol](): Promise<void> {
|
|
195
189
|
for (const [type, handlers] of this.#handlers) {
|
|
196
190
|
for (const handler of handlers) {
|
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
8
|
-
export const source = "\"use strict\";var N=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Y(e))!G.call(t,n)&&n!==r&&N(t,n,{get:()=>e[n],enumerable:!(o=B(e,n))||o.enumerable});return t};var z=t=>J(N({},\"__esModule\",{value:!0}),t);var ye={};l(ye,{default:()=>pe});module.exports=z(ye);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#n&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#n;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#n=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#n),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#s;valueOrThrow(){return this.#s||(this.#s=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#s}};var W=new Map,j=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var v={};l(v,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var w=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},T=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var L={};l(L,{PCombinator:()=>U,pQuerySelector:()=>me,pQuerySelectorAll:()=>X});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var O={};l(O,{textQuerySelectorAll:()=>m});var oe=new Set([\"checkbox\",\"image\",\"radio\"]),ne=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!oe.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),C=new WeakMap,V=t=>{for(;t;)C.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},F=new WeakSet,I,ie=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\"MutationObserver is not available in this environment.\");return I||(I=new t(e=>{for(let r of e)V(r.target)})),I},d=t=>{let e=C.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(ne(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{V(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),F.has(t)||(ie().observe(t,{childList:!0,characterData:!0,subtree:!0}),F.add(t))}return C.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var M={};l(M,{checkVisibility:()=>ae,pierce:()=>g,pierceAll:()=>k});var le=[\"hidden\",\"collapse\"],ae=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t
|
|
8
|
+
export const source = "\"use strict\";var N=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Y(e))!G.call(t,n)&&n!==r&&N(t,n,{get:()=>e[n],enumerable:!(o=B(e,n))||o.enumerable});return t};var z=t=>J(N({},\"__esModule\",{value:!0}),t);var ye={};l(ye,{default:()=>pe});module.exports=z(ye);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#n&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#n;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#n=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#n),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#s;valueOrThrow(){return this.#s||(this.#s=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#s}};var W=new Map,j=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var v={};l(v,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var w=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},T=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var L={};l(L,{PCombinator:()=>U,pQuerySelector:()=>me,pQuerySelectorAll:()=>X});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var O={};l(O,{textQuerySelectorAll:()=>m});var oe=new Set([\"checkbox\",\"image\",\"radio\"]),ne=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!oe.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),C=new WeakMap,V=t=>{for(;t;)C.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},F=new WeakSet,I,ie=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\"MutationObserver is not available in this environment.\");return I||(I=new t(e=>{for(let r of e)V(r.target)})),I},d=t=>{let e=C.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(ne(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{V(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),F.has(t)||(ie().observe(t,{childList:!0,characterData:!0,subtree:!0}),F.add(t))}return C.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var M={};l(M,{checkVisibility:()=>ae,pierce:()=>g,pierceAll:()=>k});var le=[\"hidden\",\"collapse\"],ae=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t;if(!r)return e===!1;let o=window.getComputedStyle(r),n=o&&!le.includes(o.visibility)&&!ce(r);return e===n?t:!1};function ce(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ue=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ue(t)?yield t.shadowRoot:yield t}function*k(t){t=g(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let h=0;h<i.length;h++)s=i[h],yield s,i[h]=null};var de=/[-\\w\\P{ASCII}*]/u,U=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(U||{}),H=t=>\"querySelectorAll\"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){for(typeof this.#o==\"string\"&&this.#o.trimStart()===\":scope\"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&de.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){H(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!H(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,g),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,k),this.#t();break}default:this.#r=e,this.#t();break}}},_=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},fe=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new _;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},X=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\"string\"?++n:n=0,n>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return fe(a.flatMap(r,o=>{let n=new Q(t,o);return n.run(),n.elements}))},me=async function(t,e){for await(let r of X(t,e))return r;return null};var he=Object.freeze({...v,...A,...R,...L,...O,...M,...D,...E,Deferred:c,createFunction:j,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),pe=he;\n";
|
|
@@ -20,7 +20,10 @@ export const checkVisibility = (
|
|
|
20
20
|
}
|
|
21
21
|
const element = (
|
|
22
22
|
node.nodeType === Node.TEXT_NODE ? node.parentElement : node
|
|
23
|
-
) as Element;
|
|
23
|
+
) as Element | null;
|
|
24
|
+
if (!element) {
|
|
25
|
+
return visible === false;
|
|
26
|
+
}
|
|
24
27
|
|
|
25
28
|
const style = window.getComputedStyle(element);
|
|
26
29
|
const isVisible =
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
10
|
export const PUPPETEER_REVISIONS = Object.freeze({
|
|
11
|
-
chrome: '
|
|
12
|
-
'chrome-headless-shell': '
|
|
13
|
-
firefox: 'stable_152.0.
|
|
11
|
+
chrome: '151.0.7922.47',
|
|
12
|
+
'chrome-headless-shell': '151.0.7922.47',
|
|
13
|
+
firefox: 'stable_152.0.5',
|
|
14
14
|
});
|
|
@@ -32,12 +32,12 @@ declare global {
|
|
|
32
32
|
(Symbol as any).asyncDispose ??= Symbol('asyncDispose');
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* @
|
|
35
|
+
* @public
|
|
36
36
|
*/
|
|
37
37
|
export const disposeSymbol: typeof Symbol.dispose = Symbol.dispose;
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* @
|
|
40
|
+
* @public
|
|
41
41
|
*/
|
|
42
42
|
export const asyncDisposeSymbol: typeof Symbol.asyncDispose =
|
|
43
43
|
Symbol.asyncDispose;
|
|
@@ -56,7 +56,8 @@ export interface AiCodeCompletionConfig {
|
|
|
56
56
|
onSuggestionAccepted: (citations: Host.AidaClient.Citation[]) => void;
|
|
57
57
|
onRequestTriggered: () => void;
|
|
58
58
|
onResponseReceived: () => void;
|
|
59
|
-
|
|
59
|
+
disclaimerTooltipId: string;
|
|
60
|
+
disclaimerTextVariant: PanelCommon.DisclaimerTextVariant;
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
export const DELAY_BEFORE_SHOWING_RESPONSE_MS = 500;
|
|
@@ -103,7 +104,8 @@ export class AiCodeCompletionProvider {
|
|
|
103
104
|
onSuggestionAccepted: this.#aiCodeCompletionConfig.onSuggestionAccepted.bind(this),
|
|
104
105
|
onRequestTriggered: this.#aiCodeCompletionConfig.onRequestTriggered.bind(this),
|
|
105
106
|
onResponseReceived: this.#aiCodeCompletionConfig.onResponseReceived.bind(this),
|
|
106
|
-
|
|
107
|
+
disclaimerTooltipId: this.#aiCodeCompletionConfig.disclaimerTooltipId,
|
|
108
|
+
disclaimerTextVariant: this.#aiCodeCompletionConfig.disclaimerTextVariant,
|
|
107
109
|
};
|
|
108
110
|
this.#aiCodeGenerationProvider = AiCodeGenerationProvider.createInstance(this.#aiCodeGenerationConfig);
|
|
109
111
|
}
|
|
@@ -143,7 +145,7 @@ export class AiCodeCompletionProvider {
|
|
|
143
145
|
if (!this.#aiCodeCompletionSetting.get() && !this.#aiCodeCompletionTeaserDismissedSetting.get()) {
|
|
144
146
|
this.#teaser = new PanelCommon.AiCodeCompletionTeaser({
|
|
145
147
|
onDetach: () => this.#detachTeaser.bind(this),
|
|
146
|
-
|
|
148
|
+
disclaimerTextVariant: this.#aiCodeCompletionConfig?.disclaimerTextVariant,
|
|
147
149
|
});
|
|
148
150
|
this.#editor.editor.dispatch(
|
|
149
151
|
{effects: this.#teaserCompartment.reconfigure([aiCodeCompletionTeaserExtension(this.#teaser)])});
|
|
@@ -175,7 +177,7 @@ export class AiCodeCompletionProvider {
|
|
|
175
177
|
aidaClient: this.#aidaClient,
|
|
176
178
|
serverSideLoggingEnabled: !Root.Runtime.hostConfig.aidaAvailability?.disallowLogging,
|
|
177
179
|
},
|
|
178
|
-
|
|
180
|
+
undefined, this.#aiCodeCompletionConfig.completionContext.stopSequences);
|
|
179
181
|
this.#aiCodeCompletionConfig.onFeatureEnabled();
|
|
180
182
|
}
|
|
181
183
|
|
|
@@ -332,10 +334,10 @@ export class AiCodeCompletionProvider {
|
|
|
332
334
|
const startTime = performance.now();
|
|
333
335
|
this.#aiCodeCompletionConfig?.onRequestTriggered();
|
|
334
336
|
// Registering AiCodeCompletionRequestTriggered metric even if the request is served from cache
|
|
335
|
-
const
|
|
336
|
-
if (
|
|
337
|
+
const disclaimerTextVariant = this.#aiCodeCompletionConfig?.disclaimerTextVariant;
|
|
338
|
+
if (disclaimerTextVariant === 'console') {
|
|
337
339
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeCompletionRequestTriggeredFromConsole);
|
|
338
|
-
} else if (
|
|
340
|
+
} else if (disclaimerTextVariant === 'sources') {
|
|
339
341
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeCompletionRequestTriggeredFromSources);
|
|
340
342
|
}
|
|
341
343
|
|
|
@@ -6,7 +6,6 @@ import * as Common from '../../../core/common/common.js';
|
|
|
6
6
|
import * as Host from '../../../core/host/host.js';
|
|
7
7
|
import * as i18n from '../../../core/i18n/i18n.js';
|
|
8
8
|
import * as Root from '../../../core/root/root.js';
|
|
9
|
-
import * as AiCodeCompletion from '../../../models/ai_code_completion/ai_code_completion.js';
|
|
10
9
|
import * as AiCodeGeneration from '../../../models/ai_code_generation/ai_code_generation.js';
|
|
11
10
|
import * as PanelCommon from '../../../panels/common/common.js';
|
|
12
11
|
import * as CodeMirror from '../../../third_party/codemirror.next/codemirror.next.js';
|
|
@@ -47,7 +46,8 @@ export interface AiCodeGenerationConfig {
|
|
|
47
46
|
onSuggestionAccepted: (citations: Host.AidaClient.Citation[]) => void;
|
|
48
47
|
onRequestTriggered: () => void;
|
|
49
48
|
onResponseReceived: () => void;
|
|
50
|
-
|
|
49
|
+
disclaimerTooltipId: string;
|
|
50
|
+
disclaimerTextVariant: PanelCommon.DisclaimerTextVariant;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
export class AiCodeGenerationProvider {
|
|
@@ -84,9 +84,8 @@ export class AiCodeGenerationProvider {
|
|
|
84
84
|
throw new Error('AI code generation feature is not available.');
|
|
85
85
|
}
|
|
86
86
|
this.#generationTeaser = new PanelCommon.AiCodeGenerationTeaser.AiCodeGenerationTeaser();
|
|
87
|
-
this.#generationTeaser.disclaimerTooltipId =
|
|
88
|
-
|
|
89
|
-
this.#generationTeaser.panel = aiCodeGenerationConfig.panel;
|
|
87
|
+
this.#generationTeaser.disclaimerTooltipId = aiCodeGenerationConfig.disclaimerTooltipId;
|
|
88
|
+
this.#generationTeaser.disclaimerTextVariant = aiCodeGenerationConfig.disclaimerTextVariant;
|
|
90
89
|
this.#aiCodeGenerationConfig = aiCodeGenerationConfig;
|
|
91
90
|
}
|
|
92
91
|
|
|
@@ -232,10 +231,10 @@ export class AiCodeGenerationProvider {
|
|
|
232
231
|
}
|
|
233
232
|
|
|
234
233
|
void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered');
|
|
235
|
-
if (this.#aiCodeGenerationConfig?.
|
|
234
|
+
if (this.#aiCodeGenerationConfig?.disclaimerTextVariant === 'console') {
|
|
236
235
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeGenerationRequestTriggeredFromConsole);
|
|
237
236
|
void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered-from-console');
|
|
238
|
-
} else if (this.#aiCodeGenerationConfig?.
|
|
237
|
+
} else if (this.#aiCodeGenerationConfig?.disclaimerTextVariant === 'sources') {
|
|
239
238
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeGenerationRequestTriggeredFromSources);
|
|
240
239
|
void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered-from-sources');
|
|
241
240
|
}
|
|
@@ -358,7 +357,7 @@ export class AiCodeGenerationProvider {
|
|
|
358
357
|
this.#dismissTeaserAndSuggestion();
|
|
359
358
|
}
|
|
360
359
|
|
|
361
|
-
if (
|
|
360
|
+
if (generationResponse.samples.length === 0) {
|
|
362
361
|
this.#aiCodeGenerationConfig.onResponseReceived();
|
|
363
362
|
return;
|
|
364
363
|
}
|
|
@@ -255,6 +255,8 @@ export const enum OutsideTabIndexBehavior {
|
|
|
255
255
|
|
|
256
256
|
export class DialogWidget extends Common.ObjectWrapper.eventMixin<EventTypes, typeof Widget>(Widget) {
|
|
257
257
|
#open = false;
|
|
258
|
+
#jslogContext = '';
|
|
259
|
+
#dialogStack = false;
|
|
258
260
|
#content: LitTemplate = nothing;
|
|
259
261
|
readonly #dialog = new Dialog();
|
|
260
262
|
|
|
@@ -279,8 +281,16 @@ export class DialogWidget extends Common.ObjectWrapper.eventMixin<EventTypes, ty
|
|
|
279
281
|
}
|
|
280
282
|
}
|
|
281
283
|
|
|
282
|
-
|
|
284
|
+
get dialogStack(): boolean {
|
|
285
|
+
return this.#dialogStack;
|
|
286
|
+
}
|
|
283
287
|
|
|
288
|
+
set dialogStack(dialogStack: boolean) {
|
|
289
|
+
if (this.#dialogStack !== dialogStack) {
|
|
290
|
+
this.#dialogStack = dialogStack;
|
|
291
|
+
this.requestUpdate();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
284
294
|
get content(): LitTemplate {
|
|
285
295
|
return this.#content;
|
|
286
296
|
}
|
|
@@ -322,7 +332,7 @@ export class DialogWidget extends Common.ObjectWrapper.eventMixin<EventTypes, ty
|
|
|
322
332
|
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
323
333
|
render(this.#content ?? nothing, this.#dialog.contentElement);
|
|
324
334
|
if (!this.#dialog.isShowing()) {
|
|
325
|
-
this.#dialog.show(this.contentElement.ownerDocument);
|
|
335
|
+
this.#dialog.show(this.contentElement.ownerDocument, this.#dialogStack);
|
|
326
336
|
this.#dialog.contentElement.focus();
|
|
327
337
|
} else {
|
|
328
338
|
this.#dialog.positionContent();
|
|
@@ -506,6 +506,7 @@ export class TabbedPane extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
506
506
|
}
|
|
507
507
|
|
|
508
508
|
protected clearMeasuredWidths(): void {
|
|
509
|
+
delete this.measuredDropDownButtonWidth;
|
|
509
510
|
for (let i = 0; i < this.#tabs.length; ++i) {
|
|
510
511
|
delete this.#tabs[i].measuredWidth;
|
|
511
512
|
}
|
|
@@ -842,7 +843,8 @@ export class TabbedPane extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
842
843
|
private maybeShowDropDown(hasMoreTabs: boolean): void {
|
|
843
844
|
// The legacy chevron is suppressed when a trailing-button slot is
|
|
844
845
|
// populated; the slotted element takes its place.
|
|
845
|
-
const shouldShow = this.#trailingSlot.assignedElements().length === 0 && hasMoreTabs
|
|
846
|
+
const shouldShow = this.#trailingSlot.assignedElements().length === 0 && hasMoreTabs &&
|
|
847
|
+
this.totalWidth() >= (this.measuredDropDownButtonWidth || 0);
|
|
846
848
|
if (shouldShow && !this.dropDownButton.parentElement) {
|
|
847
849
|
this.headerContentsElement.appendChild(this.dropDownButton);
|
|
848
850
|
} else if (!shouldShow && this.dropDownButton.parentElement) {
|
|
@@ -942,7 +944,10 @@ export class TabbedPane extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
942
944
|
}
|
|
943
945
|
this.dropDownButton.classList.add('measuring');
|
|
944
946
|
this.headerContentsElement.appendChild(this.dropDownButton);
|
|
945
|
-
|
|
947
|
+
const width = this.dropDownButton.getBoundingClientRect().width;
|
|
948
|
+
if (width > 0) {
|
|
949
|
+
this.measuredDropDownButtonWidth = width;
|
|
950
|
+
}
|
|
946
951
|
this.headerContentsElement.removeChild(this.dropDownButton);
|
|
947
952
|
this.dropDownButton.classList.remove('measuring');
|
|
948
953
|
}
|
|
@@ -57,7 +57,7 @@ export interface ViewInput {
|
|
|
57
57
|
renderInline?: boolean;
|
|
58
58
|
portBindingEnabled?: boolean;
|
|
59
59
|
schemeBindingEnabled?: boolean;
|
|
60
|
-
onEdit: (data: CookieData, columnId: string, valueBeforeEditing: string, newText: string) => void;
|
|
60
|
+
onEdit: (data: CookieData, columnId: string, valueBeforeEditing: string|boolean, newText: string|boolean) => void;
|
|
61
61
|
onCreate: (data: CookieData) => void;
|
|
62
62
|
onRefresh: () => void;
|
|
63
63
|
onDelete: (data: CookieData) => void;
|
|
@@ -71,18 +71,21 @@ type ViewFunction = (input: ViewInput, output: object, target: HTMLElement) => v
|
|
|
71
71
|
type AttributeWithIcon = SDK.Cookie.Attribute.NAME|SDK.Cookie.Attribute.VALUE|SDK.Cookie.Attribute.DOMAIN|
|
|
72
72
|
SDK.Cookie.Attribute.PATH|SDK.Cookie.Attribute.SECURE|SDK.Cookie.Attribute.SAME_SITE;
|
|
73
73
|
|
|
74
|
-
type
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
74
|
+
type BooleanAttributes =
|
|
75
|
+
SDK.Cookie.Attribute.HTTP_ONLY|SDK.Cookie.Attribute.SECURE|SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR;
|
|
76
|
+
type CookieData = Partial<Record<Exclude<SDK.Cookie.Attribute, BooleanAttributes>, string>>&
|
|
77
|
+
Partial<Record<BooleanAttributes, string|boolean>>&{
|
|
78
|
+
name: string,
|
|
79
|
+
value: string,
|
|
80
|
+
}&{
|
|
81
|
+
key?: string,
|
|
82
|
+
flagged?: boolean,
|
|
83
|
+
icons?: Partial<Record<AttributeWithIcon, Icon>>,
|
|
84
|
+
priorityValue?: number,
|
|
85
|
+
expiresTooltip?: string,
|
|
86
|
+
dirty?: boolean,
|
|
87
|
+
inactive?: boolean,
|
|
88
|
+
};
|
|
86
89
|
|
|
87
90
|
const {repeat, ifDefined} = Directives;
|
|
88
91
|
|
|
@@ -185,6 +188,10 @@ const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined
|
|
|
185
188
|
|
|
186
189
|
const expiresSessionValue = i18nLazyString(UIStrings.session);
|
|
187
190
|
|
|
191
|
+
function isFlagAttribute(attribute: SDK.Cookie.Attribute): attribute is BooleanAttributes {
|
|
192
|
+
return attribute === SDK.Cookie.Attribute.HTTP_ONLY || attribute === SDK.Cookie.Attribute.SECURE;
|
|
193
|
+
}
|
|
194
|
+
|
|
188
195
|
export interface CookiesTableData {
|
|
189
196
|
cookies: SDK.Cookie.Cookie[];
|
|
190
197
|
cookieToBlockedReasons?: ReadonlyMap<SDK.Cookie.Cookie, SDK.CookieModel.BlockedReason[]>;
|
|
@@ -280,13 +287,13 @@ export class CookiesTable extends UI.Widget.VBox {
|
|
|
280
287
|
</th>` : ''}
|
|
281
288
|
</tr>
|
|
282
289
|
${repeat(this.data, cookie => cookie.key, cookie => {
|
|
283
|
-
const isHttpOnly = cookie['http-only']
|
|
290
|
+
const isHttpOnly = Boolean(cookie['http-only']);
|
|
284
291
|
return html`
|
|
285
292
|
<tr ?selected=${cookie.key === input.selectedKey}
|
|
286
293
|
?inactive=${cookie.inactive}
|
|
287
294
|
?dirty=${cookie.dirty}
|
|
288
295
|
?highlighted=${cookie.flagged}
|
|
289
|
-
@edit=${(e: CustomEvent<{columnId: string, valueBeforeEditing: string, newText: string}>) =>
|
|
296
|
+
@edit=${(e: CustomEvent<{columnId: string, valueBeforeEditing: string|boolean, newText: string|boolean}>) =>
|
|
290
297
|
input.onEdit(cookie, e.detail.columnId, e.detail.valueBeforeEditing, e.detail.newText)}
|
|
291
298
|
@delete=${()=> input.onDelete(cookie)}
|
|
292
299
|
@contextmenu=${(e: CustomEvent<UI.ContextMenu.ContextMenu>) => input.onContextMenu(cookie, e.detail)}
|
|
@@ -479,7 +486,8 @@ export class CookiesTable extends UI.Widget.VBox {
|
|
|
479
486
|
}
|
|
480
487
|
}
|
|
481
488
|
|
|
482
|
-
private onUpdateCookie(oldData: CookieData, columnIdentifier: string, _oldText: string,
|
|
489
|
+
private onUpdateCookie(oldData: CookieData, columnIdentifier: string, _oldText: string|boolean,
|
|
490
|
+
newText: string|boolean): void {
|
|
483
491
|
const oldCookie = this.cookies.find(cookie => cookie.key() === oldData.key);
|
|
484
492
|
if (!oldCookie) {
|
|
485
493
|
return;
|
|
@@ -547,7 +555,14 @@ export class CookiesTable extends UI.Widget.VBox {
|
|
|
547
555
|
of [SDK.Cookie.Attribute.DOMAIN, SDK.Cookie.Attribute.PATH, SDK.Cookie.Attribute.HTTP_ONLY,
|
|
548
556
|
SDK.Cookie.Attribute.SECURE, SDK.Cookie.Attribute.SAME_SITE, SDK.Cookie.Attribute.SOURCE_SCHEME]) {
|
|
549
557
|
if (attribute in data) {
|
|
550
|
-
|
|
558
|
+
const value = data[attribute];
|
|
559
|
+
if (isFlagAttribute(attribute)) {
|
|
560
|
+
if (value === true) {
|
|
561
|
+
cookie.addAttribute(attribute);
|
|
562
|
+
}
|
|
563
|
+
} else {
|
|
564
|
+
cookie.addAttribute(attribute, value);
|
|
565
|
+
}
|
|
551
566
|
}
|
|
552
567
|
}
|
|
553
568
|
if (data.expires && data.expires !== expiresSessionValue()) {
|
|
@@ -559,11 +574,8 @@ export class CookiesTable extends UI.Widget.VBox {
|
|
|
559
574
|
Number.parseInt(data[SDK.Cookie.Attribute.SOURCE_PORT] || '', 10) || undefined);
|
|
560
575
|
}
|
|
561
576
|
if (data[SDK.Cookie.Attribute.PARTITION_KEY_SITE]) {
|
|
562
|
-
cookie.setPartitionKey(
|
|
563
|
-
|
|
564
|
-
Boolean(
|
|
565
|
-
data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] ? data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] :
|
|
566
|
-
false));
|
|
577
|
+
cookie.setPartitionKey(data[SDK.Cookie.Attribute.PARTITION_KEY_SITE],
|
|
578
|
+
data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] === true);
|
|
567
579
|
}
|
|
568
580
|
cookie.setSize(data[SDK.Cookie.Attribute.NAME].length + data[SDK.Cookie.Attribute.VALUE].length);
|
|
569
581
|
return cookie;
|
|
@@ -578,7 +590,11 @@ export class CookiesTable extends UI.Widget.VBox {
|
|
|
578
590
|
of [SDK.Cookie.Attribute.HTTP_ONLY, SDK.Cookie.Attribute.SECURE, SDK.Cookie.Attribute.SAME_SITE,
|
|
579
591
|
SDK.Cookie.Attribute.SOURCE_SCHEME, SDK.Cookie.Attribute.SOURCE_PORT]) {
|
|
580
592
|
if (cookie.hasAttribute(attribute)) {
|
|
581
|
-
|
|
593
|
+
if (isFlagAttribute(attribute)) {
|
|
594
|
+
data[attribute] = true;
|
|
595
|
+
} else {
|
|
596
|
+
data[attribute] = String(cookie.getAttribute(attribute) ?? true);
|
|
597
|
+
}
|
|
582
598
|
}
|
|
583
599
|
}
|
|
584
600
|
data[SDK.Cookie.Attribute.DOMAIN] = cookie.domain() || (isRequest ? i18nString(UIStrings.na) : '');
|
|
@@ -596,7 +612,7 @@ export class CookiesTable extends UI.Widget.VBox {
|
|
|
596
612
|
}
|
|
597
613
|
data[SDK.Cookie.Attribute.PARTITION_KEY_SITE] =
|
|
598
614
|
cookie.partitionKeyOpaque() ? i18nString(UIStrings.opaquePartitionKey).toString() : cookie.topLevelSite();
|
|
599
|
-
data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] = cookie.hasCrossSiteAncestor()
|
|
615
|
+
data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] = cookie.hasCrossSiteAncestor();
|
|
600
616
|
data[SDK.Cookie.Attribute.SIZE] = String(cookie.size());
|
|
601
617
|
data[SDK.Cookie.Attribute.PRIORITY] = cookie.priority();
|
|
602
618
|
data.priorityValue = ['Low', 'Medium', 'High'].indexOf(cookie.priority());
|
|
@@ -285,7 +285,9 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
|
|
|
285
285
|
if (align !== Align.CENTER && align !== Align.RIGHT) {
|
|
286
286
|
align = undefined;
|
|
287
287
|
}
|
|
288
|
-
const
|
|
288
|
+
const typeAttr = column.getAttribute('type');
|
|
289
|
+
const dataType =
|
|
290
|
+
typeAttr === 'boolean' ? DataType.BOOLEAN : (typeAttr === 'numeric' ? DataType.NUMBER : DataType.STRING);
|
|
289
291
|
const weight = parseFloat(column.getAttribute('weight') || '') ?? undefined;
|
|
290
292
|
const editable = column.hasAttribute('editable');
|
|
291
293
|
if (editable) {
|
|
@@ -318,7 +320,6 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
|
|
|
318
320
|
const visibleColumns = new Set(this.#columns.map(({id}) => id).filter(id => !this.#hiddenColumns.has(id)));
|
|
319
321
|
this.#dataGrid.setColumnsVisibility(visibleColumns);
|
|
320
322
|
this.#dataGrid.setEditCallback(hasEditableColumn ? this.#editCallback.bind(this) : undefined, INTERNAL_TOKEN);
|
|
321
|
-
this.#dataGrid.deleteCallback = this.#deleteCallback.bind(this);
|
|
322
323
|
}
|
|
323
324
|
|
|
324
325
|
#needUpdateColumns(mutationList: MutationRecord[]): boolean {
|
|
@@ -509,8 +510,8 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
|
|
|
509
510
|
}
|
|
510
511
|
}
|
|
511
512
|
|
|
512
|
-
#editCallback(node: DataGridElementNode, columnId: string, valueBeforeEditing: string,
|
|
513
|
-
moveDirection?: string): void {
|
|
513
|
+
#editCallback(node: DataGridElementNode, columnId: string, valueBeforeEditing: string|boolean,
|
|
514
|
+
newText: string|boolean, moveDirection?: string): void {
|
|
514
515
|
if (node.isCreationNode) {
|
|
515
516
|
this.#usedCreationNode = node;
|
|
516
517
|
let hasNextEditableColumn = false;
|
|
@@ -543,6 +544,9 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
|
|
|
543
544
|
if (args[0] === 'refresh') {
|
|
544
545
|
this.#dataGrid.refreshCallback = this.#refreshCallback.bind(this);
|
|
545
546
|
}
|
|
547
|
+
if (args[0] === 'delete') {
|
|
548
|
+
this.#dataGrid.deleteCallback = this.#deleteCallback.bind(this);
|
|
549
|
+
}
|
|
546
550
|
}
|
|
547
551
|
|
|
548
552
|
#refreshCallback(): void {
|
|
@@ -12,7 +12,7 @@ import type * as NetworkTimeCalculator from '../../../../models/network_time_cal
|
|
|
12
12
|
import * as Trace from '../../../../models/trace/trace.js';
|
|
13
13
|
import * as VisualLogging from '../../../../ui/visual_logging/visual_logging.js';
|
|
14
14
|
import * as Buttons from '../../../components/buttons/buttons.js';
|
|
15
|
-
import {html, render, type TemplateResult} from '../../../lit/lit.js';
|
|
15
|
+
import {html, nothing, render, type TemplateResult} from '../../../lit/lit.js';
|
|
16
16
|
import * as UI from '../../legacy.js';
|
|
17
17
|
import * as ThemeSupport from '../../theme_support/theme_support.js';
|
|
18
18
|
|
|
@@ -621,7 +621,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
621
621
|
|
|
622
622
|
hideHighlight(): void {
|
|
623
623
|
if (this.#searchResultEntryIndex === null) {
|
|
624
|
-
this
|
|
624
|
+
this.#renderPopover(nothing);
|
|
625
625
|
this.lastPopoverState = {
|
|
626
626
|
entryIndex: -1,
|
|
627
627
|
groupIndex: -1,
|
|
@@ -794,7 +794,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
794
794
|
this.viewportElement.style.cursor = 'pointer';
|
|
795
795
|
const iconTooltipElement = this.#prepareIconInfo(groupIndex, hoverType);
|
|
796
796
|
if (iconTooltipElement) {
|
|
797
|
-
this
|
|
797
|
+
this.#renderPopover(iconTooltipElement);
|
|
798
798
|
this.updatePopoverOffset();
|
|
799
799
|
}
|
|
800
800
|
return;
|
|
@@ -923,9 +923,13 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
923
923
|
};
|
|
924
924
|
}
|
|
925
925
|
|
|
926
|
-
|
|
926
|
+
#renderPopover(content: Element|TemplateResult|string|typeof nothing): void {
|
|
927
927
|
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
928
|
-
render(html`${
|
|
928
|
+
render(html`${content}`, this.popoverElement);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
updatePopoverContents(popoverElement: Element|TemplateResult): void {
|
|
932
|
+
this.#renderPopover(popoverElement);
|
|
929
933
|
// Must update the offset AFTER the new content has been added.
|
|
930
934
|
this.updatePopoverOffset();
|
|
931
935
|
this.lastPopoverState.entryIndex = -1;
|
|
@@ -941,13 +945,14 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
941
945
|
if (groupIndex === this.lastPopoverState.groupIndex) {
|
|
942
946
|
return this.updatePopoverOffset();
|
|
943
947
|
}
|
|
944
|
-
this.popoverElement.removeChildren();
|
|
945
948
|
const data = this.timelineData();
|
|
946
949
|
if (!data) {
|
|
950
|
+
this.#renderPopover(nothing);
|
|
947
951
|
return;
|
|
948
952
|
}
|
|
949
953
|
const group = data.groups.at(groupIndex);
|
|
950
954
|
if (!group) {
|
|
955
|
+
this.#renderPopover(nothing);
|
|
951
956
|
return;
|
|
952
957
|
}
|
|
953
958
|
// Only show a popover tooltip if the group has a pre-defined `fullTrackName`
|
|
@@ -956,8 +961,10 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
956
961
|
const fullTrackName = group.fullTrackName;
|
|
957
962
|
|
|
958
963
|
if (fullTrackName) {
|
|
959
|
-
this
|
|
964
|
+
this.#renderPopover(fullTrackName);
|
|
960
965
|
this.updatePopoverOffset();
|
|
966
|
+
} else {
|
|
967
|
+
this.#renderPopover(nothing);
|
|
961
968
|
}
|
|
962
969
|
this.lastPopoverState = {
|
|
963
970
|
groupIndex,
|
|
@@ -228,7 +228,17 @@ export class CommandMenu {
|
|
|
228
228
|
if (!options || !registeredSettingUI.uiDescriptor.category) {
|
|
229
229
|
continue;
|
|
230
230
|
}
|
|
231
|
-
|
|
231
|
+
let setting: Common.Settings.Setting<unknown>;
|
|
232
|
+
if ('isAvailable' in registeredSettingUI.descriptor) {
|
|
233
|
+
const settingResult = Common.Settings.Settings.instance().maybeResolve(
|
|
234
|
+
registeredSettingUI.descriptor as Common.Settings.ConditionalSettingDescriptor<unknown, unknown>);
|
|
235
|
+
if (!('setting' in settingResult)) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
setting = settingResult.setting;
|
|
239
|
+
} else {
|
|
240
|
+
setting = Common.Settings.Settings.instance().resolve(registeredSettingUI.descriptor);
|
|
241
|
+
}
|
|
232
242
|
for (const pair of options) {
|
|
233
243
|
this.#commands.push(
|
|
234
244
|
CommandMenu.createSettingCommand(setting, pair.title(), pair.value, registeredSettingUI.uiDescriptor));
|