Index: third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js |
index d370cfb8a2d0c94f68228f092690bb841c09ff3e..de3d8c5e8046aac3a354112bf3c8f6569d410cc0 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js |
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js |
@@ -27,904 +27,869 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
- |
/** |
- * @constructor |
- * @extends {WebInspector.SDKModel} |
- * @param {!WebInspector.Target} target |
+ * @unrestricted |
*/ |
-WebInspector.NetworkManager = function(target) |
-{ |
- WebInspector.SDKModel.call(this, WebInspector.NetworkManager, target); |
+WebInspector.NetworkManager = class extends WebInspector.SDKModel { |
+ /** |
+ * @param {!WebInspector.Target} target |
+ */ |
+ constructor(target) { |
+ super(WebInspector.NetworkManager, target); |
this._dispatcher = new WebInspector.NetworkDispatcher(this); |
this._target = target; |
this._networkAgent = target.networkAgent(); |
target.registerNetworkDispatcher(this._dispatcher); |
- if (WebInspector.moduleSetting("cacheDisabled").get()) |
- this._networkAgent.setCacheDisabled(true); |
- if (WebInspector.moduleSetting("monitoringXHREnabled").get()) |
- this._networkAgent.setMonitoringXHREnabled(true); |
+ if (WebInspector.moduleSetting('cacheDisabled').get()) |
+ this._networkAgent.setCacheDisabled(true); |
+ if (WebInspector.moduleSetting('monitoringXHREnabled').get()) |
+ this._networkAgent.setMonitoringXHREnabled(true); |
// Limit buffer when talking to a remote device. |
- if (Runtime.queryParam("remoteFrontend") || Runtime.queryParam("ws")) |
- this._networkAgent.enable(10000000, 5000000); |
+ if (Runtime.queryParam('remoteFrontend') || Runtime.queryParam('ws')) |
+ this._networkAgent.enable(10000000, 5000000); |
else |
- this._networkAgent.enable(); |
+ this._networkAgent.enable(); |
- this._bypassServiceWorkerSetting = WebInspector.settings.createSetting("bypassServiceWorker", false); |
+ this._bypassServiceWorkerSetting = WebInspector.settings.createSetting('bypassServiceWorker', false); |
if (this._bypassServiceWorkerSetting.get()) |
- this._bypassServiceWorkerChanged(); |
+ this._bypassServiceWorkerChanged(); |
this._bypassServiceWorkerSetting.addChangeListener(this._bypassServiceWorkerChanged, this); |
- WebInspector.moduleSetting("cacheDisabled").addChangeListener(this._cacheDisabledSettingChanged, this); |
+ WebInspector.moduleSetting('cacheDisabled').addChangeListener(this._cacheDisabledSettingChanged, this); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Target} target |
+ * @return {?WebInspector.NetworkManager} |
+ */ |
+ static fromTarget(target) { |
+ return /** @type {?WebInspector.NetworkManager} */ (target.model(WebInspector.NetworkManager)); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.NetworkManager.Conditions} conditions |
+ * @return {!NetworkAgent.ConnectionType} |
+ * TODO(allada): this belongs to NetworkConditionsSelector, which should hardcode/guess it. |
+ */ |
+ static _connectionType(conditions) { |
+ if (!conditions.download && !conditions.upload) |
+ return NetworkAgent.ConnectionType.None; |
+ var types = WebInspector.NetworkManager._connectionTypes; |
+ if (!types) { |
+ WebInspector.NetworkManager._connectionTypes = []; |
+ types = WebInspector.NetworkManager._connectionTypes; |
+ types.push(['2g', NetworkAgent.ConnectionType.Cellular2g]); |
+ types.push(['3g', NetworkAgent.ConnectionType.Cellular3g]); |
+ types.push(['4g', NetworkAgent.ConnectionType.Cellular4g]); |
+ types.push(['bluetooth', NetworkAgent.ConnectionType.Bluetooth]); |
+ types.push(['wifi', NetworkAgent.ConnectionType.Wifi]); |
+ types.push(['wimax', NetworkAgent.ConnectionType.Wimax]); |
+ } |
+ for (var type of types) { |
+ if (conditions.title.toLowerCase().indexOf(type[0]) !== -1) |
+ return type[1]; |
+ } |
+ return NetworkAgent.ConnectionType.Other; |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ * @return {!WebInspector.NetworkRequest} |
+ */ |
+ inflightRequestForURL(url) { |
+ return this._dispatcher._inflightRequestsByURL[url]; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _cacheDisabledSettingChanged(event) { |
+ var enabled = /** @type {boolean} */ (event.data); |
+ this._networkAgent.setCacheDisabled(enabled); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ dispose() { |
+ WebInspector.moduleSetting('cacheDisabled').removeChangeListener(this._cacheDisabledSettingChanged, this); |
+ } |
+ |
+ _bypassServiceWorkerChanged() { |
+ this._networkAgent.setBypassServiceWorker(this._bypassServiceWorkerSetting.get()); |
+ } |
}; |
/** @enum {symbol} */ |
WebInspector.NetworkManager.Events = { |
- RequestStarted: Symbol("RequestStarted"), |
- RequestUpdated: Symbol("RequestUpdated"), |
- RequestFinished: Symbol("RequestFinished"), |
- RequestUpdateDropped: Symbol("RequestUpdateDropped"), |
- ResponseReceived: Symbol("ResponseReceived") |
+ RequestStarted: Symbol('RequestStarted'), |
+ RequestUpdated: Symbol('RequestUpdated'), |
+ RequestFinished: Symbol('RequestFinished'), |
+ RequestUpdateDropped: Symbol('RequestUpdateDropped'), |
+ ResponseReceived: Symbol('ResponseReceived') |
}; |
WebInspector.NetworkManager._MIMETypes = { |
- "text/html": {"document": true}, |
- "text/xml": {"document": true}, |
- "text/plain": {"document": true}, |
- "application/xhtml+xml": {"document": true}, |
- "image/svg+xml": {"document": true}, |
- "text/css": {"stylesheet": true}, |
- "text/xsl": {"stylesheet": true}, |
- "text/vtt": {"texttrack": true}, |
+ 'text/html': {'document': true}, |
+ 'text/xml': {'document': true}, |
+ 'text/plain': {'document': true}, |
+ 'application/xhtml+xml': {'document': true}, |
+ 'image/svg+xml': {'document': true}, |
+ 'text/css': {'stylesheet': true}, |
+ 'text/xsl': {'stylesheet': true}, |
+ 'text/vtt': {'texttrack': true}, |
}; |
-/** |
- * @param {!WebInspector.Target} target |
- * @return {?WebInspector.NetworkManager} |
- */ |
-WebInspector.NetworkManager.fromTarget = function(target) |
-{ |
- return /** @type {?WebInspector.NetworkManager} */ (target.model(WebInspector.NetworkManager)); |
-}; |
/** @typedef {{download: number, upload: number, latency: number, title: string}} */ |
WebInspector.NetworkManager.Conditions; |
/** @type {!WebInspector.NetworkManager.Conditions} */ |
-WebInspector.NetworkManager.NoThrottlingConditions = {title: WebInspector.UIString("No throttling"), download: -1, upload: -1, latency: 0}; |
+WebInspector.NetworkManager.NoThrottlingConditions = { |
+ title: WebInspector.UIString('No throttling'), |
+ download: -1, |
+ upload: -1, |
+ latency: 0 |
+}; |
/** @type {!WebInspector.NetworkManager.Conditions} */ |
-WebInspector.NetworkManager.OfflineConditions = {title: WebInspector.UIString("Offline"), download: 0, upload: 0, latency: 0}; |
- |
-/** |
- * @param {!WebInspector.NetworkManager.Conditions} conditions |
- * @return {!NetworkAgent.ConnectionType} |
- * TODO(allada): this belongs to NetworkConditionsSelector, which should hardcode/guess it. |
- */ |
-WebInspector.NetworkManager._connectionType = function(conditions) |
-{ |
- if (!conditions.download && !conditions.upload) |
- return NetworkAgent.ConnectionType.None; |
- var types = WebInspector.NetworkManager._connectionTypes; |
- if (!types) { |
- WebInspector.NetworkManager._connectionTypes = []; |
- types = WebInspector.NetworkManager._connectionTypes; |
- types.push(["2g", NetworkAgent.ConnectionType.Cellular2g]); |
- types.push(["3g", NetworkAgent.ConnectionType.Cellular3g]); |
- types.push(["4g", NetworkAgent.ConnectionType.Cellular4g]); |
- types.push(["bluetooth", NetworkAgent.ConnectionType.Bluetooth]); |
- types.push(["wifi", NetworkAgent.ConnectionType.Wifi]); |
- types.push(["wimax", NetworkAgent.ConnectionType.Wimax]); |
- } |
- for (var type of types) { |
- if (conditions.title.toLowerCase().indexOf(type[0]) !== -1) |
- return type[1]; |
- } |
- return NetworkAgent.ConnectionType.Other; |
+WebInspector.NetworkManager.OfflineConditions = { |
+ title: WebInspector.UIString('Offline'), |
+ download: 0, |
+ upload: 0, |
+ latency: 0 |
}; |
-WebInspector.NetworkManager.prototype = { |
- /** |
- * @param {string} url |
- * @return {!WebInspector.NetworkRequest} |
- */ |
- inflightRequestForURL: function(url) |
- { |
- return this._dispatcher._inflightRequestsByURL[url]; |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _cacheDisabledSettingChanged: function(event) |
- { |
- var enabled = /** @type {boolean} */ (event.data); |
- this._networkAgent.setCacheDisabled(enabled); |
- }, |
- |
- dispose: function() |
- { |
- WebInspector.moduleSetting("cacheDisabled").removeChangeListener(this._cacheDisabledSettingChanged, this); |
- }, |
- |
- _bypassServiceWorkerChanged: function() |
- { |
- this._networkAgent.setBypassServiceWorker(this._bypassServiceWorkerSetting.get()); |
- }, |
- |
- __proto__: WebInspector.SDKModel.prototype |
-}; |
/** |
- * @constructor |
* @implements {NetworkAgent.Dispatcher} |
+ * @unrestricted |
*/ |
-WebInspector.NetworkDispatcher = function(manager) |
-{ |
+WebInspector.NetworkDispatcher = class { |
+ constructor(manager) { |
this._manager = manager; |
this._inflightRequestsById = {}; |
this._inflightRequestsByURL = {}; |
-}; |
- |
-WebInspector.NetworkDispatcher.prototype = { |
- /** |
- * @param {!NetworkAgent.Headers} headersMap |
- * @return {!Array.<!WebInspector.NetworkRequest.NameValue>} |
- */ |
- _headersMapToHeadersArray: function(headersMap) |
- { |
- var result = []; |
- for (var name in headersMap) { |
- var values = headersMap[name].split("\n"); |
- for (var i = 0; i < values.length; ++i) |
- result.push({name: name, value: values[i]}); |
- } |
- return result; |
- }, |
- |
- /** |
- * @param {!WebInspector.NetworkRequest} networkRequest |
- * @param {!NetworkAgent.Request} request |
- */ |
- _updateNetworkRequestWithRequest: function(networkRequest, request) |
- { |
- networkRequest.requestMethod = request.method; |
- networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers)); |
- networkRequest.requestFormData = request.postData; |
- networkRequest.setInitialPriority(request.initialPriority); |
- networkRequest.mixedContentType = request.mixedContentType || NetworkAgent.RequestMixedContentType.None; |
- }, |
- |
- /** |
- * @param {!WebInspector.NetworkRequest} networkRequest |
- * @param {!NetworkAgent.Response=} response |
- */ |
- _updateNetworkRequestWithResponse: function(networkRequest, response) |
- { |
- if (response.url && networkRequest.url !== response.url) |
- networkRequest.url = response.url; |
- networkRequest.mimeType = response.mimeType; |
- networkRequest.statusCode = response.status; |
- networkRequest.statusText = response.statusText; |
- networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers); |
- if (response.encodedDataLength >= 0) |
- networkRequest.setTransferSize(response.encodedDataLength); |
- if (response.headersText) |
- networkRequest.responseHeadersText = response.headersText; |
- if (response.requestHeaders) { |
- networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders)); |
- networkRequest.setRequestHeadersText(response.requestHeadersText || ""); |
- } |
- |
- networkRequest.connectionReused = response.connectionReused; |
- networkRequest.connectionId = String(response.connectionId); |
- if (response.remoteIPAddress) |
- networkRequest.setRemoteAddress(response.remoteIPAddress, response.remotePort || -1); |
- |
- if (response.fromServiceWorker) |
- networkRequest.fetchedViaServiceWorker = true; |
- |
- if (response.fromDiskCache) |
- networkRequest.setFromDiskCache(); |
- networkRequest.timing = response.timing; |
- |
- networkRequest.protocol = response.protocol; |
- |
- networkRequest.setSecurityState(response.securityState); |
- |
- if (!this._mimeTypeIsConsistentWithType(networkRequest)) { |
- var consoleModel = this._manager._target.consoleModel; |
- consoleModel.addMessage(new WebInspector.ConsoleMessage(consoleModel.target(), WebInspector.ConsoleMessage.MessageSource.Network, |
- WebInspector.ConsoleMessage.MessageLevel.Log, |
- WebInspector.UIString("Resource interpreted as %s but transferred with MIME type %s: \"%s\".", networkRequest.resourceType().title(), networkRequest.mimeType, networkRequest.url), |
- WebInspector.ConsoleMessage.MessageType.Log, |
- "", |
- 0, |
- 0, |
- networkRequest.requestId)); |
- } |
- |
- if (response.securityDetails) |
- networkRequest.setSecurityDetails(response.securityDetails); |
- }, |
- |
- /** |
- * @param {!WebInspector.NetworkRequest} networkRequest |
- * @return {boolean} |
- */ |
- _mimeTypeIsConsistentWithType: function(networkRequest) |
- { |
- // If status is an error, content is likely to be of an inconsistent type, |
- // as it's going to be an error message. We do not want to emit a warning |
- // for this, though, as this will already be reported as resource loading failure. |
- // Also, if a URL like http://localhost/wiki/load.php?debug=true&lang=en produces text/css and gets reloaded, |
- // it is 304 Not Modified and its guessed mime-type is text/php, which is wrong. |
- // Don't check for mime-types in 304-resources. |
- if (networkRequest.hasErrorStatusCode() || networkRequest.statusCode === 304 || networkRequest.statusCode === 204) |
- return true; |
- |
- var resourceType = networkRequest.resourceType(); |
- if (resourceType !== WebInspector.resourceTypes.Stylesheet && |
- resourceType !== WebInspector.resourceTypes.Document && |
- resourceType !== WebInspector.resourceTypes.TextTrack) { |
- return true; |
- } |
- |
- if (!networkRequest.mimeType) |
- return true; // Might be not known for cached resources with null responses. |
- |
- if (networkRequest.mimeType in WebInspector.NetworkManager._MIMETypes) |
- return resourceType.name() in WebInspector.NetworkManager._MIMETypes[networkRequest.mimeType]; |
- |
- return false; |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.ResourcePriority} newPriority |
- * @param {!NetworkAgent.Timestamp} timestamp |
- */ |
- resourceChangedPriority: function(requestId, newPriority, timestamp) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (networkRequest) |
- networkRequest.setPriority(newPriority); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!PageAgent.FrameId} frameId |
- * @param {!NetworkAgent.LoaderId} loaderId |
- * @param {string} documentURL |
- * @param {!NetworkAgent.Request} request |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {!NetworkAgent.Timestamp} wallTime |
- * @param {!NetworkAgent.Initiator} initiator |
- * @param {!NetworkAgent.Response=} redirectResponse |
- * @param {!PageAgent.ResourceType=} resourceType |
- */ |
- requestWillBeSent: function(requestId, frameId, loaderId, documentURL, request, time, wallTime, initiator, redirectResponse, resourceType) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (networkRequest) { |
- // FIXME: move this check to the backend. |
- if (!redirectResponse) |
- return; |
- this.responseReceived(requestId, frameId, loaderId, time, PageAgent.ResourceType.Other, redirectResponse); |
- networkRequest = this._appendRedirect(requestId, time, request.url); |
- } else |
- networkRequest = this._createNetworkRequest(requestId, frameId, loaderId, request.url, documentURL, initiator); |
- networkRequest.hasNetworkData = true; |
- this._updateNetworkRequestWithRequest(networkRequest, request); |
- networkRequest.setIssueTime(time, wallTime); |
- networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]); |
- |
- this._startNetworkRequest(networkRequest); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- */ |
- requestServedFromCache: function(requestId) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- |
- networkRequest.setFromMemoryCache(); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!PageAgent.FrameId} frameId |
- * @param {!NetworkAgent.LoaderId} loaderId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {!PageAgent.ResourceType} resourceType |
- * @param {!NetworkAgent.Response} response |
- */ |
- responseReceived: function(requestId, frameId, loaderId, time, resourceType, response) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) { |
- // We missed the requestWillBeSent. |
- var eventData = {}; |
- eventData.url = response.url; |
- eventData.frameId = frameId; |
- eventData.loaderId = loaderId; |
- eventData.resourceType = resourceType; |
- eventData.mimeType = response.mimeType; |
- var lastModifiedHeader = response.headers["last-modified"]; |
- eventData.lastModified = lastModifiedHeader ? new Date(lastModifiedHeader) : null; |
- this._manager.dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestUpdateDropped, eventData); |
- return; |
- } |
- |
- networkRequest.responseReceivedTime = time; |
- networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]); |
- |
- this._updateNetworkRequestWithResponse(networkRequest, response); |
- |
- this._updateNetworkRequest(networkRequest); |
- this._manager.dispatchEventToListeners(WebInspector.NetworkManager.Events.ResponseReceived, networkRequest); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {number} dataLength |
- * @param {number} encodedDataLength |
- */ |
- dataReceived: function(requestId, time, dataLength, encodedDataLength) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- |
- networkRequest.resourceSize += dataLength; |
- if (encodedDataLength !== -1) |
- networkRequest.increaseTransferSize(encodedDataLength); |
- networkRequest.endTime = time; |
- |
- this._updateNetworkRequest(networkRequest); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} finishTime |
- * @param {number} encodedDataLength |
- */ |
- loadingFinished: function(requestId, finishTime, encodedDataLength) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- this._finishNetworkRequest(networkRequest, finishTime, encodedDataLength); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {!PageAgent.ResourceType} resourceType |
- * @param {string} localizedDescription |
- * @param {boolean=} canceled |
- * @param {!NetworkAgent.BlockedReason=} blockedReason |
- */ |
- loadingFailed: function(requestId, time, resourceType, localizedDescription, canceled, blockedReason) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- |
- networkRequest.failed = true; |
- networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]); |
- networkRequest.canceled = canceled; |
- if (blockedReason) { |
- networkRequest.setBlockedReason(blockedReason); |
- if (blockedReason === NetworkAgent.BlockedReason.Inspector) { |
- var consoleModel = this._manager._target.consoleModel; |
- consoleModel.addMessage(new WebInspector.ConsoleMessage(consoleModel.target(), WebInspector.ConsoleMessage.MessageSource.Network, |
- WebInspector.ConsoleMessage.MessageLevel.Warning, |
- WebInspector.UIString("Request was blocked by DevTools: \"%s\".", networkRequest.url), |
- WebInspector.ConsoleMessage.MessageType.Log, |
- "", |
- 0, |
- 0, |
- networkRequest.requestId)); |
- } |
- } |
- networkRequest.localizedFailDescription = localizedDescription; |
- this._finishNetworkRequest(networkRequest, time, -1); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {string} requestURL |
- * @param {!NetworkAgent.Initiator=} initiator |
- */ |
- webSocketCreated: function(requestId, requestURL, initiator) |
- { |
- var networkRequest = new WebInspector.NetworkRequest(this._manager._target, requestId, requestURL, "", "", "", initiator || null); |
- networkRequest.setResourceType(WebInspector.resourceTypes.WebSocket); |
- this._startNetworkRequest(networkRequest); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {!NetworkAgent.Timestamp} wallTime |
- * @param {!NetworkAgent.WebSocketRequest} request |
- */ |
- webSocketWillSendHandshakeRequest: function(requestId, time, wallTime, request) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- |
- networkRequest.requestMethod = "GET"; |
- networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers)); |
- networkRequest.setIssueTime(time, wallTime); |
- |
- this._updateNetworkRequest(networkRequest); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {!NetworkAgent.WebSocketResponse} response |
- */ |
- webSocketHandshakeResponseReceived: function(requestId, time, response) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- |
- networkRequest.statusCode = response.status; |
- networkRequest.statusText = response.statusText; |
- networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers); |
- networkRequest.responseHeadersText = response.headersText; |
- if (response.requestHeaders) |
- networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders)); |
- if (response.requestHeadersText) |
- networkRequest.setRequestHeadersText(response.requestHeadersText); |
- networkRequest.responseReceivedTime = time; |
- networkRequest.protocol = "websocket"; |
- |
- this._updateNetworkRequest(networkRequest); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {!NetworkAgent.WebSocketFrame} response |
- */ |
- webSocketFrameReceived: function(requestId, time, response) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- |
- networkRequest.addFrame(response, time); |
- networkRequest.responseReceivedTime = time; |
- |
- this._updateNetworkRequest(networkRequest); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {!NetworkAgent.WebSocketFrame} response |
- */ |
- webSocketFrameSent: function(requestId, time, response) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- |
- networkRequest.addFrame(response, time, true); |
- networkRequest.responseReceivedTime = time; |
- |
- this._updateNetworkRequest(networkRequest); |
- }, |
- |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {string} errorMessage |
- */ |
- webSocketFrameError: function(requestId, time, errorMessage) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
+ } |
+ |
+ /** |
+ * @param {!NetworkAgent.Headers} headersMap |
+ * @return {!Array.<!WebInspector.NetworkRequest.NameValue>} |
+ */ |
+ _headersMapToHeadersArray(headersMap) { |
+ var result = []; |
+ for (var name in headersMap) { |
+ var values = headersMap[name].split('\n'); |
+ for (var i = 0; i < values.length; ++i) |
+ result.push({name: name, value: values[i]}); |
+ } |
+ return result; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.NetworkRequest} networkRequest |
+ * @param {!NetworkAgent.Request} request |
+ */ |
+ _updateNetworkRequestWithRequest(networkRequest, request) { |
+ networkRequest.requestMethod = request.method; |
+ networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers)); |
+ networkRequest.requestFormData = request.postData; |
+ networkRequest.setInitialPriority(request.initialPriority); |
+ networkRequest.mixedContentType = request.mixedContentType || NetworkAgent.RequestMixedContentType.None; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.NetworkRequest} networkRequest |
+ * @param {!NetworkAgent.Response=} response |
+ */ |
+ _updateNetworkRequestWithResponse(networkRequest, response) { |
+ if (response.url && networkRequest.url !== response.url) |
+ networkRequest.url = response.url; |
+ networkRequest.mimeType = response.mimeType; |
+ networkRequest.statusCode = response.status; |
+ networkRequest.statusText = response.statusText; |
+ networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers); |
+ if (response.encodedDataLength >= 0) |
+ networkRequest.setTransferSize(response.encodedDataLength); |
+ if (response.headersText) |
+ networkRequest.responseHeadersText = response.headersText; |
+ if (response.requestHeaders) { |
+ networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders)); |
+ networkRequest.setRequestHeadersText(response.requestHeadersText || ''); |
+ } |
- networkRequest.addFrameError(errorMessage, time); |
- networkRequest.responseReceivedTime = time; |
+ networkRequest.connectionReused = response.connectionReused; |
+ networkRequest.connectionId = String(response.connectionId); |
+ if (response.remoteIPAddress) |
+ networkRequest.setRemoteAddress(response.remoteIPAddress, response.remotePort || -1); |
- this._updateNetworkRequest(networkRequest); |
- }, |
+ if (response.fromServiceWorker) |
+ networkRequest.fetchedViaServiceWorker = true; |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- */ |
- webSocketClosed: function(requestId, time) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- this._finishNetworkRequest(networkRequest, time, -1); |
- }, |
+ if (response.fromDiskCache) |
+ networkRequest.setFromDiskCache(); |
+ networkRequest.timing = response.timing; |
- /** |
- * @override |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {string} eventName |
- * @param {string} eventId |
- * @param {string} data |
- */ |
- eventSourceMessageReceived: function(requestId, time, eventName, eventId, data) |
- { |
- var networkRequest = this._inflightRequestsById[requestId]; |
- if (!networkRequest) |
- return; |
- networkRequest.addEventSourceMessage(time, eventName, eventId, data); |
- }, |
+ networkRequest.protocol = response.protocol; |
- /** |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {!NetworkAgent.Timestamp} time |
- * @param {string} redirectURL |
- * @return {!WebInspector.NetworkRequest} |
- */ |
- _appendRedirect: function(requestId, time, redirectURL) |
- { |
- var originalNetworkRequest = this._inflightRequestsById[requestId]; |
- var previousRedirects = originalNetworkRequest.redirects || []; |
- originalNetworkRequest.requestId = requestId + ":redirected." + previousRedirects.length; |
- delete originalNetworkRequest.redirects; |
- if (previousRedirects.length > 0) |
- originalNetworkRequest.redirectSource = previousRedirects[previousRedirects.length - 1]; |
- this._finishNetworkRequest(originalNetworkRequest, time, -1); |
- var newNetworkRequest = this._createNetworkRequest(requestId, originalNetworkRequest.frameId, originalNetworkRequest.loaderId, |
- redirectURL, originalNetworkRequest.documentURL, originalNetworkRequest.initiator()); |
- newNetworkRequest.redirects = previousRedirects.concat(originalNetworkRequest); |
- return newNetworkRequest; |
- }, |
+ networkRequest.setSecurityState(response.securityState); |
- /** |
- * @param {!WebInspector.NetworkRequest} networkRequest |
- */ |
- _startNetworkRequest: function(networkRequest) |
- { |
- this._inflightRequestsById[networkRequest.requestId] = networkRequest; |
- this._inflightRequestsByURL[networkRequest.url] = networkRequest; |
- this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestStarted, networkRequest); |
- }, |
- |
- /** |
- * @param {!WebInspector.NetworkRequest} networkRequest |
- */ |
- _updateNetworkRequest: function(networkRequest) |
- { |
- this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestUpdated, networkRequest); |
- }, |
+ if (!this._mimeTypeIsConsistentWithType(networkRequest)) { |
+ var consoleModel = this._manager._target.consoleModel; |
+ consoleModel.addMessage(new WebInspector.ConsoleMessage( |
+ consoleModel.target(), WebInspector.ConsoleMessage.MessageSource.Network, |
+ WebInspector.ConsoleMessage.MessageLevel.Log, |
+ WebInspector.UIString( |
+ 'Resource interpreted as %s but transferred with MIME type %s: "%s".', |
+ networkRequest.resourceType().title(), networkRequest.mimeType, networkRequest.url), |
+ WebInspector.ConsoleMessage.MessageType.Log, '', 0, 0, networkRequest.requestId)); |
+ } |
- /** |
- * @param {!WebInspector.NetworkRequest} networkRequest |
- * @param {!NetworkAgent.Timestamp} finishTime |
- * @param {number} encodedDataLength |
- */ |
- _finishNetworkRequest: function(networkRequest, finishTime, encodedDataLength) |
- { |
- networkRequest.endTime = finishTime; |
- networkRequest.finished = true; |
- if (encodedDataLength >= 0) |
- networkRequest.setTransferSize(encodedDataLength); |
- this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestFinished, networkRequest); |
- delete this._inflightRequestsById[networkRequest.requestId]; |
- delete this._inflightRequestsByURL[networkRequest.url]; |
- }, |
+ if (response.securityDetails) |
+ networkRequest.setSecurityDetails(response.securityDetails); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.NetworkRequest} networkRequest |
+ * @return {boolean} |
+ */ |
+ _mimeTypeIsConsistentWithType(networkRequest) { |
+ // If status is an error, content is likely to be of an inconsistent type, |
+ // as it's going to be an error message. We do not want to emit a warning |
+ // for this, though, as this will already be reported as resource loading failure. |
+ // Also, if a URL like http://localhost/wiki/load.php?debug=true&lang=en produces text/css and gets reloaded, |
+ // it is 304 Not Modified and its guessed mime-type is text/php, which is wrong. |
+ // Don't check for mime-types in 304-resources. |
+ if (networkRequest.hasErrorStatusCode() || networkRequest.statusCode === 304 || networkRequest.statusCode === 204) |
+ return true; |
+ |
+ var resourceType = networkRequest.resourceType(); |
+ if (resourceType !== WebInspector.resourceTypes.Stylesheet && |
+ resourceType !== WebInspector.resourceTypes.Document && resourceType !== WebInspector.resourceTypes.TextTrack) { |
+ return true; |
+ } |
- /** |
- * @param {string} eventType |
- * @param {!WebInspector.NetworkRequest} networkRequest |
- */ |
- _dispatchEventToListeners: function(eventType, networkRequest) |
- { |
- this._manager.dispatchEventToListeners(eventType, networkRequest); |
- }, |
+ if (!networkRequest.mimeType) |
+ return true; // Might be not known for cached resources with null responses. |
+ |
+ if (networkRequest.mimeType in WebInspector.NetworkManager._MIMETypes) |
+ return resourceType.name() in WebInspector.NetworkManager._MIMETypes[networkRequest.mimeType]; |
+ |
+ return false; |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.ResourcePriority} newPriority |
+ * @param {!NetworkAgent.Timestamp} timestamp |
+ */ |
+ resourceChangedPriority(requestId, newPriority, timestamp) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (networkRequest) |
+ networkRequest.setPriority(newPriority); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!PageAgent.FrameId} frameId |
+ * @param {!NetworkAgent.LoaderId} loaderId |
+ * @param {string} documentURL |
+ * @param {!NetworkAgent.Request} request |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {!NetworkAgent.Timestamp} wallTime |
+ * @param {!NetworkAgent.Initiator} initiator |
+ * @param {!NetworkAgent.Response=} redirectResponse |
+ * @param {!PageAgent.ResourceType=} resourceType |
+ */ |
+ requestWillBeSent( |
+ requestId, |
+ frameId, |
+ loaderId, |
+ documentURL, |
+ request, |
+ time, |
+ wallTime, |
+ initiator, |
+ redirectResponse, |
+ resourceType) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (networkRequest) { |
+ // FIXME: move this check to the backend. |
+ if (!redirectResponse) |
+ return; |
+ this.responseReceived(requestId, frameId, loaderId, time, PageAgent.ResourceType.Other, redirectResponse); |
+ networkRequest = this._appendRedirect(requestId, time, request.url); |
+ } else |
+ networkRequest = this._createNetworkRequest(requestId, frameId, loaderId, request.url, documentURL, initiator); |
+ networkRequest.hasNetworkData = true; |
+ this._updateNetworkRequestWithRequest(networkRequest, request); |
+ networkRequest.setIssueTime(time, wallTime); |
+ networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]); |
+ |
+ this._startNetworkRequest(networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ */ |
+ requestServedFromCache(requestId) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ |
+ networkRequest.setFromMemoryCache(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!PageAgent.FrameId} frameId |
+ * @param {!NetworkAgent.LoaderId} loaderId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {!PageAgent.ResourceType} resourceType |
+ * @param {!NetworkAgent.Response} response |
+ */ |
+ responseReceived(requestId, frameId, loaderId, time, resourceType, response) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) { |
+ // We missed the requestWillBeSent. |
+ var eventData = {}; |
+ eventData.url = response.url; |
+ eventData.frameId = frameId; |
+ eventData.loaderId = loaderId; |
+ eventData.resourceType = resourceType; |
+ eventData.mimeType = response.mimeType; |
+ var lastModifiedHeader = response.headers['last-modified']; |
+ eventData.lastModified = lastModifiedHeader ? new Date(lastModifiedHeader) : null; |
+ this._manager.dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestUpdateDropped, eventData); |
+ return; |
+ } |
- /** |
- * @param {!NetworkAgent.RequestId} requestId |
- * @param {string} frameId |
- * @param {!NetworkAgent.LoaderId} loaderId |
- * @param {string} url |
- * @param {string} documentURL |
- * @param {?NetworkAgent.Initiator} initiator |
- */ |
- _createNetworkRequest: function(requestId, frameId, loaderId, url, documentURL, initiator) |
- { |
- return new WebInspector.NetworkRequest(this._manager._target, requestId, url, documentURL, frameId, loaderId, initiator); |
+ networkRequest.responseReceivedTime = time; |
+ networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]); |
+ |
+ this._updateNetworkRequestWithResponse(networkRequest, response); |
+ |
+ this._updateNetworkRequest(networkRequest); |
+ this._manager.dispatchEventToListeners(WebInspector.NetworkManager.Events.ResponseReceived, networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {number} dataLength |
+ * @param {number} encodedDataLength |
+ */ |
+ dataReceived(requestId, time, dataLength, encodedDataLength) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ |
+ networkRequest.resourceSize += dataLength; |
+ if (encodedDataLength !== -1) |
+ networkRequest.increaseTransferSize(encodedDataLength); |
+ networkRequest.endTime = time; |
+ |
+ this._updateNetworkRequest(networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} finishTime |
+ * @param {number} encodedDataLength |
+ */ |
+ loadingFinished(requestId, finishTime, encodedDataLength) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ this._finishNetworkRequest(networkRequest, finishTime, encodedDataLength); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {!PageAgent.ResourceType} resourceType |
+ * @param {string} localizedDescription |
+ * @param {boolean=} canceled |
+ * @param {!NetworkAgent.BlockedReason=} blockedReason |
+ */ |
+ loadingFailed(requestId, time, resourceType, localizedDescription, canceled, blockedReason) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ |
+ networkRequest.failed = true; |
+ networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]); |
+ networkRequest.canceled = canceled; |
+ if (blockedReason) { |
+ networkRequest.setBlockedReason(blockedReason); |
+ if (blockedReason === NetworkAgent.BlockedReason.Inspector) { |
+ var consoleModel = this._manager._target.consoleModel; |
+ consoleModel.addMessage(new WebInspector.ConsoleMessage( |
+ consoleModel.target(), WebInspector.ConsoleMessage.MessageSource.Network, |
+ WebInspector.ConsoleMessage.MessageLevel.Warning, |
+ WebInspector.UIString('Request was blocked by DevTools: "%s".', networkRequest.url), |
+ WebInspector.ConsoleMessage.MessageType.Log, '', 0, 0, networkRequest.requestId)); |
+ } |
} |
+ networkRequest.localizedFailDescription = localizedDescription; |
+ this._finishNetworkRequest(networkRequest, time, -1); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {string} requestURL |
+ * @param {!NetworkAgent.Initiator=} initiator |
+ */ |
+ webSocketCreated(requestId, requestURL, initiator) { |
+ var networkRequest = |
+ new WebInspector.NetworkRequest(this._manager._target, requestId, requestURL, '', '', '', initiator || null); |
+ networkRequest.setResourceType(WebInspector.resourceTypes.WebSocket); |
+ this._startNetworkRequest(networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {!NetworkAgent.Timestamp} wallTime |
+ * @param {!NetworkAgent.WebSocketRequest} request |
+ */ |
+ webSocketWillSendHandshakeRequest(requestId, time, wallTime, request) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ |
+ networkRequest.requestMethod = 'GET'; |
+ networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers)); |
+ networkRequest.setIssueTime(time, wallTime); |
+ |
+ this._updateNetworkRequest(networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {!NetworkAgent.WebSocketResponse} response |
+ */ |
+ webSocketHandshakeResponseReceived(requestId, time, response) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ |
+ networkRequest.statusCode = response.status; |
+ networkRequest.statusText = response.statusText; |
+ networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers); |
+ networkRequest.responseHeadersText = response.headersText; |
+ if (response.requestHeaders) |
+ networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders)); |
+ if (response.requestHeadersText) |
+ networkRequest.setRequestHeadersText(response.requestHeadersText); |
+ networkRequest.responseReceivedTime = time; |
+ networkRequest.protocol = 'websocket'; |
+ |
+ this._updateNetworkRequest(networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {!NetworkAgent.WebSocketFrame} response |
+ */ |
+ webSocketFrameReceived(requestId, time, response) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ |
+ networkRequest.addFrame(response, time); |
+ networkRequest.responseReceivedTime = time; |
+ |
+ this._updateNetworkRequest(networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {!NetworkAgent.WebSocketFrame} response |
+ */ |
+ webSocketFrameSent(requestId, time, response) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ |
+ networkRequest.addFrame(response, time, true); |
+ networkRequest.responseReceivedTime = time; |
+ |
+ this._updateNetworkRequest(networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {string} errorMessage |
+ */ |
+ webSocketFrameError(requestId, time, errorMessage) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ |
+ networkRequest.addFrameError(errorMessage, time); |
+ networkRequest.responseReceivedTime = time; |
+ |
+ this._updateNetworkRequest(networkRequest); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ */ |
+ webSocketClosed(requestId, time) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ this._finishNetworkRequest(networkRequest, time, -1); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {string} eventName |
+ * @param {string} eventId |
+ * @param {string} data |
+ */ |
+ eventSourceMessageReceived(requestId, time, eventName, eventId, data) { |
+ var networkRequest = this._inflightRequestsById[requestId]; |
+ if (!networkRequest) |
+ return; |
+ networkRequest.addEventSourceMessage(time, eventName, eventId, data); |
+ } |
+ |
+ /** |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {!NetworkAgent.Timestamp} time |
+ * @param {string} redirectURL |
+ * @return {!WebInspector.NetworkRequest} |
+ */ |
+ _appendRedirect(requestId, time, redirectURL) { |
+ var originalNetworkRequest = this._inflightRequestsById[requestId]; |
+ var previousRedirects = originalNetworkRequest.redirects || []; |
+ originalNetworkRequest.requestId = requestId + ':redirected.' + previousRedirects.length; |
+ delete originalNetworkRequest.redirects; |
+ if (previousRedirects.length > 0) |
+ originalNetworkRequest.redirectSource = previousRedirects[previousRedirects.length - 1]; |
+ this._finishNetworkRequest(originalNetworkRequest, time, -1); |
+ var newNetworkRequest = this._createNetworkRequest( |
+ requestId, originalNetworkRequest.frameId, originalNetworkRequest.loaderId, redirectURL, |
+ originalNetworkRequest.documentURL, originalNetworkRequest.initiator()); |
+ newNetworkRequest.redirects = previousRedirects.concat(originalNetworkRequest); |
+ return newNetworkRequest; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.NetworkRequest} networkRequest |
+ */ |
+ _startNetworkRequest(networkRequest) { |
+ this._inflightRequestsById[networkRequest.requestId] = networkRequest; |
+ this._inflightRequestsByURL[networkRequest.url] = networkRequest; |
+ this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestStarted, networkRequest); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.NetworkRequest} networkRequest |
+ */ |
+ _updateNetworkRequest(networkRequest) { |
+ this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestUpdated, networkRequest); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.NetworkRequest} networkRequest |
+ * @param {!NetworkAgent.Timestamp} finishTime |
+ * @param {number} encodedDataLength |
+ */ |
+ _finishNetworkRequest(networkRequest, finishTime, encodedDataLength) { |
+ networkRequest.endTime = finishTime; |
+ networkRequest.finished = true; |
+ if (encodedDataLength >= 0) |
+ networkRequest.setTransferSize(encodedDataLength); |
+ this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestFinished, networkRequest); |
+ delete this._inflightRequestsById[networkRequest.requestId]; |
+ delete this._inflightRequestsByURL[networkRequest.url]; |
+ } |
+ |
+ /** |
+ * @param {string} eventType |
+ * @param {!WebInspector.NetworkRequest} networkRequest |
+ */ |
+ _dispatchEventToListeners(eventType, networkRequest) { |
+ this._manager.dispatchEventToListeners(eventType, networkRequest); |
+ } |
+ |
+ /** |
+ * @param {!NetworkAgent.RequestId} requestId |
+ * @param {string} frameId |
+ * @param {!NetworkAgent.LoaderId} loaderId |
+ * @param {string} url |
+ * @param {string} documentURL |
+ * @param {?NetworkAgent.Initiator} initiator |
+ */ |
+ _createNetworkRequest(requestId, frameId, loaderId, url, documentURL, initiator) { |
+ return new WebInspector.NetworkRequest( |
+ this._manager._target, requestId, url, documentURL, frameId, loaderId, initiator); |
+ } |
}; |
- |
/** |
- * @constructor |
- * @extends {WebInspector.Object} |
* @implements {WebInspector.TargetManager.Observer} |
+ * @unrestricted |
*/ |
-WebInspector.MultitargetNetworkManager = function() |
-{ |
- WebInspector.Object.call(this); |
+WebInspector.MultitargetNetworkManager = class extends WebInspector.Object { |
+ constructor() { |
+ super(); |
/** @type {!Set<string>} */ |
this._blockedURLs = new Set(); |
- this._blockedSetting = WebInspector.moduleSetting("blockedURLs"); |
+ this._blockedSetting = WebInspector.moduleSetting('blockedURLs'); |
this._blockedSetting.addChangeListener(this._updateBlockedURLs, this); |
this._blockedSetting.set([]); |
this._updateBlockedURLs(); |
- this._userAgentOverride = ""; |
+ this._userAgentOverride = ''; |
/** @type {!Set<!Protocol.NetworkAgent>} */ |
this._agents = new Set(); |
/** @type {!WebInspector.NetworkManager.Conditions} */ |
this._networkConditions = WebInspector.NetworkManager.NoThrottlingConditions; |
WebInspector.targetManager.observeTargets(this, WebInspector.Target.Capability.Network); |
-}; |
+ } |
-/** @enum {symbol} */ |
-WebInspector.MultitargetNetworkManager.Events = { |
- ConditionsChanged: Symbol("ConditionsChanged"), |
- UserAgentChanged: Symbol("UserAgentChanged") |
-}; |
- |
-/** |
- * @param {string} uaString |
- * @return {string} |
- */ |
-WebInspector.MultitargetNetworkManager.patchUserAgentWithChromeVersion = function(uaString) |
-{ |
+ /** |
+ * @param {string} uaString |
+ * @return {string} |
+ */ |
+ static patchUserAgentWithChromeVersion(uaString) { |
// Patches Chrome/CriOS version from user agent ("1.2.3.4" when user agent is: "Chrome/1.2.3.4"). |
- var chromeRegex = new RegExp("(?:^|\\W)Chrome/(\\S+)"); |
+ var chromeRegex = new RegExp('(?:^|\\W)Chrome/(\\S+)'); |
var chromeMatch = navigator.userAgent.match(chromeRegex); |
if (chromeMatch && chromeMatch.length > 1) |
- return String.sprintf(uaString, chromeMatch[1]); |
+ return String.sprintf(uaString, chromeMatch[1]); |
return uaString; |
-}; |
- |
-WebInspector.MultitargetNetworkManager.prototype = { |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetAdded: function(target) |
- { |
- var networkAgent = target.networkAgent(); |
- if (this._extraHeaders) |
- networkAgent.setExtraHTTPHeaders(this._extraHeaders); |
- if (this._currentUserAgent()) |
- networkAgent.setUserAgentOverride(this._currentUserAgent()); |
- for (var url of this._blockedURLs) |
- networkAgent.addBlockedURL(url); |
- this._agents.add(networkAgent); |
- if (this.isThrottling()) |
- this._updateNetworkConditions(networkAgent); |
- }, |
- |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetRemoved: function(target) |
- { |
- this._agents.delete(target.networkAgent()); |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- isThrottling: function() |
- { |
- return this._networkConditions.download >= 0 || this._networkConditions.upload >= 0 || this._networkConditions.latency > 0; |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- isOffline: function() |
- { |
- return !this._networkConditions.download && !this._networkConditions.upload; |
- }, |
- |
- /** |
- * @param {!WebInspector.NetworkManager.Conditions} conditions |
- */ |
- setNetworkConditions: function(conditions) |
- { |
- this._networkConditions = conditions; |
- for (var agent of this._agents) |
- this._updateNetworkConditions(agent); |
- this.dispatchEventToListeners(WebInspector.MultitargetNetworkManager.Events.ConditionsChanged); |
- }, |
- |
- /** |
- * @return {!WebInspector.NetworkManager.Conditions} |
- */ |
- networkConditions: function() |
- { |
- return this._networkConditions; |
- }, |
- |
- /** |
- * @param {!Protocol.NetworkAgent} networkAgent |
- */ |
- _updateNetworkConditions: function(networkAgent) |
- { |
- var conditions = this._networkConditions; |
- if (!this.isThrottling()) { |
- networkAgent.emulateNetworkConditions(false, 0, 0, 0); |
- } else { |
- networkAgent.emulateNetworkConditions(this.isOffline(), conditions.latency, conditions.download < 0 ? 0 : conditions.download, conditions.upload < 0 ? 0 : conditions.upload, WebInspector.NetworkManager._connectionType(conditions)); |
- } |
- }, |
- |
- /** |
- * @param {!NetworkAgent.Headers} headers |
- */ |
- setExtraHTTPHeaders: function(headers) |
- { |
- this._extraHeaders = headers; |
- for (var agent of this._agents) |
- agent.setExtraHTTPHeaders(this._extraHeaders); |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- _currentUserAgent: function() |
- { |
- return this._customUserAgent ? this._customUserAgent : this._userAgentOverride; |
- }, |
- |
- _updateUserAgentOverride: function() |
- { |
- var userAgent = this._currentUserAgent(); |
- WebInspector.ResourceLoader.targetUserAgent = userAgent; |
- for (var agent of this._agents) |
- agent.setUserAgentOverride(userAgent); |
- }, |
- |
- /** |
- * @param {string} userAgent |
- */ |
- setUserAgentOverride: function(userAgent) |
- { |
- if (this._userAgentOverride === userAgent) |
- return; |
- this._userAgentOverride = userAgent; |
- if (!this._customUserAgent) |
- this._updateUserAgentOverride(); |
- this.dispatchEventToListeners(WebInspector.MultitargetNetworkManager.Events.UserAgentChanged); |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- userAgentOverride: function() |
- { |
- return this._userAgentOverride; |
- }, |
- |
- /** |
- * @param {string} userAgent |
- */ |
- setCustomUserAgentOverride: function(userAgent) |
- { |
- this._customUserAgent = userAgent; |
- this._updateUserAgentOverride(); |
- }, |
- |
- _updateBlockedURLs: function() |
- { |
- var blocked = this._blockedSetting.get(); |
- for (var url of blocked) { |
- if (!this._blockedURLs.has(url)) |
- this._addBlockedURL(url); |
- } |
- for (var url of this._blockedURLs) { |
- if (blocked.indexOf(url) === -1) |
- this._removeBlockedURL(url); |
- } |
- }, |
- |
- /** |
- * @param {string} url |
- */ |
- _addBlockedURL: function(url) |
- { |
- this._blockedURLs.add(url); |
- for (var agent of this._agents) |
- agent.addBlockedURL(url); |
- }, |
- |
- /** |
- * @param {string} url |
- */ |
- _removeBlockedURL: function(url) |
- { |
- this._blockedURLs.delete(url); |
- for (var agent of this._agents) |
- agent.removeBlockedURL(url); |
- }, |
- |
- clearBrowserCache: function() |
- { |
- for (var agent of this._agents) |
- agent.clearBrowserCache(); |
- }, |
- |
- clearBrowserCookies: function() |
- { |
- for (var agent of this._agents) |
- agent.clearBrowserCookies(); |
- }, |
- |
- /** |
- * @param {string} origin |
- * @param {function(!Array<string>)} callback |
- */ |
- getCertificate: function(origin, callback) |
- { |
- var target = WebInspector.targetManager.mainTarget(); |
- target.networkAgent().getCertificate(origin, mycallback); |
- |
- /** |
- * @param {?Protocol.Error} error |
- * @param {!Array<string>} certificate |
- */ |
- function mycallback(error, certificate) |
- { |
- callback(error ? [] : certificate); |
- } |
- }, |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.Target} target |
+ */ |
+ targetAdded(target) { |
+ var networkAgent = target.networkAgent(); |
+ if (this._extraHeaders) |
+ networkAgent.setExtraHTTPHeaders(this._extraHeaders); |
+ if (this._currentUserAgent()) |
+ networkAgent.setUserAgentOverride(this._currentUserAgent()); |
+ for (var url of this._blockedURLs) |
+ networkAgent.addBlockedURL(url); |
+ this._agents.add(networkAgent); |
+ if (this.isThrottling()) |
+ this._updateNetworkConditions(networkAgent); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.Target} target |
+ */ |
+ targetRemoved(target) { |
+ this._agents.delete(target.networkAgent()); |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ isThrottling() { |
+ return this._networkConditions.download >= 0 || this._networkConditions.upload >= 0 || |
+ this._networkConditions.latency > 0; |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ isOffline() { |
+ return !this._networkConditions.download && !this._networkConditions.upload; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.NetworkManager.Conditions} conditions |
+ */ |
+ setNetworkConditions(conditions) { |
+ this._networkConditions = conditions; |
+ for (var agent of this._agents) |
+ this._updateNetworkConditions(agent); |
+ this.dispatchEventToListeners(WebInspector.MultitargetNetworkManager.Events.ConditionsChanged); |
+ } |
+ |
+ /** |
+ * @return {!WebInspector.NetworkManager.Conditions} |
+ */ |
+ networkConditions() { |
+ return this._networkConditions; |
+ } |
+ |
+ /** |
+ * @param {!Protocol.NetworkAgent} networkAgent |
+ */ |
+ _updateNetworkConditions(networkAgent) { |
+ var conditions = this._networkConditions; |
+ if (!this.isThrottling()) { |
+ networkAgent.emulateNetworkConditions(false, 0, 0, 0); |
+ } else { |
+ networkAgent.emulateNetworkConditions( |
+ this.isOffline(), conditions.latency, conditions.download < 0 ? 0 : conditions.download, |
+ conditions.upload < 0 ? 0 : conditions.upload, WebInspector.NetworkManager._connectionType(conditions)); |
+ } |
+ } |
+ |
+ /** |
+ * @param {!NetworkAgent.Headers} headers |
+ */ |
+ setExtraHTTPHeaders(headers) { |
+ this._extraHeaders = headers; |
+ for (var agent of this._agents) |
+ agent.setExtraHTTPHeaders(this._extraHeaders); |
+ } |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ _currentUserAgent() { |
+ return this._customUserAgent ? this._customUserAgent : this._userAgentOverride; |
+ } |
+ |
+ _updateUserAgentOverride() { |
+ var userAgent = this._currentUserAgent(); |
+ WebInspector.ResourceLoader.targetUserAgent = userAgent; |
+ for (var agent of this._agents) |
+ agent.setUserAgentOverride(userAgent); |
+ } |
+ |
+ /** |
+ * @param {string} userAgent |
+ */ |
+ setUserAgentOverride(userAgent) { |
+ if (this._userAgentOverride === userAgent) |
+ return; |
+ this._userAgentOverride = userAgent; |
+ if (!this._customUserAgent) |
+ this._updateUserAgentOverride(); |
+ this.dispatchEventToListeners(WebInspector.MultitargetNetworkManager.Events.UserAgentChanged); |
+ } |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ userAgentOverride() { |
+ return this._userAgentOverride; |
+ } |
+ |
+ /** |
+ * @param {string} userAgent |
+ */ |
+ setCustomUserAgentOverride(userAgent) { |
+ this._customUserAgent = userAgent; |
+ this._updateUserAgentOverride(); |
+ } |
+ |
+ _updateBlockedURLs() { |
+ var blocked = this._blockedSetting.get(); |
+ for (var url of blocked) { |
+ if (!this._blockedURLs.has(url)) |
+ this._addBlockedURL(url); |
+ } |
+ for (var url of this._blockedURLs) { |
+ if (blocked.indexOf(url) === -1) |
+ this._removeBlockedURL(url); |
+ } |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ */ |
+ _addBlockedURL(url) { |
+ this._blockedURLs.add(url); |
+ for (var agent of this._agents) |
+ agent.addBlockedURL(url); |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ */ |
+ _removeBlockedURL(url) { |
+ this._blockedURLs.delete(url); |
+ for (var agent of this._agents) |
+ agent.removeBlockedURL(url); |
+ } |
+ |
+ clearBrowserCache() { |
+ for (var agent of this._agents) |
+ agent.clearBrowserCache(); |
+ } |
+ |
+ clearBrowserCookies() { |
+ for (var agent of this._agents) |
+ agent.clearBrowserCookies(); |
+ } |
+ |
+ /** |
+ * @param {string} origin |
+ * @param {function(!Array<string>)} callback |
+ */ |
+ getCertificate(origin, callback) { |
+ var target = WebInspector.targetManager.mainTarget(); |
+ target.networkAgent().getCertificate(origin, mycallback); |
+ |
+ /** |
+ * @param {?Protocol.Error} error |
+ * @param {!Array<string>} certificate |
+ */ |
+ function mycallback(error, certificate) { |
+ callback(error ? [] : certificate); |
+ } |
+ } |
- /** |
- * @param {string} url |
- * @param {function(number, !Object.<string, string>, string)} callback |
- */ |
- loadResource: function(url, callback) |
- { |
- var headers = {}; |
+ /** |
+ * @param {string} url |
+ * @param {function(number, !Object.<string, string>, string)} callback |
+ */ |
+ loadResource(url, callback) { |
+ var headers = {}; |
- var currentUserAgent = this._currentUserAgent(); |
- if (currentUserAgent) |
- headers["User-Agent"] = currentUserAgent; |
+ var currentUserAgent = this._currentUserAgent(); |
+ if (currentUserAgent) |
+ headers['User-Agent'] = currentUserAgent; |
- if (WebInspector.moduleSetting("cacheDisabled").get()) |
- headers["Cache-Control"] = "no-cache"; |
+ if (WebInspector.moduleSetting('cacheDisabled').get()) |
+ headers['Cache-Control'] = 'no-cache'; |
- WebInspector.ResourceLoader.load(url, headers, callback); |
- }, |
+ WebInspector.ResourceLoader.load(url, headers, callback); |
+ } |
+}; |
- __proto__: WebInspector.Object.prototype |
+/** @enum {symbol} */ |
+WebInspector.MultitargetNetworkManager.Events = { |
+ ConditionsChanged: Symbol('ConditionsChanged'), |
+ UserAgentChanged: Symbol('UserAgentChanged') |
}; |
+ |
/** |
* @type {!WebInspector.MultitargetNetworkManager} |
*/ |