chrome-devtools-mcp-for-extension 0.19.2 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +13 -9
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +9 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +1 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +9 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +5 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +10 -20
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +0 -11
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +6 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +1 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +110 -99
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +1 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +1 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +21 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +66 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +102 -86
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +32 -450
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +32 -29
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +430 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +5 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +10 -22
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +26 -15
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +19 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +34 -32
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/api.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +63 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +72 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/node.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +17 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +12 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +138 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +49 -312
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +4 -9
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +54 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +2 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +0 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +51 -17
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +21 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +11 -5
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +4 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +11 -9
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +34 -24
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +52 -10
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +4 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +39 -35
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +10 -47
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +29 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +5 -20
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +17 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +1 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +428 -121
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +8 -22
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +44 -34
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +64 -19
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +139 -12
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +5 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +3 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +36 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +20 -18
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +26 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +3 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +54 -14
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +16 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +19 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +240 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +12 -17
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +38 -29
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +11 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +80 -31
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1301 -174
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +67 -22
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +62 -91
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +188 -100
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +30 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +50 -34
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +152 -101
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +11 -6
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +25 -26
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +46 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +10 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +82 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +33 -15
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +105 -14
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +38 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +5 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +9 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +6 -7
- package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +6 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +16 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +6 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +192 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +12 -16
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +8 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +1 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +6 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +4 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +11 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +7 -5
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +8 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +4 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +29 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +59 -6
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +26 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +18 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +12 -11
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +3 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +14 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +13 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +4 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +4 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +9 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +25 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +41 -48
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +38 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +5 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +34 -0
- package/build/src/McpContext.js +8 -1
- package/build/src/tools/bookmarks.js +0 -1
- package/build/src/tools/gemini-web.js +17 -25
- package/build/src/tools/snapshot.js +9 -2
- package/package.json +3 -3
package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js
ADDED
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
// Copyright 2025 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
import * as Common from '../common/common.js';
|
|
5
|
+
import * as i18n from '../i18n/i18n.js';
|
|
6
|
+
import * as Platform from '../platform/platform.js';
|
|
7
|
+
import { Events, } from './InspectorFrontendHostAPI.js';
|
|
8
|
+
import { streamWrite as resourceLoaderStreamWrite } from './ResourceLoader.js';
|
|
9
|
+
const UIStrings = {
|
|
10
|
+
/**
|
|
11
|
+
* @description Document title in Inspector Frontend Host of the DevTools window
|
|
12
|
+
* @example {example.com} PH1
|
|
13
|
+
*/
|
|
14
|
+
devtoolsS: 'DevTools - {PH1}',
|
|
15
|
+
};
|
|
16
|
+
const str_ = i18n.i18n.registerUIStrings('core/host/InspectorFrontendHostStub.ts', UIStrings);
|
|
17
|
+
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
18
|
+
const MAX_RECORDED_HISTOGRAMS_SIZE = 100;
|
|
19
|
+
const OVERRIDES_FILE_SYSTEM_PATH = '/overrides';
|
|
20
|
+
/**
|
|
21
|
+
* The `InspectorFrontendHostStub` is a stub interface used the frontend is loaded like a webpage. Examples:
|
|
22
|
+
* - devtools://devtools/bundled/devtools_app.html
|
|
23
|
+
* - https://chrome-devtools-frontend.appspot.com/serve_rev/@030cc140435b0152645522b9864b75cac6c0a854/worker_app.html
|
|
24
|
+
* - http://localhost:9222/devtools/inspector.html?ws=localhost:9222/devtools/page/xTARGET_IDx
|
|
25
|
+
*
|
|
26
|
+
* When the frontend runs within the native embedder, then the InspectorFrontendHostAPI methods are provided
|
|
27
|
+
* by devtools_compatibility.js. Those leverage `DevToolsAPI.sendMessageToEmbedder()` which match up with
|
|
28
|
+
* the embedder API defined here: https://source.chromium.org/search?q=f:devtools%20f:dispatcher%20f:cc%20symbol:CreateForDevToolsFrontend&sq=&ss=chromium%2Fchromium%2Fsrc
|
|
29
|
+
* The native implementations live in devtools_ui_bindings.cc: https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/devtools/devtools_ui_bindings.cc
|
|
30
|
+
*/
|
|
31
|
+
export class InspectorFrontendHostStub {
|
|
32
|
+
#urlsBeingSaved = new Map();
|
|
33
|
+
#fileSystem = null;
|
|
34
|
+
recordedCountHistograms = [];
|
|
35
|
+
recordedEnumeratedHistograms = [];
|
|
36
|
+
recordedPerformanceHistograms = [];
|
|
37
|
+
constructor() {
|
|
38
|
+
// Guard against errors should this file ever be imported at the top level
|
|
39
|
+
// within a worker - in which case this constructor is run. If there's no
|
|
40
|
+
// document, we can early exit.
|
|
41
|
+
if (typeof document === 'undefined') {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
function stopEventPropagation(event) {
|
|
45
|
+
// Let browser handle Ctrl+/Ctrl- shortcuts in hosted mode.
|
|
46
|
+
const zoomModifier = this.platform() === 'mac' ? event.metaKey : event.ctrlKey;
|
|
47
|
+
if (zoomModifier && (event.key === '+' || event.key === '-')) {
|
|
48
|
+
event.stopPropagation();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
document.addEventListener('keydown', event => {
|
|
52
|
+
stopEventPropagation.call(this, (event));
|
|
53
|
+
}, true);
|
|
54
|
+
}
|
|
55
|
+
platform() {
|
|
56
|
+
const userAgent = navigator.userAgent;
|
|
57
|
+
if (userAgent.includes('Windows NT')) {
|
|
58
|
+
return 'windows';
|
|
59
|
+
}
|
|
60
|
+
if (userAgent.includes('Mac OS X')) {
|
|
61
|
+
return 'mac';
|
|
62
|
+
}
|
|
63
|
+
return 'linux';
|
|
64
|
+
}
|
|
65
|
+
loadCompleted() {
|
|
66
|
+
}
|
|
67
|
+
bringToFront() {
|
|
68
|
+
}
|
|
69
|
+
closeWindow() {
|
|
70
|
+
}
|
|
71
|
+
setIsDocked(_isDocked, callback) {
|
|
72
|
+
window.setTimeout(callback, 0);
|
|
73
|
+
}
|
|
74
|
+
showSurvey(_trigger, callback) {
|
|
75
|
+
window.setTimeout(() => callback({ surveyShown: false }), 0);
|
|
76
|
+
}
|
|
77
|
+
canShowSurvey(_trigger, callback) {
|
|
78
|
+
window.setTimeout(() => callback({ canShowSurvey: false }), 0);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Requests inspected page to be placed atop of the inspector frontend with specified bounds.
|
|
82
|
+
*/
|
|
83
|
+
setInspectedPageBounds(_bounds) {
|
|
84
|
+
}
|
|
85
|
+
inspectElementCompleted() {
|
|
86
|
+
}
|
|
87
|
+
setInjectedScriptForOrigin(_origin, _script) {
|
|
88
|
+
}
|
|
89
|
+
inspectedURLChanged(url) {
|
|
90
|
+
document.title = i18nString(UIStrings.devtoolsS, { PH1: url.replace(/^https?:\/\//, '') });
|
|
91
|
+
}
|
|
92
|
+
copyText(text) {
|
|
93
|
+
if (text === undefined || text === null) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
void navigator.clipboard.writeText(text);
|
|
97
|
+
}
|
|
98
|
+
openInNewTab(url) {
|
|
99
|
+
if (Common.ParsedURL.schemeIs(url, 'javascript:')) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
window.open(url, '_blank');
|
|
103
|
+
}
|
|
104
|
+
openSearchResultsInNewTab(_query) {
|
|
105
|
+
Common.Console.Console.instance().error('Search is not enabled in hosted mode. Please inspect using chrome://inspect');
|
|
106
|
+
}
|
|
107
|
+
showItemInFolder(_fileSystemPath) {
|
|
108
|
+
Common.Console.Console.instance().error('Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect');
|
|
109
|
+
}
|
|
110
|
+
// Reminder: the methods in this class belong to InspectorFrontendHostStub and are typically not executed.
|
|
111
|
+
// InspectorFrontendHostStub is ONLY used in the uncommon case of devtools not being embedded. For example: trace.cafe or http://localhost:9222/devtools/inspector.html?ws=localhost:9222/devtools/page/xTARGET_IDx
|
|
112
|
+
save(url, content, _forceSaveAs, isBase64) {
|
|
113
|
+
let buffer = this.#urlsBeingSaved.get(url)?.buffer;
|
|
114
|
+
if (!buffer) {
|
|
115
|
+
buffer = [];
|
|
116
|
+
this.#urlsBeingSaved.set(url, { isBase64, buffer });
|
|
117
|
+
}
|
|
118
|
+
buffer.push(content);
|
|
119
|
+
this.events.dispatchEventToListeners(Events.SavedURL, { url, fileSystemPath: url });
|
|
120
|
+
}
|
|
121
|
+
append(url, content) {
|
|
122
|
+
const buffer = this.#urlsBeingSaved.get(url)?.buffer;
|
|
123
|
+
if (buffer) {
|
|
124
|
+
buffer.push(content);
|
|
125
|
+
this.events.dispatchEventToListeners(Events.AppendedToURL, url);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
close(url) {
|
|
129
|
+
const { isBase64, buffer } = this.#urlsBeingSaved.get(url) || { isBase64: false, buffer: [] };
|
|
130
|
+
this.#urlsBeingSaved.delete(url);
|
|
131
|
+
let fileName = '';
|
|
132
|
+
if (url) {
|
|
133
|
+
try {
|
|
134
|
+
const trimmed = Platform.StringUtilities.trimURL(url);
|
|
135
|
+
fileName = Platform.StringUtilities.removeURLFragment(trimmed);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// If url is not a valid URL, it is probably a filename.
|
|
139
|
+
fileName = url;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/* eslint-disable-next-line @devtools/no-imperative-dom-api */
|
|
143
|
+
const link = document.createElement('a');
|
|
144
|
+
link.download = fileName;
|
|
145
|
+
let blob;
|
|
146
|
+
if (isBase64) {
|
|
147
|
+
const bytes = Common.Base64.decode(buffer.join(''));
|
|
148
|
+
blob = new Blob([bytes], { type: 'application/gzip' });
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
blob = new Blob(buffer, { type: 'text/plain' });
|
|
152
|
+
}
|
|
153
|
+
const blobUrl = URL.createObjectURL(blob);
|
|
154
|
+
link.href = blobUrl;
|
|
155
|
+
link.click();
|
|
156
|
+
URL.revokeObjectURL(blobUrl);
|
|
157
|
+
}
|
|
158
|
+
sendMessageToBackend(_message) {
|
|
159
|
+
}
|
|
160
|
+
recordCountHistogram(histogramName, sample, min, exclusiveMax, bucketSize) {
|
|
161
|
+
if (this.recordedCountHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {
|
|
162
|
+
this.recordedCountHistograms.shift();
|
|
163
|
+
}
|
|
164
|
+
this.recordedCountHistograms.push({ histogramName, sample, min, exclusiveMax, bucketSize });
|
|
165
|
+
}
|
|
166
|
+
recordEnumeratedHistogram(actionName, actionCode, _bucketSize) {
|
|
167
|
+
if (this.recordedEnumeratedHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {
|
|
168
|
+
this.recordedEnumeratedHistograms.shift();
|
|
169
|
+
}
|
|
170
|
+
this.recordedEnumeratedHistograms.push({ actionName, actionCode });
|
|
171
|
+
}
|
|
172
|
+
recordPerformanceHistogram(histogramName, duration) {
|
|
173
|
+
if (this.recordedPerformanceHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {
|
|
174
|
+
this.recordedPerformanceHistograms.shift();
|
|
175
|
+
}
|
|
176
|
+
this.recordedPerformanceHistograms.push({ histogramName, duration });
|
|
177
|
+
}
|
|
178
|
+
recordUserMetricsAction(_umaName) {
|
|
179
|
+
}
|
|
180
|
+
recordNewBadgeUsage(_featureName) {
|
|
181
|
+
}
|
|
182
|
+
connectAutomaticFileSystem(_fileSystemPath, _fileSystemUUID, _addIfMissing, callback) {
|
|
183
|
+
queueMicrotask(() => callback({ success: false }));
|
|
184
|
+
}
|
|
185
|
+
disconnectAutomaticFileSystem(_fileSystemPath) {
|
|
186
|
+
}
|
|
187
|
+
requestFileSystems() {
|
|
188
|
+
this.events.dispatchEventToListeners(Events.FileSystemsLoaded, []);
|
|
189
|
+
}
|
|
190
|
+
addFileSystem(_type) {
|
|
191
|
+
const onFileSystem = (fs) => {
|
|
192
|
+
this.#fileSystem = fs;
|
|
193
|
+
const fileSystem = {
|
|
194
|
+
fileSystemName: 'sandboxedRequestedFileSystem',
|
|
195
|
+
fileSystemPath: OVERRIDES_FILE_SYSTEM_PATH,
|
|
196
|
+
rootURL: 'filesystem:devtools://devtools/isolated/',
|
|
197
|
+
type: 'overrides',
|
|
198
|
+
};
|
|
199
|
+
this.events.dispatchEventToListeners(Events.FileSystemAdded, { fileSystem });
|
|
200
|
+
};
|
|
201
|
+
window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, onFileSystem);
|
|
202
|
+
}
|
|
203
|
+
removeFileSystem(_fileSystemPath) {
|
|
204
|
+
const removalCallback = (entries) => {
|
|
205
|
+
entries.forEach(entry => {
|
|
206
|
+
if (entry.isDirectory) {
|
|
207
|
+
entry.removeRecursively(() => { });
|
|
208
|
+
}
|
|
209
|
+
else if (entry.isFile) {
|
|
210
|
+
entry.remove(() => { });
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
if (this.#fileSystem) {
|
|
215
|
+
this.#fileSystem.root.createReader().readEntries(removalCallback);
|
|
216
|
+
}
|
|
217
|
+
this.#fileSystem = null;
|
|
218
|
+
this.events.dispatchEventToListeners(Events.FileSystemRemoved, OVERRIDES_FILE_SYSTEM_PATH);
|
|
219
|
+
}
|
|
220
|
+
isolatedFileSystem(_fileSystemId, _registeredName) {
|
|
221
|
+
return this.#fileSystem;
|
|
222
|
+
}
|
|
223
|
+
loadNetworkResource(url, _headers, streamId, callback) {
|
|
224
|
+
fetch(url)
|
|
225
|
+
.then(async (result) => {
|
|
226
|
+
const respBuffer = await result.arrayBuffer();
|
|
227
|
+
const text = await Common.Gzip.arrayBufferToString(respBuffer);
|
|
228
|
+
return text;
|
|
229
|
+
})
|
|
230
|
+
.then(function (text) {
|
|
231
|
+
resourceLoaderStreamWrite(streamId, text);
|
|
232
|
+
callback({
|
|
233
|
+
statusCode: 200,
|
|
234
|
+
headers: undefined,
|
|
235
|
+
messageOverride: undefined,
|
|
236
|
+
netError: undefined,
|
|
237
|
+
netErrorName: undefined,
|
|
238
|
+
urlValid: undefined,
|
|
239
|
+
});
|
|
240
|
+
})
|
|
241
|
+
.catch(function () {
|
|
242
|
+
callback({
|
|
243
|
+
statusCode: 404,
|
|
244
|
+
headers: undefined,
|
|
245
|
+
messageOverride: undefined,
|
|
246
|
+
netError: undefined,
|
|
247
|
+
netErrorName: undefined,
|
|
248
|
+
urlValid: undefined,
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
registerPreference(_name, _options) {
|
|
253
|
+
}
|
|
254
|
+
getPreferences(callback) {
|
|
255
|
+
const prefs = {};
|
|
256
|
+
for (const name in window.localStorage) {
|
|
257
|
+
prefs[name] = window.localStorage[name];
|
|
258
|
+
}
|
|
259
|
+
callback(prefs);
|
|
260
|
+
}
|
|
261
|
+
getPreference(name, callback) {
|
|
262
|
+
callback(window.localStorage[name]);
|
|
263
|
+
}
|
|
264
|
+
setPreference(name, value) {
|
|
265
|
+
window.localStorage[name] = value;
|
|
266
|
+
}
|
|
267
|
+
removePreference(name) {
|
|
268
|
+
delete window.localStorage[name];
|
|
269
|
+
}
|
|
270
|
+
clearPreferences() {
|
|
271
|
+
window.localStorage.clear();
|
|
272
|
+
}
|
|
273
|
+
getSyncInformation(callback) {
|
|
274
|
+
if ('getSyncInformationForTesting' in globalThis) {
|
|
275
|
+
// @ts-expect-error for testing
|
|
276
|
+
return callback(globalThis.getSyncInformationForTesting());
|
|
277
|
+
}
|
|
278
|
+
callback({
|
|
279
|
+
isSyncActive: false,
|
|
280
|
+
arePreferencesSynced: false,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
getHostConfig(callback) {
|
|
284
|
+
// This HostConfig config is used in the hosted mode (see the
|
|
285
|
+
// comment on top of this class). Only add non-default config params
|
|
286
|
+
// here that you want to also apply in the hosted mode. For tests
|
|
287
|
+
// use the hostConfigForTesting override.
|
|
288
|
+
const hostConfigForHostedMode = {
|
|
289
|
+
devToolsVeLogging: {
|
|
290
|
+
enabled: true,
|
|
291
|
+
},
|
|
292
|
+
thirdPartyCookieControls: {
|
|
293
|
+
thirdPartyCookieMetadataEnabled: true,
|
|
294
|
+
thirdPartyCookieHeuristicsEnabled: true,
|
|
295
|
+
managedBlockThirdPartyCookies: 'Unset',
|
|
296
|
+
},
|
|
297
|
+
devToolsFlexibleLayout: {
|
|
298
|
+
verticalDrawerEnabled: true,
|
|
299
|
+
},
|
|
300
|
+
devToolsStartingStyleDebugging: {
|
|
301
|
+
enabled: false,
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
if ('hostConfigForTesting' in globalThis) {
|
|
305
|
+
const { hostConfigForTesting } = globalThis;
|
|
306
|
+
for (const key of Object.keys(hostConfigForTesting)) {
|
|
307
|
+
const mergeEntry = (key) => {
|
|
308
|
+
if (typeof hostConfigForHostedMode[key] === 'object' && typeof hostConfigForTesting[key] === 'object') {
|
|
309
|
+
// If the config is an object, merge the settings, but preferring
|
|
310
|
+
// the hostConfigForTesting values over the result values.
|
|
311
|
+
hostConfigForHostedMode[key] = { ...hostConfigForHostedMode[key], ...hostConfigForTesting[key] };
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
// Override with the testing config if the value is present + not null/undefined.
|
|
315
|
+
hostConfigForHostedMode[key] = hostConfigForTesting[key] ?? hostConfigForHostedMode[key];
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
mergeEntry(key);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
callback(hostConfigForHostedMode);
|
|
322
|
+
}
|
|
323
|
+
upgradeDraggedFileSystemPermissions(_fileSystem) {
|
|
324
|
+
}
|
|
325
|
+
indexPath(_requestId, _fileSystemPath, _excludedFolders) {
|
|
326
|
+
}
|
|
327
|
+
stopIndexing(_requestId) {
|
|
328
|
+
}
|
|
329
|
+
searchInPath(_requestId, _fileSystemPath, _query) {
|
|
330
|
+
}
|
|
331
|
+
zoomFactor() {
|
|
332
|
+
return 1;
|
|
333
|
+
}
|
|
334
|
+
zoomIn() {
|
|
335
|
+
}
|
|
336
|
+
zoomOut() {
|
|
337
|
+
}
|
|
338
|
+
resetZoom() {
|
|
339
|
+
}
|
|
340
|
+
setWhitelistedShortcuts(_shortcuts) {
|
|
341
|
+
}
|
|
342
|
+
setEyeDropperActive(_active) {
|
|
343
|
+
}
|
|
344
|
+
showCertificateViewer(_certChain) {
|
|
345
|
+
}
|
|
346
|
+
reattach(_callback) {
|
|
347
|
+
}
|
|
348
|
+
readyForTest() {
|
|
349
|
+
}
|
|
350
|
+
connectionReady() {
|
|
351
|
+
}
|
|
352
|
+
setOpenNewWindowForPopups(_value) {
|
|
353
|
+
}
|
|
354
|
+
setDevicesDiscoveryConfig(_config) {
|
|
355
|
+
}
|
|
356
|
+
setDevicesUpdatesEnabled(_enabled) {
|
|
357
|
+
}
|
|
358
|
+
openRemotePage(_browserId, _url) {
|
|
359
|
+
}
|
|
360
|
+
openNodeFrontend() {
|
|
361
|
+
}
|
|
362
|
+
showContextMenuAtPoint(_x, _y, _items, _document) {
|
|
363
|
+
throw new Error('Soft context menu should be used');
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Think of **Hosted mode** as "non-embedded" mode; you can see a devtools frontend URL as the tab's URL. It's an atypical way that DevTools is run.
|
|
367
|
+
* Whereas in **Non-hosted** (aka "embedded"), DevTools is embedded and fully dockable. It's the common way DevTools is run.
|
|
368
|
+
*
|
|
369
|
+
* **Hosted mode** == we're using the `InspectorFrontendHostStub`. impl. (@see `InspectorFrontendHostStub` class comment)
|
|
370
|
+
* Whereas with **non-hosted** mode, native `DevToolsEmbedderMessageDispatcher` is used for CDP and more. `globalThis.DevToolsAPI` is present.
|
|
371
|
+
*
|
|
372
|
+
* Relationships to other signals:
|
|
373
|
+
* - _Connection_: Hosted-ness does not indicate whether the frontend is _connected to a valid CDP target_.
|
|
374
|
+
* - _Dockability_: Being _"dockable"_ (aka `canDock`) is typically aligned but technically orthogonal.
|
|
375
|
+
* - _URL scheme_: If the main frame's URL scheme is `devtools://`, it's non-hosted.
|
|
376
|
+
*
|
|
377
|
+
* | Example case | Mode | Example devtools |
|
|
378
|
+
* | :------------------------------------------ | :------------- | :---------------------------------------------------------------------------- |
|
|
379
|
+
* | tab URL: `devtools://…` | **NOT Hosted** | `devtools://devtools/bundled/devtools_app.html?targetType=tab&...` |
|
|
380
|
+
* | tab URL: `devtools://…?ws=…` | **NOT Hosted** | `devtools://devtools/bundled/devtools_app.html?ws=localhost:9228/...` |
|
|
381
|
+
* | tab URL: `devtools://…` but no connection | **NOT Hosted** | `devtools://devtools/bundled/trace_app.html` |
|
|
382
|
+
* | tab URL: `https://…` but no connection | **Hosted** | `https://chrome-devtools-frontend.appspot.com/serve_rev/@.../trace_app.html` |
|
|
383
|
+
* | tab URL: `http://…?ws=` (connected) | **Hosted** | `http://localhost:9222/devtools/inspector.html?ws=localhost:9222/...` |
|
|
384
|
+
*/
|
|
385
|
+
isHostedMode() {
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
setAddExtensionCallback(_callback) {
|
|
389
|
+
// Extensions are not supported in hosted mode.
|
|
390
|
+
}
|
|
391
|
+
async initialTargetId() {
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
doAidaConversation(_request, _streamId, callback) {
|
|
395
|
+
callback({
|
|
396
|
+
error: 'Not implemented',
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
registerAidaClientEvent(_request, callback) {
|
|
400
|
+
callback({
|
|
401
|
+
error: 'Not implemented',
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
aidaCodeComplete(_request, callback) {
|
|
405
|
+
callback({
|
|
406
|
+
error: 'Not implemented',
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
dispatchHttpRequest(_request, callback) {
|
|
410
|
+
callback({ error: 'Not implemented' });
|
|
411
|
+
}
|
|
412
|
+
recordImpression(_event) {
|
|
413
|
+
}
|
|
414
|
+
recordResize(_event) {
|
|
415
|
+
}
|
|
416
|
+
recordClick(_event) {
|
|
417
|
+
}
|
|
418
|
+
recordHover(_event) {
|
|
419
|
+
}
|
|
420
|
+
recordDrag(_event) {
|
|
421
|
+
}
|
|
422
|
+
recordChange(_event) {
|
|
423
|
+
}
|
|
424
|
+
recordKeyDown(_event) {
|
|
425
|
+
}
|
|
426
|
+
recordSettingAccess(_event) {
|
|
427
|
+
}
|
|
428
|
+
recordFunctionCall(_event) {
|
|
429
|
+
}
|
|
430
|
+
}
|
|
@@ -24,9 +24,11 @@ export function isWin() {
|
|
|
24
24
|
}
|
|
25
25
|
return _isWin;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
/**
|
|
28
|
+
* In Chrome Layout tests the imported 'Platform' object is not writable/
|
|
29
|
+
* configurable, which prevents us from monkey-patching 'Platform''s methods.
|
|
30
|
+
* We circumvent this by adding 'setPlatformForTests'.
|
|
31
|
+
**/
|
|
30
32
|
export function setPlatformForTests(platform) {
|
|
31
33
|
_platform = platform;
|
|
32
34
|
_isMac = undefined;
|
|
@@ -158,27 +158,15 @@ function createErrorMessageFromResponse(response) {
|
|
|
158
158
|
console.assert(success === (message.length === 0));
|
|
159
159
|
return { success, description: { statusCode, netError, netErrorName, urlValid, message } };
|
|
160
160
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
xhr.onreadystatechange = null;
|
|
173
|
-
successCallback(xhr.responseText);
|
|
174
|
-
}
|
|
175
|
-
const xhr = new XMLHttpRequest();
|
|
176
|
-
xhr.withCredentials = false;
|
|
177
|
-
xhr.open('GET', url, true);
|
|
178
|
-
xhr.onreadystatechange = onReadyStateChanged;
|
|
179
|
-
xhr.send(null);
|
|
180
|
-
});
|
|
181
|
-
};
|
|
161
|
+
async function fetchToString(url) {
|
|
162
|
+
try {
|
|
163
|
+
const response = await fetch(url);
|
|
164
|
+
return await response.text();
|
|
165
|
+
}
|
|
166
|
+
catch (cause) {
|
|
167
|
+
throw new Error(`Failed to fetch ${url}`, { cause });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
182
170
|
function canBeRemoteFilePath(url) {
|
|
183
171
|
try {
|
|
184
172
|
const urlObject = new URL(url);
|
|
@@ -192,7 +180,7 @@ export const loadAsStream = function (url, headers, stream, callback, allowRemot
|
|
|
192
180
|
const streamId = bindOutputStream(stream);
|
|
193
181
|
const parsedURL = new Common.ParsedURL.ParsedURL(url);
|
|
194
182
|
if (parsedURL.isDataURL()) {
|
|
195
|
-
|
|
183
|
+
fetchToString(url).then(dataURLDecodeSuccessful).catch(dataURLDecodeFailed);
|
|
196
184
|
return;
|
|
197
185
|
}
|
|
198
186
|
if (!allowRemoteFilePaths && canBeRemoteFilePath(url)) {
|
|
@@ -193,10 +193,7 @@ export class UserMetrics {
|
|
|
193
193
|
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.LighthouseCategoryUsed" /* EnumeratedHistogram.LighthouseCategoryUsed */, type, 6 /* LighthouseCategoryUsed.MAX_VALUE */);
|
|
194
194
|
}
|
|
195
195
|
swatchActivated(swatch) {
|
|
196
|
-
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.SwatchActivated" /* EnumeratedHistogram.SwatchActivated */, swatch,
|
|
197
|
-
}
|
|
198
|
-
animationPlaybackRateChanged(playbackRate) {
|
|
199
|
-
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.AnimationPlaybackRateChanged" /* EnumeratedHistogram.AnimationPlaybackRateChanged */, playbackRate, 4 /* AnimationsPlaybackRate.MAX_VALUE */);
|
|
196
|
+
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.SwatchActivated" /* EnumeratedHistogram.SwatchActivated */, swatch, 13 /* SwatchType.MAX_VALUE */);
|
|
200
197
|
}
|
|
201
198
|
workspacesPopulated(wallClockTimeInMilliseconds) {
|
|
202
199
|
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Workspaces.PopulateWallClocktime', wallClockTimeInMilliseconds);
|
|
@@ -219,6 +216,15 @@ export class UserMetrics {
|
|
|
219
216
|
performanceAIMainThreadActivityResponseSize(bytes) {
|
|
220
217
|
InspectorFrontendHostInstance.recordCountHistogram('DevTools.PerformanceAI.MainThreadActivityResponseSize', bytes, 0, 100_000, 100);
|
|
221
218
|
}
|
|
219
|
+
builtInAiAvailability(availability) {
|
|
220
|
+
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.BuiltInAiAvailability" /* EnumeratedHistogram.BuiltInAiAvailability */, availability, 10 /* BuiltInAiAvailability.MAX_VALUE */);
|
|
221
|
+
}
|
|
222
|
+
consoleInsightTeaserGenerated(timeInMilliseconds) {
|
|
223
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Insights.TeaserGenerationTime', timeInMilliseconds);
|
|
224
|
+
}
|
|
225
|
+
consoleInsightTeaserFirstChunkGenerated(timeInMilliseconds) {
|
|
226
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Insights.TeaserFirstChunkGenerationTime', timeInMilliseconds);
|
|
227
|
+
}
|
|
222
228
|
}
|
|
223
229
|
/**
|
|
224
230
|
* The numeric enum values are not necessarily continuous! It is possible that
|
|
@@ -231,9 +237,11 @@ export class UserMetrics {
|
|
|
231
237
|
* 1. Delete the line with the unneeded value
|
|
232
238
|
* 2. Do not update any 'MAX_VALUE' or any other value.
|
|
233
239
|
*/
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
240
|
+
/**
|
|
241
|
+
* Codes below are used to collect UMA histograms in the Chromium port.
|
|
242
|
+
* Do not change the values below, additional actions are needed on the Chromium side
|
|
243
|
+
* in order to add more codes.
|
|
244
|
+
**/
|
|
237
245
|
export var Action;
|
|
238
246
|
(function (Action) {
|
|
239
247
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
@@ -415,15 +423,20 @@ export var Action;
|
|
|
415
423
|
Action[Action["AiAssistanceSideEffectConfirmed"] = 179] = "AiAssistanceSideEffectConfirmed";
|
|
416
424
|
Action[Action["AiAssistanceSideEffectRejected"] = 180] = "AiAssistanceSideEffectRejected";
|
|
417
425
|
Action[Action["AiAssistanceError"] = 181] = "AiAssistanceError";
|
|
418
|
-
Action[Action["AiAssistanceOpenedFromPerformanceInsight"] = 182] = "AiAssistanceOpenedFromPerformanceInsight";
|
|
419
|
-
Action[Action["AiAssistanceOpenedFromPerformanceFullButton"] = 183] = "AiAssistanceOpenedFromPerformanceFullButton";
|
|
420
426
|
Action[Action["AiCodeCompletionResponseServedFromCache"] = 184] = "AiCodeCompletionResponseServedFromCache";
|
|
421
427
|
Action[Action["AiCodeCompletionRequestTriggered"] = 185] = "AiCodeCompletionRequestTriggered";
|
|
422
428
|
Action[Action["AiCodeCompletionSuggestionDisplayed"] = 186] = "AiCodeCompletionSuggestionDisplayed";
|
|
423
429
|
Action[Action["AiCodeCompletionSuggestionAccepted"] = 187] = "AiCodeCompletionSuggestionAccepted";
|
|
424
430
|
Action[Action["AiCodeCompletionError"] = 188] = "AiCodeCompletionError";
|
|
425
431
|
Action[Action["AttributeLinkClicked"] = 189] = "AttributeLinkClicked";
|
|
426
|
-
Action[Action["
|
|
432
|
+
Action[Action["InsightRequestedViaTeaser"] = 190] = "InsightRequestedViaTeaser";
|
|
433
|
+
Action[Action["InsightTeaserGenerationStarted"] = 191] = "InsightTeaserGenerationStarted";
|
|
434
|
+
Action[Action["InsightTeaserGenerationCompleted"] = 192] = "InsightTeaserGenerationCompleted";
|
|
435
|
+
Action[Action["InsightTeaserGenerationAborted"] = 193] = "InsightTeaserGenerationAborted";
|
|
436
|
+
Action[Action["InsightTeaserGenerationErrored"] = 194] = "InsightTeaserGenerationErrored";
|
|
437
|
+
Action[Action["AiCodeGenerationSuggestionDisplayed"] = 195] = "AiCodeGenerationSuggestionDisplayed";
|
|
438
|
+
Action[Action["AiCodeGenerationSuggestionAccepted"] = 196] = "AiCodeGenerationSuggestionAccepted";
|
|
439
|
+
Action[Action["MAX_VALUE"] = 197] = "MAX_VALUE";
|
|
427
440
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
428
441
|
})(Action || (Action = {}));
|
|
429
442
|
export var PanelCodes;
|
|
@@ -699,14 +712,12 @@ export var DevtoolsExperiments;
|
|
|
699
712
|
DevtoolsExperiments[DevtoolsExperiments["just-my-code"] = 65] = "just-my-code";
|
|
700
713
|
DevtoolsExperiments[DevtoolsExperiments["use-source-map-scopes"] = 76] = "use-source-map-scopes";
|
|
701
714
|
DevtoolsExperiments[DevtoolsExperiments["timeline-show-postmessage-events"] = 86] = "timeline-show-postmessage-events";
|
|
702
|
-
DevtoolsExperiments[DevtoolsExperiments["timeline-enhanced-traces"] = 90] = "timeline-enhanced-traces";
|
|
703
|
-
DevtoolsExperiments[DevtoolsExperiments["timeline-compiled-sources"] = 91] = "timeline-compiled-sources";
|
|
704
715
|
DevtoolsExperiments[DevtoolsExperiments["timeline-debug-mode"] = 93] = "timeline-debug-mode";
|
|
705
716
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
706
717
|
// Increment this when new experiments are added.
|
|
707
718
|
DevtoolsExperiments[DevtoolsExperiments["MAX_VALUE"] = 110] = "MAX_VALUE";
|
|
708
719
|
})(DevtoolsExperiments || (DevtoolsExperiments = {}));
|
|
709
|
-
|
|
720
|
+
/** Update DevToolsIssuesPanelIssueExpanded from tools/metrics/histograms/enums.xml if new enum is added. **/
|
|
710
721
|
export var IssueExpanded;
|
|
711
722
|
(function (IssueExpanded) {
|
|
712
723
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
@@ -808,9 +819,9 @@ export var IssueCreated;
|
|
|
808
819
|
IssueCreated[IssueCreated["GenericIssue::FormInputWithNoLabelError"] = 67] = "GenericIssue::FormInputWithNoLabelError";
|
|
809
820
|
IssueCreated[IssueCreated["GenericIssue::FormAutocompleteAttributeEmptyError"] = 68] = "GenericIssue::FormAutocompleteAttributeEmptyError";
|
|
810
821
|
IssueCreated[IssueCreated["GenericIssue::FormEmptyIdAndNameAttributesForInputError"] = 69] = "GenericIssue::FormEmptyIdAndNameAttributesForInputError";
|
|
811
|
-
IssueCreated[IssueCreated["GenericIssue::
|
|
822
|
+
IssueCreated[IssueCreated["GenericIssue::FormAriaLabelledByToNonExistingIdError"] = 70] = "GenericIssue::FormAriaLabelledByToNonExistingIdError";
|
|
812
823
|
IssueCreated[IssueCreated["GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError"] = 71] = "GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError";
|
|
813
|
-
IssueCreated[IssueCreated["GenericIssue::
|
|
824
|
+
IssueCreated[IssueCreated["GenericIssue::FormLabelHasNeitherForNorNestedInputError"] = 72] = "GenericIssue::FormLabelHasNeitherForNorNestedInputError";
|
|
814
825
|
IssueCreated[IssueCreated["GenericIssue::FormLabelForMatchesNonExistingIdError"] = 73] = "GenericIssue::FormLabelForMatchesNonExistingIdError";
|
|
815
826
|
IssueCreated[IssueCreated["GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError"] = 74] = "GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError";
|
|
816
827
|
IssueCreated[IssueCreated["GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError"] = 75] = "GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError";
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
import * as AidaClient from './AidaClient.js';
|
|
5
|
+
import * as DispatchHttpRequestClient from './DispatchHttpRequestClient.js';
|
|
5
6
|
import * as GdpClient from './GdpClient.js';
|
|
6
7
|
import * as InspectorFrontendHost from './InspectorFrontendHost.js';
|
|
7
8
|
import * as InspectorFrontendHostAPI from './InspectorFrontendHostAPI.js';
|
|
8
9
|
import * as Platform from './Platform.js';
|
|
9
10
|
import * as ResourceLoader from './ResourceLoader.js';
|
|
10
11
|
import * as UserMetrics from './UserMetrics.js';
|
|
11
|
-
export { AidaClient, GdpClient, InspectorFrontendHost, InspectorFrontendHostAPI, Platform, ResourceLoader, UserMetrics, };
|
|
12
|
+
export { AidaClient, DispatchHttpRequestClient, GdpClient, InspectorFrontendHost, InspectorFrontendHostAPI, Platform, ResourceLoader, UserMetrics, };
|
|
12
13
|
export const userMetrics = new UserMetrics.UserMetrics();
|
package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js
CHANGED
|
@@ -18,7 +18,7 @@ export const removeElement = (array, element, firstOnly) => {
|
|
|
18
18
|
array.length = index;
|
|
19
19
|
return true;
|
|
20
20
|
};
|
|
21
|
-
function swap(array, i1, i2) {
|
|
21
|
+
export function swap(array, i1, i2) {
|
|
22
22
|
const temp = array[i1];
|
|
23
23
|
array[i1] = array[i2];
|
|
24
24
|
array[i2] = temp;
|
|
@@ -193,7 +193,7 @@ export function nearestIndexFromBeginning(arr, predicate) {
|
|
|
193
193
|
export function nearestIndexFromEnd(arr, predicate) {
|
|
194
194
|
return nearestIndex(arr, predicate, "END" /* NearestSearchStart.END */);
|
|
195
195
|
}
|
|
196
|
-
|
|
196
|
+
/** Type guard for ensuring that `arr` does not contain null or undefined **/
|
|
197
197
|
export function arrayDoesNotContainNullOrUndefined(arr) {
|
|
198
198
|
return !arr.includes(null) && !arr.includes(undefined);
|
|
199
199
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Copyright 2025 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
5
|
+
// @ts-ignore 'process' is not available when type-checking against browser types.
|
|
6
|
+
export const IS_NODE = typeof process !== 'undefined' && process.versions?.node !== null;
|
|
7
|
+
export const IS_BROWSER =
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
9
|
+
// @ts-ignore 'window' is not available when type-checking against node.js types.
|
|
10
|
+
typeof window !== 'undefined' || (typeof self !== 'undefined' && typeof self.postMessage === 'function');
|
|
11
|
+
export const HOST_RUNTIME = await (async () => {
|
|
12
|
+
if (IS_NODE) {
|
|
13
|
+
return (await import('./node/node.js')).HostRuntime.HOST_RUNTIME;
|
|
14
|
+
}
|
|
15
|
+
if (IS_BROWSER) {
|
|
16
|
+
return (await import('./browser/browser.js')).HostRuntime.HOST_RUNTIME;
|
|
17
|
+
}
|
|
18
|
+
throw new Error('Unknown runtime!');
|
|
19
|
+
})();
|