@mcp-b/chrome-devtools-mcp 2.0.2 → 2.0.6
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/README.md +120 -10
- package/build/src/McpContext.js +69 -5
- package/build/src/browser.js +157 -51
- package/build/src/cli.js +11 -5
- package/build/src/formatters/IssueFormatter.js +190 -0
- package/build/src/main.js +83 -2
- package/build/src/telemetry/clearcut-logger.js +102 -0
- package/build/src/telemetry/flag-utils.js +45 -0
- package/build/src/telemetry/metric-utils.js +14 -0
- package/build/src/telemetry/persistence.js +53 -0
- package/build/src/telemetry/types.js +33 -0
- package/build/src/telemetry/watchdog/clearcut-sender.js +201 -0
- package/build/src/telemetry/watchdog/main.js +127 -0
- package/build/src/telemetry/watchdog-client.js +60 -0
- package/build/src/third_party/devtools-formatter-worker.js +7 -0
- package/build/src/third_party/index.js +1 -1
- package/build/src/tools/browser.js +92 -0
- package/build/src/tools/extension.js +31 -0
- package/build/src/tools/extensions.js +79 -0
- package/build/src/tools/input.js +6 -1
- package/build/src/tools/pages.js +7 -1
- package/build/src/tools/script.js +31 -4
- package/build/src/tools/tools.js +4 -0
- package/build/src/transports/CDPClientTransport.js +184 -0
- package/build/src/transports/WebMCPBridgeScript.js +11 -2
- package/build/src/utils/ExtensionRegistry.js +35 -0
- package/build/src/utils/string.js +36 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Base64.js +20 -2
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Debouncer.js +8 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Gzip.js +11 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Object.js +6 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +3 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ResourceType.js +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Revealer.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Settings.js +18 -8
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/AidaClient.js +24 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +11 -3
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +27 -20
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/collect-ui-strings.js +7 -8
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/generate-locales-js.js +4 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +10 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +63 -12
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +1 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +4 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/root/ExperimentNames.js +30 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/root/root.js +2 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +69 -9
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +6 -6
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +28 -13
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +0 -2
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +170 -13
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +5 -39
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +8 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +20 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +12 -21
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +19 -6
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +5 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +8 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +15 -10
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +13 -27
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Target.js +3 -1
- package/build/vendor/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1 -7
- package/build/vendor/chrome-devtools-frontend/front_end/generated/Deprecation.js +1 -16
- package/build/vendor/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +82 -22
- package/build/vendor/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +265 -123
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +2 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +10 -16
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +97 -26
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +35 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationRepository.js +163 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationType.js +10 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/annotations.js +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +5 -3
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +29 -58
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +7 -45
- package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +14 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +8 -5
- package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/Prototypes.js +33 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/greendev.js +4 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ContrastCheckTrigger.js +2 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CookieIssue.js +0 -21
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CorsIssue.js +1 -38
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssueAggregator.js +8 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManager.js +6 -12
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PermissionElementIssue.js +243 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +7 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementGeolocationDeprecated.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementLowContrast.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementRegistrationFailed.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +7 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/issues_manager.js +2 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +0 -8
- package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +4 -8
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +30 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +70 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +82 -30
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +10 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +2 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +0 -3
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Processor.js +18 -19
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Styles.js +12 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/Initiators.js +46 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +4 -3
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +1 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +2 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +10 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +44 -27
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +9 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +1 -6
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +2 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +2 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +3 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +33 -11
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +51 -18
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +4 -0
- package/build/vendor/chrome-devtools-frontend/mcp/HostBindings.js +4 -0
- package/build/vendor/chrome-devtools-frontend/mcp/mcp.js +4 -0
- package/package.json +28 -21
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteInvalidSameParty.md +0 -8
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteSamePartyCrossPartyContextSet.md +0 -10
package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js
CHANGED
|
@@ -50,16 +50,6 @@ const UIStrings = {
|
|
|
50
50
|
* @example {File not found} PH3
|
|
51
51
|
*/
|
|
52
52
|
failedToLoadDebugSymbolsFor: '[{PH1}] Failed to load debug symbols for {PH2} ({PH3})',
|
|
53
|
-
/**
|
|
54
|
-
* @description Error message that is displayed in UI debugging information cannot be found for a call frame
|
|
55
|
-
* @example {main} PH1
|
|
56
|
-
*/
|
|
57
|
-
failedToLoadDebugSymbolsForFunction: 'No debug information for function "{PH1}"',
|
|
58
|
-
/**
|
|
59
|
-
* @description Error message that is displayed in UI when a file needed for debugging information for a call frame is missing
|
|
60
|
-
* @example {mainp.debug.wasm.dwp} PH1
|
|
61
|
-
*/
|
|
62
|
-
debugSymbolsIncomplete: 'The debug information for function {PH1} is incomplete',
|
|
63
53
|
};
|
|
64
54
|
const str_ = i18n.i18n.registerUIStrings('models/bindings/DebuggerLanguagePlugins.ts', UIStrings);
|
|
65
55
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
@@ -402,44 +392,18 @@ export class DebuggerLanguagePluginManager {
|
|
|
402
392
|
callFrameForStopId(stopId) {
|
|
403
393
|
return this.callFrameByStopId.get(stopId);
|
|
404
394
|
}
|
|
405
|
-
expandCallFrames(callFrames) {
|
|
406
|
-
return Promise
|
|
407
|
-
.all(callFrames.map(async (callFrame) => {
|
|
408
|
-
const functionInfo = await this.getFunctionInfo(callFrame.script, callFrame.location());
|
|
409
|
-
if (functionInfo) {
|
|
410
|
-
if ('frames' in functionInfo && functionInfo.frames.length) {
|
|
411
|
-
return functionInfo.frames.map(({ name }, index) => callFrame.createVirtualCallFrame(index, name));
|
|
412
|
-
}
|
|
413
|
-
if ('missingSymbolFiles' in functionInfo && functionInfo.missingSymbolFiles.length) {
|
|
414
|
-
const resources = functionInfo.missingSymbolFiles;
|
|
415
|
-
const details = i18nString(UIStrings.debugSymbolsIncomplete, { PH1: callFrame.functionName });
|
|
416
|
-
callFrame.missingDebugInfoDetails = { details, resources };
|
|
417
|
-
}
|
|
418
|
-
else {
|
|
419
|
-
callFrame.missingDebugInfoDetails = {
|
|
420
|
-
details: i18nString(UIStrings.failedToLoadDebugSymbolsForFunction, { PH1: callFrame.functionName }),
|
|
421
|
-
resources: [],
|
|
422
|
-
};
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
return callFrame;
|
|
426
|
-
}))
|
|
427
|
-
.then(callFrames => callFrames.flat());
|
|
428
|
-
}
|
|
429
395
|
modelAdded(debuggerModel) {
|
|
430
396
|
this.#debuggerModelToData.set(debuggerModel, new ModelData(debuggerModel, this.#workspace));
|
|
431
397
|
debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, this.globalObjectCleared, this);
|
|
432
398
|
debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource, this.parsedScriptSource, this);
|
|
433
399
|
debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerResumed, this.debuggerResumed, this);
|
|
434
400
|
debuggerModel.setEvaluateOnCallFrameCallback(this.evaluateOnCallFrame.bind(this));
|
|
435
|
-
debuggerModel.setExpandCallFramesCallback(this.expandCallFrames.bind(this));
|
|
436
401
|
}
|
|
437
402
|
modelRemoved(debuggerModel) {
|
|
438
403
|
debuggerModel.removeEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, this.globalObjectCleared, this);
|
|
439
404
|
debuggerModel.removeEventListener(SDK.DebuggerModel.Events.ParsedScriptSource, this.parsedScriptSource, this);
|
|
440
405
|
debuggerModel.removeEventListener(SDK.DebuggerModel.Events.DebuggerResumed, this.debuggerResumed, this);
|
|
441
406
|
debuggerModel.setEvaluateOnCallFrameCallback(null);
|
|
442
|
-
debuggerModel.setExpandCallFramesCallback(null);
|
|
443
407
|
const modelData = this.#debuggerModelToData.get(debuggerModel);
|
|
444
408
|
if (modelData) {
|
|
445
409
|
modelData.dispose();
|
|
@@ -641,24 +605,15 @@ export class DebuggerLanguagePluginManager {
|
|
|
641
605
|
const framePromises = functionInfo.frames.map(async ({ name }, index) => {
|
|
642
606
|
const rawLocation = new SDK.DebuggerModel.Location(script.debuggerModel, script.scriptId, frame.lineNumber, frame.columnNumber, index);
|
|
643
607
|
const uiLocation = await this.rawLocationToUILocation(rawLocation);
|
|
644
|
-
return
|
|
645
|
-
uiSourceCode: uiLocation?.uiSourceCode,
|
|
646
|
-
url: uiLocation ? undefined : frame.url,
|
|
647
|
-
name,
|
|
648
|
-
line: uiLocation?.lineNumber ?? frame.lineNumber,
|
|
649
|
-
column: uiLocation?.columnNumber ?? frame.columnNumber,
|
|
650
|
-
};
|
|
608
|
+
return translatedFromUILocation(uiLocation, name, frame);
|
|
651
609
|
});
|
|
652
610
|
translatedFrames.push(await Promise.all(framePromises));
|
|
653
611
|
return true;
|
|
654
612
|
}
|
|
655
|
-
//
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
line: frame.lineNumber,
|
|
660
|
-
column: frame.columnNumber,
|
|
661
|
-
};
|
|
613
|
+
// Translate the location only. We go through via "DebuggerWorkspaceBinding". It'll still try the plugin
|
|
614
|
+
// first, but this way, we'll get a UISourceCode for the raw script if the plugin fails to translate.
|
|
615
|
+
const uiLocation = await this.#debuggerWorkspaceBinding.rawLocationToUILocation(new SDK.DebuggerModel.Location(script.debuggerModel, script.scriptId, frame.lineNumber, frame.columnNumber));
|
|
616
|
+
const mappedFrame = translatedFromUILocation(uiLocation, frame.functionName, frame);
|
|
662
617
|
if ('missingSymbolFiles' in functionInfo && functionInfo.missingSymbolFiles.length) {
|
|
663
618
|
translatedFrames.push([{
|
|
664
619
|
...mappedFrame,
|
|
@@ -677,6 +632,24 @@ export class DebuggerLanguagePluginManager {
|
|
|
677
632
|
}]);
|
|
678
633
|
}
|
|
679
634
|
return true;
|
|
635
|
+
function translatedFromUILocation(uiLocation, name, fallback) {
|
|
636
|
+
if (uiLocation) {
|
|
637
|
+
return {
|
|
638
|
+
uiSourceCode: uiLocation.uiSourceCode,
|
|
639
|
+
url: undefined,
|
|
640
|
+
name,
|
|
641
|
+
line: uiLocation.lineNumber,
|
|
642
|
+
column: uiLocation.columnNumber ?? -1,
|
|
643
|
+
};
|
|
644
|
+
}
|
|
645
|
+
return {
|
|
646
|
+
uiSourceCode: undefined,
|
|
647
|
+
url: fallback.url,
|
|
648
|
+
name: fallback.functionName,
|
|
649
|
+
line: fallback.lineNumber,
|
|
650
|
+
column: fallback.columnNumber,
|
|
651
|
+
};
|
|
652
|
+
}
|
|
680
653
|
}
|
|
681
654
|
scriptsForUISourceCode(uiSourceCode) {
|
|
682
655
|
for (const modelData of this.#debuggerModelToData.values()) {
|
|
@@ -762,15 +735,13 @@ export class DebuggerLanguagePluginManager {
|
|
|
762
735
|
// for the DebuggerModel again, which may disappear
|
|
763
736
|
// in the meantime...
|
|
764
737
|
void rawModuleHandle.addRawModulePromise.then(sourceFileURLs => {
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
modelData.addSourceFiles(script, sourceFileURLs);
|
|
771
|
-
void this.#debuggerWorkspaceBinding.updateLocations(script);
|
|
772
|
-
}
|
|
738
|
+
// The script might have disappeared meanwhile...
|
|
739
|
+
if (script.debuggerModel.scriptForId(script.scriptId) === script) {
|
|
740
|
+
const modelData = this.#debuggerModelToData.get(script.debuggerModel);
|
|
741
|
+
if (modelData && Array.isArray(sourceFileURLs)) { // The DebuggerModel could have disappeared meanwhile...
|
|
742
|
+
modelData.addSourceFiles(script, sourceFileURLs);
|
|
773
743
|
}
|
|
744
|
+
void this.#debuggerWorkspaceBinding.updateLocations(script);
|
|
774
745
|
}
|
|
775
746
|
});
|
|
776
747
|
return;
|
package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js
CHANGED
|
@@ -27,8 +27,6 @@ export class DebuggerWorkspaceBinding {
|
|
|
27
27
|
this.ignoreListManager = ignoreListManager;
|
|
28
28
|
this.workspace = workspace;
|
|
29
29
|
this.#debuggerModelToData = new Map();
|
|
30
|
-
targetManager.addModelListener(SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.GlobalObjectCleared, this.globalObjectCleared, this);
|
|
31
|
-
targetManager.addModelListener(SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebuggerResumed, this.debuggerResumed, this);
|
|
32
30
|
targetManager.observeModels(SDK.DebuggerModel.DebuggerModel, this);
|
|
33
31
|
this.ignoreListManager.addEventListener("IGNORED_SCRIPT_RANGES_UPDATED" /* Workspace.IgnoreListManager.Events.IGNORED_SCRIPT_RANGES_UPDATED */, event => this.updateLocations(event.data));
|
|
34
32
|
this.#liveLocationPromises = new Set();
|
|
@@ -141,6 +139,10 @@ export class DebuggerWorkspaceBinding {
|
|
|
141
139
|
const model = target.model(StackTraceImpl.StackTraceModel.StackTraceModel);
|
|
142
140
|
return await model.createFromProtocolRuntime(stackTrace, this.#translateRawFrames.bind(this));
|
|
143
141
|
}
|
|
142
|
+
async createStackTraceFromDebuggerPaused(pausedDetails, target) {
|
|
143
|
+
const model = target.model(StackTraceImpl.StackTraceModel.StackTraceModel);
|
|
144
|
+
return await model.createFromDebuggerPaused(pausedDetails, this.#translateRawFrames.bind(this));
|
|
145
|
+
}
|
|
144
146
|
async createLiveLocation(rawLocation, updateDelegate, locationPool) {
|
|
145
147
|
const modelData = this.#debuggerModelToData.get(rawLocation.debuggerModel);
|
|
146
148
|
if (!modelData) {
|
|
@@ -156,21 +158,6 @@ export class DebuggerWorkspaceBinding {
|
|
|
156
158
|
this.recordLiveLocationChange(locationPromise);
|
|
157
159
|
return await locationPromise;
|
|
158
160
|
}
|
|
159
|
-
async createCallFrameLiveLocation(location, updateDelegate, locationPool) {
|
|
160
|
-
const script = location.script();
|
|
161
|
-
if (!script) {
|
|
162
|
-
return null;
|
|
163
|
-
}
|
|
164
|
-
const debuggerModel = location.debuggerModel;
|
|
165
|
-
const liveLocationPromise = this.createLiveLocation(location, updateDelegate, locationPool);
|
|
166
|
-
this.recordLiveLocationChange(liveLocationPromise);
|
|
167
|
-
const liveLocation = await liveLocationPromise;
|
|
168
|
-
if (!liveLocation) {
|
|
169
|
-
return null;
|
|
170
|
-
}
|
|
171
|
-
this.registerCallFrameLiveLocation(debuggerModel, liveLocation);
|
|
172
|
-
return liveLocation;
|
|
173
|
-
}
|
|
174
161
|
async rawLocationToUILocation(rawLocation) {
|
|
175
162
|
const uiLocation = await this.pluginManager.rawLocationToUILocation(rawLocation);
|
|
176
163
|
if (uiLocation) {
|
|
@@ -312,19 +299,6 @@ export class DebuggerWorkspaceBinding {
|
|
|
312
299
|
const scripts = this.pluginManager.scriptsForUISourceCode(uiSourceCode);
|
|
313
300
|
return scripts.every(script => script.isJavaScript());
|
|
314
301
|
}
|
|
315
|
-
globalObjectCleared(event) {
|
|
316
|
-
this.reset(event.data);
|
|
317
|
-
}
|
|
318
|
-
reset(debuggerModel) {
|
|
319
|
-
const modelData = this.#debuggerModelToData.get(debuggerModel);
|
|
320
|
-
if (!modelData) {
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
for (const location of modelData.callFrameLocations.values()) {
|
|
324
|
-
this.removeLiveLocation(location);
|
|
325
|
-
}
|
|
326
|
-
modelData.callFrameLocations.clear();
|
|
327
|
-
}
|
|
328
302
|
resetForTest(target) {
|
|
329
303
|
const debuggerModel = target.model(SDK.DebuggerModel.DebuggerModel);
|
|
330
304
|
const modelData = this.#debuggerModelToData.get(debuggerModel);
|
|
@@ -332,22 +306,12 @@ export class DebuggerWorkspaceBinding {
|
|
|
332
306
|
modelData.getResourceScriptMapping().resetForTest();
|
|
333
307
|
}
|
|
334
308
|
}
|
|
335
|
-
registerCallFrameLiveLocation(debuggerModel, location) {
|
|
336
|
-
const modelData = this.#debuggerModelToData.get(debuggerModel);
|
|
337
|
-
if (modelData) {
|
|
338
|
-
const locations = modelData.callFrameLocations;
|
|
339
|
-
locations.add(location);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
309
|
removeLiveLocation(location) {
|
|
343
310
|
const modelData = this.#debuggerModelToData.get(location.rawLocation.debuggerModel);
|
|
344
311
|
if (modelData) {
|
|
345
312
|
modelData.disposeLocation(location);
|
|
346
313
|
}
|
|
347
314
|
}
|
|
348
|
-
debuggerResumed(event) {
|
|
349
|
-
this.reset(event.data);
|
|
350
|
-
}
|
|
351
315
|
async shouldPause(debuggerPausedDetails, autoSteppingContext) {
|
|
352
316
|
// This function returns false if the debugger should continue stepping
|
|
353
317
|
const { callFrames: [frame] } = debuggerPausedDetails;
|
|
@@ -382,7 +346,7 @@ export class DebuggerWorkspaceBinding {
|
|
|
382
346
|
}
|
|
383
347
|
const modelData = this.#debuggerModelToData.get(target.model(SDK.DebuggerModel.DebuggerModel));
|
|
384
348
|
if (modelData) {
|
|
385
|
-
modelData.translateRawFramesStep(rawFrames, translatedFrames);
|
|
349
|
+
await modelData.translateRawFramesStep(rawFrames, translatedFrames);
|
|
386
350
|
return;
|
|
387
351
|
}
|
|
388
352
|
const frame = rawFrames.shift();
|
|
@@ -393,7 +357,6 @@ export class DebuggerWorkspaceBinding {
|
|
|
393
357
|
class ModelData {
|
|
394
358
|
#debuggerModel;
|
|
395
359
|
#debuggerWorkspaceBinding;
|
|
396
|
-
callFrameLocations;
|
|
397
360
|
#defaultMapping;
|
|
398
361
|
#resourceMapping;
|
|
399
362
|
#resourceScriptMapping;
|
|
@@ -402,7 +365,6 @@ class ModelData {
|
|
|
402
365
|
constructor(debuggerModel, debuggerWorkspaceBinding) {
|
|
403
366
|
this.#debuggerModel = debuggerModel;
|
|
404
367
|
this.#debuggerWorkspaceBinding = debuggerWorkspaceBinding;
|
|
405
|
-
this.callFrameLocations = new Set();
|
|
406
368
|
const { workspace } = debuggerWorkspaceBinding.resourceMapping;
|
|
407
369
|
this.#defaultMapping = new DefaultScriptMapping(debuggerModel, workspace, debuggerWorkspaceBinding);
|
|
408
370
|
this.#resourceMapping = debuggerWorkspaceBinding.resourceMapping;
|
|
@@ -473,8 +435,8 @@ class ModelData {
|
|
|
473
435
|
scope = scope || await this.#resourceMapping.functionBoundsAtRawLocation(rawLocation);
|
|
474
436
|
return scope;
|
|
475
437
|
}
|
|
476
|
-
translateRawFramesStep(rawFrames, translatedFrames) {
|
|
477
|
-
if (!this.compilerMapping.translateRawFramesStep(rawFrames, translatedFrames)) {
|
|
438
|
+
async translateRawFramesStep(rawFrames, translatedFrames) {
|
|
439
|
+
if (!await this.compilerMapping.translateRawFramesStep(rawFrames, translatedFrames)) {
|
|
478
440
|
this.#defaultTranslateRawFramesStep(rawFrames, translatedFrames);
|
|
479
441
|
}
|
|
480
442
|
}
|
|
@@ -107,7 +107,7 @@ export class DeviceModeModel extends Common.ObjectWrapper.ObjectWrapper {
|
|
|
107
107
|
this.#preferredSize = new Geometry.Size(1, 1);
|
|
108
108
|
this.#initialized = false;
|
|
109
109
|
this.#appliedDeviceSize = new Geometry.Size(1, 1);
|
|
110
|
-
this.#appliedDeviceScaleFactor =
|
|
110
|
+
this.#appliedDeviceScaleFactor = globalThis.devicePixelRatio;
|
|
111
111
|
this.#appliedUserAgentType = "Desktop" /* UA.DESKTOP */;
|
|
112
112
|
this.#scaleSetting = Common.Settings.Settings.instance().createSetting('emulation.device-scale', 1);
|
|
113
113
|
// We've used to allow zero before.
|
|
@@ -550,6 +550,7 @@ const emulatedDevices = [
|
|
|
550
550
|
},
|
|
551
551
|
'capabilities': ['touch', 'mobile'],
|
|
552
552
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
553
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
553
554
|
'type': 'phone',
|
|
554
555
|
},
|
|
555
556
|
{
|
|
@@ -569,6 +570,7 @@ const emulatedDevices = [
|
|
|
569
570
|
},
|
|
570
571
|
'capabilities': ['touch', 'mobile'],
|
|
571
572
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
573
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
572
574
|
'type': 'phone',
|
|
573
575
|
},
|
|
574
576
|
{
|
|
@@ -588,6 +590,7 @@ const emulatedDevices = [
|
|
|
588
590
|
},
|
|
589
591
|
'capabilities': ['touch', 'mobile'],
|
|
590
592
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
593
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
591
594
|
'type': 'phone',
|
|
592
595
|
},
|
|
593
596
|
{
|
|
@@ -607,6 +610,7 @@ const emulatedDevices = [
|
|
|
607
610
|
},
|
|
608
611
|
'capabilities': ['touch', 'mobile'],
|
|
609
612
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
613
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
610
614
|
'type': 'phone',
|
|
611
615
|
},
|
|
612
616
|
{
|
|
@@ -706,6 +710,7 @@ const emulatedDevices = [
|
|
|
706
710
|
},
|
|
707
711
|
'capabilities': ['touch', 'mobile'],
|
|
708
712
|
'user-agent': 'Mozilla/5.0 (iPad; CPU OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
713
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPad', 'mobile': true },
|
|
709
714
|
'type': 'tablet',
|
|
710
715
|
},
|
|
711
716
|
{
|
|
@@ -725,6 +730,7 @@ const emulatedDevices = [
|
|
|
725
730
|
},
|
|
726
731
|
'capabilities': ['touch', 'mobile'],
|
|
727
732
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Safari/605.1.15',
|
|
733
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPad', 'mobile': true },
|
|
728
734
|
'type': 'tablet',
|
|
729
735
|
},
|
|
730
736
|
{
|
|
@@ -744,6 +750,7 @@ const emulatedDevices = [
|
|
|
744
750
|
},
|
|
745
751
|
'capabilities': ['touch', 'mobile'],
|
|
746
752
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Safari/605.1.15',
|
|
753
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPad', 'mobile': true },
|
|
747
754
|
'type': 'tablet',
|
|
748
755
|
},
|
|
749
756
|
{
|
|
@@ -982,6 +989,7 @@ const emulatedDevices = [
|
|
|
982
989
|
},
|
|
983
990
|
'capabilities': ['touch', 'mobile'],
|
|
984
991
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
|
992
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '7.1.2', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
985
993
|
'type': 'phone',
|
|
986
994
|
},
|
|
987
995
|
{
|
|
@@ -1009,6 +1017,7 @@ const emulatedDevices = [
|
|
|
1009
1017
|
},
|
|
1010
1018
|
'capabilities': ['touch', 'mobile'],
|
|
1011
1019
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
1020
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '10.3.1', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
1012
1021
|
'type': 'phone',
|
|
1013
1022
|
},
|
|
1014
1023
|
{
|
|
@@ -1036,6 +1045,7 @@ const emulatedDevices = [
|
|
|
1036
1045
|
},
|
|
1037
1046
|
'capabilities': ['touch', 'mobile'],
|
|
1038
1047
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
|
|
1048
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
1039
1049
|
'type': 'phone',
|
|
1040
1050
|
},
|
|
1041
1051
|
{
|
|
@@ -1063,6 +1073,7 @@ const emulatedDevices = [
|
|
|
1063
1073
|
},
|
|
1064
1074
|
'capabilities': ['touch', 'mobile'],
|
|
1065
1075
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
|
|
1076
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
1066
1077
|
'type': 'phone',
|
|
1067
1078
|
},
|
|
1068
1079
|
{
|
|
@@ -1076,6 +1087,7 @@ const emulatedDevices = [
|
|
|
1076
1087
|
},
|
|
1077
1088
|
'capabilities': ['touch', 'mobile'],
|
|
1078
1089
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
|
|
1090
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true },
|
|
1079
1091
|
'type': 'phone',
|
|
1080
1092
|
},
|
|
1081
1093
|
{
|
|
@@ -1499,6 +1511,7 @@ const emulatedDevices = [
|
|
|
1499
1511
|
},
|
|
1500
1512
|
'capabilities': ['touch', 'mobile'],
|
|
1501
1513
|
'user-agent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
1514
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '11.0', 'architecture': '', 'model': 'iPad', 'mobile': true },
|
|
1502
1515
|
'type': 'tablet',
|
|
1503
1516
|
},
|
|
1504
1517
|
{
|
|
@@ -1512,6 +1525,7 @@ const emulatedDevices = [
|
|
|
1512
1525
|
},
|
|
1513
1526
|
'capabilities': ['touch', 'mobile'],
|
|
1514
1527
|
'user-agent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
1528
|
+
'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '11.0', 'architecture': '', 'model': 'iPad', 'mobile': true },
|
|
1515
1529
|
'type': 'tablet',
|
|
1516
1530
|
},
|
|
1517
1531
|
{
|
package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js
CHANGED
|
@@ -6,13 +6,16 @@ let formatterWorkerPoolInstance;
|
|
|
6
6
|
export class FormatterWorkerPool {
|
|
7
7
|
taskQueue;
|
|
8
8
|
workerTasks;
|
|
9
|
-
|
|
9
|
+
entrypointURL;
|
|
10
|
+
constructor(entrypointURL) {
|
|
10
11
|
this.taskQueue = [];
|
|
11
12
|
this.workerTasks = new Map();
|
|
13
|
+
this.entrypointURL =
|
|
14
|
+
entrypointURL ?? import.meta.resolve('../../entrypoints/formatter_worker/formatter_worker-entrypoint.js');
|
|
12
15
|
}
|
|
13
|
-
static instance() {
|
|
14
|
-
if (!formatterWorkerPoolInstance) {
|
|
15
|
-
formatterWorkerPoolInstance = new FormatterWorkerPool();
|
|
16
|
+
static instance(opts) {
|
|
17
|
+
if (!formatterWorkerPoolInstance || opts?.forceNew) {
|
|
18
|
+
formatterWorkerPoolInstance = new FormatterWorkerPool(opts?.entrypointURL);
|
|
16
19
|
}
|
|
17
20
|
return formatterWorkerPoolInstance;
|
|
18
21
|
}
|
|
@@ -31,7 +34,7 @@ export class FormatterWorkerPool {
|
|
|
31
34
|
formatterWorkerPoolInstance = undefined;
|
|
32
35
|
}
|
|
33
36
|
createWorker() {
|
|
34
|
-
const worker = Platform.HostRuntime.HOST_RUNTIME.createWorker(
|
|
37
|
+
const worker = Platform.HostRuntime.HOST_RUNTIME.createWorker(this.entrypointURL);
|
|
35
38
|
worker.onmessage = this.onWorkerMessage.bind(this, worker);
|
|
36
39
|
worker.onerror = this.onWorkerError.bind(this, worker);
|
|
37
40
|
return worker;
|
|
@@ -0,0 +1,33 @@
|
|
|
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 '../../core/common/common.js';
|
|
5
|
+
import * as Root from '../../core/root/root.js';
|
|
6
|
+
let instance = null;
|
|
7
|
+
export class Prototypes {
|
|
8
|
+
constructor() {
|
|
9
|
+
}
|
|
10
|
+
static instance() {
|
|
11
|
+
if (instance) {
|
|
12
|
+
return instance;
|
|
13
|
+
}
|
|
14
|
+
instance = new Prototypes();
|
|
15
|
+
return instance;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns true if the specific setting is turned on AND the GreenDev flag is enabled
|
|
19
|
+
*/
|
|
20
|
+
isEnabled(setting) {
|
|
21
|
+
const greendevFlagEnabled = Boolean(Root.Runtime.hostConfig.devToolsGreenDevUi?.enabled);
|
|
22
|
+
return greendevFlagEnabled && this.settings()[setting].get();
|
|
23
|
+
}
|
|
24
|
+
settings() {
|
|
25
|
+
const settings = Common.Settings.Settings.instance();
|
|
26
|
+
const inDevToolsFloaty = settings.createSetting('greendev-in-devtools-floaty-enabled', false, "Local" /* Common.Settings.SettingStorageType.LOCAL */);
|
|
27
|
+
const inlineWidgets = settings.createSetting('greendev-inline-widgets-enabled', false, "Local" /* Common.Settings.SettingStorageType.LOCAL */);
|
|
28
|
+
const aiAnnotations = settings.createSetting('greendev-ai-annotations-enabled', false, "Local" /* Common.Settings.SettingStorageType.LOCAL */);
|
|
29
|
+
const artifactViewer = settings.createSetting('greendev-artifact-viewer-enabled', false, "Local" /* Common.Settings.SettingStorageType.LOCAL */);
|
|
30
|
+
const copyToGemini = settings.createSetting('greendev-copy-to-gemini-enabled', false, "Local" /* Common.Settings.SettingStorageType.LOCAL */);
|
|
31
|
+
return { inDevToolsFloaty, inlineWidgets, aiAnnotations, artifactViewer, copyToGemini };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -32,7 +32,7 @@ export class ContrastCheckTrigger {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
#checkContrast(resourceTreeModel) {
|
|
35
|
-
if (!Root.Runtime.experiments.isEnabled(
|
|
35
|
+
if (!Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.CONTRAST_ISSUES)) {
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
void resourceTreeModel.target().auditsAgent().invoke_checkContrast({});
|
|
@@ -42,7 +42,7 @@ export class ContrastCheckTrigger {
|
|
|
42
42
|
this.#checkContrast(resourceTreeModel);
|
|
43
43
|
}
|
|
44
44
|
async #frameAdded(event) {
|
|
45
|
-
if (!Root.Runtime.experiments.isEnabled(
|
|
45
|
+
if (!Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.CONTRAST_ISSUES)) {
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
48
|
const frame = event.data;
|
package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CookieIssue.js
CHANGED
|
@@ -16,10 +16,6 @@ const UIStrings = {
|
|
|
16
16
|
* @description Label for the link for Schemeful Same-Site Issues
|
|
17
17
|
*/
|
|
18
18
|
howSchemefulSamesiteWorks: 'How Schemeful Same-Site Works',
|
|
19
|
-
/**
|
|
20
|
-
* @description Label for a link for SameParty Issues. 'Attribute' refers to a cookie attribute.
|
|
21
|
-
*/
|
|
22
|
-
firstPartySetsExplained: '`First-Party Sets` and the `SameParty` attribute',
|
|
23
19
|
/**
|
|
24
20
|
* @description Label for a link for cross-site redirect Issues.
|
|
25
21
|
*/
|
|
@@ -245,7 +241,6 @@ export class CookieIssue extends Issue {
|
|
|
245
241
|
return new SDK.ConsoleModel.ConsoleMessage(issuesModel.target().model(SDK.RuntimeModel.RuntimeModel), Common.Console.FrontendMessageSource.ISSUE_PANEL, "warning" /* Protocol.Log.LogEntryLevel.Warning */, UIStrings.consoleTpcdErrorMessage, {
|
|
246
242
|
url: this.details().request?.url,
|
|
247
243
|
affectedResources: { requestId: this.details().request?.requestId, issueId: this.issueId },
|
|
248
|
-
isCookieReportIssue: true
|
|
249
244
|
});
|
|
250
245
|
}
|
|
251
246
|
return;
|
|
@@ -407,20 +402,6 @@ function sameSiteExcludeContextDowngradeSet(isSecure) {
|
|
|
407
402
|
links: schemefulSameSiteArticles,
|
|
408
403
|
};
|
|
409
404
|
}
|
|
410
|
-
const sameSiteInvalidSameParty = {
|
|
411
|
-
file: 'SameSiteInvalidSameParty.md',
|
|
412
|
-
links: [{
|
|
413
|
-
link: 'https://developer.chrome.com/blog/first-party-sets-sameparty/',
|
|
414
|
-
linkTitle: i18nLazyString(UIStrings.firstPartySetsExplained),
|
|
415
|
-
}],
|
|
416
|
-
};
|
|
417
|
-
const samePartyCrossPartyContextSet = {
|
|
418
|
-
file: 'SameSiteSamePartyCrossPartyContextSet.md',
|
|
419
|
-
links: [{
|
|
420
|
-
link: 'https://developer.chrome.com/blog/first-party-sets-sameparty/',
|
|
421
|
-
linkTitle: i18nLazyString(UIStrings.firstPartySetsExplained),
|
|
422
|
-
}],
|
|
423
|
-
};
|
|
424
405
|
const attributeValueExceedsMaxSize = {
|
|
425
406
|
file: 'CookieAttributeValueExceedsMaxSize.md',
|
|
426
407
|
links: [],
|
|
@@ -484,8 +465,6 @@ const issueDescriptions = new Map([
|
|
|
484
465
|
['CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure', sameSiteExcludeContextDowngradeRead(false)],
|
|
485
466
|
['CookieIssue::ExcludeContextDowngrade::SetCookie::Secure', sameSiteExcludeContextDowngradeSet(true)],
|
|
486
467
|
['CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure', sameSiteExcludeContextDowngradeSet(false)],
|
|
487
|
-
['CookieIssue::ExcludeInvalidSameParty::SetCookie', sameSiteInvalidSameParty],
|
|
488
|
-
['CookieIssue::ExcludeSamePartyCrossPartyContext::SetCookie', samePartyCrossPartyContextSet],
|
|
489
468
|
['CookieIssue::WarnAttributeValueExceedsMaxSize::ReadCookie', attributeValueExceedsMaxSize],
|
|
490
469
|
['CookieIssue::WarnAttributeValueExceedsMaxSize::SetCookie', attributeValueExceedsMaxSize],
|
|
491
470
|
['CookieIssue::WarnDomainNonASCII::ReadCookie', warnDomainNonAscii],
|
|
@@ -63,19 +63,6 @@ function getIssueCode(details) {
|
|
|
63
63
|
return "CorsIssue::NoCorsRedirectModeNotFollow" /* IssueCode.NO_CORS_REDIRECT_MODE_NOT_FOLLOW */;
|
|
64
64
|
case "InvalidPrivateNetworkAccess" /* Protocol.Network.CorsError.InvalidPrivateNetworkAccess */:
|
|
65
65
|
return "CorsIssue::InvalidPrivateNetworkAccess" /* IssueCode.INVALID_PRIVATE_NETWORK_ACCESS */;
|
|
66
|
-
case "UnexpectedPrivateNetworkAccess" /* Protocol.Network.CorsError.UnexpectedPrivateNetworkAccess */:
|
|
67
|
-
return "CorsIssue::UnexpectedPrivateNetworkAccess" /* IssueCode.UNEXPECTED_PRIVATE_NETWORK_ACCESS */;
|
|
68
|
-
case "PreflightMissingAllowPrivateNetwork" /* Protocol.Network.CorsError.PreflightMissingAllowPrivateNetwork */:
|
|
69
|
-
case "PreflightInvalidAllowPrivateNetwork" /* Protocol.Network.CorsError.PreflightInvalidAllowPrivateNetwork */:
|
|
70
|
-
return "CorsIssue::PreflightAllowPrivateNetworkError" /* IssueCode.PREFLIGHT_ALLOW_PRIVATE_NETWORK_ERROR */;
|
|
71
|
-
case "PreflightMissingPrivateNetworkAccessId" /* Protocol.Network.CorsError.PreflightMissingPrivateNetworkAccessId */:
|
|
72
|
-
return "CorsIssue::PreflightMissingPrivateNetworkAccessId" /* IssueCode.PREFLIGHT_MISSING_PRIVATE_NETWORK_ACCESS_ID */;
|
|
73
|
-
case "PreflightMissingPrivateNetworkAccessName" /* Protocol.Network.CorsError.PreflightMissingPrivateNetworkAccessName */:
|
|
74
|
-
return "CorsIssue::PreflightMissingPrivateNetworkAccessName" /* IssueCode.PREFLIGHT_MISSING_PRIVATE_NETWORK_ACCESS_NAME */;
|
|
75
|
-
case "PrivateNetworkAccessPermissionUnavailable" /* Protocol.Network.CorsError.PrivateNetworkAccessPermissionUnavailable */:
|
|
76
|
-
return "CorsIssue::PrivateNetworkAccessPermissionUnavailable" /* IssueCode.PRIVATE_NETWORK_ACCESS_PERMISSION_UNAVAILABLE */;
|
|
77
|
-
case "PrivateNetworkAccessPermissionDenied" /* Protocol.Network.CorsError.PrivateNetworkAccessPermissionDenied */:
|
|
78
|
-
return "CorsIssue::PrivateNetworkAccessPermissionDenied" /* IssueCode.PRIVATE_NETWORK_ACCESS_PERMISSION_DENIED */;
|
|
79
66
|
case "LocalNetworkAccessPermissionDenied" /* Protocol.Network.CorsError.LocalNetworkAccessPermissionDenied */:
|
|
80
67
|
return "CorsIssue::LocalNetworkAccessPermissionDenied" /* IssueCode.LOCAL_NETWORK_ACCESS_PERMISSION_DENIED */;
|
|
81
68
|
}
|
|
@@ -97,14 +84,6 @@ export class CorsIssue extends Issue {
|
|
|
97
84
|
linkTitle: i18nString(UIStrings.corsPrivateNetworkAccess),
|
|
98
85
|
}],
|
|
99
86
|
};
|
|
100
|
-
case "CorsIssue::PreflightAllowPrivateNetworkError" /* IssueCode.PREFLIGHT_ALLOW_PRIVATE_NETWORK_ERROR */:
|
|
101
|
-
return {
|
|
102
|
-
file: 'corsPreflightAllowPrivateNetworkError.md',
|
|
103
|
-
links: [{
|
|
104
|
-
link: 'https://developer.chrome.com/blog/private-network-access-update',
|
|
105
|
-
linkTitle: i18nString(UIStrings.corsPrivateNetworkAccess),
|
|
106
|
-
}],
|
|
107
|
-
};
|
|
108
87
|
case "CorsIssue::InvalidHeaders" /* IssueCode.INVALID_HEADER_VALUES */:
|
|
109
88
|
return {
|
|
110
89
|
file: 'corsInvalidHeaderValues.md',
|
|
@@ -193,17 +172,6 @@ export class CorsIssue extends Issue {
|
|
|
193
172
|
linkTitle: i18nString(UIStrings.CORS),
|
|
194
173
|
}],
|
|
195
174
|
};
|
|
196
|
-
// TODO(1462857): Change the link after we have a blog post for PNA
|
|
197
|
-
// permission prompt.
|
|
198
|
-
case "CorsIssue::PreflightMissingPrivateNetworkAccessId" /* IssueCode.PREFLIGHT_MISSING_PRIVATE_NETWORK_ACCESS_ID */:
|
|
199
|
-
case "CorsIssue::PreflightMissingPrivateNetworkAccessName" /* IssueCode.PREFLIGHT_MISSING_PRIVATE_NETWORK_ACCESS_NAME */:
|
|
200
|
-
return {
|
|
201
|
-
file: 'corsPrivateNetworkPermissionDenied.md',
|
|
202
|
-
links: [{
|
|
203
|
-
link: 'https://developer.chrome.com/blog/private-network-access-update',
|
|
204
|
-
linkTitle: i18nString(UIStrings.corsPrivateNetworkAccess),
|
|
205
|
-
}],
|
|
206
|
-
};
|
|
207
175
|
case "CorsIssue::LocalNetworkAccessPermissionDenied" /* IssueCode.LOCAL_NETWORK_ACCESS_PERMISSION_DENIED */:
|
|
208
176
|
return {
|
|
209
177
|
file: 'corsLocalNetworkAccessPermissionDenied.md',
|
|
@@ -215,9 +183,6 @@ export class CorsIssue extends Issue {
|
|
|
215
183
|
case "CorsIssue::PreflightMissingAllowExternal" /* IssueCode.PREFLIGHT_MISSING_ALLOW_EXTERNAL */:
|
|
216
184
|
case "CorsIssue::PreflightInvalidAllowExternal" /* IssueCode.PREFLIGHT_INVALID_ALLOW_EXTERNAL */:
|
|
217
185
|
case "CorsIssue::InvalidPrivateNetworkAccess" /* IssueCode.INVALID_PRIVATE_NETWORK_ACCESS */:
|
|
218
|
-
case "CorsIssue::UnexpectedPrivateNetworkAccess" /* IssueCode.UNEXPECTED_PRIVATE_NETWORK_ACCESS */:
|
|
219
|
-
case "CorsIssue::PrivateNetworkAccessPermissionUnavailable" /* IssueCode.PRIVATE_NETWORK_ACCESS_PERMISSION_UNAVAILABLE */:
|
|
220
|
-
case "CorsIssue::PrivateNetworkAccessPermissionDenied" /* IssueCode.PRIVATE_NETWORK_ACCESS_PERMISSION_DENIED */:
|
|
221
186
|
return null;
|
|
222
187
|
}
|
|
223
188
|
}
|
|
@@ -226,9 +191,7 @@ export class CorsIssue extends Issue {
|
|
|
226
191
|
}
|
|
227
192
|
getKind() {
|
|
228
193
|
if (this.details().isWarning &&
|
|
229
|
-
|
|
230
|
-
this.details().corsErrorStatus.corsError === "PreflightMissingAllowPrivateNetwork" /* Protocol.Network.CorsError.PreflightMissingAllowPrivateNetwork */ ||
|
|
231
|
-
this.details().corsErrorStatus.corsError === "PreflightInvalidAllowPrivateNetwork" /* Protocol.Network.CorsError.PreflightInvalidAllowPrivateNetwork */)) {
|
|
194
|
+
this.details().corsErrorStatus.corsError === "InsecurePrivateNetwork" /* Protocol.Network.CorsError.InsecurePrivateNetwork */) {
|
|
232
195
|
return "BreakingChange" /* IssueKind.BREAKING_CHANGE */;
|
|
233
196
|
}
|
|
234
197
|
return "PageError" /* IssueKind.PAGE_ERROR */;
|
package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssueAggregator.js
CHANGED
|
@@ -15,6 +15,7 @@ import { Issue, unionIssueKind } from './Issue.js';
|
|
|
15
15
|
import { LowTextContrastIssue } from './LowTextContrastIssue.js';
|
|
16
16
|
import { MixedContentIssue } from './MixedContentIssue.js';
|
|
17
17
|
import { PartitioningBlobURLIssue } from './PartitioningBlobURLIssue.js';
|
|
18
|
+
import { PermissionElementIssue } from './PermissionElementIssue.js';
|
|
18
19
|
import { QuirksModeIssue } from './QuirksModeIssue.js';
|
|
19
20
|
import { SharedArrayBufferIssue } from './SharedArrayBufferIssue.js';
|
|
20
21
|
/**
|
|
@@ -40,6 +41,7 @@ export class AggregatedIssue extends Issue {
|
|
|
40
41
|
#cookieDeprecationMetadataIssues = new Set();
|
|
41
42
|
#mixedContentIssues = new Set();
|
|
42
43
|
#partitioningBlobURLIssues = new Set();
|
|
44
|
+
#permissionElementIssues = new Set();
|
|
43
45
|
#sharedArrayBufferIssues = new Set();
|
|
44
46
|
#quirksModeIssues = new Set();
|
|
45
47
|
#attributionReportingIssues = new Set();
|
|
@@ -133,6 +135,9 @@ export class AggregatedIssue extends Issue {
|
|
|
133
135
|
getPartitioningBlobURLIssues() {
|
|
134
136
|
return this.#partitioningBlobURLIssues;
|
|
135
137
|
}
|
|
138
|
+
getPermissionElementIssues() {
|
|
139
|
+
return this.#permissionElementIssues;
|
|
140
|
+
}
|
|
136
141
|
/**
|
|
137
142
|
* Produces a primary key for a cookie. Use this instead of `JSON.stringify` in
|
|
138
143
|
* case new fields are added to `AffectedCookie`.
|
|
@@ -225,6 +230,9 @@ export class AggregatedIssue extends Issue {
|
|
|
225
230
|
if (issue instanceof PartitioningBlobURLIssue) {
|
|
226
231
|
this.#partitioningBlobURLIssues.add(issue);
|
|
227
232
|
}
|
|
233
|
+
if (issue instanceof PermissionElementIssue) {
|
|
234
|
+
this.#permissionElementIssues.add(issue);
|
|
235
|
+
}
|
|
228
236
|
}
|
|
229
237
|
getKind() {
|
|
230
238
|
return this.#issueKind;
|