chrome-devtools-frontend 1.0.1626437 → 1.0.1628368
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/front_end/core/common/VersionController.ts +33 -1
- package/front_end/core/host/UserMetrics.ts +11 -8
- package/front_end/core/root/ExperimentNames.ts +1 -3
- package/front_end/core/sdk/CSSContainerQuery.ts +3 -1
- package/front_end/core/sdk/CSSModel.ts +23 -0
- package/front_end/core/sdk/HeapProfilerModel.ts +1 -11
- package/front_end/entrypoints/formatter_worker/AcornTokenizer.ts +2 -1
- package/front_end/entrypoints/formatter_worker/CSSFormatter.ts +2 -4
- package/front_end/entrypoints/formatter_worker/ESTreeWalker.ts +3 -2
- package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +13 -0
- package/front_end/entrypoints/formatter_worker/Substitute.ts +1 -1
- package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +0 -1
- package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +0 -1
- package/front_end/entrypoints/main/MainImpl.ts +4 -36
- package/front_end/generated/InspectorBackendCommands.ts +4 -3
- package/front_end/generated/protocol-mapping.d.ts +5 -0
- package/front_end/generated/protocol-proxy-api.d.ts +4 -0
- package/front_end/generated/protocol.ts +22 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +11 -5
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
- package/front_end/models/lighthouse/RunTypes.ts +1 -1
- package/front_end/models/workspace/UISourceCode.ts +0 -1
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +4 -3
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +9 -0
- package/front_end/panels/common/common.ts +1 -1
- package/front_end/panels/console/ConsoleView.ts +2 -2
- package/front_end/panels/elements/StylePropertiesSection.ts +6 -2
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +8 -7
- package/front_end/panels/emulation/DeviceModeToolbar.ts +20 -26
- package/front_end/panels/emulation/DeviceModeView.ts +2 -2
- package/front_end/panels/lighthouse/LighthouseController.ts +18 -0
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +9 -4
- package/front_end/panels/profiler/profiler-meta.ts +0 -71
- package/front_end/panels/profiler/profiler.ts +0 -2
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +7 -6
- package/front_end/panels/sources/ProfilePlugin.ts +12 -65
- package/front_end/panels/sources/UISourceCodeFrame.ts +1 -2
- package/front_end/panels/timeline/TimelineController.ts +1 -2
- package/front_end/panels/timeline/TimelinePanel.ts +1 -1
- package/front_end/panels/timeline/TimelineUIUtils.ts +2 -10
- package/front_end/panels/timeline/timeline-meta.ts +26 -0
- package/front_end/third_party/acorn/README.chromium +1 -1
- package/front_end/third_party/acorn/acorn.ts +1 -1
- package/front_end/third_party/acorn/package/CHANGELOG.md +128 -0
- package/front_end/third_party/acorn/package/README.md +42 -19
- package/front_end/third_party/acorn/package/dist/acorn.d.mts +883 -26
- package/front_end/third_party/acorn/package/dist/acorn.d.ts +859 -268
- package/front_end/third_party/acorn/package/dist/acorn.js +420 -115
- package/front_end/third_party/acorn/package/dist/acorn.mjs +420 -115
- package/front_end/third_party/acorn/package/dist/bin.js +1 -1
- package/front_end/third_party/acorn/package/package.json +3 -3
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/lighthouse/README.chromium +2 -2
- package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +4213 -4208
- package/front_end/third_party/lighthouse/locales/en-US.json +26 -8
- package/front_end/third_party/lighthouse/locales/en-XL.json +26 -8
- package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js +7 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js +4 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts +15 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/JSHandle.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +4 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts +2 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js +4 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.d.ts +5 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +9 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js +7 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +6 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ScreenRecorder.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ScreenRecorder.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +23 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +171 -149
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js +7 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js +4 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts +15 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/JSHandle.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +4 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts +2 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js +4 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.d.ts +5 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +8 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.js +8 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +6 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +23 -2
- package/front_end/third_party/puppeteer/package/package.json +2 -2
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +6 -7
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +4 -3
- package/front_end/third_party/puppeteer/package/src/api/Frame.ts +21 -1
- package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +9 -4
- package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +2 -1
- package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +9 -5
- package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +3 -1
- package/front_end/third_party/puppeteer/package/src/cdp/IsolatedWorld.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +4 -0
- package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +19 -3
- package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +10 -1
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +7 -3
- package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/revisions.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +7 -1
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +8 -1
- package/front_end/ui/legacy/components/perf_ui/LineLevelProfile.ts +0 -56
- package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +0 -35
- package/front_end/ui/legacy/components/perf_ui/perf_ui.ts +0 -2
- package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
- package/package.json +1 -1
- package/front_end/panels/profiler/LiveHeapProfileView.ts +0 -405
- package/front_end/panels/profiler/liveHeapProfile.css +0 -22
- package/front_end/ui/legacy/components/perf_ui/LiveHeapProfile.ts +0 -113
|
@@ -9,7 +9,7 @@ import type {Protocol} from 'devtools-protocol';
|
|
|
9
9
|
import type {CDPSession} from '../api/CDPSession.js';
|
|
10
10
|
import type {DeviceRequestPrompt} from '../api/DeviceRequestPrompt.js';
|
|
11
11
|
import type {ElementHandle} from '../api/ElementHandle.js';
|
|
12
|
-
import type {WaitForOptions} from '../api/Frame.js';
|
|
12
|
+
import type {SetContentWaitForOptions, WaitForOptions} from '../api/Frame.js';
|
|
13
13
|
import {Frame, FrameEvent, throwIfDetached} from '../api/Frame.js';
|
|
14
14
|
import type {HTTPResponse} from '../api/HTTPResponse.js';
|
|
15
15
|
import type {WaitTimeoutOptions} from '../api/Page.js';
|
|
@@ -145,6 +145,12 @@ export class CdpFrame extends Frame {
|
|
|
145
145
|
waitUntil?: PuppeteerLifeCycleEvent | PuppeteerLifeCycleEvent[];
|
|
146
146
|
} = {},
|
|
147
147
|
): Promise<HTTPResponse | null> {
|
|
148
|
+
if (!this.page()._isUrlAllowed(url)) {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`Navigation to ${url} is blocked by blocklist/allowlist rules`,
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
148
154
|
const {
|
|
149
155
|
referer = this._frameManager.networkManager.extraHTTPHeaders()['referer'],
|
|
150
156
|
referrerPolicy = this._frameManager.networkManager.extraHTTPHeaders()[
|
|
@@ -273,10 +279,7 @@ export class CdpFrame extends Frame {
|
|
|
273
279
|
@throwIfDetached
|
|
274
280
|
override async setContent(
|
|
275
281
|
html: string,
|
|
276
|
-
options: {
|
|
277
|
-
timeout?: number;
|
|
278
|
-
waitUntil?: PuppeteerLifeCycleEvent | PuppeteerLifeCycleEvent[];
|
|
279
|
-
} = {},
|
|
282
|
+
options: SetContentWaitForOptions = {},
|
|
280
283
|
): Promise<void> {
|
|
281
284
|
const {
|
|
282
285
|
waitUntil = ['load'],
|
|
@@ -420,6 +423,7 @@ export class CdpFrame extends Frame {
|
|
|
420
423
|
for (const extensionWorld of Object.values(this.extensionWorlds)) {
|
|
421
424
|
extensionWorld[disposeSymbol]();
|
|
422
425
|
}
|
|
426
|
+
super[disposeSymbol]();
|
|
423
427
|
}
|
|
424
428
|
|
|
425
429
|
exposeFunction(): never {
|
|
@@ -615,9 +615,11 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
|
|
|
615
615
|
for (const child of frame.childFrames()) {
|
|
616
616
|
this.#removeFramesRecursively(child);
|
|
617
617
|
}
|
|
618
|
-
frame[disposeSymbol]();
|
|
619
618
|
this._frameTree.removeFrame(frame);
|
|
620
619
|
this.emit(FrameManagerEvent.FrameDetached, frame);
|
|
621
620
|
frame.emit(FrameEvent.FrameDetached, frame);
|
|
621
|
+
// Needs to be last to ensure events
|
|
622
|
+
// sent before handlers are cleared.
|
|
623
|
+
frame[disposeSymbol]();
|
|
622
624
|
}
|
|
623
625
|
}
|
|
@@ -266,8 +266,8 @@ export class IsolatedWorld extends Realm {
|
|
|
266
266
|
override [disposeSymbol](): void {
|
|
267
267
|
this.#context?.[disposeSymbol]();
|
|
268
268
|
this.#emitter.emit('disposed', undefined);
|
|
269
|
-
super[disposeSymbol]();
|
|
270
269
|
this.#emitter.removeAllListeners();
|
|
270
|
+
super[disposeSymbol]();
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
override get origin(): string | undefined {
|
|
@@ -458,6 +458,10 @@ export class CdpPage extends Page {
|
|
|
458
458
|
return this.#primaryTargetClient;
|
|
459
459
|
}
|
|
460
460
|
|
|
461
|
+
_isUrlAllowed(url: string): boolean {
|
|
462
|
+
return this.#targetManager.isUrlAllowed(url);
|
|
463
|
+
}
|
|
464
|
+
|
|
461
465
|
override isServiceWorkerBypassed(): boolean {
|
|
462
466
|
return this.#serviceWorkerBypassed;
|
|
463
467
|
}
|
|
@@ -347,7 +347,7 @@ export class TargetManager
|
|
|
347
347
|
|
|
348
348
|
// If we connect to a browser that is already open,
|
|
349
349
|
// immediately detach from any tab that is on the blocklist.
|
|
350
|
-
if (!this.#initialAttachDone && !this
|
|
350
|
+
if (!this.#initialAttachDone && !this.isUrlAllowed(targetInfo.url)) {
|
|
351
351
|
await this.#silentDetach(session, parentSession);
|
|
352
352
|
return;
|
|
353
353
|
}
|
|
@@ -476,7 +476,7 @@ export class TargetManager
|
|
|
476
476
|
/**
|
|
477
477
|
* Helper to validate URL against blocklist patterns
|
|
478
478
|
*/
|
|
479
|
-
|
|
479
|
+
isUrlAllowed = (url: string): boolean => {
|
|
480
480
|
if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {
|
|
481
481
|
return true;
|
|
482
482
|
}
|
|
@@ -27,12 +27,28 @@ const getWebSocketTransportClass = async () => {
|
|
|
27
27
|
*
|
|
28
28
|
* @internal
|
|
29
29
|
*/
|
|
30
|
-
export
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
export function assertSupportedUrlRestrictions(options: {
|
|
31
|
+
allowlist?: string[];
|
|
32
|
+
blocklist?: string[];
|
|
33
|
+
protocol?: string;
|
|
34
|
+
}): void {
|
|
33
35
|
if (options.blocklist && options.allowlist) {
|
|
34
36
|
throw new Error('Cannot specify both blocklist and allowlist');
|
|
35
37
|
}
|
|
38
|
+
if (
|
|
39
|
+
options.protocol === 'webDriverBiDi' &&
|
|
40
|
+
(options.blocklist || options.allowlist)
|
|
41
|
+
) {
|
|
42
|
+
throw new Error(
|
|
43
|
+
'blocklist and allowlist are only supported with the CDP protocol',
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export async function _connectToBrowser(
|
|
49
|
+
options: ConnectOptions,
|
|
50
|
+
): Promise<Browser> {
|
|
51
|
+
assertSupportedUrlRestrictions(options);
|
|
36
52
|
const {connectionTransport, endpointUrl} =
|
|
37
53
|
await getConnectionTransport(options);
|
|
38
54
|
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import mitt, {type Emitter} from '../../third_party/mitt/mitt.js';
|
|
8
|
-
import {disposeSymbol} from '../util/disposable.js';
|
|
8
|
+
import {asyncDisposeSymbol, disposeSymbol} from '../util/disposable.js';
|
|
9
|
+
|
|
10
|
+
import {debugError} from './util.js';
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
* @public
|
|
@@ -183,6 +185,13 @@ export class EventEmitter<
|
|
|
183
185
|
* @internal
|
|
184
186
|
*/
|
|
185
187
|
[disposeSymbol](): void {
|
|
188
|
+
return void this[asyncDisposeSymbol]().catch(debugError);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* @internal
|
|
193
|
+
*/
|
|
194
|
+
async [asyncDisposeSymbol](): Promise<void> {
|
|
186
195
|
for (const [type, handlers] of this.#handlers) {
|
|
187
196
|
for (const handler of handlers) {
|
|
188
197
|
this.#emitter.off(type, handler);
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
import type {Browser, BrowserCloseCallback} from '../api/Browser.js';
|
|
27
27
|
import {CdpBrowser} from '../cdp/Browser.js';
|
|
28
28
|
import {Connection} from '../cdp/Connection.js';
|
|
29
|
+
import {assertSupportedUrlRestrictions} from '../common/BrowserConnector.js';
|
|
29
30
|
import {TimeoutError} from '../common/Errors.js';
|
|
30
31
|
import type {SupportedBrowser} from '../common/SupportedBrowser.js';
|
|
31
32
|
import {debugError, DEFAULT_VIEWPORT} from '../common/util.js';
|
|
@@ -76,9 +77,6 @@ export abstract class BrowserLauncher {
|
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
async launch(options: LaunchOptions = {}): Promise<Browser> {
|
|
79
|
-
if (options.blocklist && options.allowlist) {
|
|
80
|
-
throw new Error('Cannot specify both blocklist and allowlist');
|
|
81
|
-
}
|
|
82
80
|
const {
|
|
83
81
|
dumpio = false,
|
|
84
82
|
enableExtensions = false,
|
|
@@ -108,6 +106,12 @@ export abstract class BrowserLauncher {
|
|
|
108
106
|
protocol = 'webDriverBiDi';
|
|
109
107
|
}
|
|
110
108
|
|
|
109
|
+
assertSupportedUrlRestrictions({
|
|
110
|
+
allowlist,
|
|
111
|
+
blocklist,
|
|
112
|
+
protocol,
|
|
113
|
+
});
|
|
114
|
+
|
|
111
115
|
if (this.#browser === 'firefox' && protocol === 'cdp') {
|
|
112
116
|
throw new Error('Connecting to Firefox using CDP is no longer supported');
|
|
113
117
|
}
|
|
@@ -134,6 +134,7 @@ export class AiCodeCompletionProvider {
|
|
|
134
134
|
if (!this.#aiCodeCompletionSetting.get() && !this.#aiCodeCompletionTeaserDismissedSetting.get()) {
|
|
135
135
|
this.#teaser = new PanelCommon.AiCodeCompletionTeaser({
|
|
136
136
|
onDetach: () => this.#detachTeaser.bind(this),
|
|
137
|
+
panel: this.#aiCodeCompletionConfig?.panel,
|
|
137
138
|
});
|
|
138
139
|
this.#editor.editor.dispatch(
|
|
139
140
|
{effects: this.#teaserCompartment.reconfigure([aiCodeCompletionTeaserExtension(this.#teaser)])});
|
|
@@ -320,7 +321,12 @@ export class AiCodeCompletionProvider {
|
|
|
320
321
|
const startTime = performance.now();
|
|
321
322
|
this.#aiCodeCompletionConfig?.onRequestTriggered();
|
|
322
323
|
// Registering AiCodeCompletionRequestTriggered metric even if the request is served from cache
|
|
323
|
-
|
|
324
|
+
const panel = this.#aiCodeCompletionConfig?.panel;
|
|
325
|
+
if (panel === AiCodeCompletion.AiCodeCompletion.ContextFlavor.CONSOLE) {
|
|
326
|
+
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeCompletionRequestTriggeredFromConsole);
|
|
327
|
+
} else if (panel === AiCodeCompletion.AiCodeCompletion.ContextFlavor.SOURCES) {
|
|
328
|
+
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeCompletionRequestTriggeredFromSources);
|
|
329
|
+
}
|
|
324
330
|
|
|
325
331
|
try {
|
|
326
332
|
const completionResponse = await this.#aiCodeCompletion.completeCode(
|
|
@@ -6,7 +6,7 @@ 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
|
|
9
|
+
import * as AiCodeCompletion from '../../../models/ai_code_completion/ai_code_completion.js';
|
|
10
10
|
import * as AiCodeGeneration from '../../../models/ai_code_generation/ai_code_generation.js';
|
|
11
11
|
import * as PanelCommon from '../../../panels/common/common.js';
|
|
12
12
|
import * as CodeMirror from '../../../third_party/codemirror.next/codemirror.next.js';
|
|
@@ -220,6 +220,13 @@ export class AiCodeGenerationProvider {
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered');
|
|
223
|
+
if (this.#aiCodeGenerationConfig?.panel === AiCodeCompletion.AiCodeCompletion.ContextFlavor.CONSOLE) {
|
|
224
|
+
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeGenerationRequestTriggeredFromConsole);
|
|
225
|
+
void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered-from-console');
|
|
226
|
+
} else if (this.#aiCodeGenerationConfig?.panel === AiCodeCompletion.AiCodeCompletion.ContextFlavor.SOURCES) {
|
|
227
|
+
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeGenerationRequestTriggeredFromSources);
|
|
228
|
+
void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered-from-sources');
|
|
229
|
+
}
|
|
223
230
|
void this.#triggerAiCodeGeneration({signal: this.#controller.signal});
|
|
224
231
|
}
|
|
225
232
|
|
|
@@ -102,62 +102,6 @@ export class Performance {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
let memoryInstance: Memory;
|
|
106
|
-
|
|
107
|
-
// Note: this is used only by LiveHeapProfile (a drawer panel) if the experiment is enabled.
|
|
108
|
-
export class Memory {
|
|
109
|
-
private readonly helper: Helper;
|
|
110
|
-
private constructor() {
|
|
111
|
-
this.helper = new Helper(Workspace.UISourceCode.DecoratorType.MEMORY);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
static instance(opts: {
|
|
115
|
-
forceNew: boolean|null,
|
|
116
|
-
} = {forceNew: null}): Memory {
|
|
117
|
-
const {forceNew} = opts;
|
|
118
|
-
if (!memoryInstance || forceNew) {
|
|
119
|
-
memoryInstance = new Memory();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return memoryInstance;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
reset(): void {
|
|
126
|
-
this.helper.reset();
|
|
127
|
-
void this.helper.update();
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
initialize(profilesAndTargets: Array<{
|
|
131
|
-
profile: Protocol.HeapProfiler.SamplingHeapProfile,
|
|
132
|
-
target: SDK.Target.Target,
|
|
133
|
-
}>): void {
|
|
134
|
-
this.helper.reset();
|
|
135
|
-
for (const {profile, target} of profilesAndTargets) {
|
|
136
|
-
this.appendHeapProfile(profile, target);
|
|
137
|
-
}
|
|
138
|
-
void this.helper.update();
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
private appendHeapProfile(profile: Protocol.HeapProfiler.SamplingHeapProfile, target: SDK.Target.Target|null): void {
|
|
142
|
-
const helper = this.helper;
|
|
143
|
-
processNode(profile.head);
|
|
144
|
-
|
|
145
|
-
function processNode(node: Protocol.HeapProfiler.SamplingHeapProfileNode): void {
|
|
146
|
-
node.children.forEach(processNode);
|
|
147
|
-
if (!node.selfSize) {
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const script = Number(node.callFrame.scriptId) || node.callFrame.url as Platform.DevToolsPath.UrlString;
|
|
151
|
-
if (!script) {
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
const line = node.callFrame.lineNumber + 1;
|
|
155
|
-
const column = node.callFrame.columnNumber + 1;
|
|
156
|
-
helper.addLocationData(target, script, {line, column}, node.selfSize);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
105
|
export class Helper {
|
|
162
106
|
private readonly type: Workspace.UISourceCode.DecoratorType;
|
|
163
107
|
private readonly locationPool = new Bindings.LiveLocation.LiveLocationPool();
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Common from '../../../../core/common/common.js';
|
|
6
6
|
import * as i18n from '../../../../core/i18n/i18n.js';
|
|
7
|
-
import * as Root from '../../../../core/root/root.js';
|
|
8
7
|
import * as UI from '../../legacy.js';
|
|
9
8
|
|
|
10
9
|
import type * as PerfUI from './perf_ui.js';
|
|
@@ -24,21 +23,6 @@ const UIStrings = {
|
|
|
24
23
|
* @description Classic navigation option in the Performance Panel.
|
|
25
24
|
*/
|
|
26
25
|
classic: 'Classic',
|
|
27
|
-
/**
|
|
28
|
-
* @description Title of a setting under the Memory category in Settings. Live memory is memory
|
|
29
|
-
* that is still in-use by the program (not dead). Allocation of live memory is when the program
|
|
30
|
-
* creates new memory. This is a setting that turns on extra annotations in the UI to mark these
|
|
31
|
-
* allocations.
|
|
32
|
-
*/
|
|
33
|
-
liveMemoryAllocationAnnotations: 'Live memory allocation annotations',
|
|
34
|
-
/**
|
|
35
|
-
* @description Title of a setting under the Memory category that can be invoked through the Command Menu
|
|
36
|
-
*/
|
|
37
|
-
showLiveMemoryAllocation: 'Show live memory allocation annotations',
|
|
38
|
-
/**
|
|
39
|
-
* @description Title of a setting under the Memory category that can be invoked through the Command Menu
|
|
40
|
-
*/
|
|
41
|
-
hideLiveMemoryAllocation: 'Hide live memory allocation annotations',
|
|
42
26
|
/**
|
|
43
27
|
* @description Title of an action in the components tool to collect garbage
|
|
44
28
|
*/
|
|
@@ -88,22 +72,3 @@ Common.Settings.registerSettingExtension({
|
|
|
88
72
|
},
|
|
89
73
|
],
|
|
90
74
|
});
|
|
91
|
-
|
|
92
|
-
Common.Settings.registerSettingExtension({
|
|
93
|
-
category: Common.Settings.SettingCategory.MEMORY,
|
|
94
|
-
experiment: Root.ExperimentNames.ExperimentName.LIVE_HEAP_PROFILE,
|
|
95
|
-
title: i18nLazyString(UIStrings.liveMemoryAllocationAnnotations),
|
|
96
|
-
settingName: 'memory-live-heap-profile',
|
|
97
|
-
settingType: Common.Settings.SettingType.BOOLEAN,
|
|
98
|
-
defaultValue: false,
|
|
99
|
-
options: [
|
|
100
|
-
{
|
|
101
|
-
value: true,
|
|
102
|
-
title: i18nLazyString(UIStrings.showLiveMemoryAllocation),
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
value: false,
|
|
106
|
-
title: i18nLazyString(UIStrings.hideLiveMemoryAllocation),
|
|
107
|
-
},
|
|
108
|
-
],
|
|
109
|
-
});
|
|
@@ -9,7 +9,6 @@ import * as FlameChart from './FlameChart.js';
|
|
|
9
9
|
import * as Font from './Font.js';
|
|
10
10
|
import * as GCActionDelegate from './GCActionDelegate.js';
|
|
11
11
|
import * as LineLevelProfile from './LineLevelProfile.js';
|
|
12
|
-
import * as LiveHeapProfile from './LiveHeapProfile.js';
|
|
13
12
|
import * as NetworkPriorities from './NetworkPriorities.js';
|
|
14
13
|
import * as OverviewGrid from './OverviewGrid.js';
|
|
15
14
|
import * as PieChart from './PieChart.js';
|
|
@@ -25,7 +24,6 @@ export {
|
|
|
25
24
|
Font,
|
|
26
25
|
GCActionDelegate,
|
|
27
26
|
LineLevelProfile,
|
|
28
|
-
LiveHeapProfile,
|
|
29
27
|
NetworkPriorities,
|
|
30
28
|
OverviewGrid,
|
|
31
29
|
PieChart,
|
|
@@ -2504,6 +2504,7 @@ export const knownContextValues = new Set([
|
|
|
2504
2504
|
'lighthouse.audit.work-during-interaction',
|
|
2505
2505
|
'lighthouse.cancel',
|
|
2506
2506
|
'lighthouse.cat-a11y',
|
|
2507
|
+
'lighthouse.cat-agentic-browsing',
|
|
2507
2508
|
'lighthouse.cat-best-practices',
|
|
2508
2509
|
'lighthouse.cat-perf',
|
|
2509
2510
|
'lighthouse.cat-seo',
|
package/package.json
CHANGED