chrome-devtools-frontend 1.0.922470 → 1.0.922924
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/front_end/core/common/Console.ts +5 -1
- package/front_end/core/host/InspectorFrontendHost.ts +6 -5
- package/front_end/core/host/InspectorFrontendHostAPI.ts +102 -0
- package/front_end/core/sdk/CSSModel.ts +8 -4
- package/front_end/core/sdk/Connections.ts +5 -5
- package/front_end/core/sdk/DebuggerModel.ts +8 -5
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +2 -3
- package/front_end/entrypoints/js_app/JsMain.ts +1 -1
- package/front_end/entrypoints/main/MainImpl.ts +4 -7
- package/front_end/entrypoints/node_main/NodeConnectionsPanel.ts +2 -2
- package/front_end/entrypoints/node_main/NodeMain.ts +2 -3
- package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
- package/front_end/models/bindings/BreakpointManager.ts +3 -2
- package/front_end/models/extensions/ExtensionServer.ts +2 -2
- package/front_end/models/issues_manager/DeprecationIssue.ts +1 -1
- package/front_end/models/issues_manager/descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +15 -5
- package/front_end/models/issues_manager/descriptions/CoepFrameResourceNeedsCoepHeader.md +7 -3
- package/front_end/models/issues_manager/descriptions/deprecationNavigatorUserAgent.md +1 -1
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +26 -31
- package/front_end/models/persistence/NetworkPersistenceManager.ts +11 -1
- package/front_end/models/workspace/FileManager.ts +5 -7
- package/front_end/panels/console/ConsoleView.ts +3 -5
- package/front_end/panels/coverage/CoverageView.ts +5 -4
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +47 -44
- package/front_end/panels/css_overview/CSSOverviewController.ts +48 -8
- package/front_end/panels/css_overview/CSSOverviewModel.ts +5 -5
- package/front_end/panels/css_overview/CSSOverviewPanel.ts +22 -21
- package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +12 -9
- package/front_end/panels/elements/ElementsPanel.ts +2 -3
- package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +1 -2
- package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +4 -0
- package/front_end/panels/profiler/CPUProfileFlameChart.ts +26 -9
- package/front_end/panels/sources/DebuggerPlugin.ts +4 -5
- package/front_end/panels/sources/EditingLocationHistoryManager.ts +7 -5
- package/front_end/panels/sources/TabbedEditorContainer.ts +2 -4
- package/front_end/ui/components/docs/toggle_fonts.ts +21 -0
- package/front_end/ui/legacy/ContextMenu.ts +4 -4
- package/front_end/ui/legacy/ForwardedInputEventHandler.ts +3 -7
- package/front_end/ui/legacy/InspectorView.ts +1 -2
- package/front_end/ui/legacy/Widget.ts +1 -3
- package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +5 -8
- package/front_end/ui/legacy/components/color_picker/Spectrum.ts +5 -8
- package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +13 -3
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +3 -2
- package/front_end/ui/legacy/components/source_frame/SourcesTextEditor.ts +18 -2
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ import {reveal} from './Revealer.js';
|
|
|
7
7
|
|
|
8
8
|
let consoleInstance: Console;
|
|
9
9
|
|
|
10
|
-
export class Console extends ObjectWrapper {
|
|
10
|
+
export class Console extends ObjectWrapper<EventTypes> {
|
|
11
11
|
private readonly messagesInternal: Message[];
|
|
12
12
|
/**
|
|
13
13
|
* Instantiable via the instance() factory below.
|
|
@@ -64,6 +64,10 @@ export enum Events {
|
|
|
64
64
|
MessageAdded = 'messageAdded',
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
export type EventTypes = {
|
|
68
|
+
[Events.MessageAdded]: Message,
|
|
69
|
+
};
|
|
70
|
+
|
|
67
71
|
// TODO(crbug.com/1167717): Make this a const enum again
|
|
68
72
|
// eslint-disable-next-line rulesdir/const_enum
|
|
69
73
|
export enum MessageLevel {
|
|
@@ -36,7 +36,7 @@ import * as i18n from '../i18n/i18n.js';
|
|
|
36
36
|
import * as Platform from '../platform/platform.js';
|
|
37
37
|
import * as Root from '../root/root.js';
|
|
38
38
|
|
|
39
|
-
import type {CanShowSurveyResult, ContextMenuDescriptor, EnumeratedHistogram, ExtensionDescriptor, InspectorFrontendHostAPI, LoadNetworkResourceResult, ShowSurveyResult} from './InspectorFrontendHostAPI.js';
|
|
39
|
+
import type {CanShowSurveyResult, ContextMenuDescriptor, EnumeratedHistogram, EventTypes, ExtensionDescriptor, InspectorFrontendHostAPI, LoadNetworkResourceResult, ShowSurveyResult} from './InspectorFrontendHostAPI.js';
|
|
40
40
|
import {EventDescriptors, Events} from './InspectorFrontendHostAPI.js';
|
|
41
41
|
import {streamWrite as resourceLoaderStreamWrite} from './ResourceLoader.js';
|
|
42
42
|
|
|
@@ -54,8 +54,7 @@ const MAX_RECORDED_HISTOGRAMS_SIZE = 100;
|
|
|
54
54
|
|
|
55
55
|
export class InspectorFrontendHostStub implements InspectorFrontendHostAPI {
|
|
56
56
|
private readonly urlsBeingSaved: Map<string, string[]>;
|
|
57
|
-
|
|
58
|
-
events!: Common.EventTarget.EventTarget<any>;
|
|
57
|
+
events!: Common.EventTarget.EventTarget<EventTypes>;
|
|
59
58
|
private windowVisible?: boolean;
|
|
60
59
|
|
|
61
60
|
recordedEnumeratedHistograms: {actionName: EnumeratedHistogram, actionCode: number}[] = [];
|
|
@@ -379,7 +378,8 @@ class InspectorFrontendAPIImpl {
|
|
|
379
378
|
// Single argument methods get dispatched with the param.
|
|
380
379
|
if (signature.length < 2) {
|
|
381
380
|
try {
|
|
382
|
-
|
|
381
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
382
|
+
InspectorFrontendHostInstance.events.dispatchEventToListeners<any>(name, params[0]);
|
|
383
383
|
} catch (error) {
|
|
384
384
|
console.error(error + ' ' + error.stack);
|
|
385
385
|
}
|
|
@@ -392,7 +392,8 @@ class InspectorFrontendAPIImpl {
|
|
|
392
392
|
data[signature[i]] = params[i];
|
|
393
393
|
}
|
|
394
394
|
try {
|
|
395
|
-
|
|
395
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
396
|
+
InspectorFrontendHostInstance.events.dispatchEventToListeners<any>(name, data);
|
|
396
397
|
} catch (error) {
|
|
397
398
|
console.error(error + ' ' + error.stack);
|
|
398
399
|
}
|
|
@@ -68,6 +68,108 @@ export const EventDescriptors = [
|
|
|
68
68
|
[Events.ShowPanel, 'showPanel', ['panelName']],
|
|
69
69
|
];
|
|
70
70
|
|
|
71
|
+
export interface DispatchMessageChunkEvent {
|
|
72
|
+
messageChunk: string;
|
|
73
|
+
messageSize: number;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface EyeDropperPickedColorEvent {
|
|
77
|
+
r: number;
|
|
78
|
+
g: number;
|
|
79
|
+
b: number;
|
|
80
|
+
a: number;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface DevToolsFileSystem {
|
|
84
|
+
type: string;
|
|
85
|
+
fileSystemName: string;
|
|
86
|
+
rootURL: string;
|
|
87
|
+
fileSystemPath: string;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface FileSystemAddedEvent {
|
|
91
|
+
errorMessage?: string;
|
|
92
|
+
fileSystem: DevToolsFileSystem|null;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface FilesChangedEvent {
|
|
96
|
+
changed: string[];
|
|
97
|
+
added: string[];
|
|
98
|
+
removed: string[];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface IndexingEvent {
|
|
102
|
+
requestId: number;
|
|
103
|
+
fileSystemPath: string;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface IndexingTotalWorkCalculatedEvent extends IndexingEvent {
|
|
107
|
+
totalWork: number;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface IndexingWorkedEvent extends IndexingEvent {
|
|
111
|
+
worked: number;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export interface KeyEventUnhandledEvent {
|
|
115
|
+
type: string;
|
|
116
|
+
key: string;
|
|
117
|
+
keyCode: number;
|
|
118
|
+
modifiers: number;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface RevealSourceLineEvent {
|
|
122
|
+
url: string;
|
|
123
|
+
lineNumber: number;
|
|
124
|
+
columnNumber: number;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export interface SavedURLEvent {
|
|
128
|
+
url: string;
|
|
129
|
+
fileSystemPath: string;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export interface SearchCompletedEvent {
|
|
133
|
+
requestId: number;
|
|
134
|
+
files: string[];
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// While `EventDescriptors` are used to dynamically dispatch host binding events,
|
|
138
|
+
// the `EventTypes` "type map" is used for type-checking said events by TypeScript.
|
|
139
|
+
// `EventTypes` is not used at runtime.
|
|
140
|
+
// Please note that the "dispatch" side can't be type-checked as the dispatch is
|
|
141
|
+
// done dynamically.
|
|
142
|
+
export type EventTypes = {
|
|
143
|
+
[Events.AppendedToURL]: string,
|
|
144
|
+
[Events.CanceledSaveURL]: string,
|
|
145
|
+
[Events.ContextMenuCleared]: void,
|
|
146
|
+
[Events.ContextMenuItemSelected]: number,
|
|
147
|
+
[Events.DeviceCountUpdated]: number,
|
|
148
|
+
[Events.DevicesDiscoveryConfigChanged]: Adb.Config,
|
|
149
|
+
[Events.DevicesPortForwardingStatusChanged]: void,
|
|
150
|
+
[Events.DevicesUpdated]: void,
|
|
151
|
+
[Events.DispatchMessage]: string,
|
|
152
|
+
[Events.DispatchMessageChunk]: DispatchMessageChunkEvent,
|
|
153
|
+
[Events.EnterInspectElementMode]: void,
|
|
154
|
+
[Events.EyeDropperPickedColor]: EyeDropperPickedColorEvent,
|
|
155
|
+
[Events.FileSystemsLoaded]: DevToolsFileSystem[],
|
|
156
|
+
[Events.FileSystemRemoved]: string,
|
|
157
|
+
[Events.FileSystemAdded]: FileSystemAddedEvent,
|
|
158
|
+
[Events.FileSystemFilesChangedAddedRemoved]: FilesChangedEvent,
|
|
159
|
+
[Events.IndexingTotalWorkCalculated]: IndexingTotalWorkCalculatedEvent,
|
|
160
|
+
[Events.IndexingWorked]: IndexingWorkedEvent,
|
|
161
|
+
[Events.IndexingDone]: IndexingEvent,
|
|
162
|
+
[Events.KeyEventUnhandled]: KeyEventUnhandledEvent,
|
|
163
|
+
[Events.ReattachMainTarget]: void,
|
|
164
|
+
[Events.ReloadInspectedPage]: boolean,
|
|
165
|
+
[Events.RevealSourceLine]: RevealSourceLineEvent,
|
|
166
|
+
[Events.SavedURL]: SavedURLEvent,
|
|
167
|
+
[Events.SearchCompleted]: SearchCompletedEvent,
|
|
168
|
+
[Events.SetInspectedTabId]: string,
|
|
169
|
+
[Events.SetUseSoftMenu]: boolean,
|
|
170
|
+
[Events.ShowPanel]: string,
|
|
171
|
+
};
|
|
172
|
+
|
|
71
173
|
export interface InspectorFrontendHostAPI {
|
|
72
174
|
addFileSystem(type?: string): void;
|
|
73
175
|
|
|
@@ -707,9 +707,9 @@ export class CSSModel extends SDKModel<EventTypes> {
|
|
|
707
707
|
}
|
|
708
708
|
|
|
709
709
|
if (this.cssPropertyTracker) {
|
|
710
|
-
this.cssPropertyTracker.dispatchEventToListeners(
|
|
711
|
-
|
|
712
|
-
|
|
710
|
+
this.cssPropertyTracker.dispatchEventToListeners(
|
|
711
|
+
CSSPropertyTrackerEvents.TrackedCSSPropertiesUpdated,
|
|
712
|
+
result.nodeIds.map(nodeId => this.domModelInternal.nodeForId(nodeId)));
|
|
713
713
|
}
|
|
714
714
|
}
|
|
715
715
|
|
|
@@ -867,7 +867,7 @@ export class InlineStyleResult {
|
|
|
867
867
|
}
|
|
868
868
|
}
|
|
869
869
|
|
|
870
|
-
export class CSSPropertyTracker extends Common.ObjectWrapper.ObjectWrapper {
|
|
870
|
+
export class CSSPropertyTracker extends Common.ObjectWrapper.ObjectWrapper<CSSPropertyTrackerEventTypes> {
|
|
871
871
|
private readonly cssModel: CSSModel;
|
|
872
872
|
private readonly properties: Protocol.CSS.CSSComputedStyleProperty[];
|
|
873
873
|
constructor(cssModel: CSSModel, propertiesToTrack: Protocol.CSS.CSSComputedStyleProperty[]) {
|
|
@@ -897,6 +897,10 @@ export enum CSSPropertyTrackerEvents {
|
|
|
897
897
|
TrackedCSSPropertiesUpdated = 'TrackedCSSPropertiesUpdated',
|
|
898
898
|
}
|
|
899
899
|
|
|
900
|
+
export type CSSPropertyTrackerEventTypes = {
|
|
901
|
+
[CSSPropertyTrackerEvents.TrackedCSSPropertiesUpdated]: (DOMNode|null)[],
|
|
902
|
+
};
|
|
903
|
+
|
|
900
904
|
SDKModel.register(CSSModel, {capabilities: Capability.DOM, autostart: true});
|
|
901
905
|
export interface ContrastInfo {
|
|
902
906
|
backgroundColors: string[]|null;
|
|
@@ -42,15 +42,15 @@ export class MainConnection implements ProtocolClient.InspectorBackend.Connectio
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
private dispatchMessage(event: Common.EventTarget.EventTargetEvent): void {
|
|
45
|
+
private dispatchMessage(event: Common.EventTarget.EventTargetEvent<string>): void {
|
|
46
46
|
if (this.onMessage) {
|
|
47
|
-
this.onMessage.call(null,
|
|
47
|
+
this.onMessage.call(null, event.data);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
private dispatchMessageChunk(
|
|
52
|
-
|
|
53
|
-
const messageSize =
|
|
51
|
+
private dispatchMessageChunk(
|
|
52
|
+
event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.DispatchMessageChunkEvent>): void {
|
|
53
|
+
const {messageChunk, messageSize} = event.data;
|
|
54
54
|
if (messageSize) {
|
|
55
55
|
this.messageBuffer = '';
|
|
56
56
|
this.messageSize = messageSize;
|
|
@@ -135,7 +135,10 @@ export class DebuggerModel extends SDKModel<EventTypes> {
|
|
|
135
135
|
}>>)|null;
|
|
136
136
|
private expandCallFramesCallback: ((arg0: Array<CallFrame>) => Promise<Array<CallFrame>>)|null;
|
|
137
137
|
evaluateOnCallFrameCallback: ((arg0: CallFrame, arg1: EvaluationOptions) => Promise<EvaluationResult|null>)|null;
|
|
138
|
-
|
|
138
|
+
// We need to be able to register listeners for individual breakpoints. As such, we dispatch
|
|
139
|
+
// on breakpoint ids, which are not statically known. The event payload will always be a `Location`.
|
|
140
|
+
private readonly breakpointResolvedEventTarget =
|
|
141
|
+
new Common.ObjectWrapper.ObjectWrapper<{[breakpointId: string]: Location}>();
|
|
139
142
|
private autoStepOver: boolean;
|
|
140
143
|
private isPausingInternal: boolean;
|
|
141
144
|
|
|
@@ -163,8 +166,6 @@ export class DebuggerModel extends SDKModel<EventTypes> {
|
|
|
163
166
|
this.expandCallFramesCallback = null;
|
|
164
167
|
this.evaluateOnCallFrameCallback = null;
|
|
165
168
|
|
|
166
|
-
this.breakpointResolvedEventTarget = new Common.ObjectWrapper.ObjectWrapper();
|
|
167
|
-
|
|
168
169
|
this.autoStepOver = false;
|
|
169
170
|
|
|
170
171
|
this.isPausingInternal = false;
|
|
@@ -901,12 +902,14 @@ export class DebuggerModel extends SDKModel<EventTypes> {
|
|
|
901
902
|
}
|
|
902
903
|
|
|
903
904
|
addBreakpointListener(
|
|
904
|
-
breakpointId: string, listener: (arg0: Common.EventTarget.EventTargetEvent) => void,
|
|
905
|
+
breakpointId: string, listener: (arg0: Common.EventTarget.EventTargetEvent<Location>) => void,
|
|
906
|
+
thisObject?: Object): void {
|
|
905
907
|
this.breakpointResolvedEventTarget.addEventListener(breakpointId, listener, thisObject);
|
|
906
908
|
}
|
|
907
909
|
|
|
908
910
|
removeBreakpointListener(
|
|
909
|
-
breakpointId: string, listener: (arg0: Common.EventTarget.EventTargetEvent) => void,
|
|
911
|
+
breakpointId: string, listener: (arg0: Common.EventTarget.EventTargetEvent<Location>) => void,
|
|
912
|
+
thisObject?: Object): void {
|
|
910
913
|
this.breakpointResolvedEventTarget.removeEventListener(breakpointId, listener, thisObject);
|
|
911
914
|
}
|
|
912
915
|
|
|
@@ -37,7 +37,7 @@ const str_ = i18n.i18n.registerUIStrings('entrypoints/inspector_main/InspectorMa
|
|
|
37
37
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
38
38
|
let inspectorMainImplInstance: InspectorMainImpl;
|
|
39
39
|
|
|
40
|
-
export class InspectorMainImpl
|
|
40
|
+
export class InspectorMainImpl implements Common.Runnable.Runnable {
|
|
41
41
|
static instance(opts: {
|
|
42
42
|
forceNew: boolean|null,
|
|
43
43
|
} = {forceNew: null}): InspectorMainImpl {
|
|
@@ -84,8 +84,7 @@ export class InspectorMainImpl extends Common.ObjectWrapper.ObjectWrapper implem
|
|
|
84
84
|
new MobileThrottling.NetworkPanelIndicator.NetworkPanelIndicator();
|
|
85
85
|
|
|
86
86
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(
|
|
87
|
-
Host.InspectorFrontendHostAPI.Events.ReloadInspectedPage,
|
|
88
|
-
const hard = (event.data as boolean);
|
|
87
|
+
Host.InspectorFrontendHostAPI.Events.ReloadInspectedPage, ({data: hard}) => {
|
|
89
88
|
SDK.ResourceTreeModel.ResourceTreeModel.reloadAllPages(hard);
|
|
90
89
|
});
|
|
91
90
|
}
|
|
@@ -20,7 +20,7 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
|
20
20
|
|
|
21
21
|
let jsMainImplInstance: JsMainImpl;
|
|
22
22
|
|
|
23
|
-
export class JsMainImpl
|
|
23
|
+
export class JsMainImpl implements Common.Runnable.Runnable {
|
|
24
24
|
static instance(opts: {forceNew: boolean|null} = {forceNew: null}): JsMainImpl {
|
|
25
25
|
const {forceNew} = opts;
|
|
26
26
|
if (!jsMainImplInstance || forceNew) {
|
|
@@ -576,19 +576,16 @@ export class MainImpl {
|
|
|
576
576
|
private registerMessageSinkListener(): void {
|
|
577
577
|
Common.Console.Console.instance().addEventListener(Common.Console.Events.MessageAdded, messageAdded);
|
|
578
578
|
|
|
579
|
-
function messageAdded(
|
|
580
|
-
const message = (event.data as Common.Console.Message);
|
|
579
|
+
function messageAdded({data: message}: Common.EventTarget.EventTargetEvent<Common.Console.Message>): void {
|
|
581
580
|
if (message.show) {
|
|
582
581
|
Common.Console.Console.instance().show();
|
|
583
582
|
}
|
|
584
583
|
}
|
|
585
584
|
}
|
|
586
585
|
|
|
587
|
-
private revealSourceLine(
|
|
588
|
-
|
|
589
|
-
const lineNumber =
|
|
590
|
-
const columnNumber = (event.data['columnNumber'] as number);
|
|
591
|
-
|
|
586
|
+
private revealSourceLine(
|
|
587
|
+
event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.RevealSourceLineEvent>): void {
|
|
588
|
+
const {url, lineNumber, columnNumber} = event.data;
|
|
592
589
|
const uiSourceCode = Workspace.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(url);
|
|
593
590
|
if (uiSourceCode) {
|
|
594
591
|
Common.Revealer.reveal(uiSourceCode.uiLocation(lineNumber, columnNumber));
|
|
@@ -78,8 +78,8 @@ export class NodeConnectionsPanel extends UI.Panel.Panel {
|
|
|
78
78
|
return nodeConnectionsPanelInstance;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
private devicesDiscoveryConfigChanged(
|
|
82
|
-
this.config =
|
|
81
|
+
private devicesDiscoveryConfigChanged({data: config}: Common.EventTarget.EventTargetEvent<Adb.Config>): void {
|
|
82
|
+
this.config = config;
|
|
83
83
|
this.networkDiscoveryView.discoveryConfigChanged(this.config.networkDiscoveryConfig);
|
|
84
84
|
}
|
|
85
85
|
wasShown(): void {
|
|
@@ -27,7 +27,7 @@ const str_ = i18n.i18n.registerUIStrings('entrypoints/node_main/NodeMain.ts', UI
|
|
|
27
27
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
28
28
|
let nodeMainImplInstance: NodeMainImpl;
|
|
29
29
|
|
|
30
|
-
export class NodeMainImpl
|
|
30
|
+
export class NodeMainImpl implements Common.Runnable.Runnable {
|
|
31
31
|
static instance(opts: {forceNew: boolean|null} = {forceNew: null}): NodeMainImpl {
|
|
32
32
|
const {forceNew} = opts;
|
|
33
33
|
if (!nodeMainImplInstance || forceNew) {
|
|
@@ -70,8 +70,7 @@ export class NodeChildTargetManager extends SDK.SDKModel.SDKModel implements Pro
|
|
|
70
70
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(true);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
private devicesDiscoveryConfigChanged(
|
|
74
|
-
const config = (event.data as Adb.Config);
|
|
73
|
+
private devicesDiscoveryConfigChanged({data: config}: Common.EventTarget.EventTargetEvent<Adb.Config>): void {
|
|
75
74
|
const locations = [];
|
|
76
75
|
for (const address of config.networkDiscoveryConfig) {
|
|
77
76
|
const parts = address.split(':');
|
|
@@ -20,7 +20,7 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
|
20
20
|
|
|
21
21
|
let workerMainImplInstance: WorkerMainImpl;
|
|
22
22
|
|
|
23
|
-
export class WorkerMainImpl
|
|
23
|
+
export class WorkerMainImpl implements Common.Runnable.Runnable {
|
|
24
24
|
static instance(opts: {
|
|
25
25
|
forceNew: boolean|null,
|
|
26
26
|
} = {forceNew: null}): WorkerMainImpl {
|
|
@@ -734,8 +734,9 @@ export class ModelBreakpoint {
|
|
|
734
734
|
this.breakpointIds = [];
|
|
735
735
|
}
|
|
736
736
|
|
|
737
|
-
private async breakpointResolved(
|
|
738
|
-
|
|
737
|
+
private async breakpointResolved({data: location}: Common.EventTarget.EventTargetEvent<SDK.DebuggerModel.Location>):
|
|
738
|
+
Promise<void> {
|
|
739
|
+
await this.addResolvedLocation(location);
|
|
739
740
|
}
|
|
740
741
|
|
|
741
742
|
private async locationUpdated(liveLocation: LiveLocation): Promise<void> {
|
|
@@ -817,9 +817,9 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
|
|
|
817
817
|
});
|
|
818
818
|
}
|
|
819
819
|
|
|
820
|
-
private setInspectedTabId(event: Common.EventTarget.EventTargetEvent): void {
|
|
820
|
+
private setInspectedTabId(event: Common.EventTarget.EventTargetEvent<string>): void {
|
|
821
821
|
const oldId = this.inspectedTabId;
|
|
822
|
-
this.inspectedTabId =
|
|
822
|
+
this.inspectedTabId = event.data;
|
|
823
823
|
if (oldId === null) {
|
|
824
824
|
// Run deferred init
|
|
825
825
|
this.initializeExtensions();
|
|
@@ -46,7 +46,7 @@ export class DeprecationIssue extends Issue<IssueCode> {
|
|
|
46
46
|
return {
|
|
47
47
|
file: 'deprecationNavigatorUserAgent.md',
|
|
48
48
|
links: [{
|
|
49
|
-
link: 'https://blog.chromium.org/2021/
|
|
49
|
+
link: 'https://blog.chromium.org/2021/09/user-agent-reduction-origin-trial-and-dates.html',
|
|
50
50
|
linkTitle: i18nString(UIStrings.userAgentReduction),
|
|
51
51
|
}],
|
|
52
52
|
};
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
# Specify a Cross-Origin Resource Policy to prevent a resource from being blocked
|
|
2
2
|
|
|
3
|
-
Because your site has the Cross-Origin Embedder Policy (COEP) enabled, each
|
|
4
|
-
|
|
3
|
+
Because your site has the Cross-Origin Embedder Policy (COEP) enabled, each
|
|
4
|
+
resource must specify a suitable Cross-Origin Resource Policy (CORP). This
|
|
5
|
+
behavior prevents a document from loading cross-origin resources which don’t
|
|
6
|
+
explicitly grant permission to be loaded.
|
|
5
7
|
|
|
6
|
-
To solve this, add the following to the resource’
|
|
7
|
-
* `Cross-Origin-Resource-Policy: same-site` if the resource and your site are
|
|
8
|
-
|
|
8
|
+
To solve this, add the following to the resource’ response header:
|
|
9
|
+
* `Cross-Origin-Resource-Policy: same-site` if the resource and your site are
|
|
10
|
+
served from the same site.
|
|
11
|
+
* `Cross-Origin-Resource-Policy: cross-origin` if the resource is served from
|
|
12
|
+
another location than your website. ⚠️If you set this header, any website can
|
|
13
|
+
embed this resource.
|
|
14
|
+
|
|
15
|
+
Alternatively, the document can use the variant: `Cross-Origin-Embedder-Policy:
|
|
16
|
+
credentialless` instead of `require-corp`. It allows loading the resource,
|
|
17
|
+
despite the missing CORP header, at the cost of requesting it without
|
|
18
|
+
credentials like Cookies.
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# Specify a Cross-Origin Embedder Policy to prevent this frame from being blocked
|
|
2
2
|
|
|
3
|
-
Because your site has the Cross-Origin Embedder Policy (COEP) enabled, each
|
|
4
|
-
|
|
3
|
+
Because your site has the Cross-Origin Embedder Policy (COEP) enabled, each
|
|
4
|
+
embedded iframe must also specify this policy. This behavior protects private
|
|
5
|
+
data from being exposed to untrusted third party sites.
|
|
5
6
|
|
|
6
|
-
To solve this, add
|
|
7
|
+
To solve this, add one of following to the embedded frame’s HTML response
|
|
8
|
+
header:
|
|
9
|
+
* `Cross-Origin-Embedder-Policy: require-corp`
|
|
10
|
+
* `Cross-Origin-Embedder-Policy: credentialless` (Chrome > 96)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Audit usage of navigator.userAgent, navigator.appVersion, and navigator.platform
|
|
2
2
|
|
|
3
3
|
A page or script is accessing at least one of `navigator.userAgent`, `navigator.appVersion`, and `navigator.platform`.
|
|
4
|
-
|
|
4
|
+
Starting in Chrome 101, the amount of information available in the User Agent string will be reduced.
|
|
5
5
|
|
|
6
6
|
To fix this issue, replace the usage of `navigator.userAgent`, `navigator.appVersion`, and `navigator.platform` with feature detection, progressive enhancement, or migrate to `navigator.userAgentData`.
|
|
7
7
|
|
|
@@ -139,8 +139,10 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
139
139
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.requestFileSystems();
|
|
140
140
|
return promise;
|
|
141
141
|
|
|
142
|
-
function onFileSystemsLoaded(
|
|
143
|
-
|
|
142
|
+
function onFileSystemsLoaded(
|
|
143
|
+
this: IsolatedFileSystemManager,
|
|
144
|
+
event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.DevToolsFileSystem[]>): void {
|
|
145
|
+
const fileSystems = event.data;
|
|
144
146
|
const promises = [];
|
|
145
147
|
for (let i = 0; i < fileSystems.length; ++i) {
|
|
146
148
|
promises.push(this.innerAddFileSystem(fileSystems[i], false));
|
|
@@ -168,7 +170,8 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
168
170
|
return this.fileSystemsLoadedPromise;
|
|
169
171
|
}
|
|
170
172
|
|
|
171
|
-
private innerAddFileSystem(fileSystem:
|
|
173
|
+
private innerAddFileSystem(fileSystem: Host.InspectorFrontendHostAPI.DevToolsFileSystem, dispatchEvent: boolean):
|
|
174
|
+
Promise<IsolatedFileSystem|null> {
|
|
172
175
|
const embedderPath = fileSystem.fileSystemPath;
|
|
173
176
|
const fileSystemURL = Common.ParsedURL.ParsedURL.platformPathToURL(fileSystem.fileSystemPath);
|
|
174
177
|
const promise = IsolatedFileSystem.create(
|
|
@@ -193,9 +196,9 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
193
196
|
this.dispatchEventToListeners(Events.FileSystemAdded, fileSystem);
|
|
194
197
|
}
|
|
195
198
|
|
|
196
|
-
private onFileSystemAdded(
|
|
197
|
-
|
|
198
|
-
const fileSystem = event.data
|
|
199
|
+
private onFileSystemAdded(
|
|
200
|
+
event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.FileSystemAddedEvent>): void {
|
|
201
|
+
const {errorMessage, fileSystem} = event.data;
|
|
199
202
|
if (errorMessage) {
|
|
200
203
|
if (errorMessage !== '<selection cancelled>') {
|
|
201
204
|
Common.Console.Console.instance().error(i18nString(UIStrings.unableToAddFilesystemS, {PH1: errorMessage}));
|
|
@@ -215,8 +218,8 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
215
218
|
}
|
|
216
219
|
}
|
|
217
220
|
|
|
218
|
-
private onFileSystemRemoved(event: Common.EventTarget.EventTargetEvent): void {
|
|
219
|
-
const embedderPath = event.data
|
|
221
|
+
private onFileSystemRemoved(event: Common.EventTarget.EventTargetEvent<string>): void {
|
|
222
|
+
const embedderPath = event.data;
|
|
220
223
|
const fileSystemPath = Common.ParsedURL.ParsedURL.platformPathToURL(embedderPath);
|
|
221
224
|
const isolatedFileSystem = this.fileSystemsInternal.get(fileSystemPath);
|
|
222
225
|
if (!isolatedFileSystem) {
|
|
@@ -227,7 +230,8 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
227
230
|
this.dispatchEventToListeners(Events.FileSystemRemoved, isolatedFileSystem);
|
|
228
231
|
}
|
|
229
232
|
|
|
230
|
-
private onFileSystemFilesChanged(
|
|
233
|
+
private onFileSystemFilesChanged(
|
|
234
|
+
event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.FilesChangedEvent>): void {
|
|
231
235
|
const urlPaths = {
|
|
232
236
|
changed: groupFilePathsIntoFileSystemPaths.call(this, event.data.changed),
|
|
233
237
|
added: groupFilePathsIntoFileSystemPaths.call(this, event.data.added),
|
|
@@ -281,10 +285,10 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
281
285
|
return requestId;
|
|
282
286
|
}
|
|
283
287
|
|
|
284
|
-
private onIndexingTotalWorkCalculated(
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
+
private onIndexingTotalWorkCalculated(
|
|
289
|
+
event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.IndexingTotalWorkCalculatedEvent>):
|
|
290
|
+
void {
|
|
291
|
+
const {requestId, totalWork} = event.data;
|
|
288
292
|
const progress = this.progresses.get(requestId);
|
|
289
293
|
if (!progress) {
|
|
290
294
|
return;
|
|
@@ -292,10 +296,9 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
292
296
|
progress.setTotalWork(totalWork);
|
|
293
297
|
}
|
|
294
298
|
|
|
295
|
-
private onIndexingWorked(
|
|
296
|
-
|
|
297
|
-
const worked = event.data
|
|
298
|
-
|
|
299
|
+
private onIndexingWorked(
|
|
300
|
+
event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.IndexingWorkedEvent>): void {
|
|
301
|
+
const {requestId, worked} = event.data;
|
|
299
302
|
const progress = this.progresses.get(requestId);
|
|
300
303
|
if (!progress) {
|
|
301
304
|
return;
|
|
@@ -307,9 +310,9 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
307
310
|
}
|
|
308
311
|
}
|
|
309
312
|
|
|
310
|
-
private onIndexingDone(event: Common.EventTarget.EventTargetEvent):
|
|
311
|
-
|
|
312
|
-
|
|
313
|
+
private onIndexingDone(event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.IndexingEvent>):
|
|
314
|
+
void {
|
|
315
|
+
const {requestId} = event.data;
|
|
313
316
|
const progress = this.progresses.get(requestId);
|
|
314
317
|
if (!progress) {
|
|
315
318
|
return;
|
|
@@ -318,10 +321,9 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
318
321
|
this.progresses.delete(requestId);
|
|
319
322
|
}
|
|
320
323
|
|
|
321
|
-
private onSearchCompleted(
|
|
322
|
-
|
|
323
|
-
const files = event.data
|
|
324
|
-
|
|
324
|
+
private onSearchCompleted(
|
|
325
|
+
event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.SearchCompletedEvent>): void {
|
|
326
|
+
const {requestId, files} = event.data;
|
|
325
327
|
const callback = this.callbacks.get(requestId);
|
|
326
328
|
if (!callback) {
|
|
327
329
|
return;
|
|
@@ -350,10 +352,3 @@ export type EventTypes = {
|
|
|
350
352
|
};
|
|
351
353
|
|
|
352
354
|
let lastRequestId = 0;
|
|
353
|
-
|
|
354
|
-
export interface FileSystem {
|
|
355
|
-
type: string;
|
|
356
|
-
fileSystemName: string;
|
|
357
|
-
rootURL: string;
|
|
358
|
-
fileSystemPath: string;
|
|
359
|
-
}
|
|
@@ -14,7 +14,8 @@ import {PersistenceBinding, PersistenceImpl} from './PersistenceImpl.js';
|
|
|
14
14
|
|
|
15
15
|
let networkPersistenceManagerInstance: NetworkPersistenceManager|null;
|
|
16
16
|
|
|
17
|
-
export class NetworkPersistenceManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
|
|
17
|
+
export class NetworkPersistenceManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes> implements
|
|
18
|
+
SDK.TargetManager.Observer {
|
|
18
19
|
private bindings: WeakMap<Workspace.UISourceCode.UISourceCode, PersistenceBinding>;
|
|
19
20
|
private readonly originalResponseContentPromises: WeakMap<Workspace.UISourceCode.UISourceCode, Promise<string|null>>;
|
|
20
21
|
private savingForOverrides: WeakSet<Workspace.UISourceCode.UISourceCode>;
|
|
@@ -64,6 +65,15 @@ export class NetworkPersistenceManager extends Common.ObjectWrapper.ObjectWrappe
|
|
|
64
65
|
|
|
65
66
|
this.eventDescriptors = [];
|
|
66
67
|
this.enabledChanged();
|
|
68
|
+
|
|
69
|
+
SDK.TargetManager.TargetManager.instance().observeTargets(this);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
targetAdded(): void {
|
|
73
|
+
this.updateActiveProject();
|
|
74
|
+
}
|
|
75
|
+
targetRemoved(): void {
|
|
76
|
+
this.updateActiveProject();
|
|
67
77
|
}
|
|
68
78
|
|
|
69
79
|
static instance(opts: {
|
|
@@ -66,17 +66,16 @@ export class FileManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
|
|
|
66
66
|
return result;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
private savedURL(event: Common.EventTarget.EventTargetEvent): void {
|
|
70
|
-
const url = event.data
|
|
69
|
+
private savedURL(event: Common.EventTarget.EventTargetEvent<Host.InspectorFrontendHostAPI.SavedURLEvent>): void {
|
|
70
|
+
const {url, fileSystemPath} = event.data;
|
|
71
71
|
const callback = this.saveCallbacks.get(url);
|
|
72
72
|
this.saveCallbacks.delete(url);
|
|
73
73
|
if (callback) {
|
|
74
|
-
callback({fileSystemPath
|
|
74
|
+
callback({fileSystemPath});
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
private canceledSavedURL(
|
|
79
|
-
const url = event.data as string;
|
|
78
|
+
private canceledSavedURL({data: url}: Common.EventTarget.EventTargetEvent<string>): void {
|
|
80
79
|
const callback = this.saveCallbacks.get(url);
|
|
81
80
|
this.saveCallbacks.delete(url);
|
|
82
81
|
if (callback) {
|
|
@@ -92,8 +91,7 @@ export class FileManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
|
|
|
92
91
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.close(url);
|
|
93
92
|
}
|
|
94
93
|
|
|
95
|
-
private appendedToURL(
|
|
96
|
-
const url = event.data as string;
|
|
94
|
+
private appendedToURL({data: url}: Common.EventTarget.EventTargetEvent<string>): void {
|
|
97
95
|
this.dispatchEventToListeners(Events.AppendedToURL, url);
|
|
98
96
|
}
|
|
99
97
|
}
|
|
@@ -620,11 +620,9 @@ export class ConsoleView extends UI.Widget.VBox implements UI.SearchableView.Sea
|
|
|
620
620
|
|
|
621
621
|
private registerWithMessageSink(): void {
|
|
622
622
|
Common.Console.Console.instance().messages().forEach(this.addSinkMessage, this);
|
|
623
|
-
Common.Console.Console.instance().addEventListener(Common.Console.Events.MessageAdded,
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
this.addSinkMessage((event.data as Common.Console.Message));
|
|
627
|
-
}
|
|
623
|
+
Common.Console.Console.instance().addEventListener(Common.Console.Events.MessageAdded, ({data: message}) => {
|
|
624
|
+
this.addSinkMessage(message);
|
|
625
|
+
}, this);
|
|
628
626
|
}
|
|
629
627
|
|
|
630
628
|
private addSinkMessage(message: Common.Console.Message): void {
|