diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-13 15:05:36 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-14 10:33:47 +0000 |
commit | e684a3455bcc29a6e3e66a004e352dea4e1141e7 (patch) | |
tree | d55b4003bde34d7d05f558f02cfd82b2a66a7aac /chromium/third_party/blink/renderer/devtools/front_end/sdk | |
parent | 2b94bfe47ccb6c08047959d1c26e392919550e86 (diff) | |
download | qtwebengine-chromium-e684a3455bcc29a6e3e66a004e352dea4e1141e7.tar.gz |
BASELINE: Update Chromium to 72.0.3626.110 and Ninja to 1.9.0
Change-Id: Ic57220b00ecc929a893c91f5cc552f5d3e99e922
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/devtools/front_end/sdk')
14 files changed, 317 insertions, 226 deletions
diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/ChildTargetManager.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/ChildTargetManager.js index 559e26aa151..2af3af65392 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/ChildTargetManager.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/ChildTargetManager.js @@ -17,20 +17,20 @@ SDK.ChildTargetManager = class extends SDK.SDKModel { /** @type {!Map<string, !Protocol.Target.TargetInfo>} */ this._targetInfos = new Map(); - /** @type {!Map<string, !SDK.ChildConnection>} */ - this._childConnections = new Map(); + /** @type {!Map<string, !SDK.Target>} */ + this._childTargets = new Map(); parentTarget.registerTargetDispatcher(this); - this._targetAgent.invoke_setAutoAttach({autoAttach: true, waitForDebuggerOnStart: true}); + this._targetAgent.invoke_setAutoAttach({autoAttach: true, waitForDebuggerOnStart: true, flatten: true}); - if (!parentTarget.parentTarget()) { + if (!parentTarget.parentTarget() && !Host.isUnderTest()) { this._targetAgent.setDiscoverTargets(true); this._targetAgent.setRemoteLocations([{host: 'localhost', port: 9229}]); } } /** - * @param {function({target: !SDK.Target, waitingForDebugger: boolean})=} attachCallback + * @param {function({target: !SDK.Target, waitingForDebugger: boolean}):!Promise=} attachCallback */ static install(attachCallback) { SDK.ChildTargetManager._attachCallback = attachCallback; @@ -42,7 +42,7 @@ SDK.ChildTargetManager = class extends SDK.SDKModel { * @return {!Promise} */ suspendModel() { - return this._targetAgent.invoke_setAutoAttach({autoAttach: true, waitForDebuggerOnStart: false}); + return this._targetAgent.invoke_setAutoAttach({autoAttach: true, waitForDebuggerOnStart: false, flatten: true}); } /** @@ -50,37 +50,18 @@ SDK.ChildTargetManager = class extends SDK.SDKModel { * @return {!Promise} */ resumeModel() { - return this._targetAgent.invoke_setAutoAttach({autoAttach: true, waitForDebuggerOnStart: true}); + return this._targetAgent.invoke_setAutoAttach({autoAttach: true, waitForDebuggerOnStart: true, flatten: true}); } /** * @override */ dispose() { - for (const sessionId of this._childConnections.keys()) + for (const sessionId of this._childTargets.keys()) this.detachedFromTarget(sessionId, undefined); } /** - * @param {string} type - * @return {number} - */ - _capabilitiesForType(type) { - if (type === 'worker') { - return SDK.Target.Capability.JS | SDK.Target.Capability.Log | SDK.Target.Capability.Network | - SDK.Target.Capability.Target; - } - if (type === 'service_worker') - return SDK.Target.Capability.Log | SDK.Target.Capability.Network | SDK.Target.Capability.Target; - if (type === 'iframe') { - return SDK.Target.Capability.Browser | SDK.Target.Capability.DOM | SDK.Target.Capability.JS | - SDK.Target.Capability.Log | SDK.Target.Capability.Network | SDK.Target.Capability.Target | - SDK.Target.Capability.Tracing | SDK.Target.Capability.Emulation | SDK.Target.Capability.Input; - } - return 0; - } - - /** * @override * @param {!Protocol.Target.TargetInfo} targetInfo */ @@ -134,13 +115,26 @@ SDK.ChildTargetManager = class extends SDK.SDKModel { targetName = parsedURL ? parsedURL.lastPathComponentWithFragment() : '#' + (++SDK.ChildTargetManager._lastAnonymousTargetId); } - const target = this._targetManager.createTarget( - targetInfo.targetId, targetName, this._capabilitiesForType(targetInfo.type), - this._createChildConnection.bind(this, this._targetAgent, sessionId), this._parentTarget, false /* isNodeJS */); - if (SDK.ChildTargetManager._attachCallback) - SDK.ChildTargetManager._attachCallback({target, waitingForDebugger}); - target.runtimeAgent().runIfWaitingForDebugger(); + let type = SDK.Target.Type.Browser; + if (targetInfo.type === 'iframe') + type = SDK.Target.Type.Frame; + else if (targetInfo.type === 'worker') + type = SDK.Target.Type.Worker; + else if (targetInfo.type === 'service_worker') + type = SDK.Target.Type.ServiceWorker; + + const target = + this._targetManager.createTarget(targetInfo.targetId, targetName, type, this._parentTarget, sessionId); + this._childTargets.set(sessionId, target); + + if (SDK.ChildTargetManager._attachCallback) { + SDK.ChildTargetManager._attachCallback({target, waitingForDebugger}).then(() => { + target.runtimeAgent().runIfWaitingForDebugger(); + }); + } else { + target.runtimeAgent().runIfWaitingForDebugger(); + } } /** @@ -149,8 +143,8 @@ SDK.ChildTargetManager = class extends SDK.SDKModel { * @param {string=} childTargetId */ detachedFromTarget(sessionId, childTargetId) { - this._childConnections.get(sessionId).onDisconnect.call(null, 'target terminated'); - this._childConnections.delete(sessionId); + this._childTargets.get(sessionId).dispose('target terminated'); + this._childTargets.delete(sessionId); } /** @@ -160,21 +154,7 @@ SDK.ChildTargetManager = class extends SDK.SDKModel { * @param {string=} childTargetId */ receivedMessageFromTarget(sessionId, message, childTargetId) { - const connection = this._childConnections.get(sessionId); - if (connection) - connection.onMessage.call(null, message); - } - - /** - * @param {!Protocol.TargetAgent} agent - * @param {string} sessionId - * @param {!Protocol.InspectorBackend.Connection.Params} params - * @return {!Protocol.InspectorBackend.Connection} - */ - _createChildConnection(agent, sessionId, params) { - const connection = new SDK.ChildConnection(agent, sessionId, params); - this._childConnections.set(sessionId, connection); - return connection; + // We use flatten protocol. } }; diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/Connections.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/Connections.js index 112423b791f..7bd231e8c56 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/Connections.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/Connections.js @@ -3,17 +3,14 @@ // found in the LICENSE file. /** - * @unrestricted + * @implements {Protocol.Connection} */ -SDK.MainConnection = class extends Protocol.InspectorBackend.Connection { - /** - * @param {!Protocol.InspectorBackend.Connection.Params} params - */ - constructor(params) { - super(); - this._onMessage = params.onMessage; - this._onDisconnect = params.onDisconnect; - this._disconnected = false; +SDK.MainConnection = class { + constructor() { + this._onMessage = null; + this._onDisconnect = null; + this._messageBuffer = ''; + this._messageSize = 0; this._eventListeners = [ InspectorFrontendHost.events.addEventListener( InspectorFrontendHostAPI.Events.DispatchMessage, this._dispatchMessage, this), @@ -24,10 +21,26 @@ SDK.MainConnection = class extends Protocol.InspectorBackend.Connection { /** * @override + * @param {function((!Object|string))} onMessage + */ + setOnMessage(onMessage) { + this._onMessage = onMessage; + } + + /** + * @override + * @param {function(string)} onDisconnect + */ + setOnDisconnect(onDisconnect) { + this._onDisconnect = onDisconnect; + } + + /** + * @override * @param {string} message */ sendRawMessage(message) { - if (!this._disconnected) + if (this._onMessage) InspectorFrontendHost.sendMessageToBackend(message); } @@ -35,7 +48,8 @@ SDK.MainConnection = class extends Protocol.InspectorBackend.Connection { * @param {!Common.Event} event */ _dispatchMessage(event) { - this._onMessage.call(null, /** @type {string} */ (event.data)); + if (this._onMessage) + this._onMessage.call(null, /** @type {string} */ (event.data)); } /** @@ -65,12 +79,12 @@ SDK.MainConnection = class extends Protocol.InspectorBackend.Connection { Common.EventTarget.removeEventListeners(this._eventListeners); this._onDisconnect = null; this._onMessage = null; - this._disconnected = true; let fulfill; const promise = new Promise(f => fulfill = f); InspectorFrontendHost.reattach(() => { - onDisconnect.call(null, 'force disconnect'); + if (onDisconnect) + onDisconnect.call(null, 'force disconnect'); fulfill(); }); return promise; @@ -78,28 +92,46 @@ SDK.MainConnection = class extends Protocol.InspectorBackend.Connection { }; /** - * @unrestricted + * @implements {Protocol.Connection} */ -SDK.WebSocketConnection = class extends Protocol.InspectorBackend.Connection { +SDK.WebSocketConnection = class { /** * @param {string} url * @param {function()} onWebSocketDisconnect - * @param {!Protocol.InspectorBackend.Connection.Params} params */ - constructor(url, onWebSocketDisconnect, params) { - super(); + constructor(url, onWebSocketDisconnect) { this._socket = new WebSocket(url); this._socket.onerror = this._onError.bind(this); this._socket.onopen = this._onOpen.bind(this); - this._socket.onmessage = messageEvent => params.onMessage.call(null, /** @type {string} */ (messageEvent.data)); + this._socket.onmessage = messageEvent => { + if (this._onMessage) + this._onMessage.call(null, /** @type {string} */ (messageEvent.data)); + }; this._socket.onclose = this._onClose.bind(this); - this._onDisconnect = params.onDisconnect; + this._onMessage = null; + this._onDisconnect = null; this._onWebSocketDisconnect = onWebSocketDisconnect; this._connected = false; this._messages = []; } + /** + * @override + * @param {function((!Object|string))} onMessage + */ + setOnMessage(onMessage) { + this._onMessage = onMessage; + } + + /** + * @override + * @param {function(string)} onDisconnect + */ + setOnDisconnect(onDisconnect) { + this._onDisconnect = onDisconnect; + } + _onError() { this._onWebSocketDisconnect.call(null); // This is called if error occurred while connecting. @@ -153,7 +185,8 @@ SDK.WebSocketConnection = class extends Protocol.InspectorBackend.Connection { let fulfill; const promise = new Promise(f => fulfill = f); this._close(() => { - this._onDisconnect.call(null, 'force disconnect'); + if (this._onDisconnect) + this._onDisconnect.call(null, 'force disconnect'); fulfill(); }); return promise; @@ -161,16 +194,28 @@ SDK.WebSocketConnection = class extends Protocol.InspectorBackend.Connection { }; /** - * @unrestricted + * @implements {Protocol.Connection} */ -SDK.StubConnection = class extends Protocol.InspectorBackend.Connection { +SDK.StubConnection = class { + constructor() { + this._onMessage = null; + this._onDisconnect = null; + } + /** - * @param {!Protocol.InspectorBackend.Connection.Params} params + * @override + * @param {function((!Object|string))} onMessage */ - constructor(params) { - super(); - this._onMessage = params.onMessage; - this._onDisconnect = params.onDisconnect; + setOnMessage(onMessage) { + this._onMessage = onMessage; + } + + /** + * @override + * @param {function(string)} onDisconnect + */ + setOnDisconnect(onDisconnect) { + this._onDisconnect = onDisconnect; } /** @@ -188,10 +233,11 @@ SDK.StubConnection = class extends Protocol.InspectorBackend.Connection { const messageObject = JSON.parse(message); const error = { message: 'This is a stub connection, can\'t dispatch message.', - code: Protocol.InspectorBackend.DevToolsStubErrorCode, + code: Protocol.DevToolsStubErrorCode, data: messageObject }; - this._onMessage.call(null, {id: messageObject.id, error: error}); + if (this._onMessage) + this._onMessage.call(null, {id: messageObject.id, error: error}); } /** @@ -199,59 +245,60 @@ SDK.StubConnection = class extends Protocol.InspectorBackend.Connection { * @return {!Promise} */ disconnect() { - this._onDisconnect.call(null, 'force disconnect'); + if (this._onDisconnect) + this._onDisconnect.call(null, 'force disconnect'); this._onDisconnect = null; this._onMessage = null; return Promise.resolve(); } }; -SDK.ChildConnection = class extends Protocol.InspectorBackend.Connection { - /** - * @param {!Protocol.TargetAgent} agent - * @param {string} sessionId - * @param {!Protocol.InspectorBackend.Connection.Params} params - */ - constructor(agent, sessionId, params) { - super(); - this._agent = agent; - this._sessionId = sessionId; - this.onMessage = params.onMessage; - this.onDisconnect = params.onDisconnect; - } - - /** - * @override - * @param {string} message - */ - sendRawMessage(message) { - this._agent.sendMessageToTarget(message, this._sessionId); - } - - /** - * @override - * @return {!Promise} - */ - disconnect() { - throw 'Not implemented'; - } +/** + * @param {function()} createMainTarget + * @param {function()} websocketConnectionLost + */ +SDK.initMainConnection = function(createMainTarget, websocketConnectionLost) { + SDK._websocketConnectionLost = websocketConnectionLost; + SDK._createMainTarget = createMainTarget; + Protocol.Connection.setFactory(SDK._createMainConnection); + SDK._createMainTarget(); + InspectorFrontendHost.connectionReady(); }; /** - * @param {!Protocol.InspectorBackend.Connection.Params} params - * @param {function()} connectionLostCallback - * @return {!Protocol.InspectorBackend.Connection} + * @return {!Protocol.Connection} */ -SDK.createMainConnection = function(params, connectionLostCallback) { +SDK._createMainConnection = function() { const wsParam = Runtime.queryParam('ws'); const wssParam = Runtime.queryParam('wss'); - if (wsParam || wssParam) { const ws = wsParam ? `ws://${wsParam}` : `wss://${wssParam}`; - return new SDK.WebSocketConnection(ws, connectionLostCallback, params); + SDK._mainConnection = new SDK.WebSocketConnection(ws, SDK._websocketConnectionLost); + } else if (InspectorFrontendHost.isHostedMode()) { + SDK._mainConnection = new SDK.StubConnection(); + } else { + SDK._mainConnection = new SDK.MainConnection(); } + return SDK._mainConnection; +}; + +/** @type {!Protocol.Connection} */ +SDK._mainConnection; - if (InspectorFrontendHost.isHostedMode()) - return new SDK.StubConnection(params); - return new SDK.MainConnection(params); +/** @type {function()} */ +SDK._createMainTarget; + +/** @type {function()} */ +SDK._websocketConnectionLost; + +/** + * @param {function((!Object|string))} onMessage + * @return {!Promise<!Protocol.Connection>} + */ +SDK.interceptMainConnection = async function(onMessage) { + await SDK._mainConnection.disconnect(); + const connection = SDK._createMainConnection(); + connection.setOnMessage(onMessage); + connection.setOnDisconnect(SDK._createMainTarget); + return connection; }; diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/DOMModel.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/DOMModel.js index 65be108c064..eebd73a792d 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/DOMModel.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/DOMModel.js @@ -1594,9 +1594,11 @@ SDK.DOMModel = class extends SDK.SDKModel { * @param {boolean} includeUserAgentShadowDOM * @return {!Promise<?SDK.DOMNode>} */ - nodeForLocation(x, y, includeUserAgentShadowDOM) { - return this._agent.getNodeForLocation(x, y, includeUserAgentShadowDOM) - .then(nodeId => nodeId ? this.nodeForId(nodeId) : null); + async nodeForLocation(x, y, includeUserAgentShadowDOM) { + const response = await this._agent.invoke_getNodeForLocation({x, y, includeUserAgentShadowDOM}); + if (response[Protocol.Error] || !response.nodeId) + return null; + return this.nodeForId(response.nodeId); } /** diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/DebuggerModel.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/DebuggerModel.js index ac6ec6fe0f9..d77ced84d19 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/DebuggerModel.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/DebuggerModel.js @@ -136,6 +136,14 @@ SDK.DebuggerModel = class extends SDK.SDKModel { return; SDK.DebuggerModel._debuggerIdToModel.set(debuggerId, this); this._debuggerId = debuggerId; + this.dispatchEventToListeners(SDK.DebuggerModel.Events.DebuggerIsReadyToPause, this); + } + + /** + * @return {boolean} + */ + isReadyToPause() { + return !!this._debuggerId; } /** @@ -220,6 +228,9 @@ SDK.DebuggerModel = class extends SDK.SDKModel { } scheduleStepIntoAsync() { + // Node v8.x does not support breakOnAsyncCall flag but supports old style schdeuleStepIntoAsync. + // End-of-life of Node 8.x is around December 2019. + this._agent.scheduleStepIntoAsync(); this._agent.invoke_stepInto({breakOnAsyncCall: true}); } @@ -252,7 +263,7 @@ SDK.DebuggerModel = class extends SDK.SDKModel { async setBreakpointByURL(url, lineNumber, columnNumber, condition) { // Convert file url to node-js path. let urlRegex; - if (this.target().isNodeJS()) { + if (this.target().type() === SDK.Target.Type.Node) { const platformPath = Common.ParsedURL.urlToPlatformPath(url, Host.isWin()); urlRegex = `${platformPath.escapeForRegExp()}|${url.escapeForRegExp()}`; } @@ -929,7 +940,8 @@ SDK.DebuggerModel.Events = { DiscardedAnonymousScriptSource: Symbol('DiscardedAnonymousScriptSource'), GlobalObjectCleared: Symbol('GlobalObjectCleared'), CallFrameSelected: Symbol('CallFrameSelected'), - ConsoleCommandEvaluatedInSelectedCallFrame: Symbol('ConsoleCommandEvaluatedInSelectedCallFrame') + ConsoleCommandEvaluatedInSelectedCallFrame: Symbol('ConsoleCommandEvaluatedInSelectedCallFrame'), + DebuggerIsReadyToPause: Symbol('DebuggerIsReadyToPause'), }; /** @enum {string} */ diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/HARLog.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/HARLog.js index e39b3fe5eb7..6bc75d286b2 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/HARLog.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/HARLog.js @@ -169,7 +169,8 @@ SDK.HARLog.Entry = class { // IPv6 address should not have square brackets per (https://tools.ietf.org/html/rfc2373#section-2.2). serverIPAddress: ipAddress.replace(/\[\]/g, ''), _initiator: exportedInitiator, - _priority: harEntry._request.priority() + _priority: harEntry._request.priority(), + _resourceType: harEntry._request.resourceType().name() }; // Chrome specific. diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/HeapProfilerModel.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/HeapProfilerModel.js index 7de66309643..60c222e8e70 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/HeapProfilerModel.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/HeapProfilerModel.js @@ -45,10 +45,16 @@ SDK.HeapProfilerModel = class extends SDK.SDKModel { * @return {!Promise<?Protocol.HeapProfiler.SamplingHeapProfile>} */ stopSampling() { - this._isRecording = false; return this._heapProfilerAgent.stopSampling(); } + /** + * @return {!Promise<?Protocol.HeapProfiler.SamplingHeapProfile>} + */ + getSamplingProfile() { + return this._heapProfilerAgent.getSamplingProfile(); + } + startNativeSampling() { const defaultSamplingIntervalInBytes = 65536; this._memoryAgent.startSampling(defaultSamplingIntervalInBytes); diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/NetworkManager.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/NetworkManager.js index a9b236a71cf..6790512da8e 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/NetworkManager.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/NetworkManager.js @@ -886,7 +886,7 @@ SDK.NetworkDispatcher = class { }; /** - * @implements {SDK.TargetManager.Observer} + * @implements {SDK.SDKModelObserver<!SDK.NetworkManager>} * @unrestricted */ SDK.MultitargetNetworkManager = class extends Common.Object { @@ -911,7 +911,7 @@ SDK.MultitargetNetworkManager = class extends Common.Object { /** @type {!Multimap<!SDK.MultitargetNetworkManager.RequestInterceptor, !SDK.MultitargetNetworkManager.InterceptionPattern>} */ this._urlsForRequestInterceptor = new Multimap(); - SDK.targetManager.observeTargets(this, SDK.Target.Capability.Network); + SDK.targetManager.observeModels(SDK.NetworkManager, this); } /** @@ -929,10 +929,10 @@ SDK.MultitargetNetworkManager = class extends Common.Object { /** * @override - * @param {!SDK.Target} target + * @param {!SDK.NetworkManager} networkManager */ - targetAdded(target) { - const networkAgent = target.networkAgent(); + modelAdded(networkManager) { + const networkAgent = networkManager.target().networkAgent(); if (this._extraHeaders) networkAgent.setExtraHTTPHeaders(this._extraHeaders); if (this._currentUserAgent()) @@ -948,16 +948,16 @@ SDK.MultitargetNetworkManager = class extends Common.Object { /** * @override - * @param {!SDK.Target} target + * @param {!SDK.NetworkManager} networkManager */ - targetRemoved(target) { + modelRemoved(networkManager) { for (const entry of this._inflightMainResourceRequests) { const manager = SDK.NetworkManager.forRequest(/** @type {!SDK.NetworkRequest} */ (entry[1])); - if (manager.target() !== target) + if (manager !== networkManager) continue; this._inflightMainResourceRequests.delete(/** @type {string} */ (entry[0])); } - this._agents.delete(target.networkAgent()); + this._agents.delete(networkManager.target().networkAgent()); } /** diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js index a00645cc6ad..b5e422346a1 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js @@ -1151,12 +1151,13 @@ SDK.NetworkRequest = class extends Common.Object { async populateImageSource(image) { const {content, encoded} = await this.contentData(); let imageSrc = Common.ContentProvider.contentAsDataURL(content, this._mimeType, encoded); - if (imageSrc === null) { + if (imageSrc === null && !this._failed) { const cacheControl = this.responseHeaderValue('cache-control') || ''; if (!cacheControl.includes('no-cache')) imageSrc = this._url; } - image.src = imageSrc; + if (imageSrc !== null) + image.src = imageSrc; } /** @@ -1244,6 +1245,24 @@ SDK.NetworkRequest = class extends Common.Object { this._backendRequestId = requestId; this._requestId = requestId; } + + /** + * @return {?string} + */ + charset() { + const contentTypeHeader = this.responseHeaderValue('content-type'); + if (!contentTypeHeader) + return null; + + const responseCharsets = contentTypeHeader.replace(/ /g, '') + .split(';') + .filter(parameter => parameter.toLowerCase().startsWith('charset=')) + .map(parameter => parameter.slice('charset='.length)); + if (responseCharsets.length) + return responseCharsets[0]; + + return null; + } }; /** @enum {symbol} */ diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/OverlayModel.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/OverlayModel.js index e2ca71a5876..ad2bd2d2014 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/OverlayModel.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/OverlayModel.js @@ -58,6 +58,13 @@ SDK.OverlayModel = class extends SDK.SDKModel { () => this._overlayAgent.setShowScrollBottleneckRects(this._showScrollBottleneckRectsSetting.get())); if (this._showScrollBottleneckRectsSetting.get()) this._overlayAgent.setShowScrollBottleneckRects(true); + + this._showHitTestBordersSetting = Common.moduleSetting('showHitTestBorders'); + this._showHitTestBordersSetting.addChangeListener( + () => this._overlayAgent.setShowHitTestBorders(this._showHitTestBordersSetting.get())); + if (this._showHitTestBordersSetting.get()) + this._overlayAgent.setShowHitTestBorders(true); + if (target.suspended()) this._overlayAgent.setSuspended(true); } diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js index a8da06aef2c..3262081af36 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js @@ -695,10 +695,12 @@ SDK.ExecutionContext = class { */ function targetWeight(target) { if (!target.parentTarget()) + return 5; + if (target.type() === SDK.Target.Type.Frame) return 4; - if (target.hasBrowserCapability()) + if (target.type() === SDK.Target.Type.ServiceWorker) return 3; - if (target.hasJSCapability()) + if (target.type() === SDK.Target.Type.Worker) return 2; return 1; } diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/ServiceWorkerManager.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/ServiceWorkerManager.js index bbe4f76f2cb..4a6e9084e55 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/ServiceWorkerManager.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/ServiceWorkerManager.js @@ -580,7 +580,7 @@ SDK.ServiceWorkerContextNamer = class { const parent = target.parentTarget(); if (!parent || parent.parentTarget() !== this._target) return null; - return parent.id(); + return parent.type() === SDK.Target.Type.ServiceWorker ? parent.id() : null; } _updateAllContextLabels() { diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/Target.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/Target.js index 9ed9f30a07a..96473067591 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/Target.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/Target.js @@ -12,18 +12,46 @@ SDK.Target = class extends Protocol.TargetBase { * @param {!SDK.TargetManager} targetManager * @param {string} id * @param {string} name - * @param {number} capabilitiesMask - * @param {!Protocol.InspectorBackend.Connection.Factory} connectionFactory + * @param {!SDK.Target.Type} type * @param {?SDK.Target} parentTarget + * @param {string} sessionId * @param {boolean} suspended - * @param {boolean} isNodeJS */ - constructor(targetManager, id, name, capabilitiesMask, connectionFactory, parentTarget, suspended, isNodeJS) { - super(connectionFactory, isNodeJS); + constructor(targetManager, id, name, type, parentTarget, sessionId, suspended) { + const needsNodeJSPatching = type === SDK.Target.Type.Node; + super(needsNodeJSPatching, parentTarget, sessionId); this._targetManager = targetManager; this._name = name; this._inspectedURL = ''; - this._capabilitiesMask = capabilitiesMask; + this._capabilitiesMask = 0; + switch (type) { + case SDK.Target.Type.Frame: + this._capabilitiesMask = SDK.Target.Capability.Browser | SDK.Target.Capability.DOM | SDK.Target.Capability.JS | + SDK.Target.Capability.Log | SDK.Target.Capability.Network | SDK.Target.Capability.Target | + SDK.Target.Capability.Tracing | SDK.Target.Capability.Emulation | SDK.Target.Capability.Input; + if (!parentTarget) { + this._capabilitiesMask |= SDK.Target.Capability.DeviceEmulation | SDK.Target.Capability.ScreenCapture | + SDK.Target.Capability.Security | SDK.Target.Capability.Inspector; + } + break; + case SDK.Target.Type.ServiceWorker: + this._capabilitiesMask = + SDK.Target.Capability.Log | SDK.Target.Capability.Network | SDK.Target.Capability.Target; + if (!parentTarget) + this._capabilitiesMask |= SDK.Target.Capability.Browser | SDK.Target.Capability.Inspector; + break; + case SDK.Target.Type.Worker: + this._capabilitiesMask = SDK.Target.Capability.JS | SDK.Target.Capability.Log | SDK.Target.Capability.Network | + SDK.Target.Capability.Target; + break; + case SDK.Target.Type.Node: + this._capabilitiesMask = SDK.Target.Capability.JS; + break; + case SDK.Target.Type.Browser: + this._capabilitiesMask = SDK.Target.Capability.Target; + break; + } + this._type = type; this._parentTarget = parentTarget; this._id = id; this._modelByConstructor = new Map(); @@ -58,6 +86,21 @@ SDK.Target = class extends Protocol.TargetBase { } /** + * @return {!SDK.Target.Type} + */ + type() { + return this._type; + } + + /** + * @override + */ + markAsNodeJSForTest() { + super.markAsNodeJSForTest(); + this._type = SDK.Target.Type.Node; + } + + /** * @return {!SDK.TargetManager} */ targetManager() { @@ -69,6 +112,8 @@ SDK.Target = class extends Protocol.TargetBase { * @return {boolean} */ hasAllCapabilities(capabilitiesMask) { + // TODO(dgozman): get rid of this method, once we never observe targets with + // capability mask. return (this._capabilitiesMask & capabilitiesMask) === capabilitiesMask; } @@ -77,49 +122,8 @@ SDK.Target = class extends Protocol.TargetBase { * @return {string} */ decorateLabel(label) { - return !this.hasBrowserCapability() ? '\u2699 ' + label : label; - } - - /** - * @return {boolean} - */ - hasBrowserCapability() { - return this.hasAllCapabilities(SDK.Target.Capability.Browser); - } - - /** - * @return {boolean} - */ - hasJSCapability() { - return this.hasAllCapabilities(SDK.Target.Capability.JS); - } - - /** - * @return {boolean} - */ - hasLogCapability() { - return this.hasAllCapabilities(SDK.Target.Capability.Log); - } - - /** - * @return {boolean} - */ - hasNetworkCapability() { - return this.hasAllCapabilities(SDK.Target.Capability.Network); - } - - /** - * @return {boolean} - */ - hasTargetCapability() { - return this.hasAllCapabilities(SDK.Target.Capability.Target); - } - - /** - * @return {boolean} - */ - hasDOMCapability() { - return this.hasAllCapabilities(SDK.Target.Capability.DOM); + return (this._type === SDK.Target.Type.Worker || this._type === SDK.Target.Type.ServiceWorker) ? '\u2699 ' + label : + label; } /** @@ -131,8 +135,10 @@ SDK.Target = class extends Protocol.TargetBase { /** * @override + * @param {string} reason */ - dispose() { + dispose(reason) { + super.dispose(reason); this._targetManager.removeTarget(this); for (const model of this._modelByConstructor.valuesArray()) model.dispose(); @@ -241,8 +247,17 @@ SDK.Target.Capability = { DeviceEmulation: 1 << 12, None: 0, +}; - AllForTests: (1 << 13) - 1 +/** + * @enum {string} + */ +SDK.Target.Type = { + Frame: 'frame', + ServiceWorker: 'service-worker', + Worker: 'worker', + Node: 'node', + Browser: 'browser', }; /** diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/TargetManager.js b/chromium/third_party/blink/renderer/devtools/front_end/sdk/TargetManager.js index bf2bad76d02..976eba20150 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/TargetManager.js +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/TargetManager.js @@ -11,7 +11,6 @@ SDK.TargetManager = class extends Common.Object { this._targets = []; /** @type {!Array.<!SDK.TargetManager.Observer>} */ this._observers = []; - this._observerCapabiliesMaskSymbol = Symbol('observerCapabilitiesMask'); /** @type {!Multimap<symbol, !{modelClass: !Function, thisObject: (!Object|undefined), listener: function(!Common.Event)}>} */ this._modelListeners = new Multimap(); /** @type {!Multimap<function(new:SDK.SDKModel, !SDK.Target), !SDK.SDKModelObserver>} */ @@ -150,13 +149,12 @@ SDK.TargetManager = class extends Common.Object { /** * @param {!SDK.TargetManager.Observer} targetObserver - * @param {number=} capabilitiesMask */ - observeTargets(targetObserver, capabilitiesMask) { - if (this._observerCapabiliesMaskSymbol in targetObserver) + observeTargets(targetObserver) { + if (this._observers.indexOf(targetObserver) !== -1) throw new Error('Observer can only be registered once'); - targetObserver[this._observerCapabiliesMaskSymbol] = capabilitiesMask || 0; - this.targets(capabilitiesMask).forEach(targetObserver.targetAdded.bind(targetObserver)); + for (const target of this._targets) + targetObserver.targetAdded(target); this._observers.push(targetObserver); } @@ -164,28 +162,25 @@ SDK.TargetManager = class extends Common.Object { * @param {!SDK.TargetManager.Observer} targetObserver */ unobserveTargets(targetObserver) { - delete targetObserver[this._observerCapabiliesMaskSymbol]; this._observers.remove(targetObserver); } /** * @param {string} id * @param {string} name - * @param {number} capabilitiesMask - * @param {!Protocol.InspectorBackend.Connection.Factory} connectionFactory + * @param {!SDK.Target.Type} type * @param {?SDK.Target} parentTarget - * @param {boolean} isNodeJS + * @param {string=} sessionId * @return {!SDK.Target} */ - createTarget(id, name, capabilitiesMask, connectionFactory, parentTarget, isNodeJS) { - const target = - new SDK.Target(this, id, name, capabilitiesMask, connectionFactory, parentTarget, this._isSuspended, isNodeJS); + createTarget(id, name, type, parentTarget, sessionId) { + const target = new SDK.Target(this, id, name, type, parentTarget, sessionId || '', this._isSuspended); target.createModels(new Set(this._modelObservers.keysArray())); this._targets.push(target); - const copy = this._observersForTarget(target); - for (let i = 0; i < copy.length; ++i) - copy[i].targetAdded(target); + const copy = this._observers.slice(0); + for (const observer of copy) + observer.targetAdded(target); for (const modelClass of target.models().keys()) this.modelAdded(target, modelClass, target.models().get(modelClass)); @@ -203,15 +198,6 @@ SDK.TargetManager = class extends Common.Object { /** * @param {!SDK.Target} target - * @return {!Array<!SDK.TargetManager.Observer>} - */ - _observersForTarget(target) { - return this._observers.filter( - observer => target.hasAllCapabilities(observer[this._observerCapabiliesMaskSymbol] || 0)); - } - - /** - * @param {!SDK.Target} target */ removeTarget(target) { if (!this._targets.includes(target)) @@ -221,9 +207,9 @@ SDK.TargetManager = class extends Common.Object { for (const modelClass of target.models().keys()) this._modelRemoved(target, modelClass, target.models().get(modelClass)); - const copy = this._observersForTarget(target); - for (let i = 0; i < copy.length; ++i) - copy[i].targetRemoved(target); + const copy = this._observers.slice(0); + for (const observer of copy) + observer.targetRemoved(target); for (const key of this._modelListeners.keysArray()) { for (const info of this._modelListeners.get(key)) { @@ -235,14 +221,10 @@ SDK.TargetManager = class extends Common.Object { } /** - * @param {number=} capabilitiesMask * @return {!Array.<!SDK.Target>} */ - targets(capabilitiesMask) { - if (!capabilitiesMask) - return this._targets.slice(); - else - return this._targets.filter(target => target.hasAllCapabilities(capabilitiesMask || 0)); + targets() { + return this._targets.slice(); } /** diff --git a/chromium/third_party/blink/renderer/devtools/front_end/sdk/module.json b/chromium/third_party/blink/renderer/devtools/front_end/sdk/module.json index 89048fb52ac..2ece8d277b6 100644 --- a/chromium/third_party/blink/renderer/devtools/front_end/sdk/module.json +++ b/chromium/third_party/blink/renderer/devtools/front_end/sdk/module.json @@ -189,6 +189,24 @@ { "type": "setting", "category": "Rendering", + "settingName": "showHitTestBorders", + "settingType": "boolean", + "storageType": "session", + "options": [ + { + "value": true, + "title": "Show hit-test borders" + }, + { + "value": false, + "title": "Hide hit-test borders" + } + ], + "defaultValue": false + }, + { + "type": "setting", + "category": "Rendering", "settingName": "emulatedCSSMedia", "settingType": "enum", "storageType": "session", |