Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(738)

Unified Diff: third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
index bb0df65e16a0eb40af2e5e2c7f33d5536cc555bb..45cc4b673569e2c8b45f410ba3b51d292dfeb62e 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
@@ -27,25 +27,26 @@
* (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.VBox}
* @implements {WebInspector.Searchable}
* @implements {WebInspector.TargetManager.Observer}
- * @param {!WebInspector.FilterBar} filterBar
- * @param {!Element} progressBarContainer
- * @param {!WebInspector.Setting} networkLogLargeRowsSetting
+ * @unrestricted
*/
-WebInspector.NetworkLogView = function(filterBar, progressBarContainer, networkLogLargeRowsSetting)
-{
- WebInspector.VBox.call(this);
+WebInspector.NetworkLogView = class extends WebInspector.VBox {
+ /**
+ * @param {!WebInspector.FilterBar} filterBar
+ * @param {!Element} progressBarContainer
+ * @param {!WebInspector.Setting} networkLogLargeRowsSetting
+ */
+ constructor(filterBar, progressBarContainer, networkLogLargeRowsSetting) {
+ super();
this.setMinimumSize(50, 64);
- this.registerRequiredCSS("network/networkLogView.css");
+ this.registerRequiredCSS('network/networkLogView.css');
- this._networkHideDataURLSetting = WebInspector.settings.createSetting("networkHideDataURL", false);
- this._networkResourceTypeFiltersSetting = WebInspector.settings.createSetting("networkResourceTypeFilters", {});
- this._networkShowPrimaryLoadWaterfallSetting = WebInspector.settings.createSetting("networkShowPrimaryLoadWaterfall", false);
+ this._networkHideDataURLSetting = WebInspector.settings.createSetting('networkHideDataURL', false);
+ this._networkResourceTypeFiltersSetting = WebInspector.settings.createSetting('networkResourceTypeFilters', {});
+ this._networkShowPrimaryLoadWaterfallSetting =
+ WebInspector.settings.createSetting('networkShowPrimaryLoadWaterfall', false);
this._filterBar = filterBar;
this._progressBarContainer = progressBarContainer;
@@ -61,14 +62,14 @@ WebInspector.NetworkLogView = function(filterBar, progressBarContainer, networkL
/**
* @this {WebInspector.NetworkLogView}
*/
- function updateRowHeight()
- {
- /** @type {number} */
- this._rowHeight = !!this._networkLogLargeRowsSetting.get() ? 41 : 21;
+ function updateRowHeight() {
+ /** @type {number} */
+ this._rowHeight = !!this._networkLogLargeRowsSetting.get() ? 41 : 21;
}
updateRowHeight.call(this);
- this._columns = new WebInspector.NetworkLogViewColumns(this, this._timeCalculator, this._durationCalculator, networkLogLargeRowsSetting);
+ this._columns = new WebInspector.NetworkLogViewColumns(
+ this, this._timeCalculator, this._durationCalculator, networkLogLargeRowsSetting);
/** @type {!Map.<string, !WebInspector.NetworkDataGridNode>} */
this._nodesByRequestId = new Map();
@@ -101,1333 +102,1461 @@ WebInspector.NetworkLogView = function(filterBar, progressBarContainer, networkL
this._resetSuggestionBuilder();
this._initializeView();
- WebInspector.moduleSetting("networkColorCodeResourceTypes").addChangeListener(this._invalidateAllItems, this);
+ WebInspector.moduleSetting('networkColorCodeResourceTypes').addChangeListener(this._invalidateAllItems, this);
WebInspector.targetManager.observeTargets(this);
- WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.Events.RequestStarted, this._onRequestStarted, this);
- WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.Events.RequestUpdated, this._onRequestUpdated, this);
- WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.Events.RequestFinished, this._onRequestUpdated, this);
-};
-
-WebInspector.NetworkLogView._isFilteredOutSymbol = Symbol("isFilteredOut");
-WebInspector.NetworkLogView._isMatchingSearchQuerySymbol = Symbol("isMatchingSearchQuery");
-
-WebInspector.NetworkLogView.HTTPSchemas = {"http": true, "https": true, "ws": true, "wss": true};
-
-WebInspector.NetworkLogView._waterfallMinOvertime = 1;
-WebInspector.NetworkLogView._waterfallMaxOvertime = 3;
-
-/** @enum {symbol} */
-WebInspector.NetworkLogView.Events = {
- RequestSelected: Symbol("RequestSelected"),
- SearchCountUpdated: Symbol("SearchCountUpdated"),
- SearchIndexUpdated: Symbol("SearchIndexUpdated"),
- UpdateRequest: Symbol("UpdateRequest")
-};
-
-/** @enum {string} */
-WebInspector.NetworkLogView.FilterType = {
- Domain: "domain",
- HasResponseHeader: "has-response-header",
- Is: "is",
- LargerThan: "larger-than",
- Method: "method",
- MimeType: "mime-type",
- MixedContent: "mixed-content",
- Scheme: "scheme",
- SetCookieDomain: "set-cookie-domain",
- SetCookieName: "set-cookie-name",
- SetCookieValue: "set-cookie-value",
- StatusCode: "status-code"
-};
-
-/** @enum {string} */
-WebInspector.NetworkLogView.MixedContentFilterValues = {
- All: "all",
- Displayed: "displayed",
- Blocked: "blocked",
- BlockOverridden: "block-overridden"
-};
-
-/** @enum {string} */
-WebInspector.NetworkLogView.IsFilterType = {
- Running: "running"
-};
-
-/** @type {!Array<string>} */
-WebInspector.NetworkLogView._searchKeys = Object.keys(WebInspector.NetworkLogView.FilterType).map(key => WebInspector.NetworkLogView.FilterType[key]);
-
-WebInspector.NetworkLogView.prototype = {
- /**
- * @return {number}
- */
- headerHeight: function()
- {
- return this._headerHeight;
- },
-
- /**
- * @param {boolean} recording
- */
- setRecording: function(recording)
- {
- this._recording = recording;
- this._updateSummaryBar();
- },
-
- /**
- * @param {boolean} preserveLog
- */
- setPreserveLog: function(preserveLog)
- {
- this._preserveLog = preserveLog;
- },
-
- /**
- * @override
- * @param {!WebInspector.Target} target
- */
- targetAdded: function(target)
- {
- if (!target.parentTarget()) {
- var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
- if (resourceTreeModel) {
- resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
- resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.Load, this._loadEventFired, this);
- resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this);
- }
- }
- var networkLog = WebInspector.NetworkLog.fromTarget(target);
- if (networkLog)
- networkLog.requests().forEach(this._appendRequest.bind(this));
- },
-
- /**
- * @override
- * @param {!WebInspector.Target} target
- */
- targetRemoved: function(target)
- {
- if (!target.parentTarget()) {
- var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
- if (resourceTreeModel) {
- resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
- resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.Events.Load, this._loadEventFired, this);
- resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this);
- }
- }
- },
-
- /**
- * @param {number} start
- * @param {number} end
- */
- setWindow: function(start, end)
- {
- if (!start && !end) {
- this._timeFilter = null;
- this._timeCalculator.setWindow(null);
- } else {
- this._timeFilter = WebInspector.NetworkLogView._requestTimeFilter.bind(null, start, end);
- this._timeCalculator.setWindow(new WebInspector.NetworkTimeBoundary(start, end));
- }
- this._columns.updateDividersIfNeeded();
- this._filterRequests();
- },
-
- clearSelection: function()
- {
- if (this._dataGrid.selectedNode)
- this._dataGrid.selectedNode.deselect();
- },
-
- _addFilters: function()
- {
- this._textFilterUI = new WebInspector.TextFilterUI(true);
- this._textFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._filterChanged, this);
- this._filterBar.addFilter(this._textFilterUI);
-
- var dataURLSetting = this._networkHideDataURLSetting;
- this._dataURLFilterUI = new WebInspector.CheckboxFilterUI("hide-data-url", WebInspector.UIString("Hide data URLs"), true, dataURLSetting);
- this._dataURLFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._filterChanged.bind(this), this);
- this._filterBar.addFilter(this._dataURLFilterUI);
-
- var filterItems = [];
- for (var categoryId in WebInspector.resourceCategories) {
- var category = WebInspector.resourceCategories[categoryId];
- filterItems.push({name: category.title, label: category.shortTitle, title: category.title});
- }
- this._resourceCategoryFilterUI = new WebInspector.NamedBitSetFilterUI(filterItems, this._networkResourceTypeFiltersSetting);
- this._resourceCategoryFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._filterChanged.bind(this), this);
- this._filterBar.addFilter(this._resourceCategoryFilterUI);
- },
-
- _resetSuggestionBuilder: function()
- {
- this._suggestionBuilder = new WebInspector.FilterSuggestionBuilder(WebInspector.NetworkLogView._searchKeys);
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.Is, WebInspector.NetworkLogView.IsFilterType.Running);
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.LargerThan, "100");
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.LargerThan, "10k");
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.LargerThan, "1M");
- this._textFilterUI.setSuggestionBuilder(this._suggestionBuilder);
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _filterChanged: function(event)
- {
- this.removeAllNodeHighlights();
- this._parseFilterQuery(this._textFilterUI.value());
- this._filterRequests();
- },
-
- _initializeView: function()
- {
- this.element.id = "network-container";
- this._setupDataGrid();
-
- this._columns.show(this.element);
-
- this._summaryBarElement = this.element.createChild("div", "network-summary-bar");
-
- this._columns.sortByCurrentColumn();
- },
-
- _showRecordingHint: function()
- {
- this._hideRecordingHint();
- this._recordingHint = this.element.createChild("div", "network-status-pane fill");
- var hintText = this._recordingHint.createChild("div", "recording-hint");
- var reloadShortcutNode = this._recordingHint.createChild("b");
- reloadShortcutNode.textContent = WebInspector.shortcutRegistry.shortcutDescriptorsForAction("main.reload")[0].name;
-
- if (this._recording) {
- var recordingText = hintText.createChild("span");
- recordingText.textContent = WebInspector.UIString("Recording network activity\u2026");
- hintText.createChild("br");
- hintText.appendChild(WebInspector.formatLocalized("Perform a request or hit %s to record the reload.", [reloadShortcutNode]));
- } else {
- var recordNode = hintText.createChild("b");
- recordNode.textContent = WebInspector.shortcutRegistry.shortcutTitleForAction("network.toggle-recording");
- hintText.appendChild(WebInspector.formatLocalized("Record (%s) or reload (%s) to display network activity.", [recordNode, reloadShortcutNode]));
- }
- },
-
- _hideRecordingHint: function()
- {
- if (this._recordingHint)
- this._recordingHint.remove();
- delete this._recordingHint;
- },
-
- /**
- * @override
- * @return {!Array.<!Element>}
- */
- elementsToRestoreScrollPositionsFor: function()
- {
- if (!this._dataGrid) // Not initialized yet.
- return [];
- return [this._dataGrid.scrollContainer];
- },
-
- _setupDataGrid: function()
- {
- this._dataGrid = this._columns.dataGrid();
- this._dataGrid.setRowContextMenuCallback((contextMenu, node) => this.handleContextMenuForRequest(contextMenu, node.request()));
- this._dataGrid.setStickToBottom(true);
- this._dataGrid.setName("networkLog");
- this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last);
- this._dataGrid.element.classList.add("network-log-grid");
- this._dataGrid.element.addEventListener("mousedown", this._dataGridMouseDown.bind(this), true);
- this._dataGrid.element.addEventListener("mousemove", this._dataGridMouseMove.bind(this), true);
- this._dataGrid.element.addEventListener("mouseleave", this._dataGridMouseLeave.bind(this), true);
- },
-
- /**
- * @param {!Event} event
- */
- _dataGridMouseMove: function(event)
- {
- var node = this._dataGrid.dataGridNodeFromNode(event.target);
- var highlightInitiatorChain = event.shiftKey;
- this._setHoveredNode(node, highlightInitiatorChain);
- this._highlightInitiatorChain((highlightInitiatorChain && node) ? node.request() : null);
- },
-
- _dataGridMouseLeave: function()
- {
- this._setHoveredNode(null);
- this._highlightInitiatorChain(null);
- },
-
- /**
- * @param {?WebInspector.NetworkRequest} request
- * @param {boolean} highlightInitiatorChain
- */
- setHoveredRequest: function(request, highlightInitiatorChain)
- {
- this._setHoveredNode(request ? this._nodesByRequestId.get(request.requestId) : null, highlightInitiatorChain);
- this._highlightInitiatorChain((request && highlightInitiatorChain) ? request : null);
- },
-
- /**
- * @param {?WebInspector.NetworkDataGridNode} node
- * @param {boolean=} highlightInitiatorChain
- */
- _setHoveredNode: function(node, highlightInitiatorChain)
- {
- if (this._hoveredNode)
- this._hoveredNode.element().classList.remove("hover");
- this._hoveredNode = node;
- if (this._hoveredNode)
- this._hoveredNode.element().classList.add("hover");
- this._columns.setHoveredRequest(this._hoveredNode ? this._hoveredNode.request() : null, !!highlightInitiatorChain);
- },
-
- /**
- * @param {!Event} event
- */
- _dataGridMouseDown: function(event)
- {
- if ((!this._dataGrid.selectedNode && event.button) || event.target.enclosingNodeOrSelfWithNodeName("a"))
- event.consume();
- },
-
- /**
- * @param {?WebInspector.NetworkRequest} request
- */
- _highlightInitiatorChain: function(request)
- {
- if (this._requestWithHighlightedInitiators === request)
- return;
- this._requestWithHighlightedInitiators = request;
-
- if (!request) {
- for (var node of this._nodesByRequestId.values()) {
- if (!node.dataGrid)
- continue;
- node.element().classList.remove("network-node-on-initiator-path", "network-node-on-initiated-path");
- }
- return;
- }
-
- var initiatorGraph = request.initiatorGraph();
- for (var node of this._nodesByRequestId.values()) {
- if (!node.dataGrid)
- continue;
- node.element().classList.toggle("network-node-on-initiator-path", node.request() !== request && initiatorGraph.initiators.has(node.request()));
- node.element().classList.toggle("network-node-on-initiated-path", node.request() !== request && initiatorGraph.initiated.has(node.request()));
- }
- },
-
- _updateSummaryBar: function()
- {
- var requestsNumber = this._nodesByRequestId.size;
-
- if (!requestsNumber) {
- this._showRecordingHint();
- return;
- }
- this._hideRecordingHint();
-
- var transferSize = 0;
- var selectedRequestsNumber = 0;
- var selectedTransferSize = 0;
- var baseTime = -1;
- var maxTime = -1;
- var nodes = this._nodesByRequestId.valuesArray();
- for (var i = 0; i < nodes.length; ++i) {
- var request = nodes[i].request();
- var requestTransferSize = request.transferSize;
- transferSize += requestTransferSize;
- if (!nodes[i][WebInspector.NetworkLogView._isFilteredOutSymbol]) {
- selectedRequestsNumber++;
- selectedTransferSize += requestTransferSize;
- }
- if (request.url === request.target().inspectedURL() && request.resourceType() === WebInspector.resourceTypes.Document)
- baseTime = request.startTime;
- if (request.endTime > maxTime)
- maxTime = request.endTime;
- }
-
- var summaryBar = this._summaryBarElement;
- summaryBar.removeChildren();
- var separator = "\u2002\u2758\u2002";
- var text = "";
- /**
- * @param {string} chunk
- * @return {!Element}
- */
- function appendChunk(chunk)
- {
- var span = summaryBar.createChild("span");
- span.textContent = chunk;
- text += chunk;
- return span;
- }
-
- if (selectedRequestsNumber !== requestsNumber) {
- appendChunk(WebInspector.UIString("%d / %d requests", selectedRequestsNumber, requestsNumber));
- appendChunk(separator);
- appendChunk(WebInspector.UIString("%s / %s transferred", Number.bytesToString(selectedTransferSize), Number.bytesToString(transferSize)));
- } else {
- appendChunk(WebInspector.UIString("%d requests", requestsNumber));
- appendChunk(separator);
- appendChunk(WebInspector.UIString("%s transferred", Number.bytesToString(transferSize)));
- }
- if (baseTime !== -1 && maxTime !== -1) {
- appendChunk(separator);
- appendChunk(WebInspector.UIString("Finish: %s", Number.secondsToString(maxTime - baseTime)));
- if (this._mainRequestDOMContentLoadedTime !== -1 && this._mainRequestDOMContentLoadedTime > baseTime) {
- appendChunk(separator);
- var domContentLoadedText = WebInspector.UIString("DOMContentLoaded: %s", Number.secondsToString(this._mainRequestDOMContentLoadedTime - baseTime));
- appendChunk(domContentLoadedText).classList.add("summary-blue");
- }
- if (this._mainRequestLoadTime !== -1) {
- appendChunk(separator);
- var loadText = WebInspector.UIString("Load: %s", Number.secondsToString(this._mainRequestLoadTime - baseTime));
- appendChunk(loadText).classList.add("summary-red");
- }
- }
- summaryBar.title = text;
- },
-
- scheduleRefresh: function()
- {
- if (this._needsRefresh)
- return;
-
- this._needsRefresh = true;
-
- if (this.isShowing() && !this._refreshRequestId)
- this._refreshRequestId = this.element.window().requestAnimationFrame(this._refresh.bind(this));
- },
+ WebInspector.targetManager.addModelListener(
+ WebInspector.NetworkManager, WebInspector.NetworkManager.Events.RequestStarted, this._onRequestStarted, this);
+ WebInspector.targetManager.addModelListener(
+ WebInspector.NetworkManager, WebInspector.NetworkManager.Events.RequestUpdated, this._onRequestUpdated, this);
+ WebInspector.targetManager.addModelListener(
+ WebInspector.NetworkManager, WebInspector.NetworkManager.Events.RequestFinished, this._onRequestUpdated, this);
+ }
+
+ /**
+ * @param {!WebInspector.NetworkLogView.Filter} filter
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _negativeFilter(filter, request) {
+ return !filter(request);
+ }
+
+ /**
+ * @param {?RegExp} regex
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestPathFilter(regex, request) {
+ if (!regex)
+ return false;
- /**
- * @param {!Array<number>} times
- */
- addFilmStripFrames: function(times)
- {
- this._columns.addEventDividers(times, "network-frame-divider");
- },
+ return regex.test(request.path() + '/' + request.name());
+ }
- /**
- * @param {number} time
- */
- selectFilmStripFrame: function(time)
- {
- this._columns.selectFilmStripFrame(time);
- },
-
- clearFilmStripFrame: function()
- {
- this._columns.clearFilmStripFrame();
- },
-
- _refreshIfNeeded: function()
- {
- if (this._needsRefresh)
- this._refresh();
- },
-
- _invalidateAllItems: function()
- {
- var requestIds = this._nodesByRequestId.keysArray();
- for (var i = 0; i < requestIds.length; ++i)
- this._staleRequestIds[requestIds[i]] = true;
- this._refresh();
- },
+ /**
+ * @param {string} domain
+ * @return {!Array.<string>}
+ */
+ static _subdomains(domain) {
+ var result = [domain];
+ var indexOfPeriod = domain.indexOf('.');
+ while (indexOfPeriod !== -1) {
+ result.push('*' + domain.substring(indexOfPeriod));
+ indexOfPeriod = domain.indexOf('.', indexOfPeriod + 1);
+ }
+ return result;
+ }
+ /**
+ * @param {string} value
+ * @return {!WebInspector.NetworkLogView.Filter}
+ */
+ static _createRequestDomainFilter(value) {
/**
- * @return {!WebInspector.NetworkTimeCalculator}
+ * @param {string} string
+ * @return {string}
*/
- timeCalculator: function()
- {
- return this._timeCalculator;
- },
+ function escapeForRegExp(string) {
+ return string.escapeForRegExp();
+ }
+ var escapedPattern = value.split('*').map(escapeForRegExp).join('.*');
+ return WebInspector.NetworkLogView._requestDomainFilter.bind(null, new RegExp('^' + escapedPattern + '$', 'i'));
+ }
+
+ /**
+ * @param {!RegExp} regex
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestDomainFilter(regex, request) {
+ return regex.test(request.domain);
+ }
- /**
- * @return {!WebInspector.NetworkTimeCalculator}
- */
- calculator: function()
- {
- return this._calculator;
- },
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _runningRequestFilter(request) {
+ return !request.finished;
+ }
+
+ /**
+ * @param {string} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestResponseHeaderFilter(value, request) {
+ return request.responseHeaderValue(value) !== undefined;
+ }
+
+ /**
+ * @param {string} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestMethodFilter(value, request) {
+ return request.requestMethod === value;
+ }
+
+ /**
+ * @param {string} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestMimeTypeFilter(value, request) {
+ return request.mimeType === value;
+ }
+
+ /**
+ * @param {!WebInspector.NetworkLogView.MixedContentFilterValues} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestMixedContentFilter(value, request) {
+ if (value === WebInspector.NetworkLogView.MixedContentFilterValues.Displayed) {
+ return request.mixedContentType === 'optionally-blockable';
+ } else if (value === WebInspector.NetworkLogView.MixedContentFilterValues.Blocked) {
+ return request.mixedContentType === 'blockable' && request.wasBlocked();
+ } else if (value === WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden) {
+ return request.mixedContentType === 'blockable' && !request.wasBlocked();
+ } else if (value === WebInspector.NetworkLogView.MixedContentFilterValues.All) {
+ return request.mixedContentType !== 'none';
+ }
+ return false;
+ }
+
+ /**
+ * @param {string} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestSchemeFilter(value, request) {
+ return request.scheme === value;
+ }
+
+ /**
+ * @param {string} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestSetCookieDomainFilter(value, request) {
+ var cookies = request.responseCookies;
+ for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
+ if (cookies[i].domain() === value)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param {string} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestSetCookieNameFilter(value, request) {
+ var cookies = request.responseCookies;
+ for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
+ if (cookies[i].name() === value)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param {string} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestSetCookieValueFilter(value, request) {
+ var cookies = request.responseCookies;
+ for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
+ if (cookies[i].value() === value)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param {number} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestSizeLargerThanFilter(value, request) {
+ return request.transferSize >= value;
+ }
+
+ /**
+ * @param {string} value
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _statusCodeFilter(value, request) {
+ return ('' + request.statusCode) === value;
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static HTTPRequestsFilter(request) {
+ return request.parsedURL.isValid && (request.scheme in WebInspector.NetworkLogView.HTTPSchemas);
+ }
- /**
- * @param {!WebInspector.NetworkTimeCalculator} x
- */
- setCalculator: function(x)
- {
- if (!x || this._calculator === x)
- return;
-
- if (this._calculator !== x) {
- this._calculator = x;
- this._columns.setCalculator(this._calculator);
- }
- this._calculator.reset();
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static FinishedRequestsFilter(request) {
+ return request.finished;
+ }
+
+ /**
+ * @param {number} windowStart
+ * @param {number} windowEnd
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ static _requestTimeFilter(windowStart, windowEnd, request) {
+ if (request.issueTime() > windowEnd)
+ return false;
+ if (request.endTime !== -1 && request.endTime < windowStart)
+ return false;
+ return true;
+ }
+
+ /**
+ * @return {number}
+ */
+ headerHeight() {
+ return this._headerHeight;
+ }
+
+ /**
+ * @param {boolean} recording
+ */
+ setRecording(recording) {
+ this._recording = recording;
+ this._updateSummaryBar();
+ }
+
+ /**
+ * @param {boolean} preserveLog
+ */
+ setPreserveLog(preserveLog) {
+ this._preserveLog = preserveLog;
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.Target} target
+ */
+ targetAdded(target) {
+ if (!target.parentTarget()) {
+ var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
+ if (resourceTreeModel) {
+ resourceTreeModel.addEventListener(
+ WebInspector.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
+ resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.Load, this._loadEventFired, this);
+ resourceTreeModel.addEventListener(
+ WebInspector.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this);
+ }
+ }
+ var networkLog = WebInspector.NetworkLog.fromTarget(target);
+ if (networkLog)
+ networkLog.requests().forEach(this._appendRequest.bind(this));
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.Target} target
+ */
+ targetRemoved(target) {
+ if (!target.parentTarget()) {
+ var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
+ if (resourceTreeModel) {
+ resourceTreeModel.removeEventListener(
+ WebInspector.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
+ resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.Events.Load, this._loadEventFired, this);
+ resourceTreeModel.removeEventListener(
+ WebInspector.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this);
+ }
+ }
+ }
+
+ /**
+ * @param {number} start
+ * @param {number} end
+ */
+ setWindow(start, end) {
+ if (!start && !end) {
+ this._timeFilter = null;
+ this._timeCalculator.setWindow(null);
+ } else {
+ this._timeFilter = WebInspector.NetworkLogView._requestTimeFilter.bind(null, start, end);
+ this._timeCalculator.setWindow(new WebInspector.NetworkTimeBoundary(start, end));
+ }
+ this._columns.updateDividersIfNeeded();
+ this._filterRequests();
+ }
+
+ clearSelection() {
+ if (this._dataGrid.selectedNode)
+ this._dataGrid.selectedNode.deselect();
+ }
+
+ _addFilters() {
+ this._textFilterUI = new WebInspector.TextFilterUI(true);
+ this._textFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._filterChanged, this);
+ this._filterBar.addFilter(this._textFilterUI);
+
+ var dataURLSetting = this._networkHideDataURLSetting;
+ this._dataURLFilterUI = new WebInspector.CheckboxFilterUI(
+ 'hide-data-url', WebInspector.UIString('Hide data URLs'), true, dataURLSetting);
+ this._dataURLFilterUI.addEventListener(
+ WebInspector.FilterUI.Events.FilterChanged, this._filterChanged.bind(this), this);
+ this._filterBar.addFilter(this._dataURLFilterUI);
+
+ var filterItems = [];
+ for (var categoryId in WebInspector.resourceCategories) {
+ var category = WebInspector.resourceCategories[categoryId];
+ filterItems.push({name: category.title, label: category.shortTitle, title: category.title});
+ }
+ this._resourceCategoryFilterUI =
+ new WebInspector.NamedBitSetFilterUI(filterItems, this._networkResourceTypeFiltersSetting);
+ this._resourceCategoryFilterUI.addEventListener(
+ WebInspector.FilterUI.Events.FilterChanged, this._filterChanged.bind(this), this);
+ this._filterBar.addFilter(this._resourceCategoryFilterUI);
+ }
+
+ _resetSuggestionBuilder() {
+ this._suggestionBuilder = new WebInspector.FilterSuggestionBuilder(WebInspector.NetworkLogView._searchKeys);
+ this._suggestionBuilder.addItem(
+ WebInspector.NetworkLogView.FilterType.Is, WebInspector.NetworkLogView.IsFilterType.Running);
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.LargerThan, '100');
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.LargerThan, '10k');
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.LargerThan, '1M');
+ this._textFilterUI.setSuggestionBuilder(this._suggestionBuilder);
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _filterChanged(event) {
+ this.removeAllNodeHighlights();
+ this._parseFilterQuery(this._textFilterUI.value());
+ this._filterRequests();
+ }
+
+ _initializeView() {
+ this.element.id = 'network-container';
+ this._setupDataGrid();
+
+ this._columns.show(this.element);
+
+ this._summaryBarElement = this.element.createChild('div', 'network-summary-bar');
+
+ this._columns.sortByCurrentColumn();
+ }
+
+ _showRecordingHint() {
+ this._hideRecordingHint();
+ this._recordingHint = this.element.createChild('div', 'network-status-pane fill');
+ var hintText = this._recordingHint.createChild('div', 'recording-hint');
+ var reloadShortcutNode = this._recordingHint.createChild('b');
+ reloadShortcutNode.textContent = WebInspector.shortcutRegistry.shortcutDescriptorsForAction('main.reload')[0].name;
+
+ if (this._recording) {
+ var recordingText = hintText.createChild('span');
+ recordingText.textContent = WebInspector.UIString('Recording network activity\u2026');
+ hintText.createChild('br');
+ hintText.appendChild(
+ WebInspector.formatLocalized('Perform a request or hit %s to record the reload.', [reloadShortcutNode]));
+ } else {
+ var recordNode = hintText.createChild('b');
+ recordNode.textContent = WebInspector.shortcutRegistry.shortcutTitleForAction('network.toggle-recording');
+ hintText.appendChild(WebInspector.formatLocalized(
+ 'Record (%s) or reload (%s) to display network activity.', [recordNode, reloadShortcutNode]));
+ }
+ }
+
+ _hideRecordingHint() {
+ if (this._recordingHint)
+ this._recordingHint.remove();
+ delete this._recordingHint;
+ }
+
+ /**
+ * @override
+ * @return {!Array.<!Element>}
+ */
+ elementsToRestoreScrollPositionsFor() {
+ if (!this._dataGrid) // Not initialized yet.
+ return [];
+ return [this._dataGrid.scrollContainer];
+ }
+
+ _setupDataGrid() {
+ this._dataGrid = this._columns.dataGrid();
+ this._dataGrid.setRowContextMenuCallback(
+ (contextMenu, node) => this.handleContextMenuForRequest(contextMenu, node.request()));
+ this._dataGrid.setStickToBottom(true);
+ this._dataGrid.setName('networkLog');
+ this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last);
+ this._dataGrid.element.classList.add('network-log-grid');
+ this._dataGrid.element.addEventListener('mousedown', this._dataGridMouseDown.bind(this), true);
+ this._dataGrid.element.addEventListener('mousemove', this._dataGridMouseMove.bind(this), true);
+ this._dataGrid.element.addEventListener('mouseleave', this._dataGridMouseLeave.bind(this), true);
+ }
+
+ /**
+ * @param {!Event} event
+ */
+ _dataGridMouseMove(event) {
+ var node = this._dataGrid.dataGridNodeFromNode(event.target);
+ var highlightInitiatorChain = event.shiftKey;
+ this._setHoveredNode(node, highlightInitiatorChain);
+ this._highlightInitiatorChain((highlightInitiatorChain && node) ? node.request() : null);
+ }
+
+ _dataGridMouseLeave() {
+ this._setHoveredNode(null);
+ this._highlightInitiatorChain(null);
+ }
+
+ /**
+ * @param {?WebInspector.NetworkRequest} request
+ * @param {boolean} highlightInitiatorChain
+ */
+ setHoveredRequest(request, highlightInitiatorChain) {
+ this._setHoveredNode(request ? this._nodesByRequestId.get(request.requestId) : null, highlightInitiatorChain);
+ this._highlightInitiatorChain((request && highlightInitiatorChain) ? request : null);
+ }
+
+ /**
+ * @param {?WebInspector.NetworkDataGridNode} node
+ * @param {boolean=} highlightInitiatorChain
+ */
+ _setHoveredNode(node, highlightInitiatorChain) {
+ if (this._hoveredNode)
+ this._hoveredNode.element().classList.remove('hover');
+ this._hoveredNode = node;
+ if (this._hoveredNode)
+ this._hoveredNode.element().classList.add('hover');
+ this._columns.setHoveredRequest(this._hoveredNode ? this._hoveredNode.request() : null, !!highlightInitiatorChain);
+ }
+
+ /**
+ * @param {!Event} event
+ */
+ _dataGridMouseDown(event) {
+ if ((!this._dataGrid.selectedNode && event.button) || event.target.enclosingNodeOrSelfWithNodeName('a'))
+ event.consume();
+ }
+
+ /**
+ * @param {?WebInspector.NetworkRequest} request
+ */
+ _highlightInitiatorChain(request) {
+ if (this._requestWithHighlightedInitiators === request)
+ return;
+ this._requestWithHighlightedInitiators = request;
+
+ if (!request) {
+ for (var node of this._nodesByRequestId.values()) {
+ if (!node.dataGrid)
+ continue;
+ node.element().classList.remove('network-node-on-initiator-path', 'network-node-on-initiated-path');
+ }
+ return;
+ }
- if (this._calculator.startAtZero)
- this._columns.hideEventDividers();
- else
- this._columns.showEventDividers();
+ var initiatorGraph = request.initiatorGraph();
+ for (var node of this._nodesByRequestId.values()) {
+ if (!node.dataGrid)
+ continue;
+ node.element().classList.toggle(
+ 'network-node-on-initiator-path',
+ node.request() !== request && initiatorGraph.initiators.has(node.request()));
+ node.element().classList.toggle(
+ 'network-node-on-initiated-path', node.request() !== request && initiatorGraph.initiated.has(node.request()));
+ }
+ }
- this._invalidateAllItems();
- },
+ _updateSummaryBar() {
+ var requestsNumber = this._nodesByRequestId.size;
- /**
- * @param {!WebInspector.Event} event
- */
- _loadEventFired: function(event)
- {
- if (!this._recording)
- return;
-
- var data = /** @type {number} */ (event.data);
- if (data) {
- this._mainRequestLoadTime = data;
- this._columns.addEventDividers([data], "network-red-divider");
- }
- },
+ if (!requestsNumber) {
+ this._showRecordingHint();
+ return;
+ }
+ this._hideRecordingHint();
+
+ var transferSize = 0;
+ var selectedRequestsNumber = 0;
+ var selectedTransferSize = 0;
+ var baseTime = -1;
+ var maxTime = -1;
+ var nodes = this._nodesByRequestId.valuesArray();
+ for (var i = 0; i < nodes.length; ++i) {
+ var request = nodes[i].request();
+ var requestTransferSize = request.transferSize;
+ transferSize += requestTransferSize;
+ if (!nodes[i][WebInspector.NetworkLogView._isFilteredOutSymbol]) {
+ selectedRequestsNumber++;
+ selectedTransferSize += requestTransferSize;
+ }
+ if (request.url === request.target().inspectedURL() &&
+ request.resourceType() === WebInspector.resourceTypes.Document)
+ baseTime = request.startTime;
+ if (request.endTime > maxTime)
+ maxTime = request.endTime;
+ }
+ var summaryBar = this._summaryBarElement;
+ summaryBar.removeChildren();
+ var separator = '\u2002\u2758\u2002';
+ var text = '';
/**
- * @param {!WebInspector.Event} event
+ * @param {string} chunk
+ * @return {!Element}
*/
- _domContentLoadedEventFired: function(event)
- {
- if (!this._recording)
- return;
- var data = /** @type {number} */ (event.data);
- if (data) {
- this._mainRequestDOMContentLoadedTime = data;
- this._columns.addEventDividers([data], "network-blue-divider");
- }
- },
-
- wasShown: function()
- {
- this._refreshIfNeeded();
- this._columns.wasShown();
- },
-
- willHide: function()
- {
- this._columns.willHide();
- },
-
- _refresh: function()
- {
- this._needsRefresh = false;
-
- if (this._refreshRequestId) {
- this.element.window().cancelAnimationFrame(this._refreshRequestId);
- delete this._refreshRequestId;
- }
-
- this.removeAllNodeHighlights();
-
- var oldBoundary = this.calculator().boundary();
- this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime);
- this._durationCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime);
- this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMContentLoadedTime);
- this._durationCalculator.updateBoundariesForEventTime(this._mainRequestDOMContentLoadedTime);
-
- var dataGrid = this._dataGrid;
- var rootNode = dataGrid.rootNode();
- /** @type {!Array<!WebInspector.NetworkDataGridNode> } */
- var nodesToInsert = [];
- /** @type {!Array<!WebInspector.NetworkDataGridNode> } */
- var nodesToRefresh = [];
- for (var requestId in this._staleRequestIds) {
- var node = this._nodesByRequestId.get(requestId);
- if (!node)
- continue;
- var isFilteredOut = !this._applyFilter(node);
- if (isFilteredOut && node === this._hoveredNode)
- this._setHoveredNode(null);
- if (node[WebInspector.NetworkLogView._isFilteredOutSymbol] !== isFilteredOut) {
- if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol])
- rootNode.removeChild(node);
-
- node[WebInspector.NetworkLogView._isFilteredOutSymbol] = isFilteredOut;
-
- if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol])
- nodesToInsert.push(node);
- }
- if (!isFilteredOut)
- nodesToRefresh.push(node);
- var request = node.request();
- this._timeCalculator.updateBoundaries(request);
- this._durationCalculator.updateBoundaries(request);
- }
-
- for (var i = 0; i < nodesToInsert.length; ++i) {
- var node = nodesToInsert[i];
- var request = node.request();
- dataGrid.insertChild(node);
- node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchRequest(request);
- }
-
- for (var node of nodesToRefresh)
- node.refresh();
-
- this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false);
-
- if (!this.calculator().boundary().equals(oldBoundary)) {
- // The boundaries changed, so all item graphs are stale.
- this._columns.updateDividersIfNeeded();
- var nodes = this._nodesByRequestId.valuesArray();
- for (var i = 0; i < nodes.length; ++i)
- nodes[i].refreshGraph();
- }
-
- this._staleRequestIds = {};
- this._updateSummaryBar();
-
- this._columns.dataChanged();
- },
-
- reset: function()
- {
- this._requestWithHighlightedInitiators = null;
- this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.RequestSelected, null);
+ function appendChunk(chunk) {
+ var span = summaryBar.createChild('span');
+ span.textContent = chunk;
+ text += chunk;
+ return span;
+ }
- this._clearSearchMatchedList();
+ if (selectedRequestsNumber !== requestsNumber) {
+ appendChunk(WebInspector.UIString('%d / %d requests', selectedRequestsNumber, requestsNumber));
+ appendChunk(separator);
+ appendChunk(WebInspector.UIString(
+ '%s / %s transferred', Number.bytesToString(selectedTransferSize), Number.bytesToString(transferSize)));
+ } else {
+ appendChunk(WebInspector.UIString('%d requests', requestsNumber));
+ appendChunk(separator);
+ appendChunk(WebInspector.UIString('%s transferred', Number.bytesToString(transferSize)));
+ }
+ if (baseTime !== -1 && maxTime !== -1) {
+ appendChunk(separator);
+ appendChunk(WebInspector.UIString('Finish: %s', Number.secondsToString(maxTime - baseTime)));
+ if (this._mainRequestDOMContentLoadedTime !== -1 && this._mainRequestDOMContentLoadedTime > baseTime) {
+ appendChunk(separator);
+ var domContentLoadedText = WebInspector.UIString(
+ 'DOMContentLoaded: %s', Number.secondsToString(this._mainRequestDOMContentLoadedTime - baseTime));
+ appendChunk(domContentLoadedText).classList.add('summary-blue');
+ }
+ if (this._mainRequestLoadTime !== -1) {
+ appendChunk(separator);
+ var loadText = WebInspector.UIString('Load: %s', Number.secondsToString(this._mainRequestLoadTime - baseTime));
+ appendChunk(loadText).classList.add('summary-red');
+ }
+ }
+ summaryBar.title = text;
+ }
+
+ scheduleRefresh() {
+ if (this._needsRefresh)
+ return;
+
+ this._needsRefresh = true;
+
+ if (this.isShowing() && !this._refreshRequestId)
+ this._refreshRequestId = this.element.window().requestAnimationFrame(this._refresh.bind(this));
+ }
+
+ /**
+ * @param {!Array<number>} times
+ */
+ addFilmStripFrames(times) {
+ this._columns.addEventDividers(times, 'network-frame-divider');
+ }
+
+ /**
+ * @param {number} time
+ */
+ selectFilmStripFrame(time) {
+ this._columns.selectFilmStripFrame(time);
+ }
+
+ clearFilmStripFrame() {
+ this._columns.clearFilmStripFrame();
+ }
+
+ _refreshIfNeeded() {
+ if (this._needsRefresh)
+ this._refresh();
+ }
+
+ _invalidateAllItems() {
+ var requestIds = this._nodesByRequestId.keysArray();
+ for (var i = 0; i < requestIds.length; ++i)
+ this._staleRequestIds[requestIds[i]] = true;
+ this._refresh();
+ }
+
+ /**
+ * @return {!WebInspector.NetworkTimeCalculator}
+ */
+ timeCalculator() {
+ return this._timeCalculator;
+ }
+
+ /**
+ * @return {!WebInspector.NetworkTimeCalculator}
+ */
+ calculator() {
+ return this._calculator;
+ }
+
+ /**
+ * @param {!WebInspector.NetworkTimeCalculator} x
+ */
+ setCalculator(x) {
+ if (!x || this._calculator === x)
+ return;
+
+ if (this._calculator !== x) {
+ this._calculator = x;
+ this._columns.setCalculator(this._calculator);
+ }
+ this._calculator.reset();
+
+ if (this._calculator.startAtZero)
+ this._columns.hideEventDividers();
+ else
+ this._columns.showEventDividers();
+
+ this._invalidateAllItems();
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _loadEventFired(event) {
+ if (!this._recording)
+ return;
+
+ var data = /** @type {number} */ (event.data);
+ if (data) {
+ this._mainRequestLoadTime = data;
+ this._columns.addEventDividers([data], 'network-red-divider');
+ }
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _domContentLoadedEventFired(event) {
+ if (!this._recording)
+ return;
+ var data = /** @type {number} */ (event.data);
+ if (data) {
+ this._mainRequestDOMContentLoadedTime = data;
+ this._columns.addEventDividers([data], 'network-blue-divider');
+ }
+ }
+
+ /**
+ * @override
+ */
+ wasShown() {
+ this._refreshIfNeeded();
+ this._columns.wasShown();
+ }
+
+ /**
+ * @override
+ */
+ willHide() {
+ this._columns.willHide();
+ }
+
+ _refresh() {
+ this._needsRefresh = false;
+
+ if (this._refreshRequestId) {
+ this.element.window().cancelAnimationFrame(this._refreshRequestId);
+ delete this._refreshRequestId;
+ }
+ this.removeAllNodeHighlights();
+
+ var oldBoundary = this.calculator().boundary();
+ this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime);
+ this._durationCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime);
+ this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMContentLoadedTime);
+ this._durationCalculator.updateBoundariesForEventTime(this._mainRequestDOMContentLoadedTime);
+
+ var dataGrid = this._dataGrid;
+ var rootNode = dataGrid.rootNode();
+ /** @type {!Array<!WebInspector.NetworkDataGridNode> } */
+ var nodesToInsert = [];
+ /** @type {!Array<!WebInspector.NetworkDataGridNode> } */
+ var nodesToRefresh = [];
+ for (var requestId in this._staleRequestIds) {
+ var node = this._nodesByRequestId.get(requestId);
+ if (!node)
+ continue;
+ var isFilteredOut = !this._applyFilter(node);
+ if (isFilteredOut && node === this._hoveredNode)
this._setHoveredNode(null);
- this._columns.reset();
-
- this._timeFilter = null;
- this._calculator.reset();
-
- this._timeCalculator.setWindow(null);
-
- var nodes = this._nodesByRequestId.valuesArray();
- for (var i = 0; i < nodes.length; ++i)
- nodes[i].dispose();
-
- this._nodesByRequestId.clear();
- this._staleRequestIds = {};
- this._resetSuggestionBuilder();
-
- this._mainRequestLoadTime = -1;
- this._mainRequestDOMContentLoadedTime = -1;
+ if (node[WebInspector.NetworkLogView._isFilteredOutSymbol] !== isFilteredOut) {
+ if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol])
+ rootNode.removeChild(node);
+
+ node[WebInspector.NetworkLogView._isFilteredOutSymbol] = isFilteredOut;
+
+ if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol])
+ nodesToInsert.push(node);
+ }
+ if (!isFilteredOut)
+ nodesToRefresh.push(node);
+ var request = node.request();
+ this._timeCalculator.updateBoundaries(request);
+ this._durationCalculator.updateBoundaries(request);
+ }
- if (this._dataGrid) {
- this._dataGrid.rootNode().removeChildren();
- this._updateSummaryBar();
- }
- },
+ for (var i = 0; i < nodesToInsert.length; ++i) {
+ var node = nodesToInsert[i];
+ var request = node.request();
+ dataGrid.insertChild(node);
+ node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchRequest(request);
+ }
- /**
- * @param {string} filterString
- */
- setTextFilterValue: function(filterString)
- {
- this._textFilterUI.setValue(filterString);
- this._textFilterUI.setRegexChecked(false);
- this._dataURLFilterUI.setChecked(false);
- this._resourceCategoryFilterUI.reset();
- },
+ for (var node of nodesToRefresh)
+ node.refresh();
- /**
- * @param {!WebInspector.Event} event
- */
- _onRequestStarted: function(event)
- {
- if (!this._recording)
- return;
- var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
- this._appendRequest(request);
- },
+ this._highlightNthMatchedRequestForSearch(
+ this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false);
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _appendRequest: function(request)
- {
- var node = new WebInspector.NetworkDataGridNode(this, request);
- node[WebInspector.NetworkLogView._isFilteredOutSymbol] = true;
- node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = false;
-
- // In case of redirect request id is reassigned to a redirected
- // request and we need to update _nodesByRequestId and search results.
- var originalRequestNode = this._nodesByRequestId.get(request.requestId);
- if (originalRequestNode)
- this._nodesByRequestId.set(originalRequestNode.request().requestId, originalRequestNode);
- this._nodesByRequestId.set(request.requestId, node);
-
- // Pull all the redirects of the main request upon commit load.
- if (request.redirects) {
- for (var i = 0; i < request.redirects.length; ++i)
- this._refreshRequest(request.redirects[i]);
- }
+ if (!this.calculator().boundary().equals(oldBoundary)) {
+ // The boundaries changed, so all item graphs are stale.
+ this._columns.updateDividersIfNeeded();
+ var nodes = this._nodesByRequestId.valuesArray();
+ for (var i = 0; i < nodes.length; ++i)
+ nodes[i].refreshGraph();
+ }
- this._refreshRequest(request);
- },
+ this._staleRequestIds = {};
+ this._updateSummaryBar();
- /**
- * @param {!WebInspector.Event} event
- */
- _onRequestUpdated: function(event)
- {
- var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
- this._refreshRequest(request);
- },
+ this._columns.dataChanged();
+ }
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _refreshRequest: function(request)
- {
- if (!this._nodesByRequestId.get(request.requestId))
- return;
-
- WebInspector.NetworkLogView._subdomains(request.domain).forEach(this._suggestionBuilder.addItem.bind(this._suggestionBuilder, WebInspector.NetworkLogView.FilterType.Domain));
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.Method, request.requestMethod);
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.MimeType, request.mimeType);
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.Scheme, "" + request.scheme);
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.StatusCode, "" + request.statusCode);
-
- if (request.mixedContentType !== "none") {
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.MixedContent, WebInspector.NetworkLogView.MixedContentFilterValues.All);
- }
+ reset() {
+ this._requestWithHighlightedInitiators = null;
+ this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.RequestSelected, null);
- if (request.mixedContentType === "optionally-blockable") {
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.MixedContent, WebInspector.NetworkLogView.MixedContentFilterValues.Displayed);
- }
+ this._clearSearchMatchedList();
- if (request.mixedContentType === "blockable") {
- var suggestion = request.wasBlocked() ? WebInspector.NetworkLogView.MixedContentFilterValues.Blocked : WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden;
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.MixedContent, suggestion);
- }
+ this._setHoveredNode(null);
+ this._columns.reset();
- var responseHeaders = request.responseHeaders;
- for (var i = 0, l = responseHeaders.length; i < l; ++i)
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.HasResponseHeader, responseHeaders[i].name);
- var cookies = request.responseCookies;
- for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
- var cookie = cookies[i];
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.SetCookieDomain, cookie.domain());
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.SetCookieName, cookie.name());
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.SetCookieValue, cookie.value());
- }
+ this._timeFilter = null;
+ this._calculator.reset();
- this._staleRequestIds[request.requestId] = true;
- this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.UpdateRequest, request);
- this.scheduleRefresh();
- },
+ this._timeCalculator.setWindow(null);
- /**
- * @param {!WebInspector.Event} event
- */
- _mainFrameNavigated: function(event)
- {
- if (!this._recording)
- return;
-
- var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data);
- var loaderId = frame.loaderId;
-
- // Pick provisional load requests.
- var requestsToPick = [];
- var networkLog = WebInspector.NetworkLog.fromTarget(frame.target());
- var requests = networkLog ? networkLog.requests() : [];
- for (var i = 0; i < requests.length; ++i) {
- var request = requests[i];
- if (request.loaderId === loaderId)
- requestsToPick.push(request);
- }
+ var nodes = this._nodesByRequestId.valuesArray();
+ for (var i = 0; i < nodes.length; ++i)
+ nodes[i].dispose();
- if (!this._preserveLog) {
- this.reset();
- for (var i = 0; i < requestsToPick.length; ++i)
- this._appendRequest(requestsToPick[i]);
- }
- for (var i = 0; i < requestsToPick.length; ++i) {
- var request = requestsToPick[i];
- var node = this._nodesByRequestId.get(request.requestId);
- if (node) {
- node.markAsNavigationRequest();
- break;
- }
- }
- },
+ this._nodesByRequestId.clear();
+ this._staleRequestIds = {};
+ this._resetSuggestionBuilder();
- /**
- * @return {number}
- */
- rowHeight: function()
- {
- return this._rowHeight;
- },
+ this._mainRequestLoadTime = -1;
+ this._mainRequestDOMContentLoadedTime = -1;
- /**
- * @param {boolean} gridMode
- */
- switchViewMode: function(gridMode)
- {
- this._columns.switchViewMode(gridMode);
- },
+ if (this._dataGrid) {
+ this._dataGrid.rootNode().removeChildren();
+ this._updateSummaryBar();
+ }
+ }
+
+ /**
+ * @param {string} filterString
+ */
+ setTextFilterValue(filterString) {
+ this._textFilterUI.setValue(filterString);
+ this._textFilterUI.setRegexChecked(false);
+ this._dataURLFilterUI.setChecked(false);
+ this._resourceCategoryFilterUI.reset();
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _onRequestStarted(event) {
+ if (!this._recording)
+ return;
+ var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
+ this._appendRequest(request);
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ _appendRequest(request) {
+ var node = new WebInspector.NetworkDataGridNode(this, request);
+ node[WebInspector.NetworkLogView._isFilteredOutSymbol] = true;
+ node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = false;
+
+ // In case of redirect request id is reassigned to a redirected
+ // request and we need to update _nodesByRequestId and search results.
+ var originalRequestNode = this._nodesByRequestId.get(request.requestId);
+ if (originalRequestNode)
+ this._nodesByRequestId.set(originalRequestNode.request().requestId, originalRequestNode);
+ this._nodesByRequestId.set(request.requestId, node);
+
+ // Pull all the redirects of the main request upon commit load.
+ if (request.redirects) {
+ for (var i = 0; i < request.redirects.length; ++i)
+ this._refreshRequest(request.redirects[i]);
+ }
- /**
- * @param {!WebInspector.ContextMenu} contextMenu
- * @param {!WebInspector.NetworkRequest} request
- */
- handleContextMenuForRequest: function(contextMenu, request)
- {
- contextMenu.appendApplicableItems(request);
- var copyMenu = contextMenu.appendSubMenuItem(WebInspector.UIString("Copy"));
- if (request) {
- copyMenu.appendItem(WebInspector.copyLinkAddressLabel(), InspectorFrontendHost.copyText.bind(InspectorFrontendHost, request.contentURL()));
- copyMenu.appendSeparator();
-
- if (request.requestHeadersText())
- copyMenu.appendItem(WebInspector.UIString.capitalize("Copy ^request ^headers"), this._copyRequestHeaders.bind(this, request));
- if (request.responseHeadersText)
- copyMenu.appendItem(WebInspector.UIString.capitalize("Copy ^response ^headers"), this._copyResponseHeaders.bind(this, request));
- if (request.finished)
- copyMenu.appendItem(WebInspector.UIString.capitalize("Copy ^response"), this._copyResponse.bind(this, request));
-
- if (WebInspector.isWin()) {
- copyMenu.appendItem(WebInspector.UIString("Copy as cURL (cmd)"), this._copyCurlCommand.bind(this, request, "win"));
- copyMenu.appendItem(WebInspector.UIString("Copy as cURL (bash)"), this._copyCurlCommand.bind(this, request, "unix"));
- copyMenu.appendItem(WebInspector.UIString("Copy All as cURL (cmd)"), this._copyAllCurlCommand.bind(this, "win"));
- copyMenu.appendItem(WebInspector.UIString("Copy All as cURL (bash)"), this._copyAllCurlCommand.bind(this, "unix"));
- } else {
- copyMenu.appendItem(WebInspector.UIString("Copy as cURL"), this._copyCurlCommand.bind(this, request, "unix"));
- copyMenu.appendItem(WebInspector.UIString("Copy All as cURL"), this._copyAllCurlCommand.bind(this, "unix"));
- }
- } else {
- copyMenu = contextMenu.appendSubMenuItem(WebInspector.UIString("Copy"));
- }
- copyMenu.appendItem(WebInspector.UIString.capitalize("Copy ^all as HAR"), this._copyAll.bind(this));
-
- contextMenu.appendSeparator();
- contextMenu.appendItem(WebInspector.UIString.capitalize("Save as HAR with ^content"), this._exportAll.bind(this));
-
- contextMenu.appendSeparator();
- contextMenu.appendItem(WebInspector.UIString.capitalize("Clear ^browser ^cache"), this._clearBrowserCache.bind(this));
- contextMenu.appendItem(WebInspector.UIString.capitalize("Clear ^browser ^cookies"), this._clearBrowserCookies.bind(this));
-
- var blockedSetting = WebInspector.moduleSetting("blockedURLs");
- if (request && Runtime.experiments.isEnabled("requestBlocking")) { // Disabled until ready.
- contextMenu.appendSeparator();
-
- var urlWithoutScheme = request.parsedURL.urlWithoutScheme();
- if (urlWithoutScheme && blockedSetting.get().indexOf(urlWithoutScheme) === -1)
- contextMenu.appendItem(WebInspector.UIString.capitalize("Block ^request URL"), addBlockedURL.bind(null, urlWithoutScheme));
-
- var domain = request.parsedURL.domain();
- if (domain && blockedSetting.get().indexOf(domain) === -1)
- contextMenu.appendItem(WebInspector.UIString.capitalize("Block ^request ^domain"), addBlockedURL.bind(null, domain));
-
- function addBlockedURL(url)
- {
- var list = blockedSetting.get();
- list.push(url);
- blockedSetting.set(list);
- WebInspector.viewManager.showView("network.blocked-urls");
- }
- }
+ this._refreshRequest(request);
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _onRequestUpdated(event) {
+ var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
+ this._refreshRequest(request);
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ _refreshRequest(request) {
+ if (!this._nodesByRequestId.get(request.requestId))
+ return;
+
+ WebInspector.NetworkLogView._subdomains(request.domain)
+ .forEach(this._suggestionBuilder.addItem.bind(
+ this._suggestionBuilder, WebInspector.NetworkLogView.FilterType.Domain));
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.Method, request.requestMethod);
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.MimeType, request.mimeType);
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.Scheme, '' + request.scheme);
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.StatusCode, '' + request.statusCode);
+
+ if (request.mixedContentType !== 'none') {
+ this._suggestionBuilder.addItem(
+ WebInspector.NetworkLogView.FilterType.MixedContent,
+ WebInspector.NetworkLogView.MixedContentFilterValues.All);
+ }
- if (request && request.resourceType() === WebInspector.resourceTypes.XHR) {
- contextMenu.appendSeparator();
- contextMenu.appendItem(WebInspector.UIString("Replay XHR"), request.replayXHR.bind(request));
- contextMenu.appendSeparator();
- }
- },
-
- _harRequests: function()
- {
- var requests = this._nodesByRequestId.valuesArray().map(function(node) { return node.request(); });
- var httpRequests = requests.filter(WebInspector.NetworkLogView.HTTPRequestsFilter);
- return httpRequests.filter(WebInspector.NetworkLogView.FinishedRequestsFilter);
- },
-
- _copyAll: function()
- {
- var harArchive = {
- log: (new WebInspector.HARLog(this._harRequests())).build()
- };
- InspectorFrontendHost.copyText(JSON.stringify(harArchive, null, 2));
- },
+ if (request.mixedContentType === 'optionally-blockable') {
+ this._suggestionBuilder.addItem(
+ WebInspector.NetworkLogView.FilterType.MixedContent,
+ WebInspector.NetworkLogView.MixedContentFilterValues.Displayed);
+ }
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _copyRequestHeaders: function(request)
- {
- InspectorFrontendHost.copyText(request.requestHeadersText());
- },
+ if (request.mixedContentType === 'blockable') {
+ var suggestion = request.wasBlocked() ? WebInspector.NetworkLogView.MixedContentFilterValues.Blocked :
+ WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden;
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.MixedContent, suggestion);
+ }
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _copyResponse: function(request)
- {
- /**
- * @param {?string} content
- */
- function callback(content)
- {
- if (request.contentEncoded)
- content = request.asDataURL();
- InspectorFrontendHost.copyText(content || "");
- }
- request.requestContent().then(callback);
- },
+ var responseHeaders = request.responseHeaders;
+ for (var i = 0, l = responseHeaders.length; i < l; ++i)
+ this._suggestionBuilder.addItem(
+ WebInspector.NetworkLogView.FilterType.HasResponseHeader, responseHeaders[i].name);
+ var cookies = request.responseCookies;
+ for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
+ var cookie = cookies[i];
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.SetCookieDomain, cookie.domain());
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.SetCookieName, cookie.name());
+ this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.SetCookieValue, cookie.value());
+ }
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _copyResponseHeaders: function(request)
- {
- InspectorFrontendHost.copyText(request.responseHeadersText);
- },
+ this._staleRequestIds[request.requestId] = true;
+ this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.UpdateRequest, request);
+ this.scheduleRefresh();
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _mainFrameNavigated(event) {
+ if (!this._recording)
+ return;
+
+ var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data);
+ var loaderId = frame.loaderId;
+
+ // Pick provisional load requests.
+ var requestsToPick = [];
+ var networkLog = WebInspector.NetworkLog.fromTarget(frame.target());
+ var requests = networkLog ? networkLog.requests() : [];
+ for (var i = 0; i < requests.length; ++i) {
+ var request = requests[i];
+ if (request.loaderId === loaderId)
+ requestsToPick.push(request);
+ }
- /**
- * @param {!WebInspector.NetworkRequest} request
- * @param {string} platform
- */
- _copyCurlCommand: function(request, platform)
- {
- InspectorFrontendHost.copyText(this._generateCurlCommand(request, platform));
- },
+ if (!this._preserveLog) {
+ this.reset();
+ for (var i = 0; i < requestsToPick.length; ++i)
+ this._appendRequest(requestsToPick[i]);
+ }
+ for (var i = 0; i < requestsToPick.length; ++i) {
+ var request = requestsToPick[i];
+ var node = this._nodesByRequestId.get(request.requestId);
+ if (node) {
+ node.markAsNavigationRequest();
+ break;
+ }
+ }
+ }
+
+ /**
+ * @return {number}
+ */
+ rowHeight() {
+ return this._rowHeight;
+ }
+
+ /**
+ * @param {boolean} gridMode
+ */
+ switchViewMode(gridMode) {
+ this._columns.switchViewMode(gridMode);
+ }
+
+ /**
+ * @param {!WebInspector.ContextMenu} contextMenu
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ handleContextMenuForRequest(contextMenu, request) {
+ contextMenu.appendApplicableItems(request);
+ var copyMenu = contextMenu.appendSubMenuItem(WebInspector.UIString('Copy'));
+ if (request) {
+ copyMenu.appendItem(
+ WebInspector.copyLinkAddressLabel(),
+ InspectorFrontendHost.copyText.bind(InspectorFrontendHost, request.contentURL()));
+ copyMenu.appendSeparator();
+
+ if (request.requestHeadersText())
+ copyMenu.appendItem(
+ WebInspector.UIString.capitalize('Copy ^request ^headers'), this._copyRequestHeaders.bind(this, request));
+ if (request.responseHeadersText)
+ copyMenu.appendItem(
+ WebInspector.UIString.capitalize('Copy ^response ^headers'), this._copyResponseHeaders.bind(this, request));
+ if (request.finished)
+ copyMenu.appendItem(WebInspector.UIString.capitalize('Copy ^response'), this._copyResponse.bind(this, request));
+
+ if (WebInspector.isWin()) {
+ copyMenu.appendItem(
+ WebInspector.UIString('Copy as cURL (cmd)'), this._copyCurlCommand.bind(this, request, 'win'));
+ copyMenu.appendItem(
+ WebInspector.UIString('Copy as cURL (bash)'), this._copyCurlCommand.bind(this, request, 'unix'));
+ copyMenu.appendItem(
+ WebInspector.UIString('Copy All as cURL (cmd)'), this._copyAllCurlCommand.bind(this, 'win'));
+ copyMenu.appendItem(
+ WebInspector.UIString('Copy All as cURL (bash)'), this._copyAllCurlCommand.bind(this, 'unix'));
+ } else {
+ copyMenu.appendItem(WebInspector.UIString('Copy as cURL'), this._copyCurlCommand.bind(this, request, 'unix'));
+ copyMenu.appendItem(WebInspector.UIString('Copy All as cURL'), this._copyAllCurlCommand.bind(this, 'unix'));
+ }
+ } else {
+ copyMenu = contextMenu.appendSubMenuItem(WebInspector.UIString('Copy'));
+ }
+ copyMenu.appendItem(WebInspector.UIString.capitalize('Copy ^all as HAR'), this._copyAll.bind(this));
+
+ contextMenu.appendSeparator();
+ contextMenu.appendItem(WebInspector.UIString.capitalize('Save as HAR with ^content'), this._exportAll.bind(this));
+
+ contextMenu.appendSeparator();
+ contextMenu.appendItem(
+ WebInspector.UIString.capitalize('Clear ^browser ^cache'), this._clearBrowserCache.bind(this));
+ contextMenu.appendItem(
+ WebInspector.UIString.capitalize('Clear ^browser ^cookies'), this._clearBrowserCookies.bind(this));
+
+ var blockedSetting = WebInspector.moduleSetting('blockedURLs');
+ if (request && Runtime.experiments.isEnabled('requestBlocking')) { // Disabled until ready.
+ contextMenu.appendSeparator();
+
+ var urlWithoutScheme = request.parsedURL.urlWithoutScheme();
+ if (urlWithoutScheme && blockedSetting.get().indexOf(urlWithoutScheme) === -1)
+ contextMenu.appendItem(
+ WebInspector.UIString.capitalize('Block ^request URL'), addBlockedURL.bind(null, urlWithoutScheme));
+
+ var domain = request.parsedURL.domain();
+ if (domain && blockedSetting.get().indexOf(domain) === -1)
+ contextMenu.appendItem(
+ WebInspector.UIString.capitalize('Block ^request ^domain'), addBlockedURL.bind(null, domain));
+
+ function addBlockedURL(url) {
+ var list = blockedSetting.get();
+ list.push(url);
+ blockedSetting.set(list);
+ WebInspector.viewManager.showView('network.blocked-urls');
+ }
+ }
+ if (request && request.resourceType() === WebInspector.resourceTypes.XHR) {
+ contextMenu.appendSeparator();
+ contextMenu.appendItem(WebInspector.UIString('Replay XHR'), request.replayXHR.bind(request));
+ contextMenu.appendSeparator();
+ }
+ }
+
+ _harRequests() {
+ var requests = this._nodesByRequestId.valuesArray().map(function(node) {
+ return node.request();
+ });
+ var httpRequests = requests.filter(WebInspector.NetworkLogView.HTTPRequestsFilter);
+ return httpRequests.filter(WebInspector.NetworkLogView.FinishedRequestsFilter);
+ }
+
+ _copyAll() {
+ var harArchive = {log: (new WebInspector.HARLog(this._harRequests())).build()};
+ InspectorFrontendHost.copyText(JSON.stringify(harArchive, null, 2));
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ _copyRequestHeaders(request) {
+ InspectorFrontendHost.copyText(request.requestHeadersText());
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ _copyResponse(request) {
/**
- * @param {string} platform
+ * @param {?string} content
*/
- _copyAllCurlCommand: function(platform)
- {
- var requests = this._nodesByRequestId.valuesArray().map(node => node.request());
- var commands = [];
- for (var request of requests)
- commands.push(this._generateCurlCommand(request, platform));
- if (platform === "win")
- InspectorFrontendHost.copyText(commands.join(" &\r\n"));
- else
- InspectorFrontendHost.copyText(commands.join(" ;\n"));
- },
-
- _exportAll: function()
- {
- var url = WebInspector.targetManager.mainTarget().inspectedURL();
- var parsedURL = url.asParsedURL();
- var filename = parsedURL ? parsedURL.host : "network-log";
- var stream = new WebInspector.FileOutputStream();
- stream.open(filename + ".har", openCallback.bind(this));
-
- /**
- * @param {boolean} accepted
- * @this {WebInspector.NetworkLogView}
- */
- function openCallback(accepted)
- {
- if (!accepted)
- return;
- var progressIndicator = new WebInspector.ProgressIndicator();
- this._progressBarContainer.appendChild(progressIndicator.element);
- var harWriter = new WebInspector.HARWriter();
- harWriter.write(stream, this._harRequests(), progressIndicator);
- }
- },
-
- _clearBrowserCache: function()
- {
- if (confirm(WebInspector.UIString("Are you sure you want to clear browser cache?")))
- WebInspector.multitargetNetworkManager.clearBrowserCache();
- },
-
- _clearBrowserCookies: function()
- {
- if (confirm(WebInspector.UIString("Are you sure you want to clear browser cookies?")))
- WebInspector.multitargetNetworkManager.clearBrowserCookies();
- },
+ function callback(content) {
+ if (request.contentEncoded)
+ content = request.asDataURL();
+ InspectorFrontendHost.copyText(content || '');
+ }
+ request.requestContent().then(callback);
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ _copyResponseHeaders(request) {
+ InspectorFrontendHost.copyText(request.responseHeadersText);
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ * @param {string} platform
+ */
+ _copyCurlCommand(request, platform) {
+ InspectorFrontendHost.copyText(this._generateCurlCommand(request, platform));
+ }
+
+ /**
+ * @param {string} platform
+ */
+ _copyAllCurlCommand(platform) {
+ var requests = this._nodesByRequestId.valuesArray().map(node => node.request());
+ var commands = [];
+ for (var request of requests)
+ commands.push(this._generateCurlCommand(request, platform));
+ if (platform === 'win')
+ InspectorFrontendHost.copyText(commands.join(' &\r\n'));
+ else
+ InspectorFrontendHost.copyText(commands.join(' ;\n'));
+ }
+
+ _exportAll() {
+ var url = WebInspector.targetManager.mainTarget().inspectedURL();
+ var parsedURL = url.asParsedURL();
+ var filename = parsedURL ? parsedURL.host : 'network-log';
+ var stream = new WebInspector.FileOutputStream();
+ stream.open(filename + '.har', openCallback.bind(this));
/**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
+ * @param {boolean} accepted
+ * @this {WebInspector.NetworkLogView}
*/
- _matchRequest: function(request)
- {
- var re = this._searchRegex;
- if (!re)
- return false;
-
- var text = this._networkLogLargeRowsSetting.get() ? request.path() + "/" + request.name() : request.name();
- return re.test(text);
- },
-
- _clearSearchMatchedList: function()
- {
- this._matchedRequestCount = -1;
- this._currentMatchedRequestNode = null;
- this._removeAllHighlights();
- },
-
- _removeAllHighlights: function()
- {
- this.removeAllNodeHighlights();
- for (var i = 0; i < this._highlightedSubstringChanges.length; ++i)
- WebInspector.revertDomChanges(this._highlightedSubstringChanges[i]);
- this._highlightedSubstringChanges = [];
- },
-
- dataGridSorted: function()
- {
- this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false);
- },
+ function openCallback(accepted) {
+ if (!accepted)
+ return;
+ var progressIndicator = new WebInspector.ProgressIndicator();
+ this._progressBarContainer.appendChild(progressIndicator.element);
+ var harWriter = new WebInspector.HARWriter();
+ harWriter.write(stream, this._harRequests(), progressIndicator);
+ }
+ }
+
+ _clearBrowserCache() {
+ if (confirm(WebInspector.UIString('Are you sure you want to clear browser cache?')))
+ WebInspector.multitargetNetworkManager.clearBrowserCache();
+ }
+
+ _clearBrowserCookies() {
+ if (confirm(WebInspector.UIString('Are you sure you want to clear browser cookies?')))
+ WebInspector.multitargetNetworkManager.clearBrowserCookies();
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+ _matchRequest(request) {
+ var re = this._searchRegex;
+ if (!re)
+ return false;
+
+ var text = this._networkLogLargeRowsSetting.get() ? request.path() + '/' + request.name() : request.name();
+ return re.test(text);
+ }
+
+ _clearSearchMatchedList() {
+ this._matchedRequestCount = -1;
+ this._currentMatchedRequestNode = null;
+ this._removeAllHighlights();
+ }
- /**
- * @param {number} n
- * @param {boolean} reveal
- */
- _highlightNthMatchedRequestForSearch: function(n, reveal)
- {
- this._removeAllHighlights();
-
- /** @type {!Array.<!WebInspector.NetworkDataGridNode>} */
- var nodes = this._dataGrid.rootNode().children;
- var matchCount = 0;
- var node = null;
- for (var i = 0; i < nodes.length; ++i) {
- if (nodes[i][WebInspector.NetworkLogView._isMatchingSearchQuerySymbol]) {
- if (matchCount === n) {
- node = nodes[i];
- break;
- }
- matchCount++;
- }
- }
- if (!node) {
- this._currentMatchedRequestNode = null;
- return;
+ _removeAllHighlights() {
+ this.removeAllNodeHighlights();
+ for (var i = 0; i < this._highlightedSubstringChanges.length; ++i)
+ WebInspector.revertDomChanges(this._highlightedSubstringChanges[i]);
+ this._highlightedSubstringChanges = [];
+ }
+
+ dataGridSorted() {
+ this._highlightNthMatchedRequestForSearch(
+ this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false);
+ }
+
+ /**
+ * @param {number} n
+ * @param {boolean} reveal
+ */
+ _highlightNthMatchedRequestForSearch(n, reveal) {
+ this._removeAllHighlights();
+
+ /** @type {!Array.<!WebInspector.NetworkDataGridNode>} */
+ var nodes = this._dataGrid.rootNode().children;
+ var matchCount = 0;
+ var node = null;
+ for (var i = 0; i < nodes.length; ++i) {
+ if (nodes[i][WebInspector.NetworkLogView._isMatchingSearchQuerySymbol]) {
+ if (matchCount === n) {
+ node = nodes[i];
+ break;
}
+ matchCount++;
+ }
+ }
+ if (!node) {
+ this._currentMatchedRequestNode = null;
+ return;
+ }
- var request = node.request();
- if (reveal)
- WebInspector.Revealer.reveal(request);
- var highlightedSubstringChanges = node.highlightMatchedSubstring(this._searchRegex);
- this._highlightedSubstringChanges.push(highlightedSubstringChanges);
-
- this._currentMatchedRequestNode = node;
- this._currentMatchedRequestIndex = n;
- this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.SearchIndexUpdated, n);
- },
-
- /**
- * @override
- * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
- * @param {boolean} shouldJump
- * @param {boolean=} jumpBackwards
- */
- performSearch: function(searchConfig, shouldJump, jumpBackwards)
- {
- var query = searchConfig.query;
- var currentMatchedRequestNode = this._currentMatchedRequestNode;
- this._clearSearchMatchedList();
- this._searchRegex = createPlainTextSearchRegex(query, "i");
-
- /** @type {!Array.<!WebInspector.NetworkDataGridNode>} */
- var nodes = this._dataGrid.rootNode().children;
- for (var i = 0; i < nodes.length; ++i)
- nodes[i][WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchRequest(nodes[i].request());
- var newMatchedRequestIndex = this._updateMatchCountAndFindMatchIndex(currentMatchedRequestNode);
- if (!newMatchedRequestIndex && jumpBackwards)
- newMatchedRequestIndex = this._matchedRequestCount - 1;
- this._highlightNthMatchedRequestForSearch(newMatchedRequestIndex, shouldJump);
- },
+ var request = node.request();
+ if (reveal)
+ WebInspector.Revealer.reveal(request);
+ var highlightedSubstringChanges = node.highlightMatchedSubstring(this._searchRegex);
+ this._highlightedSubstringChanges.push(highlightedSubstringChanges);
+
+ this._currentMatchedRequestNode = node;
+ this._currentMatchedRequestIndex = n;
+ this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.SearchIndexUpdated, n);
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
+ * @param {boolean} shouldJump
+ * @param {boolean=} jumpBackwards
+ */
+ performSearch(searchConfig, shouldJump, jumpBackwards) {
+ var query = searchConfig.query;
+ var currentMatchedRequestNode = this._currentMatchedRequestNode;
+ this._clearSearchMatchedList();
+ this._searchRegex = createPlainTextSearchRegex(query, 'i');
+
+ /** @type {!Array.<!WebInspector.NetworkDataGridNode>} */
+ var nodes = this._dataGrid.rootNode().children;
+ for (var i = 0; i < nodes.length; ++i)
+ nodes[i][WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchRequest(nodes[i].request());
+ var newMatchedRequestIndex = this._updateMatchCountAndFindMatchIndex(currentMatchedRequestNode);
+ if (!newMatchedRequestIndex && jumpBackwards)
+ newMatchedRequestIndex = this._matchedRequestCount - 1;
+ this._highlightNthMatchedRequestForSearch(newMatchedRequestIndex, shouldJump);
+ }
+
+ /**
+ * @override
+ * @return {boolean}
+ */
+ supportsCaseSensitiveSearch() {
+ return false;
+ }
- /**
- * @override
- * @return {boolean}
- */
- supportsCaseSensitiveSearch: function()
- {
+ /**
+ * @override
+ * @return {boolean}
+ */
+ supportsRegexSearch() {
+ return true;
+ }
+
+ /**
+ * @param {?WebInspector.NetworkDataGridNode} node
+ * @return {number}
+ */
+ _updateMatchCountAndFindMatchIndex(node) {
+ /** @type {!Array.<!WebInspector.NetworkDataGridNode>} */
+ var nodes = this._dataGrid.rootNode().children;
+ var matchCount = 0;
+ var matchIndex = 0;
+ for (var i = 0; i < nodes.length; ++i) {
+ if (!nodes[i][WebInspector.NetworkLogView._isMatchingSearchQuerySymbol])
+ continue;
+ if (node === nodes[i])
+ matchIndex = matchCount;
+ matchCount++;
+ }
+ if (this._matchedRequestCount !== matchCount) {
+ this._matchedRequestCount = matchCount;
+ this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.SearchCountUpdated, matchCount);
+ }
+ return matchIndex;
+ }
+
+ /**
+ * @param {number} index
+ * @return {number}
+ */
+ _normalizeSearchResultIndex(index) {
+ return (index + this._matchedRequestCount) % this._matchedRequestCount;
+ }
+
+ /**
+ * @param {!WebInspector.NetworkDataGridNode} node
+ * @return {boolean}
+ */
+ _applyFilter(node) {
+ var request = node.request();
+ if (this._timeFilter && !this._timeFilter(request))
+ return false;
+ var categoryName = request.resourceType().category().title;
+ if (!this._resourceCategoryFilterUI.accept(categoryName))
+ return false;
+ if (this._dataURLFilterUI.checked() && request.parsedURL.isDataURL())
+ return false;
+ if (request.statusText === 'Service Worker Fallback Required')
+ return false;
+ for (var i = 0; i < this._filters.length; ++i) {
+ if (!this._filters[i](request))
return false;
- },
-
- /**
- * @override
- * @return {boolean}
- */
- supportsRegexSearch: function()
- {
- return true;
- },
-
- /**
- * @param {?WebInspector.NetworkDataGridNode} node
- * @return {number}
- */
- _updateMatchCountAndFindMatchIndex: function(node)
- {
- /** @type {!Array.<!WebInspector.NetworkDataGridNode>} */
- var nodes = this._dataGrid.rootNode().children;
- var matchCount = 0;
- var matchIndex = 0;
- for (var i = 0; i < nodes.length; ++i) {
- if (!nodes[i][WebInspector.NetworkLogView._isMatchingSearchQuerySymbol])
- continue;
- if (node === nodes[i])
- matchIndex = matchCount;
- matchCount++;
- }
- if (this._matchedRequestCount !== matchCount) {
- this._matchedRequestCount = matchCount;
- this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.SearchCountUpdated, matchCount);
- }
- return matchIndex;
- },
-
- /**
- * @param {number} index
- * @return {number}
- */
- _normalizeSearchResultIndex: function(index)
- {
- return (index + this._matchedRequestCount) % this._matchedRequestCount;
- },
-
- /**
- * @param {!WebInspector.NetworkDataGridNode} node
- * @return {boolean}
- */
- _applyFilter: function(node)
- {
- var request = node.request();
- if (this._timeFilter && !this._timeFilter(request))
- return false;
- var categoryName = request.resourceType().category().title;
- if (!this._resourceCategoryFilterUI.accept(categoryName))
- return false;
- if (this._dataURLFilterUI.checked() && request.parsedURL.isDataURL())
- return false;
- if (request.statusText === "Service Worker Fallback Required")
- return false;
- for (var i = 0; i < this._filters.length; ++i) {
- if (!this._filters[i](request))
- return false;
- }
- return true;
- },
-
- /**
- * @param {string} query
- */
- _parseFilterQuery: function(query)
- {
- var parsedQuery;
- if (this._textFilterUI.isRegexChecked() && query !== "")
- parsedQuery = {text: [query], filters: []};
- else
- parsedQuery = this._suggestionBuilder.parseQuery(query);
-
- this._filters = parsedQuery.text.map(this._createTextFilter, this);
-
- var n = parsedQuery.filters.length;
- for (var i = 0; i < n; ++i) {
- var filter = parsedQuery.filters[i];
- var filterType = /** @type {!WebInspector.NetworkLogView.FilterType} */ (filter.type.toLowerCase());
- this._filters.push(this._createFilter(filterType, filter.data, filter.negative));
- }
- },
-
- /**
- * @param {string} text
- * @return {!WebInspector.NetworkLogView.Filter}
- */
- _createTextFilter: function(text)
- {
- var negative = false;
- /** @type {?RegExp} */
- var regex;
- if (!this._textFilterUI.isRegexChecked() && text[0] === "-" && text.length > 1) {
- negative = true;
- text = text.substring(1);
- regex = new RegExp(text.escapeForRegExp(), "i");
- } else {
- regex = this._textFilterUI.regex();
- }
-
- var filter = WebInspector.NetworkLogView._requestPathFilter.bind(null, regex);
- if (negative)
- filter = WebInspector.NetworkLogView._negativeFilter.bind(null, filter);
- return filter;
- },
-
- /**
- * @param {!WebInspector.NetworkLogView.FilterType} type
- * @param {string} value
- * @param {boolean} negative
- * @return {!WebInspector.NetworkLogView.Filter}
- */
- _createFilter: function(type, value, negative)
- {
- var filter = this._createSpecialFilter(type, value);
- if (!filter)
- return this._createTextFilter((negative ? "-" : "") + type + ":" + value);
- if (negative)
- return WebInspector.NetworkLogView._negativeFilter.bind(null, filter);
- return filter;
- },
-
- /**
- * @param {!WebInspector.NetworkLogView.FilterType} type
- * @param {string} value
- * @return {?WebInspector.NetworkLogView.Filter}
- */
- _createSpecialFilter: function(type, value)
- {
- switch (type) {
- case WebInspector.NetworkLogView.FilterType.Domain:
- return WebInspector.NetworkLogView._createRequestDomainFilter(value);
-
- case WebInspector.NetworkLogView.FilterType.HasResponseHeader:
- return WebInspector.NetworkLogView._requestResponseHeaderFilter.bind(null, value);
-
- case WebInspector.NetworkLogView.FilterType.Is:
- if (value.toLowerCase() === WebInspector.NetworkLogView.IsFilterType.Running)
- return WebInspector.NetworkLogView._runningRequestFilter;
- break;
-
- case WebInspector.NetworkLogView.FilterType.LargerThan:
- return this._createSizeFilter(value.toLowerCase());
-
- case WebInspector.NetworkLogView.FilterType.Method:
- return WebInspector.NetworkLogView._requestMethodFilter.bind(null, value);
-
- case WebInspector.NetworkLogView.FilterType.MimeType:
- return WebInspector.NetworkLogView._requestMimeTypeFilter.bind(null, value);
-
- case WebInspector.NetworkLogView.FilterType.MixedContent:
- return WebInspector.NetworkLogView._requestMixedContentFilter.bind(null, /** @type {!WebInspector.NetworkLogView.MixedContentFilterValues} */ (value));
-
- case WebInspector.NetworkLogView.FilterType.Scheme:
- return WebInspector.NetworkLogView._requestSchemeFilter.bind(null, value);
-
- case WebInspector.NetworkLogView.FilterType.SetCookieDomain:
- return WebInspector.NetworkLogView._requestSetCookieDomainFilter.bind(null, value);
-
- case WebInspector.NetworkLogView.FilterType.SetCookieName:
- return WebInspector.NetworkLogView._requestSetCookieNameFilter.bind(null, value);
-
- case WebInspector.NetworkLogView.FilterType.SetCookieValue:
- return WebInspector.NetworkLogView._requestSetCookieValueFilter.bind(null, value);
-
- case WebInspector.NetworkLogView.FilterType.StatusCode:
- return WebInspector.NetworkLogView._statusCodeFilter.bind(null, value);
- }
- return null;
- },
-
- /**
- * @param {string} value
- * @return {?WebInspector.NetworkLogView.Filter}
- */
- _createSizeFilter: function(value)
- {
- var multiplier = 1;
- if (value.endsWith("k")) {
- multiplier = 1024;
- value = value.substring(0, value.length - 1);
- } else if (value.endsWith("m")) {
- multiplier = 1024 * 1024;
- value = value.substring(0, value.length - 1);
- }
- var quantity = Number(value);
- if (isNaN(quantity))
- return null;
- return WebInspector.NetworkLogView._requestSizeLargerThanFilter.bind(null, quantity * multiplier);
- },
-
- _filterRequests: function()
- {
- this._removeAllHighlights();
- this._invalidateAllItems();
- },
-
- /**
- * @override
- */
- jumpToPreviousSearchResult: function()
- {
- if (!this._matchedRequestCount)
- return;
- var index = this._normalizeSearchResultIndex(this._currentMatchedRequestIndex - 1);
- this._highlightNthMatchedRequestForSearch(index, true);
- },
-
- /**
- * @override
- */
- jumpToNextSearchResult: function()
- {
- if (!this._matchedRequestCount)
- return;
- var index = this._normalizeSearchResultIndex(this._currentMatchedRequestIndex + 1);
- this._highlightNthMatchedRequestForSearch(index, true);
- },
-
- /**
- * @override
- */
- searchCanceled: function()
- {
- delete this._searchRegex;
- this._clearSearchMatchedList();
- this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.SearchCountUpdated, 0);
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- revealAndHighlightRequest: function(request)
- {
- this.removeAllNodeHighlights();
-
- var node = this._nodesByRequestId.get(request.requestId);
- if (node) {
- node.reveal();
- this._highlightNode(node);
- }
- },
-
- removeAllNodeHighlights: function()
- {
- if (this._highlightedNode) {
- this._highlightedNode.element().classList.remove("highlighted-row");
- delete this._highlightedNode;
- }
- },
+ }
+ return true;
+ }
+
+ /**
+ * @param {string} query
+ */
+ _parseFilterQuery(query) {
+ var parsedQuery;
+ if (this._textFilterUI.isRegexChecked() && query !== '')
+ parsedQuery = {text: [query], filters: []};
+ else
+ parsedQuery = this._suggestionBuilder.parseQuery(query);
+
+ this._filters = parsedQuery.text.map(this._createTextFilter, this);
+
+ var n = parsedQuery.filters.length;
+ for (var i = 0; i < n; ++i) {
+ var filter = parsedQuery.filters[i];
+ var filterType = /** @type {!WebInspector.NetworkLogView.FilterType} */ (filter.type.toLowerCase());
+ this._filters.push(this._createFilter(filterType, filter.data, filter.negative));
+ }
+ }
+
+ /**
+ * @param {string} text
+ * @return {!WebInspector.NetworkLogView.Filter}
+ */
+ _createTextFilter(text) {
+ var negative = false;
+ /** @type {?RegExp} */
+ var regex;
+ if (!this._textFilterUI.isRegexChecked() && text[0] === '-' && text.length > 1) {
+ negative = true;
+ text = text.substring(1);
+ regex = new RegExp(text.escapeForRegExp(), 'i');
+ } else {
+ regex = this._textFilterUI.regex();
+ }
- /**
- * @param {!WebInspector.NetworkDataGridNode} node
- */
- _highlightNode: function(node)
- {
- WebInspector.runCSSAnimationOnce(node.element(), "highlighted-row");
- this._highlightedNode = node;
- },
+ var filter = WebInspector.NetworkLogView._requestPathFilter.bind(null, regex);
+ if (negative)
+ filter = WebInspector.NetworkLogView._negativeFilter.bind(null, filter);
+ return filter;
+ }
+
+ /**
+ * @param {!WebInspector.NetworkLogView.FilterType} type
+ * @param {string} value
+ * @param {boolean} negative
+ * @return {!WebInspector.NetworkLogView.Filter}
+ */
+ _createFilter(type, value, negative) {
+ var filter = this._createSpecialFilter(type, value);
+ if (!filter)
+ return this._createTextFilter((negative ? '-' : '') + type + ':' + value);
+ if (negative)
+ return WebInspector.NetworkLogView._negativeFilter.bind(null, filter);
+ return filter;
+ }
+
+ /**
+ * @param {!WebInspector.NetworkLogView.FilterType} type
+ * @param {string} value
+ * @return {?WebInspector.NetworkLogView.Filter}
+ */
+ _createSpecialFilter(type, value) {
+ switch (type) {
+ case WebInspector.NetworkLogView.FilterType.Domain:
+ return WebInspector.NetworkLogView._createRequestDomainFilter(value);
+
+ case WebInspector.NetworkLogView.FilterType.HasResponseHeader:
+ return WebInspector.NetworkLogView._requestResponseHeaderFilter.bind(null, value);
+
+ case WebInspector.NetworkLogView.FilterType.Is:
+ if (value.toLowerCase() === WebInspector.NetworkLogView.IsFilterType.Running)
+ return WebInspector.NetworkLogView._runningRequestFilter;
+ break;
+
+ case WebInspector.NetworkLogView.FilterType.LargerThan:
+ return this._createSizeFilter(value.toLowerCase());
+
+ case WebInspector.NetworkLogView.FilterType.Method:
+ return WebInspector.NetworkLogView._requestMethodFilter.bind(null, value);
+
+ case WebInspector.NetworkLogView.FilterType.MimeType:
+ return WebInspector.NetworkLogView._requestMimeTypeFilter.bind(null, value);
+
+ case WebInspector.NetworkLogView.FilterType.MixedContent:
+ return WebInspector.NetworkLogView._requestMixedContentFilter.bind(
+ null, /** @type {!WebInspector.NetworkLogView.MixedContentFilterValues} */ (value));
+
+ case WebInspector.NetworkLogView.FilterType.Scheme:
+ return WebInspector.NetworkLogView._requestSchemeFilter.bind(null, value);
+
+ case WebInspector.NetworkLogView.FilterType.SetCookieDomain:
+ return WebInspector.NetworkLogView._requestSetCookieDomainFilter.bind(null, value);
+
+ case WebInspector.NetworkLogView.FilterType.SetCookieName:
+ return WebInspector.NetworkLogView._requestSetCookieNameFilter.bind(null, value);
+
+ case WebInspector.NetworkLogView.FilterType.SetCookieValue:
+ return WebInspector.NetworkLogView._requestSetCookieValueFilter.bind(null, value);
+
+ case WebInspector.NetworkLogView.FilterType.StatusCode:
+ return WebInspector.NetworkLogView._statusCodeFilter.bind(null, value);
+ }
+ return null;
+ }
+
+ /**
+ * @param {string} value
+ * @return {?WebInspector.NetworkLogView.Filter}
+ */
+ _createSizeFilter(value) {
+ var multiplier = 1;
+ if (value.endsWith('k')) {
+ multiplier = 1024;
+ value = value.substring(0, value.length - 1);
+ } else if (value.endsWith('m')) {
+ multiplier = 1024 * 1024;
+ value = value.substring(0, value.length - 1);
+ }
+ var quantity = Number(value);
+ if (isNaN(quantity))
+ return null;
+ return WebInspector.NetworkLogView._requestSizeLargerThanFilter.bind(null, quantity * multiplier);
+ }
+
+ _filterRequests() {
+ this._removeAllHighlights();
+ this._invalidateAllItems();
+ }
+
+ /**
+ * @override
+ */
+ jumpToPreviousSearchResult() {
+ if (!this._matchedRequestCount)
+ return;
+ var index = this._normalizeSearchResultIndex(this._currentMatchedRequestIndex - 1);
+ this._highlightNthMatchedRequestForSearch(index, true);
+ }
+
+ /**
+ * @override
+ */
+ jumpToNextSearchResult() {
+ if (!this._matchedRequestCount)
+ return;
+ var index = this._normalizeSearchResultIndex(this._currentMatchedRequestIndex + 1);
+ this._highlightNthMatchedRequestForSearch(index, true);
+ }
+
+ /**
+ * @override
+ */
+ searchCanceled() {
+ delete this._searchRegex;
+ this._clearSearchMatchedList();
+ this.dispatchEventToListeners(WebInspector.NetworkLogView.Events.SearchCountUpdated, 0);
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ revealAndHighlightRequest(request) {
+ this.removeAllNodeHighlights();
+
+ var node = this._nodesByRequestId.get(request.requestId);
+ if (node) {
+ node.reveal();
+ this._highlightNode(node);
+ }
+ }
- /**
- * @param {!WebInspector.NetworkRequest} request
- * @param {string} platform
- * @return {string}
- */
- _generateCurlCommand: function(request, platform)
- {
- var command = ["curl"];
- // These headers are derived from URL (except "version") and would be added by cURL anyway.
- var ignoredHeaders = {"host": 1, "method": 1, "path": 1, "scheme": 1, "version": 1};
-
- function escapeStringWin(str)
- {
- /* If there are no new line characters do not escape the " characters
+ removeAllNodeHighlights() {
+ if (this._highlightedNode) {
+ this._highlightedNode.element().classList.remove('highlighted-row');
+ delete this._highlightedNode;
+ }
+ }
+
+ /**
+ * @param {!WebInspector.NetworkDataGridNode} node
+ */
+ _highlightNode(node) {
+ WebInspector.runCSSAnimationOnce(node.element(), 'highlighted-row');
+ this._highlightedNode = node;
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ * @param {string} platform
+ * @return {string}
+ */
+ _generateCurlCommand(request, platform) {
+ var command = ['curl'];
+ // These headers are derived from URL (except "version") and would be added by cURL anyway.
+ var ignoredHeaders = {'host': 1, 'method': 1, 'path': 1, 'scheme': 1, 'version': 1};
+
+ function escapeStringWin(str) {
+ /* If there are no new line characters do not escape the " characters
since it only uglifies the command.
Because cmd.exe parser and MS Crt arguments parsers use some of the
@@ -1454,317 +1583,142 @@ WebInspector.NetworkLogView.prototype = {
new line is there to enact the escape command the second is the character
to escape (in this case new line).
*/
- var encapsChars = /[\r\n]/.test(str) ? "^\"" : "\"";
- return encapsChars + str.replace(/\\/g, "\\\\")
- .replace(/"/g, "\\\"")
- .replace(/[^a-zA-Z0-9\s_\-:=+~'\/.',?;()*`]/g, "^$&")
- .replace(/%(?=[a-zA-Z0-9_])/g, "%^")
- .replace(/\r\n|[\n\r]/g, "^\n\n") + encapsChars;
- }
-
- function escapeStringPosix(str)
- {
- function escapeCharacter(x)
- {
- var code = x.charCodeAt(0);
- if (code < 256) {
- // Add leading zero when needed to not care about the next character.
- return code < 16 ? "\\x0" + code.toString(16) : "\\x" + code.toString(16);
- }
- code = code.toString(16);
- return "\\u" + ("0000" + code).substr(code.length, 4);
- }
-
- if (/[^\x20-\x7E]|\'/.test(str)) {
- // Use ANSI-C quoting syntax.
- return "$\'" + str.replace(/\\/g, "\\\\")
- .replace(/\'/g, "\\\'")
- .replace(/\n/g, "\\n")
- .replace(/\r/g, "\\r")
- .replace(/[^\x20-\x7E]/g, escapeCharacter) + "'";
- } else {
- // Use single quote syntax.
- return "'" + str + "'";
- }
- }
-
- // cURL command expected to run on the same platform that DevTools run
- // (it may be different from the inspected page platform).
- var escapeString = platform === "win" ? escapeStringWin : escapeStringPosix;
-
- command.push(escapeString(request.url).replace(/[[{}\]]/g, "\\$&"));
-
- var inferredMethod = "GET";
- var data = [];
- var requestContentType = request.requestContentType();
- if (requestContentType && requestContentType.startsWith("application/x-www-form-urlencoded") && request.requestFormData) {
- data.push("--data");
- data.push(escapeString(request.requestFormData));
- ignoredHeaders["content-length"] = true;
- inferredMethod = "POST";
- } else if (request.requestFormData) {
- data.push("--data-binary");
- data.push(escapeString(request.requestFormData));
- ignoredHeaders["content-length"] = true;
- inferredMethod = "POST";
- }
-
- if (request.requestMethod !== inferredMethod) {
- command.push("-X");
- command.push(request.requestMethod);
- }
+ var encapsChars = /[\r\n]/.test(str) ? '^"' : '"';
+ return encapsChars +
+ str.replace(/\\/g, '\\\\')
+ .replace(/"/g, '\\"')
+ .replace(/[^a-zA-Z0-9\s_\-:=+~'\/.',?;()*`]/g, '^$&')
+ .replace(/%(?=[a-zA-Z0-9_])/g, '%^')
+ .replace(/\r\n|[\n\r]/g, '^\n\n') +
+ encapsChars;
+ }
- var requestHeaders = request.requestHeaders();
- for (var i = 0; i < requestHeaders.length; i++) {
- var header = requestHeaders[i];
- var name = header.name.replace(/^:/, ""); // Translate SPDY v3 headers to HTTP headers.
- if (name.toLowerCase() in ignoredHeaders)
- continue;
- command.push("-H");
- command.push(escapeString(name + ": " + header.value));
+ function escapeStringPosix(str) {
+ function escapeCharacter(x) {
+ var code = x.charCodeAt(0);
+ if (code < 256) {
+ // Add leading zero when needed to not care about the next character.
+ return code < 16 ? '\\x0' + code.toString(16) : '\\x' + code.toString(16);
}
- command = command.concat(data);
- command.push("--compressed");
-
- if (request.securityState() === SecurityAgent.SecurityState.Insecure)
- command.push("--insecure");
- return command.join(" ");
- },
-
- __proto__: WebInspector.VBox.prototype
-};
-
-/** @typedef {function(!WebInspector.NetworkRequest): boolean} */
-WebInspector.NetworkLogView.Filter;
-
-/**
- * @param {!WebInspector.NetworkLogView.Filter} filter
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._negativeFilter = function(filter, request)
-{
- return !filter(request);
-};
-
-/**
- * @param {?RegExp} regex
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestPathFilter = function(regex, request)
-{
- if (!regex)
- return false;
-
- return regex.test(request.path() + "/" + request.name());
-};
-
-/**
- * @param {string} domain
- * @return {!Array.<string>}
- */
-WebInspector.NetworkLogView._subdomains = function(domain)
-{
- var result = [domain];
- var indexOfPeriod = domain.indexOf(".");
- while (indexOfPeriod !== -1) {
- result.push("*" + domain.substring(indexOfPeriod));
- indexOfPeriod = domain.indexOf(".", indexOfPeriod + 1);
+ code = code.toString(16);
+ return '\\u' + ('0000' + code).substr(code.length, 4);
+ }
+
+ if (/[^\x20-\x7E]|\'/.test(str)) {
+ // Use ANSI-C quoting syntax.
+ return '$\'' +
+ str.replace(/\\/g, '\\\\')
+ .replace(/\'/g, '\\\'')
+ .replace(/\n/g, '\\n')
+ .replace(/\r/g, '\\r')
+ .replace(/[^\x20-\x7E]/g, escapeCharacter) +
+ '\'';
+ } else {
+ // Use single quote syntax.
+ return '\'' + str + '\'';
+ }
}
- return result;
-};
-/**
- * @param {string} value
- * @return {!WebInspector.NetworkLogView.Filter}
- */
-WebInspector.NetworkLogView._createRequestDomainFilter = function(value)
-{
- /**
- * @param {string} string
- * @return {string}
- */
- function escapeForRegExp(string)
- {
- return string.escapeForRegExp();
+ // cURL command expected to run on the same platform that DevTools run
+ // (it may be different from the inspected page platform).
+ var escapeString = platform === 'win' ? escapeStringWin : escapeStringPosix;
+
+ command.push(escapeString(request.url).replace(/[[{}\]]/g, '\\$&'));
+
+ var inferredMethod = 'GET';
+ var data = [];
+ var requestContentType = request.requestContentType();
+ if (requestContentType && requestContentType.startsWith('application/x-www-form-urlencoded') &&
+ request.requestFormData) {
+ data.push('--data');
+ data.push(escapeString(request.requestFormData));
+ ignoredHeaders['content-length'] = true;
+ inferredMethod = 'POST';
+ } else if (request.requestFormData) {
+ data.push('--data-binary');
+ data.push(escapeString(request.requestFormData));
+ ignoredHeaders['content-length'] = true;
+ inferredMethod = 'POST';
}
- var escapedPattern = value.split("*").map(escapeForRegExp).join(".*");
- return WebInspector.NetworkLogView._requestDomainFilter.bind(null, new RegExp("^" + escapedPattern + "$", "i"));
-};
-
-/**
- * @param {!RegExp} regex
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestDomainFilter = function(regex, request)
-{
- return regex.test(request.domain);
-};
-/**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._runningRequestFilter = function(request)
-{
- return !request.finished;
-};
+ if (request.requestMethod !== inferredMethod) {
+ command.push('-X');
+ command.push(request.requestMethod);
+ }
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestResponseHeaderFilter = function(value, request)
-{
- return request.responseHeaderValue(value) !== undefined;
-};
+ var requestHeaders = request.requestHeaders();
+ for (var i = 0; i < requestHeaders.length; i++) {
+ var header = requestHeaders[i];
+ var name = header.name.replace(/^:/, ''); // Translate SPDY v3 headers to HTTP headers.
+ if (name.toLowerCase() in ignoredHeaders)
+ continue;
+ command.push('-H');
+ command.push(escapeString(name + ': ' + header.value));
+ }
+ command = command.concat(data);
+ command.push('--compressed');
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestMethodFilter = function(value, request)
-{
- return request.requestMethod === value;
+ if (request.securityState() === SecurityAgent.SecurityState.Insecure)
+ command.push('--insecure');
+ return command.join(' ');
+ }
};
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestMimeTypeFilter = function(value, request)
-{
- return request.mimeType === value;
-};
+WebInspector.NetworkLogView._isFilteredOutSymbol = Symbol('isFilteredOut');
+WebInspector.NetworkLogView._isMatchingSearchQuerySymbol = Symbol('isMatchingSearchQuery');
-/**
- * @param {!WebInspector.NetworkLogView.MixedContentFilterValues} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestMixedContentFilter = function(value, request)
-{
- if (value === WebInspector.NetworkLogView.MixedContentFilterValues.Displayed) {
- return request.mixedContentType === "optionally-blockable";
- } else if (value === WebInspector.NetworkLogView.MixedContentFilterValues.Blocked) {
- return request.mixedContentType === "blockable" && request.wasBlocked();
- } else if (value === WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden) {
- return request.mixedContentType === "blockable" && !request.wasBlocked();
- } else if (value === WebInspector.NetworkLogView.MixedContentFilterValues.All) {
- return request.mixedContentType !== "none";
- }
- return false;
+WebInspector.NetworkLogView.HTTPSchemas = {
+ 'http': true,
+ 'https': true,
+ 'ws': true,
+ 'wss': true
};
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestSchemeFilter = function(value, request)
-{
- return request.scheme === value;
-};
+WebInspector.NetworkLogView._waterfallMinOvertime = 1;
+WebInspector.NetworkLogView._waterfallMaxOvertime = 3;
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestSetCookieDomainFilter = function(value, request)
-{
- var cookies = request.responseCookies;
- for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
- if (cookies[i].domain() === value)
- return true;
- }
- return false;
+/** @enum {symbol} */
+WebInspector.NetworkLogView.Events = {
+ RequestSelected: Symbol('RequestSelected'),
+ SearchCountUpdated: Symbol('SearchCountUpdated'),
+ SearchIndexUpdated: Symbol('SearchIndexUpdated'),
+ UpdateRequest: Symbol('UpdateRequest')
};
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestSetCookieNameFilter = function(value, request)
-{
- var cookies = request.responseCookies;
- for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
- if (cookies[i].name() === value)
- return true;
- }
- return false;
+/** @enum {string} */
+WebInspector.NetworkLogView.FilterType = {
+ Domain: 'domain',
+ HasResponseHeader: 'has-response-header',
+ Is: 'is',
+ LargerThan: 'larger-than',
+ Method: 'method',
+ MimeType: 'mime-type',
+ MixedContent: 'mixed-content',
+ Scheme: 'scheme',
+ SetCookieDomain: 'set-cookie-domain',
+ SetCookieName: 'set-cookie-name',
+ SetCookieValue: 'set-cookie-value',
+ StatusCode: 'status-code'
};
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestSetCookieValueFilter = function(value, request)
-{
- var cookies = request.responseCookies;
- for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
- if (cookies[i].value() === value)
- return true;
- }
- return false;
+/** @enum {string} */
+WebInspector.NetworkLogView.MixedContentFilterValues = {
+ All: 'all',
+ Displayed: 'displayed',
+ Blocked: 'blocked',
+ BlockOverridden: 'block-overridden'
};
-/**
- * @param {number} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestSizeLargerThanFilter = function(value, request)
-{
- return request.transferSize >= value;
+/** @enum {string} */
+WebInspector.NetworkLogView.IsFilterType = {
+ Running: 'running'
};
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._statusCodeFilter = function(value, request)
-{
- return ("" + request.statusCode) === value;
-};
+/** @type {!Array<string>} */
+WebInspector.NetworkLogView._searchKeys =
+ Object.keys(WebInspector.NetworkLogView.FilterType).map(key => WebInspector.NetworkLogView.FilterType[key]);
-/**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView.HTTPRequestsFilter = function(request)
-{
- return request.parsedURL.isValid && (request.scheme in WebInspector.NetworkLogView.HTTPSchemas);
-};
+/** @typedef {function(!WebInspector.NetworkRequest): boolean} */
+WebInspector.NetworkLogView.Filter;
-/**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView.FinishedRequestsFilter = function(request)
-{
- return request.finished;
-};
-/**
- * @param {number} windowStart
- * @param {number} windowEnd
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestTimeFilter = function(windowStart, windowEnd, request)
-{
- if (request.issueTime() > windowEnd)
- return false;
- if (request.endTime !== -1 && request.endTime < windowStart)
- return false;
- return true;
-};

Powered by Google App Engine
This is Rietveld 408576698