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

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

Issue 730463002: Revert of DevTools: Split NetworkPanel.js (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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: Source/devtools/front_end/network/NetworkLogView.js
diff --git a/Source/devtools/front_end/network/NetworkLogView.js b/Source/devtools/front_end/network/NetworkLogView.js
deleted file mode 100644
index 5914e0f8d2b48631f0a6ca2dccc463faf9331f6b..0000000000000000000000000000000000000000
--- a/Source/devtools/front_end/network/NetworkLogView.js
+++ /dev/null
@@ -1,1902 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org>
- * Copyright (C) 2010, 2011, 2012, 2013, 2014 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (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
- * @implements {WebInspector.Searchable}
- * @implements {WebInspector.TargetManager.Observer}
- * @extends {WebInspector.VBox}
- * @param {!WebInspector.FilterBar} filterBar
- * @param {!WebInspector.Setting} coulmnsVisibilitySetting
- */
-WebInspector.NetworkLogView = function(filterBar, coulmnsVisibilitySetting)
-{
- WebInspector.VBox.call(this);
- this.registerRequiredCSS("network/networkLogView.css");
- this.registerRequiredCSS("ui/filter.css");
-
- this._filterBar = filterBar;
- this._coulmnsVisibilitySetting = coulmnsVisibilitySetting;
- /** @type {!Map.<string, !WebInspector.NetworkDataGridNode>} */
- this._nodesByRequestId = new Map();
- /** @type {!Object.<string, boolean>} */
- this._staleRequestIds = {};
- /** @type {number} */
- this._mainRequestLoadTime = -1;
- /** @type {number} */
- this._mainRequestDOMContentLoadedTime = -1;
- this._matchedRequestCount = 0;
- this._highlightedSubstringChanges = [];
-
- /** @type {!Array.<!WebInspector.NetworkLogView.Filter>} */
- this._filters = [];
-
- this._currentMatchedRequestNode = null;
- this._currentMatchedRequestIndex = -1;
-
- this._createStatusbarButtons();
- this._createStatusBarItems();
- this._linkifier = new WebInspector.Linkifier();
-
- this._allowPopover = true;
-
- /** @type {number} */
- this._rowHeight = 0;
-
- this._addFilters();
- this._resetSuggestionBuilder();
- this._initializeView();
- this._toggleRecordButton(true);
-
- WebInspector.targetManager.observeTargets(this);
- WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes.RequestStarted, this._onRequestStarted, this);
- WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes.RequestUpdated, this._onRequestUpdated, this);
- WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes.RequestFinished, this._onRequestUpdated, this);
-
- WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.WillReloadPage, this._willReloadPage, this);
- WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNavigated, this);
- WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.Load, this._loadEventFired, this);
- WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.DOMContentLoaded, this._domContentLoadedEventFired, this);
-}
-
-WebInspector.NetworkLogView._isFilteredOutSymbol = Symbol("isFilteredOut");
-WebInspector.NetworkLogView._isMatchingSearchQuerySymbol = Symbol("isMatchingSearchQuery");
-
-WebInspector.NetworkLogView.HTTPSchemas = {"http": true, "https": true, "ws": true, "wss": true};
-WebInspector.NetworkLogView._responseHeaderColumns = ["Cache-Control", "Connection", "Content-Encoding", "Content-Length", "ETag", "Keep-Alive", "Last-Modified", "Server", "Vary"];
-WebInspector.NetworkLogView.defaultColumnsVisibility = {
- method: true, status: true, scheme: false, domain: false, remoteAddress: false, type: true, initiator: true, cookies: false, setCookies: false, size: true, time: true, connectionId: false,
- "Cache-Control": false, "Connection": false, "Content-Encoding": false, "Content-Length": false, "ETag": false, "Keep-Alive": false, "Last-Modified": false, "Server": false, "Vary": false
-};
-WebInspector.NetworkLogView._defaultRefreshDelay = 500;
-
-/** @enum {string} */
-WebInspector.NetworkLogView.FilterType = {
- Domain: "Domain",
- HasResponseHeader: "HasResponseHeader",
- Is: "Is",
- Method: "Method",
- MimeType: "MimeType",
- Scheme: "Scheme",
- SetCookieDomain: "SetCookieDomain",
- SetCookieName: "SetCookieName",
- SetCookieValue: "SetCookieValue",
- StatusCode: "StatusCode"
-};
-
-/** @enum {string} */
-WebInspector.NetworkLogView.IsFilterType = {
- Running: "running"
-};
-
-/** @type {!Array.<string>} */
-WebInspector.NetworkLogView._searchKeys = Object.values(WebInspector.NetworkLogView.FilterType);
-
-/** @type {!Object.<string, string>} */
-WebInspector.NetworkLogView._columnTitles = {
- "name": WebInspector.UIString("Name"),
- "method": WebInspector.UIString("Method"),
- "status": WebInspector.UIString("Status"),
- "scheme": WebInspector.UIString("Scheme"),
- "domain": WebInspector.UIString("Domain"),
- "remoteAddress": WebInspector.UIString("Remote Address"),
- "type": WebInspector.UIString("Type"),
- "initiator": WebInspector.UIString("Initiator"),
- "cookies": WebInspector.UIString("Cookies"),
- "setCookies": WebInspector.UIString("Set-Cookies"),
- "size": WebInspector.UIString("Size"),
- "time": WebInspector.UIString("Time"),
- "connectionId": WebInspector.UIString("Connection Id"),
- "timeline": WebInspector.UIString("Timeline"),
-
- // Response header columns
- "Cache-Control": WebInspector.UIString("Cache-Control"),
- "Connection": WebInspector.UIString("Connection"),
- "Content-Encoding": WebInspector.UIString("Content-Encoding"),
- "Content-Length": WebInspector.UIString("Content-Length"),
- "ETag": WebInspector.UIString("ETag"),
- "Keep-Alive": WebInspector.UIString("Keep-Alive"),
- "Last-Modified": WebInspector.UIString("Last-Modified"),
- "Server": WebInspector.UIString("Server"),
- "Vary": WebInspector.UIString("Vary")
-};
-
-WebInspector.NetworkLogView.prototype = {
- /**
- * @param {!WebInspector.Target} target
- */
- targetAdded: function(target)
- {
- target.networkLog.requests.forEach(this._appendRequest.bind(this));
- },
-
- /**
- * @param {!WebInspector.Target} target
- */
- targetRemoved: function(target)
- {
- },
-
- /**
- * @return {boolean}
- */
- allowRequestSelection: function()
- {
- return !this._allowPopover;
- },
-
- _addFilters: function()
- {
- this._textFilterUI = new WebInspector.TextFilterUI();
- this._textFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._filterChanged, this);
- this._filterBar.addFilter(this._textFilterUI);
-
- var types = [];
- for (var typeId in WebInspector.resourceTypes) {
- var resourceType = WebInspector.resourceTypes[typeId];
- if (resourceType === WebInspector.resourceTypes.TextTrack)
- continue;
- types.push({name: resourceType.name(), label: resourceType.categoryTitle()});
- }
- this._resourceTypeFilterUI = new WebInspector.NamedBitSetFilterUI(types, WebInspector.settings.networkResourceTypeFilters);
- this._resourceTypeFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._filterChanged.bind(this), this);
- this._filterBar.addFilter(this._resourceTypeFilterUI);
-
- var dataURLSetting = WebInspector.settings.networkHideDataURL;
- 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);
- },
-
- _resetSuggestionBuilder: function()
- {
- this._suggestionBuilder = new WebInspector.FilterSuggestionBuilder(WebInspector.NetworkLogView._searchKeys);
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.Is, WebInspector.NetworkLogView.IsFilterType.Running);
- 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._createSortingFunctions();
- this._createCalculators();
- this._createTable();
- this._createTimelineGrid();
- this._summaryBarElement = this.element.createChild("div", "network-summary-bar");
-
- this._updateRowsSize();
-
- this._popoverHelper = new WebInspector.PopoverHelper(this.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this), this._onHidePopover.bind(this));
- // Enable faster hint.
- this._popoverHelper.setTimeout(250, 250);
-
- this.switchViewMode(true);
- },
-
- /**
- * @return {!Array.<!Element>}
- */
- statusBarItems: function()
- {
- return [
- this._recordButton.element,
- this._clearButton.element,
- this._filterBar.filterButton().element,
- this._largerRequestsButton.element,
- this._preserveLogCheckbox.element,
- this._disableCacheCheckbox.element,
- this._progressBarContainer];
- },
-
- /**
- * @return {boolean}
- */
- usesLargeRows: function()
- {
- return !!WebInspector.settings.resourcesLargeRows.get();
- },
-
- /**
- * @param {boolean} flag
- */
- setAllowPopover: function(flag)
- {
- this._allowPopover = flag;
- },
-
- /**
- * @return {!Array.<!Element>}
- */
- elementsToRestoreScrollPositionsFor: function()
- {
- if (!this._dataGrid) // Not initialized yet.
- return [];
- return [this._dataGrid.scrollContainer];
- },
-
- _createTimelineGrid: function()
- {
- this._timelineGrid = new WebInspector.TimelineGrid();
- this._timelineGrid.element.classList.add("network-timeline-grid");
- this._dataGrid.element.appendChild(this._timelineGrid.element);
- },
-
- _createTable: function()
- {
- var columns = [];
- columns.push({
- id: "name",
- titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Name"), WebInspector.UIString("Path")),
- title: WebInspector.NetworkLogView._columnTitles["name"],
- sortable: true,
- weight: 20,
- disclosure: true
- });
-
- columns.push({
- id: "method",
- title: WebInspector.NetworkLogView._columnTitles["method"],
- sortable: true,
- weight: 6
- });
-
- columns.push({
- id: "status",
- titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Status"), WebInspector.UIString("Text")),
- title: WebInspector.NetworkLogView._columnTitles["status"],
- sortable: true,
- weight: 6
- });
-
- columns.push({
- id: "scheme",
- title: WebInspector.NetworkLogView._columnTitles["scheme"],
- sortable: true,
- weight: 6
- });
-
- columns.push({
- id: "domain",
- title: WebInspector.NetworkLogView._columnTitles["domain"],
- sortable: true,
- weight: 6
- });
-
- columns.push({
- id: "remoteAddress",
- title: WebInspector.NetworkLogView._columnTitles["remoteAddress"],
- sortable: true,
- weight: 10,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "type",
- title: WebInspector.NetworkLogView._columnTitles["type"],
- sortable: true,
- weight: 6
- });
-
- columns.push({
- id: "initiator",
- title: WebInspector.NetworkLogView._columnTitles["initiator"],
- sortable: true,
- weight: 10
- });
-
- columns.push({
- id: "cookies",
- title: WebInspector.NetworkLogView._columnTitles["cookies"],
- sortable: true,
- weight: 6,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "setCookies",
- title: WebInspector.NetworkLogView._columnTitles["setCookies"],
- sortable: true,
- weight: 6,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "size",
- titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Size"), WebInspector.UIString("Content")),
- title: WebInspector.NetworkLogView._columnTitles["size"],
- sortable: true,
- weight: 6,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "time",
- titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Time"), WebInspector.UIString("Latency")),
- title: WebInspector.NetworkLogView._columnTitles["time"],
- sortable: true,
- weight: 6,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "connectionId",
- title: WebInspector.NetworkLogView._columnTitles["connectionId"],
- sortable: true,
- weight: 6
- });
-
- var responseHeaderColumns = WebInspector.NetworkLogView._responseHeaderColumns;
- for (var i = 0; i < responseHeaderColumns.length; ++i) {
- var headerName = responseHeaderColumns[i];
- var descriptor = {
- id: headerName,
- title: WebInspector.NetworkLogView._columnTitles[headerName],
- weight: 6
- }
- if (headerName === "Content-Length")
- descriptor.align = WebInspector.DataGrid.Align.Right;
- columns.push(descriptor);
- }
-
- columns.push({
- id: "timeline",
- titleDOMFragment: createDocumentFragment(),
- title: WebInspector.NetworkLogView._columnTitles["timeline"],
- sortable: false,
- weight: 40,
- sort: WebInspector.DataGrid.Order.Ascending
- });
-
- this._dataGrid = new WebInspector.SortableDataGrid(columns);
- this._dataGrid.setStickToBottom(true);
- this._updateColumns();
- this._dataGrid.setName("networkLog");
- this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last);
- this._dataGrid.element.classList.add("network-log-grid");
- this._dataGrid.element.addEventListener("contextmenu", this._contextMenu.bind(this), true);
- this._dataGrid.show(this.element);
-
- // Event listeners need to be added _after_ we attach to the document, so that owner document is properly update.
- this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, this._sortItems, this);
- this._dataGrid.addEventListener(WebInspector.DataGrid.Events.ColumnsResized, this._updateDividersIfNeeded, this);
-
- this._patchTimelineHeader();
- this._dataGrid.sortNodes(this._sortingFunctions.startTime, false);
- },
-
- /**
- * @param {string} title
- * @param {string} subtitle
- * @return {!DocumentFragment}
- */
- _makeHeaderFragment: function(title, subtitle)
- {
- var fragment = createDocumentFragment();
- fragment.createTextChild(title);
- var subtitleDiv = fragment.createChild("div", "network-header-subtitle");
- subtitleDiv.createTextChild(subtitle);
- return fragment;
- },
-
- _patchTimelineHeader: function()
- {
- var timelineSorting = createElement("select");
-
- var option = createElement("option");
- option.value = "startTime";
- option.label = WebInspector.UIString("Timeline");
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "startTime";
- option.label = WebInspector.UIString("Start Time");
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "responseTime";
- option.label = WebInspector.UIString("Response Time");
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "endTime";
- option.label = WebInspector.UIString("End Time");
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "duration";
- option.label = WebInspector.UIString("Duration");
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "latency";
- option.label = WebInspector.UIString("Latency");
- timelineSorting.appendChild(option);
-
- var header = this._dataGrid.headerTableHeader("timeline");
- header.replaceChild(timelineSorting, header.firstChild);
-
- timelineSorting.addEventListener("click", function(event) { event.consume() }, false);
- timelineSorting.addEventListener("change", this._sortByTimeline.bind(this), false);
- this._timelineSortSelector = timelineSorting;
- },
-
- _createSortingFunctions: function()
- {
- this._sortingFunctions = {};
- this._sortingFunctions.name = WebInspector.NetworkDataGridNode.NameComparator;
- this._sortingFunctions.method = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "method", false);
- this._sortingFunctions.status = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "statusCode", false);
- this._sortingFunctions.scheme = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "scheme", false);
- this._sortingFunctions.domain = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "domain", false);
- this._sortingFunctions.remoteAddress = WebInspector.NetworkDataGridNode.RemoteAddressComparator;
- this._sortingFunctions.type = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "mimeType", false);
- this._sortingFunctions.initiator = WebInspector.NetworkDataGridNode.InitiatorComparator;
- this._sortingFunctions.cookies = WebInspector.NetworkDataGridNode.RequestCookiesCountComparator;
- this._sortingFunctions.setCookies = WebInspector.NetworkDataGridNode.ResponseCookiesCountComparator;
- this._sortingFunctions.size = WebInspector.NetworkDataGridNode.SizeComparator;
- this._sortingFunctions.time = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "duration", false);
- this._sortingFunctions.connectionId = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "connectionId", false);
- this._sortingFunctions.timeline = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "startTime", false);
- this._sortingFunctions.startTime = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "startTime", false);
- this._sortingFunctions.endTime = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "endTime", false);
- this._sortingFunctions.responseTime = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "responseReceivedTime", false);
- this._sortingFunctions.duration = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "duration", true);
- this._sortingFunctions.latency = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "latency", true);
- },
-
- _createCalculators: function()
- {
- /** @type {!WebInspector.NetworkTransferTimeCalculator} */
- this._timeCalculator = new WebInspector.NetworkTransferTimeCalculator();
- /** @type {!WebInspector.NetworkTransferDurationCalculator} */
- this._durationCalculator = new WebInspector.NetworkTransferDurationCalculator();
-
- /** @type {!Object.<string, !WebInspector.NetworkTimeCalculator>} */
- this._calculators = {};
- this._calculators.timeline = this._timeCalculator;
- this._calculators.startTime = this._timeCalculator;
- this._calculators.endTime = this._timeCalculator;
- this._calculators.responseTime = this._timeCalculator;
- this._calculators.duration = this._durationCalculator;
- this._calculators.latency = this._durationCalculator;
-
- this._calculator = this._timeCalculator;
- },
-
- _sortItems: function()
- {
- this._removeAllNodeHighlights();
- var columnIdentifier = this._dataGrid.sortColumnIdentifier();
- if (columnIdentifier === "timeline") {
- this._sortByTimeline();
- return;
- }
- var sortingFunction = this._sortingFunctions[columnIdentifier];
- if (!sortingFunction)
- return;
-
- this._dataGrid.sortNodes(sortingFunction, !this._dataGrid.isSortOrderAscending());
- this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false);
- this._timelineSortSelector.selectedIndex = 0;
-
- WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMetrics.UserAction, {
- action: WebInspector.UserMetrics.UserActionNames.NetworkSort,
- column: columnIdentifier,
- sortOrder: this._dataGrid.sortOrder()
- });
- },
-
- _sortByTimeline: function()
- {
- this._removeAllNodeHighlights();
- var selectedIndex = this._timelineSortSelector.selectedIndex;
- if (!selectedIndex)
- selectedIndex = 1; // Sort by start time by default.
- var selectedOption = this._timelineSortSelector[selectedIndex];
- var value = selectedOption.value;
-
- this._setCalculator(this._calculators[value]);
- var sortingFunction = this._sortingFunctions[value];
- this._dataGrid.sortNodes(sortingFunction);
- this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false);
- this._dataGrid.markColumnAsSortedBy("timeline", WebInspector.DataGrid.Order.Ascending);
- },
-
- _createStatusBarItems: function()
- {
- this._progressBarContainer = createElement("div");
- this._progressBarContainer.className = "status-bar-item";
- },
-
- _updateSummaryBar: function()
- {
- var requestsNumber = this._nodesByRequestId.size;
-
- if (!requestsNumber) {
- if (this._summaryBarElement._isDisplayingWarning)
- return;
- this._summaryBarElement._isDisplayingWarning = true;
- this._summaryBarElement.removeChildren();
- this._summaryBarElement.createChild("div", "warning-icon-small");
- var text = WebInspector.UIString("No requests captured. Reload the page to see detailed information on the network activity.");
- this._summaryBarElement.createTextChild(text);
- this._summaryBarElement.title = text;
- return;
- }
- delete this._summaryBarElement._isDisplayingWarning;
-
- 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().resourceTreeModel.inspectedPageURL())
- baseTime = request.startTime;
- if (request.endTime > maxTime)
- maxTime = request.endTime;
- }
- var text = "";
- if (selectedRequestsNumber !== requestsNumber) {
- text += String.sprintf(WebInspector.UIString("%d / %d requests"), selectedRequestsNumber, requestsNumber);
- text += " \u2758 " + String.sprintf(WebInspector.UIString("%s / %s transferred"), Number.bytesToString(selectedTransferSize), Number.bytesToString(transferSize));
- } else {
- text += String.sprintf(WebInspector.UIString("%d requests"), requestsNumber);
- text += " \u2758 " + String.sprintf(WebInspector.UIString("%s transferred"), Number.bytesToString(transferSize));
- }
- if (baseTime !== -1 && this._mainRequestLoadTime !== -1 && this._mainRequestDOMContentLoadedTime !== -1 && this._mainRequestDOMContentLoadedTime > baseTime) {
- text += " \u2758 " + String.sprintf(WebInspector.UIString("%s (load: %s, DOMContentLoaded: %s)"),
- Number.secondsToString(maxTime - baseTime),
- Number.secondsToString(this._mainRequestLoadTime - baseTime),
- Number.secondsToString(this._mainRequestDOMContentLoadedTime - baseTime));
- }
- this._summaryBarElement.textContent = text;
- this._summaryBarElement.title = text;
- },
-
- _scheduleRefresh: function()
- {
- if (this._needsRefresh)
- return;
-
- this._needsRefresh = true;
-
- if (this.isShowing() && !this._refreshTimeout)
- this._refreshTimeout = setTimeout(this.refresh.bind(this), WebInspector.NetworkLogView._defaultRefreshDelay);
- },
-
- _updateDividersIfNeeded: function()
- {
- var timelineOffset = this._dataGrid.columnOffset("timeline");
- // Position timline grid location.
- if (timelineOffset)
- this._timelineGrid.element.style.left = timelineOffset + "px";
-
- var calculator = this.calculator();
- var proceed = true;
- if (!this.isShowing()) {
- this._scheduleRefresh();
- proceed = false;
- } else {
- calculator.setDisplayWindow(this._timelineGrid.dividersElement.clientWidth);
- proceed = this._timelineGrid.updateDividers(calculator);
- }
- if (!proceed)
- return;
-
- if (calculator.startAtZero) {
- // If our current sorting method starts at zero, that means it shows all
- // requests starting at the same point, and so onLoad event and DOMContent
- // event lines really wouldn't make much sense here, so don't render them.
- return;
- }
-
- this._timelineGrid.removeEventDividers();
- var loadTimePercent = calculator.computePercentageFromEventTime(this._mainRequestLoadTime);
- if (this._mainRequestLoadTime !== -1 && loadTimePercent >= 0) {
- var loadDivider = createElementWithClass("div", "network-event-divider-padding");
- loadDivider.createChild("div", "network-event-divider network-red-divider");
- loadDivider.title = WebInspector.UIString("Load event");
- loadDivider.style.left = loadTimePercent + "%";
- this._timelineGrid.addEventDivider(loadDivider);
- }
-
- var domLoadTimePrecent = calculator.computePercentageFromEventTime(this._mainRequestDOMContentLoadedTime);
- if (this._mainRequestDOMContentLoadedTime !== -1 && domLoadTimePrecent >= 0) {
- var domContentLoadedDivider = createElementWithClass("div", "network-event-divider-padding");
- domContentLoadedDivider.createChild("div", "network-event-divider network-blue-divider");
- domContentLoadedDivider.title = WebInspector.UIString("DOMContentLoaded event");
- domContentLoadedDivider.style.left = domLoadTimePrecent + "%";
- this._timelineGrid.addEventDivider(domContentLoadedDivider);
- }
- },
-
- _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;
- },
-
- /**
- * @return {!WebInspector.NetworkTimeCalculator}
- */
- calculator: function()
- {
- return this._calculator;
- },
-
- /**
- * @param {!WebInspector.NetworkTimeCalculator} x
- */
- _setCalculator: function(x)
- {
- if (!x || this._calculator === x)
- return;
-
- this._calculator = x;
- this._calculator.reset();
-
- if (this._calculator.startAtZero)
- this._timelineGrid.hideEventDividers();
- else
- this._timelineGrid.showEventDividers();
-
- this._invalidateAllItems();
- this.refresh();
- },
-
- _createStatusbarButtons: function()
- {
- this._recordButton = new WebInspector.StatusBarButton("", "record-profile-status-bar-item");
- this._recordButton.addEventListener("click", this._onRecordButtonClicked, this);
-
- this._clearButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear"), "clear-status-bar-item");
- this._clearButton.addEventListener("click", this._reset, this);
-
- this._largerRequestsButton = new WebInspector.StatusBarButton(WebInspector.UIString("Use small resource rows."), "network-larger-resources-status-bar-item");
- this._largerRequestsButton.toggled = WebInspector.settings.resourcesLargeRows.get();
- this._largerRequestsButton.addEventListener("click", this._toggleLargerRequests, this);
-
- this._preserveLogCheckbox = new WebInspector.StatusBarCheckbox(WebInspector.UIString("Preserve log"));
- this._preserveLogCheckbox.element.title = WebInspector.UIString("Do not clear log on page reload / navigation.");
-
- this._disableCacheCheckbox = new WebInspector.StatusBarCheckbox(WebInspector.UIString("Disable cache"));
- WebInspector.SettingsUI.bindCheckbox(this._disableCacheCheckbox.inputElement, WebInspector.settings.cacheDisabled);
- this._disableCacheCheckbox.element.title = WebInspector.UIString("Disable cache (while DevTools is open).");
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _loadEventFired: function(event)
- {
- if (!this._recordButton.toggled)
- return;
-
- var data = /** @type {number} */ (event.data);
- this._mainRequestLoadTime = data || -1;
- // Schedule refresh to update boundaries and draw the new line.
- this._scheduleRefresh();
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _domContentLoadedEventFired: function(event)
- {
- if (!this._recordButton.toggled)
- return;
- var data = /** @type {number} */ (event.data);
- this._mainRequestDOMContentLoadedTime = data || -1;
- // Schedule refresh to update boundaries and draw the new line.
- this._scheduleRefresh();
- },
-
- wasShown: function()
- {
- this._refreshIfNeeded();
- },
-
- willHide: function()
- {
- this._popoverHelper.hidePopover();
- },
-
- refresh: function()
- {
- this._needsRefresh = false;
- if (this._refreshTimeout) {
- clearTimeout(this._refreshTimeout);
- delete this._refreshTimeout;
- }
-
- this._removeAllNodeHighlights();
- var boundariesChanged = false;
- var calculator = this.calculator();
- if (calculator.updateBoundariesForEventTime) {
- boundariesChanged = calculator.updateBoundariesForEventTime(this._mainRequestLoadTime) || boundariesChanged;
- boundariesChanged = calculator.updateBoundariesForEventTime(this._mainRequestDOMContentLoadedTime) || boundariesChanged;
- }
-
- var dataGrid = this._dataGrid;
- var rootNode = dataGrid.rootNode();
- var nodesToInsert = [];
- for (var requestId in this._staleRequestIds) {
- var node = this._nodesByRequestId.get(requestId);
- if (!node)
- continue;
- if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol])
- rootNode.removeChild(node);
- node[WebInspector.NetworkLogView._isFilteredOutSymbol] = !this._applyFilter(node);
- if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol])
- nodesToInsert.push(node);
- }
-
- for (var i = 0; i < nodesToInsert.length; ++i) {
- var node = nodesToInsert[i];
- var request = node.request();
- node.refresh();
- dataGrid.insertChild(node);
- node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchRequest(request);
- if (calculator.updateBoundaries(request))
- boundariesChanged = true;
- }
-
- this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false);
-
- if (boundariesChanged) {
- // The boundaries changed, so all item graphs are stale.
- this._updateDividersIfNeeded();
- var nodes = this._nodesByRequestId.valuesArray();
- for (var i = 0; i < nodes.length; ++i)
- nodes[i].refreshGraph();
- }
-
- this._staleRequestIds = {};
- this._updateSummaryBar();
- },
-
- _onRecordButtonClicked: function()
- {
- if (!this._recordButton.toggled)
- this._reset();
- this._toggleRecordButton(!this._recordButton.toggled);
- },
-
- /**
- * @param {boolean} toggled
- */
- _toggleRecordButton: function(toggled)
- {
- this._recordButton.toggled = toggled;
- this._recordButton.title = toggled ? WebInspector.UIString("Stop Recording Network Log") : WebInspector.UIString("Record Network Log");
- },
-
- _reset: function()
- {
- this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.ViewCleared);
-
- this._clearSearchMatchedList();
- if (this._popoverHelper)
- this._popoverHelper.hidePopover();
-
- if (this._calculator)
- this._calculator.reset();
-
- var nodes = this._nodesByRequestId.valuesArray();
- for (var i = 0; i < nodes.length; ++i)
- nodes[i].dispose();
-
- this._nodesByRequestId.clear();
- this._staleRequestIds = {};
- this._resetSuggestionBuilder();
-
- if (this._dataGrid) {
- this._dataGrid.rootNode().removeChildren();
- this._updateDividersIfNeeded();
- this._updateSummaryBar();
- }
-
- this._mainRequestLoadTime = -1;
- this._mainRequestDOMContentLoadedTime = -1;
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _onRequestStarted: function(event)
- {
- if (this._recordButton.toggled) {
- var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
- this._appendRequest(request);
- }
- },
-
- /**
- * @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]);
- }
-
- this._refreshRequest(request);
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _onRequestUpdated: function(event)
- {
- var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
- this._refreshRequest(request);
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _refreshRequest: function(request)
- {
- if (!this._nodesByRequestId.get(request.requestId))
- return;
-
- this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.Domain, request.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);
-
- 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._staleRequestIds[request.requestId] = true;
- this._scheduleRefresh();
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _willReloadPage: function(event)
- {
- this._recordButton.toggled = true;
- if (!this._preserveLogCheckbox.checked())
- this._reset();
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _mainFrameNavigated: function(event)
- {
- if (!this._recordButton.toggled || this._preserveLogCheckbox.checked())
- return;
-
- var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data);
- var loaderId = frame.loaderId;
-
- // Pick provisional load requests.
- var requestsToPick = [];
- var requests = frame.target().networkLog.requests;
- for (var i = 0; i < requests.length; ++i) {
- var request = requests[i];
- if (request.loaderId === loaderId)
- requestsToPick.push(request);
- }
-
- this._reset();
-
- for (var i = 0; i < requestsToPick.length; ++i)
- this._appendRequest(requestsToPick[i]);
- },
-
- /**
- * @param {boolean} detailed
- */
- switchViewMode: function(detailed)
- {
- if (this._detailedMode === detailed)
- return;
- this._detailedMode = detailed;
-
- if (detailed) {
- if (this._dataGrid.selectedNode)
- this._dataGrid.selectedNode.selected = false;
- } else {
- this._removeAllNodeHighlights();
- this._popoverHelper.hidePopover();
- }
-
- this.element.classList.toggle("brief-mode", !detailed);
- this._updateColumns();
- },
-
- _toggleLargerRequests: function()
- {
- WebInspector.settings.resourcesLargeRows.set(!WebInspector.settings.resourcesLargeRows.get());
- this._updateRowsSize();
- },
-
- /**
- * @return {number}
- */
- rowHeight: function()
- {
- return this._rowHeight;
- },
-
- _updateRowsSize: function()
- {
- var largeRows = this.usesLargeRows();
- this._largerRequestsButton.toggled = largeRows;
- this._rowHeight = largeRows ? 41 : 21;
- this._largerRequestsButton.title = WebInspector.UIString(largeRows ? "Use small resource rows." : "Use large resource rows.");
- this._dataGrid.element.classList.toggle("small", !largeRows);
- this._timelineGrid.element.classList.toggle("small", !largeRows);
- this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.RowSizeChanged, { largeRows: largeRows });
- },
-
- /**
- * @param {!Element} element
- * @param {!Event} event
- * @return {!Element|!AnchorBox|undefined}
- */
- _getPopoverAnchor: function(element, event)
- {
- if (!this._allowPopover)
- return;
- var anchor = element.enclosingNodeOrSelfWithClass("network-graph-bar") || element.enclosingNodeOrSelfWithClass("network-graph-label");
- if (anchor && anchor.parentElement.request && anchor.parentElement.request.timing)
- return anchor;
- anchor = element.enclosingNodeOrSelfWithClass("network-script-initiated");
- if (anchor && anchor.request) {
- var request = /** @type {!WebInspector.NetworkRequest} */ (anchor.request);
- var initiator = anchor.request.initiator();
- if (initiator && (initiator.stackTrace || initiator.asyncStackTrace))
- return anchor;
- }
- },
-
- /**
- * @param {!Element} anchor
- * @param {!WebInspector.Popover} popover
- */
- _showPopover: function(anchor, popover)
- {
- var content;
- if (anchor.classList.contains("network-script-initiated")) {
- content = this._generateScriptInitiatedPopoverContent(anchor.request);
- popover.setCanShrink(true);
- } else {
- content = WebInspector.RequestTimingView.createTimingTable(anchor.parentElement.request);
- popover.setCanShrink(false);
- }
- popover.show(content, anchor);
- },
-
- _onHidePopover: function()
- {
- this._linkifier.reset();
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- * @return {!Element}
- */
- _generateScriptInitiatedPopoverContent: function(request)
- {
- var framesTable = createElementWithClass("table", "network-stack-trace");
-
- /**
- * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace
- * @this {WebInspector.NetworkLogView}
- */
- function appendStackTrace(stackTrace)
- {
- for (var i = 0; i < stackTrace.length; ++i) {
- var stackFrame = stackTrace[i];
- var row = createElement("tr");
- row.createChild("td").textContent = stackFrame.functionName || WebInspector.UIString("(anonymous function)");
- row.createChild("td").textContent = " @ ";
- row.createChild("td").appendChild(this._linkifier.linkifyConsoleCallFrame(request.target(), stackFrame));
- framesTable.appendChild(row);
- }
- }
-
- // Initiator is not null, checked in _getPopoverAnchor.
- var initiator = /** @type {!NetworkAgent.Initiator} */ (request.initiator());
- if (initiator.stackTrace)
- appendStackTrace.call(this, initiator.stackTrace);
-
- var asyncStackTrace = initiator.asyncStackTrace;
- while (asyncStackTrace) {
- var callFrames = asyncStackTrace.callFrames;
- if (!callFrames || !callFrames.length)
- break;
- var row = framesTable.createChild("tr");
- row.createChild("td", "network-async-trace-description").textContent = WebInspector.asyncStackTraceLabel(asyncStackTrace.description);
- row.createChild("td");
- row.createChild("td");
- appendStackTrace.call(this, callFrames);
- asyncStackTrace = asyncStackTrace.asyncStackTrace;
- }
-
- return framesTable;
- },
-
- _updateColumns: function()
- {
- var detailedMode = !!this._detailedMode;
- var visibleColumns = {"name": true};
- if (detailedMode) {
- visibleColumns["timeline"] = true;
- var columnsVisibility = this._coulmnsVisibilitySetting.get();
- for (var columnIdentifier in columnsVisibility)
- visibleColumns[columnIdentifier] = columnsVisibility[columnIdentifier];
- }
-
- this._dataGrid.setColumnsVisiblity(visibleColumns);
- },
-
- /**
- * @param {string} columnIdentifier
- */
- _toggleColumnVisibility: function(columnIdentifier)
- {
- var columnsVisibility = this._coulmnsVisibilitySetting.get();
- columnsVisibility[columnIdentifier] = !columnsVisibility[columnIdentifier];
- this._coulmnsVisibilitySetting.set(columnsVisibility);
-
- this._updateColumns();
- },
-
- /**
- * @return {!Array.<string>}
- */
- _getConfigurableColumnIDs: function()
- {
- if (this._configurableColumnIDs)
- return this._configurableColumnIDs;
-
- var columnTitles = WebInspector.NetworkLogView._columnTitles;
- function compare(id1, id2)
- {
- return columnTitles[id1].compareTo(columnTitles[id2]);
- }
-
- var columnIDs = Object.keys(this._coulmnsVisibilitySetting.get());
- this._configurableColumnIDs = columnIDs.sort(compare);
- return this._configurableColumnIDs;
- },
-
- /**
- * @param {!Event} event
- */
- _contextMenu: function(event)
- {
- var contextMenu = new WebInspector.ContextMenu(event);
-
- if (this._detailedMode && event.target.isSelfOrDescendant(this._dataGrid.headerTableBody)) {
- var columnsVisibility = this._coulmnsVisibilitySetting.get();
- var columnIDs = this._getConfigurableColumnIDs();
- var columnTitles = WebInspector.NetworkLogView._columnTitles;
- for (var i = 0; i < columnIDs.length; ++i) {
- var columnIdentifier = columnIDs[i];
- contextMenu.appendCheckboxItem(columnTitles[columnIdentifier], this._toggleColumnVisibility.bind(this, columnIdentifier), !!columnsVisibility[columnIdentifier]);
- }
- contextMenu.show();
- return;
- }
-
- var gridNode = this._dataGrid.dataGridNodeFromNode(event.target);
- var request = gridNode && gridNode.request();
-
- /**
- * @param {string} url
- */
- function openResourceInNewTab(url)
- {
- InspectorFrontendHost.openInNewTab(url);
- }
-
- if (request) {
- contextMenu.appendItem(WebInspector.openLinkExternallyLabel(), openResourceInNewTab.bind(null, request.url));
- contextMenu.appendSeparator();
- contextMenu.appendItem(WebInspector.copyLinkAddressLabel(), this._copyLocation.bind(this, request));
- if (request.requestHeadersText())
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy request headers" : "Copy Request Headers"), this._copyRequestHeaders.bind(this, request));
- if (request.responseHeadersText)
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy response headers" : "Copy Response Headers"), this._copyResponseHeaders.bind(this, request));
- if (request.finished)
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy response" : "Copy Response"), this._copyResponse.bind(this, request));
- contextMenu.appendItem(WebInspector.UIString("Copy as cURL"), this._copyCurlCommand.bind(this, request));
- }
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy all as HAR" : "Copy All as HAR"), this._copyAll.bind(this));
-
- contextMenu.appendSeparator();
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Save as HAR with content" : "Save as HAR with Content"), this._exportAll.bind(this));
-
- contextMenu.appendSeparator();
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Clear browser cache" : "Clear Browser Cache"), this._clearBrowserCache.bind(this));
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Clear browser cookies" : "Clear Browser Cookies"), this._clearBrowserCookies.bind(this));
-
- if (request && request.resourceType() === WebInspector.resourceTypes.XHR) {
- contextMenu.appendSeparator();
- contextMenu.appendItem(WebInspector.UIString("Replay XHR"), request.replayXHR.bind(request));
- contextMenu.appendSeparator();
- }
-
- contextMenu.show();
- },
-
- _harRequests: function()
- {
- var requests = this._nodesByRequestId.valuesArray().map(function(node) { return node.request(); });
- var httpRequests = requests.filter(WebInspector.NetworkLogView.HTTPRequestsFilter);
- httpRequests = httpRequests.filter(WebInspector.NetworkLogView.FinishedRequestsFilter);
- return httpRequests.filter(WebInspector.NetworkLogView.NonDevToolsRequestsFilter);
- },
-
- _copyAll: function()
- {
- var harArchive = {
- log: (new WebInspector.HARLog(this._harRequests())).build()
- };
- InspectorFrontendHost.copyText(JSON.stringify(harArchive, null, 2));
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _copyLocation: function(request)
- {
- InspectorFrontendHost.copyText(request.url);
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _copyRequestHeaders: function(request)
- {
- InspectorFrontendHost.copyText(request.requestHeadersText());
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _copyResponse: function(request)
- {
- /**
- * @param {?string} content
- */
- function callback(content)
- {
- if (request.contentEncoded)
- content = request.asDataURL();
- InspectorFrontendHost.copyText(content || "");
- }
- request.requestContent(callback);
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _copyResponseHeaders: function(request)
- {
- InspectorFrontendHost.copyText(request.responseHeadersText);
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _copyCurlCommand: function(request)
- {
- InspectorFrontendHost.copyText(this._generateCurlCommand(request));
- },
-
- _exportAll: function()
- {
- var filename = WebInspector.targetManager.inspectedPageDomain() + ".har";
- var stream = new WebInspector.FileOutputStream();
- stream.open(filename, 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?")))
- NetworkAgent.clearBrowserCache();
- },
-
- _clearBrowserCookies: function()
- {
- if (confirm(WebInspector.UIString("Are you sure you want to clear browser cookies?")))
- NetworkAgent.clearBrowserCookies();
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
- _matchRequest: function(request)
- {
- var re = this._searchRegExp;
- if (!re)
- return false;
- return re.test(request.name()) || re.test(request.path());
- },
-
- _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 = [];
- },
-
- /**
- * @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;
- }
-
- var request = node.request();
- var regExp = this._searchRegExp;
- var nameMatched = request.name().match(regExp);
- var pathMatched = request.path().match(regExp);
- if (!nameMatched && pathMatched && !this._largerRequestsButton.toggled)
- this._toggleLargerRequests();
- if (reveal)
- WebInspector.Revealer.reveal(request);
- var highlightedSubstringChanges = node.highlightMatchedSubstring(regExp);
- this._highlightedSubstringChanges.push(highlightedSubstringChanges);
-
- this._currentMatchedRequestNode = node;
- this._currentMatchedRequestIndex = n;
- this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.SearchIndexUpdated, n);
- },
-
- /**
- * @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._searchRegExp = 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);
- },
-
- /**
- * @return {boolean}
- */
- supportsCaseSensitiveSearch: function()
- {
- return false;
- },
-
- /**
- * @return {boolean}
- */
- supportsRegexSearch: function()
- {
- return false;
- },
-
- /**
- * @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.EventTypes.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();
- var resourceType = request.resourceType();
- if (resourceType === WebInspector.resourceTypes.TextTrack)
- resourceType = WebInspector.resourceTypes.Other;
- if (!this._resourceTypeFilterUI.accept(resourceType.name()))
- return false;
- if (this._dataURLFilterUI.checked() && request.parsedURL.isDataURL())
- 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 = this._suggestionBuilder.parseQuery(query);
- this._filters = parsedQuery.text.map(this._createTextFilter);
- var filters = parsedQuery.filters;
- 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);
- this._filters.push(this._createFilter(filterType, filter.data, filter.negative));
- }
- },
-
- /**
- * @param {string} text
- * @return {!WebInspector.NetworkLogView.Filter}
- */
- _createTextFilter: function(text)
- {
- var regexp = new RegExp(text.escapeForRegExp(), "i");
- return WebInspector.NetworkLogView._requestNameOrPathFilter.bind(null, regexp);
- },
-
- /**
- * @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._requestDomainFilter.bind(null, 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.Method:
- return WebInspector.NetworkLogView._requestMethodFilter.bind(null, value);
-
- case WebInspector.NetworkLogView.FilterType.MimeType:
- return WebInspector.NetworkLogView._requestMimeTypeFilter.bind(null, 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;
- },
-
- _filterRequests: function()
- {
- this._removeAllHighlights();
- this._invalidateAllItems();
- this.refresh();
- },
-
- jumpToPreviousSearchResult: function()
- {
- if (!this._matchedRequestCount)
- return;
- var index = this._normalizeSearchResultIndex(this._currentMatchedRequestIndex - 1);
- this._highlightNthMatchedRequestForSearch(index, true);
- },
-
- jumpToNextSearchResult: function()
- {
- if (!this._matchedRequestCount)
- return;
- var index = this._normalizeSearchResultIndex(this._currentMatchedRequestIndex + 1);
- this._highlightNthMatchedRequestForSearch(index, true);
- },
-
- searchCanceled: function()
- {
- delete this._searchRegExp;
- this._clearSearchMatchedList();
- this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.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;
- }
- },
-
- /**
- * @param {!WebInspector.NetworkDataGridNode} node
- */
- _highlightNode: function(node)
- {
- WebInspector.runCSSAnimationOnce(node.element(), "highlighted-row");
- this._highlightedNode = node;
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- * @return {string}
- */
- _generateCurlCommand: function(request)
- {
- 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)
- {
- /* Replace quote by double quote (but not by \") because it is
- recognized by both cmd.exe and MS Crt arguments parser.
-
- Replace % by "%" because it could be expanded to an environment
- variable value. So %% becomes "%""%". Even if an env variable ""
- (2 doublequotes) is declared, the cmd.exe will not
- substitute it with its value.
-
- Replace each backslash with double backslash to make sure
- MS Crt arguments parser won't collapse them.
-
- Replace new line outside of quotes since cmd.exe doesn't let
- to do it inside.
- */
- return "\"" + str.replace(/"/g, "\"\"")
- .replace(/%/g, "\"%\"")
- .replace(/\\/g, "\\\\")
- .replace(/[\r\n]+/g, "\"^$&\"") + "\"";
- }
-
- 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 = WebInspector.isWin() ? 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 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");
- 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._requestNameOrPathFilter = function(regex, request)
-{
- return regex.test(request.name()) || regex.test(request.path());
-}
-
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestDomainFilter = function(value, request)
-{
- return request.domain === value;
-}
-
-/**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._runningRequestFilter = function(request)
-{
- return !request.finished;
-}
-
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestResponseHeaderFilter = function(value, request)
-{
- return request.responseHeaderValue(value) !== undefined;
-}
-
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestMethodFilter = function(value, request)
-{
- return request.requestMethod === value;
-}
-
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestMimeTypeFilter = function(value, request)
-{
- return request.mimeType === value;
-}
-
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._requestSchemeFilter = function(value, request)
-{
- return request.scheme === value;
-}
-
-/**
- * @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 false;
- }
- return false;
-}
-
-/**
- * @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 false;
- }
- return false;
-}
-
-/**
- * @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 false;
- }
- return false;
-}
-
-/**
- * @param {string} value
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView._statusCodeFilter = function(value, request)
-{
- return ("" + request.statusCode) === value;
-}
-
-/**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView.HTTPRequestsFilter = function(request)
-{
- return request.parsedURL.isValid && (request.scheme in WebInspector.NetworkLogView.HTTPSchemas);
-}
-
-/**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView.NonDevToolsRequestsFilter = function(request)
-{
- return !WebInspector.NetworkManager.hasDevToolsRequestHeader(request);
-}
-
-/**
- * @param {!WebInspector.NetworkRequest} request
- * @return {boolean}
- */
-WebInspector.NetworkLogView.FinishedRequestsFilter = function(request)
-{
- return request.finished;
-}
-
-WebInspector.NetworkLogView.EventTypes = {
- ViewCleared: "ViewCleared",
- RowSizeChanged: "RowSizeChanged",
- RequestSelected: "RequestSelected",
- SearchCountUpdated: "SearchCountUpdated",
- SearchIndexUpdated: "SearchIndexUpdated"
-};
« no previous file with comments | « Source/devtools/front_end/network/NetworkDataGridNode.js ('k') | Source/devtools/front_end/network/NetworkPanel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698