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

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

Issue 2118663002: [Devtools] Seperate columns out of NetworkLogView into own file (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup NetworkLogView Created 4 years, 5 months 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org> 3 * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org>
4 * Copyright (C) 2011 Google Inc. All rights reserved. 4 * Copyright (C) 2011 Google Inc. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 this.registerRequiredCSS("network/networkLogView.css"); 44 this.registerRequiredCSS("network/networkLogView.css");
45 45
46 this._networkHideDataURLSetting = WebInspector.settings.createSetting("netwo rkHideDataURL", false); 46 this._networkHideDataURLSetting = WebInspector.settings.createSetting("netwo rkHideDataURL", false);
47 this._networkResourceTypeFiltersSetting = WebInspector.settings.createSettin g("networkResourceTypeFilters", {}); 47 this._networkResourceTypeFiltersSetting = WebInspector.settings.createSettin g("networkResourceTypeFilters", {});
48 this._networkShowPrimaryLoadWaterfallSetting = WebInspector.settings.createS etting("networkShowPrimaryLoadWaterfall", false); 48 this._networkShowPrimaryLoadWaterfallSetting = WebInspector.settings.createS etting("networkShowPrimaryLoadWaterfall", false);
49 49
50 this._filterBar = filterBar; 50 this._filterBar = filterBar;
51 this._progressBarContainer = progressBarContainer; 51 this._progressBarContainer = progressBarContainer;
52 this._networkLogLargeRowsSetting = networkLogLargeRowsSetting; 52 this._networkLogLargeRowsSetting = networkLogLargeRowsSetting;
53 53
54 var defaultColumnsVisibility = WebInspector.NetworkLogView._defaultColumnsVi sibility; 54 this._columns = new WebInspector.NetworkLogViewColumns(this, networkLogLarge RowsSetting);
55 this._columnsVisibilitySetting = WebInspector.settings.createSetting("networ kLogColumnsVisibility", defaultColumnsVisibility);
56 var savedColumnsVisibility = this._columnsVisibilitySetting.get();
57 var columnsVisibility = {};
58 for (var columnId in defaultColumnsVisibility)
59 columnsVisibility[columnId] = savedColumnsVisibility.hasOwnProperty(colu mnId) ? savedColumnsVisibility[columnId] : defaultColumnsVisibility[columnId];
60 this._columnsVisibilitySetting.set(columnsVisibility);
61 55
62 /** @type {!Map.<string, !WebInspector.NetworkDataGridNode>} */ 56 /** @type {!Map.<string, !WebInspector.NetworkDataGridNode>} */
63 this._nodesByRequestId = new Map(); 57 this._nodesByRequestId = new Map();
64 /** @type {!Object.<string, boolean>} */ 58 /** @type {!Object.<string, boolean>} */
65 this._staleRequestIds = {}; 59 this._staleRequestIds = {};
66 /** @type {number} */ 60 /** @type {number} */
67 this._mainRequestLoadTime = -1; 61 this._mainRequestLoadTime = -1;
68 /** @type {number} */ 62 /** @type {number} */
69 this._mainRequestDOMContentLoadedTime = -1; 63 this._mainRequestDOMContentLoadedTime = -1;
70 this._matchedRequestCount = 0; 64 this._matchedRequestCount = 0;
71 /** @type {!Array<{time: number, element: !Element}>} */
72 this._eventDividers = [];
73 this._highlightedSubstringChanges = []; 65 this._highlightedSubstringChanges = [];
74 66
75 /** @type {!Array.<!WebInspector.NetworkLogView.Filter>} */ 67 /** @type {!Array.<!WebInspector.NetworkLogView.Filter>} */
76 this._filters = []; 68 this._filters = [];
77 /** @type {?WebInspector.NetworkLogView.Filter} */ 69 /** @type {?WebInspector.NetworkLogView.Filter} */
78 this._timeFilter = null; 70 this._timeFilter = null;
79 71
80 this._currentMatchedRequestNode = null; 72 this._currentMatchedRequestNode = null;
81 this._currentMatchedRequestIndex = -1; 73 this._currentMatchedRequestIndex = -1;
82 74
83 /** @type {!WebInspector.Linkifier} */ 75 /** @type {!WebInspector.Linkifier} */
84 this._popupLinkifier = new WebInspector.Linkifier();
85 /** @type {!WebInspector.Linkifier} */
86 this.linkifier = new WebInspector.Linkifier(); 76 this.linkifier = new WebInspector.Linkifier();
87 77
88 this._gridMode = true;
89 this._recording = false; 78 this._recording = false;
90 this._preserveLog = false; 79 this._preserveLog = false;
91 80
92 /** @type {number} */ 81 /** @type {number} */
93 this._rowHeight = 0; 82 this._rowHeight = 0;
94 83
95 this._addFilters(); 84 this._addFilters();
96 this._resetSuggestionBuilder(); 85 this._resetSuggestionBuilder();
97 this._initializeView(); 86 this._initializeView();
98 87
99 WebInspector.moduleSetting("networkColorCodeResourceTypes").addChangeListene r(this._invalidateAllItems, this); 88 WebInspector.moduleSetting("networkColorCodeResourceTypes").addChangeListene r(this._invalidateAllItems, this);
100 this._networkLogLargeRowsSetting.addChangeListener(this._updateRowsSize, thi s); 89 this._networkLogLargeRowsSetting.addChangeListener(this._updateRowsSize, thi s);
101 90
102 WebInspector.targetManager.observeTargets(this); 91 WebInspector.targetManager.observeTargets(this);
103 WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, Web Inspector.NetworkManager.EventTypes.RequestStarted, this._onRequestStarted, this ); 92 WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, Web Inspector.NetworkManager.EventTypes.RequestStarted, this._onRequestStarted, this );
104 WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, Web Inspector.NetworkManager.EventTypes.RequestUpdated, this._onRequestUpdated, this ); 93 WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, Web Inspector.NetworkManager.EventTypes.RequestUpdated, this._onRequestUpdated, this );
105 WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, Web Inspector.NetworkManager.EventTypes.RequestFinished, this._onRequestUpdated, thi s); 94 WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, Web Inspector.NetworkManager.EventTypes.RequestFinished, this._onRequestUpdated, thi s);
106 } 95 }
107 96
108 WebInspector.NetworkLogView._isFilteredOutSymbol = Symbol("isFilteredOut"); 97 WebInspector.NetworkLogView._isFilteredOutSymbol = Symbol("isFilteredOut");
109 WebInspector.NetworkLogView._isMatchingSearchQuerySymbol = Symbol("isMatchingSea rchQuery"); 98 WebInspector.NetworkLogView._isMatchingSearchQuerySymbol = Symbol("isMatchingSea rchQuery");
110 99
111 WebInspector.NetworkLogView.HTTPSchemas = {"http": true, "https": true, "ws": tr ue, "wss": true}; 100 WebInspector.NetworkLogView.HTTPSchemas = {"http": true, "https": true, "ws": tr ue, "wss": true};
112 WebInspector.NetworkLogView._responseHeaderColumns = ["Cache-Control", "Connecti on", "Content-Encoding", "Content-Length", "ETag", "Keep-Alive", "Last-Modified" , "Server", "Vary"]; 101
113 WebInspector.NetworkLogView._defaultColumnsVisibility = {
114 method: false, status: true, protocol: false, scheme: false, domain: false, remoteAddress: false, type: true, initiator: true, cookies: false, setCookies: f alse, size: true, time: true, priority: false, connectionId: false,
115 "Cache-Control": false, "Connection": false, "Content-Encoding": false, "Con tent-Length": false, "ETag": false, "Keep-Alive": false, "Last-Modified": false, "Server": false, "Vary": false
116 };
117 WebInspector.NetworkLogView._defaultRefreshDelay = 200; 102 WebInspector.NetworkLogView._defaultRefreshDelay = 200;
118 103
119 WebInspector.NetworkLogView._waterfallMinOvertime = 1; 104 WebInspector.NetworkLogView._waterfallMinOvertime = 1;
120 WebInspector.NetworkLogView._waterfallMaxOvertime = 3; 105 WebInspector.NetworkLogView._waterfallMaxOvertime = 3;
121 106
122 /** @enum {string} */ 107 /** @enum {string} */
123 WebInspector.NetworkLogView.FilterType = { 108 WebInspector.NetworkLogView.FilterType = {
124 Domain: "domain", 109 Domain: "domain",
125 HasResponseHeader: "has-response-header", 110 HasResponseHeader: "has-response-header",
126 Is: "is", 111 Is: "is",
(...skipping 17 matching lines...) Expand all
144 } 129 }
145 130
146 /** @enum {string} */ 131 /** @enum {string} */
147 WebInspector.NetworkLogView.IsFilterType = { 132 WebInspector.NetworkLogView.IsFilterType = {
148 Running: "running" 133 Running: "running"
149 }; 134 };
150 135
151 /** @type {!Array.<string>} */ 136 /** @type {!Array.<string>} */
152 WebInspector.NetworkLogView._searchKeys = Object.values(WebInspector.NetworkLogV iew.FilterType); 137 WebInspector.NetworkLogView._searchKeys = Object.values(WebInspector.NetworkLogV iew.FilterType);
153 138
154 /** @type {!Object.<string, string>} */
155 WebInspector.NetworkLogView._columnTitles = {
156 "name": WebInspector.UIString("Name"),
157 "method": WebInspector.UIString("Method"),
158 "status": WebInspector.UIString("Status"),
159 "protocol": WebInspector.UIString("Protocol"),
160 "scheme": WebInspector.UIString("Scheme"),
161 "domain": WebInspector.UIString("Domain"),
162 "remoteAddress": WebInspector.UIString("Remote Address"),
163 "type": WebInspector.UIString("Type"),
164 "initiator": WebInspector.UIString("Initiator"),
165 "cookies": WebInspector.UIString("Cookies"),
166 "setCookies": WebInspector.UIString("Set-Cookies"),
167 "size": WebInspector.UIString("Size"),
168 "time": WebInspector.UIString("Time"),
169 "connectionId": WebInspector.UIString("Connection Id"),
170 "priority": WebInspector.UIString("Priority"),
171 "timeline": WebInspector.UIString("Timeline"),
172
173 // Response header columns
174 "Cache-Control": WebInspector.UIString("Cache-Control"),
175 "Connection": WebInspector.UIString("Connection"),
176 "Content-Encoding": WebInspector.UIString("Content-Encoding"),
177 "Content-Length": WebInspector.UIString("Content-Length"),
178 "ETag": WebInspector.UIString("ETag"),
179 "Keep-Alive": WebInspector.UIString("Keep-Alive"),
180 "Last-Modified": WebInspector.UIString("Last-Modified"),
181 "Server": WebInspector.UIString("Server"),
182 "Vary": WebInspector.UIString("Vary")
183 };
184
185 WebInspector.NetworkLogView.prototype = { 139 WebInspector.NetworkLogView.prototype = {
186 /** 140 /**
187 * @param {boolean} recording 141 * @param {boolean} recording
188 */ 142 */
189 setRecording: function(recording) 143 setRecording: function(recording)
190 { 144 {
191 this._recording = recording; 145 this._recording = recording;
192 this._updateSummaryBar(); 146 this._updateSummaryBar();
193 }, 147 },
194 148
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 */ 189 */
236 setWindow: function(start, end) 190 setWindow: function(start, end)
237 { 191 {
238 if (!start && !end) { 192 if (!start && !end) {
239 this._timeFilter = null; 193 this._timeFilter = null;
240 this._timeCalculator.setWindow(null); 194 this._timeCalculator.setWindow(null);
241 } else { 195 } else {
242 this._timeFilter = WebInspector.NetworkLogView._requestTimeFilter.bi nd(null, start, end); 196 this._timeFilter = WebInspector.NetworkLogView._requestTimeFilter.bi nd(null, start, end);
243 this._timeCalculator.setWindow(new WebInspector.NetworkTimeBoundary( start, end)); 197 this._timeCalculator.setWindow(new WebInspector.NetworkTimeBoundary( start, end));
244 } 198 }
245 this._updateDividersIfNeeded(); 199 this._columns.updateDividersIfNeeded();
246 this._filterRequests(); 200 this._filterRequests();
247 }, 201 },
248 202
249 clearSelection: function() 203 clearSelection: function()
250 { 204 {
251 if (this._dataGrid.selectedNode) 205 if (this._dataGrid.selectedNode)
252 this._dataGrid.selectedNode.deselect(); 206 this._dataGrid.selectedNode.deselect();
253 }, 207 },
254 208
255 _addFilters: function() 209 _addFilters: function()
(...skipping 25 matching lines...) Expand all
281 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.L argerThan, "10k"); 235 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.L argerThan, "10k");
282 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.L argerThan, "1M"); 236 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterType.L argerThan, "1M");
283 this._textFilterUI.setSuggestionBuilder(this._suggestionBuilder); 237 this._textFilterUI.setSuggestionBuilder(this._suggestionBuilder);
284 }, 238 },
285 239
286 /** 240 /**
287 * @param {!WebInspector.Event} event 241 * @param {!WebInspector.Event} event
288 */ 242 */
289 _filterChanged: function(event) 243 _filterChanged: function(event)
290 { 244 {
291 this._removeAllNodeHighlights(); 245 this.removeAllNodeHighlights();
292 this._parseFilterQuery(this._textFilterUI.value()); 246 this._parseFilterQuery(this._textFilterUI.value());
293 this._filterRequests(); 247 this._filterRequests();
294 }, 248 },
295 249
296 _initializeView: function() 250 _initializeView: function()
297 { 251 {
298 this.element.id = "network-container"; 252 this.element.id = "network-container";
299 253
300 this._createSortingFunctions(); 254 /** @type {!WebInspector.NetworkTransferTimeCalculator} */
301 this._createCalculators(); 255 this._timeCalculator = new WebInspector.NetworkTransferTimeCalculator();
256 /** @type {!WebInspector.NetworkTransferDurationCalculator} */
257 this._durationCalculator = new WebInspector.NetworkTransferDurationCalcu lator();
258 this._calculator = this._timeCalculator;
259
302 this._createTable(); 260 this._createTable();
303 this._createTimelineGrid();
304 this._summaryBarElement = this.element.createChild("div", "network-summa ry-bar"); 261 this._summaryBarElement = this.element.createChild("div", "network-summa ry-bar");
305 262
306 this._updateRowsSize(); 263 this._updateRowsSize();
307
308 this._popoverHelper = new WebInspector.PopoverHelper(this.element, this. _getPopoverAnchor.bind(this), this._showPopover.bind(this), this._onHidePopover. bind(this));
309 this.switchViewMode(true);
310 }, 264 },
311 265
312 _showRecordingHint: function() 266 _showRecordingHint: function()
313 { 267 {
314 this._hideRecordingHint(); 268 this._hideRecordingHint();
315 this._recordingHint = this.element.createChild("div", "network-status-pa ne fill"); 269 this._recordingHint = this.element.createChild("div", "network-status-pa ne fill");
316 var hintText = this._recordingHint.createChild("div", "recording-hint"); 270 var hintText = this._recordingHint.createChild("div", "recording-hint");
317 var reloadShortcutNode = this._recordingHint.createChild("b"); 271 var reloadShortcutNode = this._recordingHint.createChild("b");
318 reloadShortcutNode.textContent = WebInspector.shortcutRegistry.shortcutD escriptorsForAction("main.reload")[0].name; 272 reloadShortcutNode.textContent = WebInspector.shortcutRegistry.shortcutD escriptorsForAction("main.reload")[0].name;
319 273
(...skipping 20 matching lines...) Expand all
340 * @override 294 * @override
341 * @return {!Array.<!Element>} 295 * @return {!Array.<!Element>}
342 */ 296 */
343 elementsToRestoreScrollPositionsFor: function() 297 elementsToRestoreScrollPositionsFor: function()
344 { 298 {
345 if (!this._dataGrid) // Not initialized yet. 299 if (!this._dataGrid) // Not initialized yet.
346 return []; 300 return [];
347 return [this._dataGrid.scrollContainer]; 301 return [this._dataGrid.scrollContainer];
348 }, 302 },
349 303
350 _createTimelineGrid: function()
351 {
352 this._timelineGrid = new WebInspector.TimelineGrid();
353 this._timelineGrid.element.classList.add("network-timeline-grid");
354 this._dataGrid.element.appendChild(this._timelineGrid.element);
355 },
356
357 _createTable: function() 304 _createTable: function()
358 { 305 {
359 var columns = []; 306 this._dataGrid = this._columns.createGrid(this._timeCalculator, this._du rationCalculator);
360 columns.push({
361 id: "name",
362 titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Na me"), WebInspector.UIString("Path")),
363 title: WebInspector.NetworkLogView._columnTitles["name"],
364 weight: 20
365 });
366
367 columns.push({
368 id: "method",
369 title: WebInspector.NetworkLogView._columnTitles["method"],
370 weight: 6
371 });
372
373 columns.push({
374 id: "status",
375 titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("St atus"), WebInspector.UIString("Text")),
376 title: WebInspector.NetworkLogView._columnTitles["status"],
377 weight: 6
378 });
379
380 columns.push({
381 id: "protocol",
382 title: WebInspector.NetworkLogView._columnTitles["protocol"],
383 weight: 6
384 });
385
386 columns.push({
387 id: "scheme",
388 title: WebInspector.NetworkLogView._columnTitles["scheme"],
389 weight: 6
390 });
391
392 columns.push({
393 id: "domain",
394 title: WebInspector.NetworkLogView._columnTitles["domain"],
395 weight: 6
396 });
397
398 columns.push({
399 id: "remoteAddress",
400 title: WebInspector.NetworkLogView._columnTitles["remoteAddress"],
401 weight: 10,
402 align: WebInspector.DataGrid.Align.Right
403 });
404
405 columns.push({
406 id: "type",
407 title: WebInspector.NetworkLogView._columnTitles["type"],
408 weight: 6
409 });
410
411 columns.push({
412 id: "initiator",
413 title: WebInspector.NetworkLogView._columnTitles["initiator"],
414 weight: 10
415 });
416
417 columns.push({
418 id: "cookies",
419 title: WebInspector.NetworkLogView._columnTitles["cookies"],
420 weight: 6,
421 align: WebInspector.DataGrid.Align.Right
422 });
423
424 columns.push({
425 id: "setCookies",
426 title: WebInspector.NetworkLogView._columnTitles["setCookies"],
427 weight: 6,
428 align: WebInspector.DataGrid.Align.Right
429 });
430
431 columns.push({
432 id: "size",
433 titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Si ze"), WebInspector.UIString("Content")),
434 title: WebInspector.NetworkLogView._columnTitles["size"],
435 weight: 6,
436 align: WebInspector.DataGrid.Align.Right
437 });
438
439 columns.push({
440 id: "time",
441 titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Ti me"), WebInspector.UIString("Latency")),
442 title: WebInspector.NetworkLogView._columnTitles["time"],
443 weight: 6,
444 align: WebInspector.DataGrid.Align.Right
445 });
446
447 columns.push({
448 id: "priority",
449 title: WebInspector.NetworkLogView._columnTitles["priority"],
450 weight: 6
451 });
452
453 columns.push({
454 id: "connectionId",
455 title: WebInspector.NetworkLogView._columnTitles["connectionId"],
456 weight: 6
457 });
458
459 var responseHeaderColumns = WebInspector.NetworkLogView._responseHeaderC olumns;
460 for (var i = 0; i < responseHeaderColumns.length; ++i) {
461 var headerName = responseHeaderColumns[i];
462 var descriptor = {
463 id: headerName,
464 title: WebInspector.NetworkLogView._columnTitles[headerName],
465 weight: 6
466 };
467 if (headerName === "Content-Length")
468 descriptor.align = WebInspector.DataGrid.Align.Right;
469 columns.push(descriptor);
470 }
471
472 columns.push({
473 id: "timeline",
474 title: WebInspector.NetworkLogView._columnTitles["timeline"],
475 sortable: false,
476 weight: 40,
477 sort: WebInspector.DataGrid.Order.Ascending
478 });
479
480 for (var column of columns) {
481 column.sortable = column.id !== "timeline";
482 column.nonSelectable = column.id !== "name";
483 }
484
485 this._dataGrid = new WebInspector.SortableDataGrid(columns);
486 this._dataGrid.setStickToBottom(true); 307 this._dataGrid.setStickToBottom(true);
487 this._updateColumns();
488 this._dataGrid.setName("networkLog"); 308 this._dataGrid.setName("networkLog");
489 this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last); 309 this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last);
490 this._dataGrid.element.classList.add("network-log-grid"); 310 this._dataGrid.element.classList.add("network-log-grid");
491 this._dataGrid.element.addEventListener("contextmenu", this._contextMenu .bind(this), true); 311 this._dataGrid.element.addEventListener("contextmenu", this._contextMenu .bind(this), true);
492 this._dataGrid.element.addEventListener("mousedown", this._dataGridMouse Down.bind(this), true); 312 this._dataGrid.element.addEventListener("mousedown", this._dataGridMouse Down.bind(this), true);
493 this._dataGrid.element.addEventListener("mousemove", this._dataGridMouse Move.bind(this), true); 313 this._dataGrid.element.addEventListener("mousemove", this._dataGridMouse Move.bind(this), true);
494 this._dataGrid.element.addEventListener("mouseleave", this._highlightIni tiatorChain.bind(this, null), true); 314 this._dataGrid.element.addEventListener("mouseleave", this._highlightIni tiatorChain.bind(this, null), true);
495 this._dataGrid.asWidget().show(this.element);
496
497 // Event listeners need to be added _after_ we attach to the document, s o that owner document is properly update.
498 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChan ged, this._sortItems, this);
499 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.ColumnsResi zed, this._updateDividersIfNeeded, this);
500
501 this._patchTimelineHeader();
502 this._dataGrid.sortNodes(this._sortingFunctions.startTime, false);
503 }, 315 },
504 316
505 /** 317 /**
506 * @param {!Event} event 318 * @param {!Event} event
507 */ 319 */
508 _dataGridMouseDown: function(event) 320 _dataGridMouseDown: function(event)
509 { 321 {
510 if ((!this._dataGrid.selectedNode && event.button) || event.target.enclo singNodeOrSelfWithNodeName("a")) 322 if ((!this._dataGrid.selectedNode && event.button) || event.target.enclo singNodeOrSelfWithNodeName("a"))
511 event.consume(); 323 event.consume();
512 }, 324 },
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 } 361 }
550 362
551 for (var node of this._nodesByRequestId.values()) { 363 for (var node of this._nodesByRequestId.values()) {
552 if (!node.dataGrid) 364 if (!node.dataGrid)
553 continue; 365 continue;
554 node.element().classList.toggle("network-node-on-initiator-path", no de.request() !== request && initiators.has(node.request())); 366 node.element().classList.toggle("network-node-on-initiator-path", no de.request() !== request && initiators.has(node.request()));
555 node.element().classList.toggle("network-node-on-initiated-path", no de.request() !== request && initiated.has(node.request())); 367 node.element().classList.toggle("network-node-on-initiated-path", no de.request() !== request && initiated.has(node.request()));
556 } 368 }
557 }, 369 },
558 370
559 /**
560 * @param {string} title
561 * @param {string} subtitle
562 * @return {!DocumentFragment}
563 */
564 _makeHeaderFragment: function(title, subtitle)
565 {
566 var fragment = createDocumentFragment();
567 fragment.createTextChild(title);
568 var subtitleDiv = fragment.createChild("div", "network-header-subtitle") ;
569 subtitleDiv.createTextChild(subtitle);
570 return fragment;
571 },
572
573 _patchTimelineHeader: function()
574 {
575 var timelineSorting = createElement("select");
576
577 var option = createElement("option");
578 option.value = "startTime";
579 option.label = WebInspector.UIString("Timeline");
580 option.disabled = true;
581 timelineSorting.appendChild(option);
582
583 option = createElement("option");
584 option.value = "startTime";
585 option.label = WebInspector.UIString("Timeline \u2013 Start Time");
586 option.sortOrder = WebInspector.DataGrid.Order.Ascending;
587 timelineSorting.appendChild(option);
588
589 option = createElement("option");
590 option.value = "responseTime";
591 option.label = WebInspector.UIString("Timeline \u2013 Response Time");
592 option.sortOrder = WebInspector.DataGrid.Order.Ascending;
593 timelineSorting.appendChild(option);
594
595 option = createElement("option");
596 option.value = "endTime";
597 option.label = WebInspector.UIString("Timeline \u2013 End Time");
598 option.sortOrder = WebInspector.DataGrid.Order.Ascending;
599 timelineSorting.appendChild(option);
600
601 option = createElement("option");
602 option.value = "duration";
603 option.label = WebInspector.UIString("Timeline \u2013 Total Duration");
604 option.sortOrder = WebInspector.DataGrid.Order.Descending;
605 timelineSorting.appendChild(option);
606
607 option = createElement("option");
608 option.value = "latency";
609 option.label = WebInspector.UIString("Timeline \u2013 Latency");
610 option.sortOrder = WebInspector.DataGrid.Order.Descending;
611 timelineSorting.appendChild(option);
612
613 var header = this._dataGrid.headerTableHeader("timeline");
614 header.replaceChild(timelineSorting, header.firstChild);
615 header.createChild("div", "sort-order-icon-container").createChild("div" , "sort-order-icon");
616
617 timelineSorting.selectedIndex = 1;
618 timelineSorting.addEventListener("click", function(event) { event.consum e(); }, false);
619 timelineSorting.addEventListener("change", this._sortByTimeline.bind(thi s), false);
620 this._timelineSortSelector = timelineSorting;
621 },
622
623 _createSortingFunctions: function()
624 {
625 this._sortingFunctions = {};
626 this._sortingFunctions.name = WebInspector.NetworkDataGridNode.NameCompa rator;
627 this._sortingFunctions.method = WebInspector.NetworkDataGridNode.Request PropertyComparator.bind(null, "requestMethod");
628 this._sortingFunctions.status = WebInspector.NetworkDataGridNode.Request PropertyComparator.bind(null, "statusCode");
629 this._sortingFunctions.protocol = WebInspector.NetworkDataGridNode.Reque stPropertyComparator.bind(null, "protocol");
630 this._sortingFunctions.scheme = WebInspector.NetworkDataGridNode.Request PropertyComparator.bind(null, "scheme");
631 this._sortingFunctions.domain = WebInspector.NetworkDataGridNode.Request PropertyComparator.bind(null, "domain");
632 this._sortingFunctions.remoteAddress = WebInspector.NetworkDataGridNode. RemoteAddressComparator;
633 this._sortingFunctions.type = WebInspector.NetworkDataGridNode.TypeCompa rator;
634 this._sortingFunctions.initiator = WebInspector.NetworkDataGridNode.Init iatorComparator;
635 this._sortingFunctions.cookies = WebInspector.NetworkDataGridNode.Reques tCookiesCountComparator;
636 this._sortingFunctions.setCookies = WebInspector.NetworkDataGridNode.Res ponseCookiesCountComparator;
637 this._sortingFunctions.size = WebInspector.NetworkDataGridNode.SizeCompa rator;
638 this._sortingFunctions.time = WebInspector.NetworkDataGridNode.RequestPr opertyComparator.bind(null, "duration");
639 this._sortingFunctions.connectionId = WebInspector.NetworkDataGridNode.R equestPropertyComparator.bind(null, "connectionId");
640 this._sortingFunctions.priority = WebInspector.NetworkDataGridNode.Initi alPriorityComparator;
641 this._sortingFunctions.timeline = WebInspector.NetworkDataGridNode.Reque stPropertyComparator.bind(null, "startTime");
642 this._sortingFunctions.startTime = WebInspector.NetworkDataGridNode.Requ estPropertyComparator.bind(null, "startTime");
643 this._sortingFunctions.endTime = WebInspector.NetworkDataGridNode.Reques tPropertyComparator.bind(null, "endTime");
644 this._sortingFunctions.responseTime = WebInspector.NetworkDataGridNode.R equestPropertyComparator.bind(null, "responseReceivedTime");
645 this._sortingFunctions.duration = WebInspector.NetworkDataGridNode.Reque stPropertyComparator.bind(null, "duration");
646 this._sortingFunctions.latency = WebInspector.NetworkDataGridNode.Reques tPropertyComparator.bind(null, "latency");
647
648 this._sortingFunctions["Cache-Control"] = WebInspector.NetworkDataGridNo de.ResponseHeaderStringComparator.bind(null, "Cache-Control");
649 this._sortingFunctions["Connection"] = WebInspector.NetworkDataGridNode. ResponseHeaderStringComparator.bind(null, "Connection");
650 this._sortingFunctions["Content-Encoding"] = WebInspector.NetworkDataGri dNode.ResponseHeaderStringComparator.bind(null, "Content-Encoding");
651 this._sortingFunctions["Content-Length"] = WebInspector.NetworkDataGridN ode.ResponseHeaderNumberComparator.bind(null, "Content-Length");
652 this._sortingFunctions["ETag"] = WebInspector.NetworkDataGridNode.Respon seHeaderStringComparator.bind(null, "ETag");
653 this._sortingFunctions["Keep-Alive"] = WebInspector.NetworkDataGridNode. ResponseHeaderStringComparator.bind(null, "Keep-Alive");
654 this._sortingFunctions["Last-Modified"] = WebInspector.NetworkDataGridNo de.ResponseHeaderDateComparator.bind(null, "Last-Modified");
655 this._sortingFunctions["Server"] = WebInspector.NetworkDataGridNode.Resp onseHeaderStringComparator.bind(null, "Server");
656 this._sortingFunctions["Vary"] = WebInspector.NetworkDataGridNode.Respon seHeaderStringComparator.bind(null, "Vary");
657 },
658
659 _createCalculators: function()
660 {
661 /** @type {!WebInspector.NetworkTransferTimeCalculator} */
662 this._timeCalculator = new WebInspector.NetworkTransferTimeCalculator();
663 /** @type {!WebInspector.NetworkTransferDurationCalculator} */
664 this._durationCalculator = new WebInspector.NetworkTransferDurationCalcu lator();
665
666 /** @type {!Object.<string, !WebInspector.NetworkTimeCalculator>} */
667 this._calculators = {};
668 this._calculators.timeline = this._timeCalculator;
669 this._calculators.startTime = this._timeCalculator;
670 this._calculators.endTime = this._timeCalculator;
671 this._calculators.responseTime = this._timeCalculator;
672 this._calculators.duration = this._durationCalculator;
673 this._calculators.latency = this._durationCalculator;
674
675 this._calculator = this._timeCalculator;
676 },
677
678 _sortItems: function()
679 {
680 this._removeAllNodeHighlights();
681 var columnIdentifier = this._dataGrid.sortColumnIdentifier();
682 if (columnIdentifier === "timeline") {
683 this._sortByTimeline();
684 return;
685 }
686 var sortingFunction = this._sortingFunctions[columnIdentifier];
687 if (!sortingFunction)
688 return;
689
690 this._dataGrid.sortNodes(sortingFunction, !this._dataGrid.isSortOrderAsc ending());
691 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM atchIndex(this._currentMatchedRequestNode), false);
692 this._timelineSortSelector.selectedIndex = 0;
693 },
694
695 _sortByTimeline: function()
696 {
697 this._removeAllNodeHighlights();
698 var selectedIndex = this._timelineSortSelector.selectedIndex;
699 if (!selectedIndex)
700 selectedIndex = 1; // Sort by start time by default.
701 var selectedOption = this._timelineSortSelector[selectedIndex];
702 var value = selectedOption.value;
703
704 this._setCalculator(this._calculators[value]);
705 var sortingFunction = this._sortingFunctions[value];
706 this._dataGrid.sortNodes(sortingFunction);
707 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM atchIndex(this._currentMatchedRequestNode), false);
708 this._dataGrid.markColumnAsSortedBy("timeline", selectedOption.sortOrder );
709 },
710
711 _updateSummaryBar: function() 371 _updateSummaryBar: function()
712 { 372 {
713 var requestsNumber = this._nodesByRequestId.size; 373 var requestsNumber = this._nodesByRequestId.size;
714 374
715 if (!requestsNumber) { 375 if (!requestsNumber) {
716 this._showRecordingHint(); 376 this._showRecordingHint();
717 return; 377 return;
718 } 378 }
719 this._hideRecordingHint(); 379 this._hideRecordingHint();
720 380
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 } 433 }
774 if (this._mainRequestLoadTime !== -1) { 434 if (this._mainRequestLoadTime !== -1) {
775 appendChunk(separator); 435 appendChunk(separator);
776 var loadText = WebInspector.UIString("Load: %s", Number.secondsT oString(this._mainRequestLoadTime - baseTime)); 436 var loadText = WebInspector.UIString("Load: %s", Number.secondsT oString(this._mainRequestLoadTime - baseTime));
777 appendChunk(loadText).classList.add("summary-red"); 437 appendChunk(loadText).classList.add("summary-red");
778 } 438 }
779 } 439 }
780 summaryBar.title = text; 440 summaryBar.title = text;
781 }, 441 },
782 442
783 _scheduleRefresh: function() 443 scheduleRefresh: function()
784 { 444 {
785 if (this._needsRefresh) 445 if (this._needsRefresh)
786 return; 446 return;
787 447
788 this._needsRefresh = true; 448 this._needsRefresh = true;
789 449
790 if (this.isShowing() && !this._refreshTimeout) 450 if (this.isShowing() && !this._refreshTimeout)
791 this._refreshTimeout = setTimeout(this.refresh.bind(this), WebInspec tor.NetworkLogView._defaultRefreshDelay); 451 this._refreshTimeout = setTimeout(this.refresh.bind(this), WebInspec tor.NetworkLogView._defaultRefreshDelay);
792 }, 452 },
793 453
794 _updateDividersIfNeeded: function()
795 {
796 if (!this.isShowing()) {
797 this._scheduleRefresh();
798 return;
799 }
800
801 var timelineOffset = this._dataGrid.columnOffset("timeline");
802 // Position timline grid location.
803 if (timelineOffset)
804 this._timelineGrid.element.style.left = timelineOffset + "px";
805
806 var calculator = this.calculator();
807 calculator.setDisplayWindow(this._timelineGrid.dividersElement.clientWid th);
808 this._timelineGrid.updateDividers(calculator, 75);
809
810 if (calculator.startAtZero) {
811 // If our current sorting method starts at zero, that means it shows all
812 // requests starting at the same point, and so onLoad event and DOMC ontent
813 // event lines really wouldn't make much sense here, so don't render them.
814 return;
815 }
816
817 this._updateEventDividers();
818 },
819
820 /** 454 /**
821 * @param {!Array<number>} times 455 * @param {!Array<number>} times
822 */ 456 */
823 addFilmStripFrames: function(times) 457 addFilmStripFrames: function(times)
824 { 458 {
825 this._addEventDividers(times, "network-frame-divider"); 459 this._columns.addEventDividers(times, "network-frame-divider");
826 }, 460 },
827 461
828 /** 462 /**
829 * @param {number} time 463 * @param {number} time
830 */ 464 */
831 selectFilmStripFrame: function(time) 465 selectFilmStripFrame: function(time)
832 { 466 {
833 for (var divider of this._eventDividers) 467 for (var divider of this._eventDividers)
834 divider.element.classList.toggle("network-frame-divider-selected", d ivider.time === time); 468 divider.element.classList.toggle("network-frame-divider-selected", d ivider.time === time);
835 }, 469 },
836 470
837 clearFilmStripFrame: function() 471 clearFilmStripFrame: function()
838 { 472 {
839 for (var divider of this._eventDividers) 473 for (var divider of this._eventDividers)
840 divider.element.classList.toggle("network-frame-divider-selected", f alse); 474 divider.element.classList.toggle("network-frame-divider-selected", f alse);
841 }, 475 },
842 476
843 /**
844 * @param {!Array<number>} times
845 * @param {string} className
846 */
847 _addEventDividers: function(times, className)
848 {
849 for (var i = 0; i < times.length; ++i) {
850 var element = createElementWithClass("div", "network-event-divider " + className);
851 this._timelineGrid.addEventDivider(element);
852 this._eventDividers.push({time: times[i], element: element});
853 }
854 // Update event dividers immediately
855 this._updateEventDividers();
856 // Schedule refresh in case dividers change the calculator span.
857 this._scheduleRefresh();
858 },
859
860 _updateEventDividers: function()
861 {
862 var calculator = this.calculator();
863 for (var divider of this._eventDividers) {
864 var timePercent = calculator.computePercentageFromEventTime(divider. time);
865 divider.element.classList.toggle("invisible", timePercent < 0);
866 divider.element.style.left = timePercent + "%";
867 }
868 },
869
870 _refreshIfNeeded: function() 477 _refreshIfNeeded: function()
871 { 478 {
872 if (this._needsRefresh) 479 if (this._needsRefresh)
873 this.refresh(); 480 this.refresh();
874 }, 481 },
875 482
876 _invalidateAllItems: function() 483 _invalidateAllItems: function()
877 { 484 {
878 var requestIds = this._nodesByRequestId.keysArray(); 485 var requestIds = this._nodesByRequestId.keysArray();
879 for (var i = 0; i < requestIds.length; ++i) 486 for (var i = 0; i < requestIds.length; ++i)
(...skipping 13 matching lines...) Expand all
893 * @return {!WebInspector.NetworkTimeCalculator} 500 * @return {!WebInspector.NetworkTimeCalculator}
894 */ 501 */
895 calculator: function() 502 calculator: function()
896 { 503 {
897 return this._calculator; 504 return this._calculator;
898 }, 505 },
899 506
900 /** 507 /**
901 * @param {!WebInspector.NetworkTimeCalculator} x 508 * @param {!WebInspector.NetworkTimeCalculator} x
902 */ 509 */
903 _setCalculator: function(x) 510 setCalculator: function(x)
904 { 511 {
905 if (!x || this._calculator === x) 512 if (!x || this._calculator === x)
906 return; 513 return;
907 514
908 this._calculator = x; 515 this._calculator = x;
909 this._calculator.reset(); 516 this._calculator.reset();
910 517
911 if (this._calculator.startAtZero) 518 if (this._calculator.startAtZero)
912 this._timelineGrid.hideEventDividers(); 519 this._columns.hideEventDividers();
913 else 520 else
914 this._timelineGrid.showEventDividers(); 521 this._columns.showEventDividers();
915 522
916 this._invalidateAllItems(); 523 this._invalidateAllItems();
917 }, 524 },
918 525
919 /** 526 /**
920 * @param {!WebInspector.Event} event 527 * @param {!WebInspector.Event} event
921 */ 528 */
922 _loadEventFired: function(event) 529 _loadEventFired: function(event)
923 { 530 {
924 if (!this._recording) 531 if (!this._recording)
925 return; 532 return;
926 533
927 var data = /** @type {number} */ (event.data); 534 var data = /** @type {number} */ (event.data);
928 if (data) { 535 if (data) {
929 this._mainRequestLoadTime = data; 536 this._mainRequestLoadTime = data;
930 this._addEventDividers([data], "network-red-divider"); 537 this._columns.addEventDividers([data], "network-red-divider");
931 } 538 }
932 }, 539 },
933 540
934 /** 541 /**
935 * @param {!WebInspector.Event} event 542 * @param {!WebInspector.Event} event
936 */ 543 */
937 _domContentLoadedEventFired: function(event) 544 _domContentLoadedEventFired: function(event)
938 { 545 {
939 if (!this._recording) 546 if (!this._recording)
940 return; 547 return;
941 var data = /** @type {number} */ (event.data); 548 var data = /** @type {number} */ (event.data);
942 if (data) { 549 if (data) {
943 this._mainRequestDOMContentLoadedTime = data; 550 this._mainRequestDOMContentLoadedTime = data;
944 this._addEventDividers([data], "network-blue-divider"); 551 this._columns.addEventDividers([data], "network-blue-divider");
945 } 552 }
946 }, 553 },
947 554
948 wasShown: function() 555 wasShown: function()
949 { 556 {
950 this._refreshIfNeeded(); 557 this._refreshIfNeeded();
951 }, 558 },
952 559
953 willHide: function() 560 willHide: function()
954 { 561 {
955 this._popoverHelper.hidePopover(); 562 this._columns.willHide();
956 }, 563 },
957 564
958 refresh: function() 565 refresh: function()
959 { 566 {
960 this._needsRefresh = false; 567 this._needsRefresh = false;
961 if (this._refreshTimeout) { 568 if (this._refreshTimeout) {
962 clearTimeout(this._refreshTimeout); 569 clearTimeout(this._refreshTimeout);
963 delete this._refreshTimeout; 570 delete this._refreshTimeout;
964 } 571 }
965 572
966 this._removeAllNodeHighlights(); 573 this.removeAllNodeHighlights();
967 574
968 var oldBoundary = this.calculator().boundary(); 575 var oldBoundary = this.calculator().boundary();
969 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadT ime); 576 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadT ime);
970 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestL oadTime); 577 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestL oadTime);
971 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMCo ntentLoadedTime); 578 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMCo ntentLoadedTime);
972 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestD OMContentLoadedTime); 579 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestD OMContentLoadedTime);
973 580
974 var dataGrid = this._dataGrid; 581 var dataGrid = this._dataGrid;
975 var rootNode = dataGrid.rootNode(); 582 var rootNode = dataGrid.rootNode();
976 /** @type {!Array<!WebInspector.NetworkDataGridNode> } */ 583 /** @type {!Array<!WebInspector.NetworkDataGridNode> } */
(...skipping 28 matching lines...) Expand all
1005 node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = thi s._matchRequest(request); 612 node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = thi s._matchRequest(request);
1006 } 613 }
1007 614
1008 for (var node of nodesToRefresh) 615 for (var node of nodesToRefresh)
1009 node.refresh(); 616 node.refresh();
1010 617
1011 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM atchIndex(this._currentMatchedRequestNode), false); 618 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM atchIndex(this._currentMatchedRequestNode), false);
1012 619
1013 if (!this.calculator().boundary().equals(oldBoundary)) { 620 if (!this.calculator().boundary().equals(oldBoundary)) {
1014 // The boundaries changed, so all item graphs are stale. 621 // The boundaries changed, so all item graphs are stale.
1015 this._updateDividersIfNeeded(); 622 this._columns.updateDividersIfNeeded();
1016 var nodes = this._nodesByRequestId.valuesArray(); 623 var nodes = this._nodesByRequestId.valuesArray();
1017 for (var i = 0; i < nodes.length; ++i) 624 for (var i = 0; i < nodes.length; ++i)
1018 nodes[i].refreshGraph(); 625 nodes[i].refreshGraph();
1019 } 626 }
1020 627
1021 this._staleRequestIds = {}; 628 this._staleRequestIds = {};
1022 this._updateSummaryBar(); 629 this._updateSummaryBar();
1023 }, 630 },
1024 631
1025 reset: function() 632 reset: function()
1026 { 633 {
1027 this._requestWithHighlightedInitiators = null; 634 this._requestWithHighlightedInitiators = null;
1028 this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.Req uestSelected, null); 635 this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.Req uestSelected, null);
1029 636
1030 this._clearSearchMatchedList(); 637 this._clearSearchMatchedList();
1031 if (this._popoverHelper) 638
1032 this._popoverHelper.hidePopover(); 639 this._columns.reset();
1033 640
1034 this._timeFilter = null; 641 this._timeFilter = null;
1035 this._calculator.reset(); 642 this._calculator.reset();
1036 643
1037 this._timeCalculator.setWindow(null); 644 this._timeCalculator.setWindow(null);
1038 645
1039 var nodes = this._nodesByRequestId.valuesArray(); 646 var nodes = this._nodesByRequestId.valuesArray();
1040 for (var i = 0; i < nodes.length; ++i) 647 for (var i = 0; i < nodes.length; ++i)
1041 nodes[i].dispose(); 648 nodes[i].dispose();
1042 649
1043 this._nodesByRequestId.clear(); 650 this._nodesByRequestId.clear();
1044 this._staleRequestIds = {}; 651 this._staleRequestIds = {};
1045 this._resetSuggestionBuilder(); 652 this._resetSuggestionBuilder();
1046 653
1047 this._mainRequestLoadTime = -1; 654 this._mainRequestLoadTime = -1;
1048 this._mainRequestDOMContentLoadedTime = -1; 655 this._mainRequestDOMContentLoadedTime = -1;
1049 this._eventDividers = []; 656 this._eventDividers = [];
1050 this._timelineGrid.removeEventDividers();
1051 657
1052 if (this._dataGrid) { 658 if (this._dataGrid) {
1053 this._dataGrid.rootNode().removeChildren(); 659 this._dataGrid.rootNode().removeChildren();
1054 this._updateDividersIfNeeded();
1055 this._updateSummaryBar(); 660 this._updateSummaryBar();
1056 } 661 }
1057 }, 662 },
1058 663
1059 /** 664 /**
1060 * @param {string} filterString 665 * @param {string} filterString
1061 */ 666 */
1062 setTextFilterValue: function(filterString) 667 setTextFilterValue: function(filterString)
1063 { 668 {
1064 this._textFilterUI.setValue(filterString); 669 this._textFilterUI.setValue(filterString);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 var cookies = request.responseCookies; 750 var cookies = request.responseCookies;
1146 for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) { 751 for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
1147 var cookie = cookies[i]; 752 var cookie = cookies[i];
1148 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterTy pe.SetCookieDomain, cookie.domain()); 753 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterTy pe.SetCookieDomain, cookie.domain());
1149 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterTy pe.SetCookieName, cookie.name()); 754 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterTy pe.SetCookieName, cookie.name());
1150 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterTy pe.SetCookieValue, cookie.value()); 755 this._suggestionBuilder.addItem(WebInspector.NetworkLogView.FilterTy pe.SetCookieValue, cookie.value());
1151 } 756 }
1152 757
1153 this._staleRequestIds[request.requestId] = true; 758 this._staleRequestIds[request.requestId] = true;
1154 this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.Upd ateRequest, request); 759 this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.Upd ateRequest, request);
1155 this._scheduleRefresh(); 760 this.scheduleRefresh();
1156 }, 761 },
1157 762
1158 /** 763 /**
1159 * @param {!WebInspector.Event} event 764 * @param {!WebInspector.Event} event
1160 */ 765 */
1161 _mainFrameNavigated: function(event) 766 _mainFrameNavigated: function(event)
1162 { 767 {
1163 if (!this._recording) 768 if (!this._recording)
1164 return; 769 return;
1165 770
(...skipping 23 matching lines...) Expand all
1189 break; 794 break;
1190 } 795 }
1191 } 796 }
1192 }, 797 },
1193 798
1194 /** 799 /**
1195 * @param {boolean} gridMode 800 * @param {boolean} gridMode
1196 */ 801 */
1197 switchViewMode: function(gridMode) 802 switchViewMode: function(gridMode)
1198 { 803 {
1199 if (this._gridMode === gridMode) 804 this._columns.switchViewMode(gridMode);
1200 return;
1201 this._gridMode = gridMode;
1202
1203 if (gridMode) {
1204 if (this._dataGrid.selectedNode)
1205 this._dataGrid.selectedNode.selected = false;
1206 } else {
1207 this._removeAllNodeHighlights();
1208 this._popoverHelper.hidePopover();
1209 }
1210
1211 this.element.classList.toggle("brief-mode", !gridMode);
1212 this._updateColumns();
1213 }, 805 },
1214 806
1215 /** 807 /**
1216 * @return {number} 808 * @return {number}
1217 */ 809 */
1218 rowHeight: function() 810 rowHeight: function()
1219 { 811 {
1220 return this._rowHeight; 812 return this._rowHeight;
1221 }, 813 },
1222 814
1223 _updateRowsSize: function() 815 _updateRowsSize: function()
1224 { 816 {
1225 var largeRows = !!this._networkLogLargeRowsSetting.get(); 817 var largeRows = !!this._networkLogLargeRowsSetting.get();
1226 this._rowHeight = largeRows ? 41 : 21; 818 this._rowHeight = largeRows ? 41 : 21;
1227 this._dataGrid.element.classList.toggle("small", !largeRows); 819 this._dataGrid.element.classList.toggle("small", !largeRows);
1228 this._timelineGrid.element.classList.toggle("small", !largeRows);
1229 this._dataGrid.scheduleUpdate(); 820 this._dataGrid.scheduleUpdate();
1230 }, 821 },
1231 822
1232 /** 823 /**
1233 * @param {!Element} element
1234 * @param {!Event} event
1235 * @return {!Element|!AnchorBox|undefined}
1236 */
1237 _getPopoverAnchor: function(element, event)
1238 {
1239 if (!this._gridMode)
1240 return;
1241 var anchor = element.enclosingNodeOrSelfWithClass("network-graph-bar") | | element.enclosingNodeOrSelfWithClass("network-graph-label");
1242 if (anchor && anchor.parentElement.request && anchor.parentElement.reque st.timing)
1243 return anchor;
1244 anchor = element.enclosingNodeOrSelfWithClass("network-script-initiated" );
1245 if (anchor && anchor.request) {
1246 var initiator = /** @type {!WebInspector.NetworkRequest} */ (anchor. request).initiator();
1247 if (initiator && initiator.stack)
1248 return anchor;
1249 }
1250 },
1251
1252 /**
1253 * @param {!Element} anchor
1254 * @param {!WebInspector.Popover} popover
1255 */
1256 _showPopover: function(anchor, popover)
1257 {
1258 var content;
1259 if (anchor.classList.contains("network-script-initiated")) {
1260 var request = /** @type {!WebInspector.NetworkRequest} */ (anchor.re quest);
1261 var initiator = /** @type {!NetworkAgent.Initiator} */ (request.init iator());
1262 content = WebInspector.DOMPresentationUtils.buildStackTracePreviewCo ntents(request.target(), this._popupLinkifier, initiator.stack);
1263 popover.setCanShrink(true);
1264 } else {
1265 content = WebInspector.RequestTimingView.createTimingTable(anchor.pa rentElement.request, this._timeCalculator.minimumBoundary());
1266 popover.setCanShrink(false);
1267 }
1268 popover.showForAnchor(content, anchor);
1269 },
1270
1271 _onHidePopover: function()
1272 {
1273 this._popupLinkifier.reset();
1274 },
1275
1276 _updateColumns: function()
1277 {
1278 if (!this._dataGrid)
1279 return;
1280 var gridMode = this._gridMode;
1281 var visibleColumns = {"name": true};
1282 if (gridMode)
1283 visibleColumns["timeline"] = true;
1284 if (gridMode) {
1285 var columnsVisibility = this._columnsVisibilitySetting.get();
1286 for (var columnIdentifier in columnsVisibility)
1287 visibleColumns[columnIdentifier] = columnsVisibility[columnIdent ifier];
1288 }
1289
1290 this._dataGrid.setColumnsVisiblity(visibleColumns);
1291 },
1292
1293 /**
1294 * @param {string} columnIdentifier
1295 */
1296 _toggleColumnVisibility: function(columnIdentifier)
1297 {
1298 var columnsVisibility = this._columnsVisibilitySetting.get();
1299 columnsVisibility[columnIdentifier] = !columnsVisibility[columnIdentifie r];
1300 this._columnsVisibilitySetting.set(columnsVisibility);
1301
1302 this._updateColumns();
1303 },
1304
1305 /**
1306 * @return {!Array.<string>}
1307 */
1308 _getConfigurableColumnIDs: function()
1309 {
1310 if (this._configurableColumnIDs)
1311 return this._configurableColumnIDs;
1312
1313 var columnTitles = WebInspector.NetworkLogView._columnTitles;
1314 function compare(id1, id2)
1315 {
1316 return columnTitles[id1].compareTo(columnTitles[id2]);
1317 }
1318
1319 var columnIDs = Object.keys(this._columnsVisibilitySetting.get());
1320 this._configurableColumnIDs = columnIDs.sort(compare);
1321 return this._configurableColumnIDs;
1322 },
1323
1324 /**
1325 * @param {!Event} event 824 * @param {!Event} event
1326 */ 825 */
1327 _contextMenu: function(event) 826 _contextMenu: function(event)
1328 { 827 {
828 // TODO(allada) Fix datagrid's contextmenu so NetworkLogViewColumns can attach it's own contextmenu event
829 if (this._columns.contextMenu(event))
830 return;
1329 var contextMenu = new WebInspector.ContextMenu(event); 831 var contextMenu = new WebInspector.ContextMenu(event);
1330 832
1331 if (this._gridMode && event.target.isSelfOrDescendant(this._dataGrid.hea derTableBody)) {
1332 var columnsVisibility = this._columnsVisibilitySetting.get();
1333 var columnIDs = this._getConfigurableColumnIDs();
1334 var columnTitles = WebInspector.NetworkLogView._columnTitles;
1335 for (var i = 0; i < columnIDs.length; ++i) {
1336 var columnIdentifier = columnIDs[i];
1337 contextMenu.appendCheckboxItem(columnTitles[columnIdentifier], t his._toggleColumnVisibility.bind(this, columnIdentifier), !!columnsVisibility[co lumnIdentifier]);
1338 }
1339 contextMenu.show();
1340 return;
1341 }
1342
1343 var gridNode = this._dataGrid.dataGridNodeFromNode(event.target); 833 var gridNode = this._dataGrid.dataGridNodeFromNode(event.target);
1344 var request = gridNode && gridNode.request(); 834 var request = gridNode && gridNode.request();
1345 835
1346 /** 836 /**
1347 * @param {string} url 837 * @param {string} url
1348 */ 838 */
1349 function openResourceInNewTab(url) 839 function openResourceInNewTab(url)
1350 { 840 {
1351 InspectorFrontendHost.openInNewTab(url); 841 InspectorFrontendHost.openInNewTab(url);
1352 } 842 }
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 1000
1511 _clearSearchMatchedList: function() 1001 _clearSearchMatchedList: function()
1512 { 1002 {
1513 this._matchedRequestCount = -1; 1003 this._matchedRequestCount = -1;
1514 this._currentMatchedRequestNode = null; 1004 this._currentMatchedRequestNode = null;
1515 this._removeAllHighlights(); 1005 this._removeAllHighlights();
1516 }, 1006 },
1517 1007
1518 _removeAllHighlights: function() 1008 _removeAllHighlights: function()
1519 { 1009 {
1520 this._removeAllNodeHighlights(); 1010 this.removeAllNodeHighlights();
1521 for (var i = 0; i < this._highlightedSubstringChanges.length; ++i) 1011 for (var i = 0; i < this._highlightedSubstringChanges.length; ++i)
1522 WebInspector.revertDomChanges(this._highlightedSubstringChanges[i]); 1012 WebInspector.revertDomChanges(this._highlightedSubstringChanges[i]);
1523 this._highlightedSubstringChanges = []; 1013 this._highlightedSubstringChanges = [];
1524 }, 1014 },
1525 1015
1016 dataGridSorted: function()
1017 {
1018 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM atchIndex(this._currentMatchedRequestNode), false);
1019 },
1020
1526 /** 1021 /**
1527 * @param {number} n 1022 * @param {number} n
1528 * @param {boolean} reveal 1023 * @param {boolean} reveal
1529 */ 1024 */
1530 _highlightNthMatchedRequestForSearch: function(n, reveal) 1025 _highlightNthMatchedRequestForSearch: function(n, reveal)
1531 { 1026 {
1532 this._removeAllHighlights(); 1027 this._removeAllHighlights();
1533 1028
1534 /** @type {!Array.<!WebInspector.NetworkDataGridNode>} */ 1029 /** @type {!Array.<!WebInspector.NetworkDataGridNode>} */
1535 var nodes = this._dataGrid.rootNode().children; 1030 var nodes = this._dataGrid.rootNode().children;
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 delete this._searchRegex; 1317 delete this._searchRegex;
1823 this._clearSearchMatchedList(); 1318 this._clearSearchMatchedList();
1824 this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.Sea rchCountUpdated, 0); 1319 this.dispatchEventToListeners(WebInspector.NetworkLogView.EventTypes.Sea rchCountUpdated, 0);
1825 }, 1320 },
1826 1321
1827 /** 1322 /**
1828 * @param {!WebInspector.NetworkRequest} request 1323 * @param {!WebInspector.NetworkRequest} request
1829 */ 1324 */
1830 revealAndHighlightRequest: function(request) 1325 revealAndHighlightRequest: function(request)
1831 { 1326 {
1832 this._removeAllNodeHighlights(); 1327 this.removeAllNodeHighlights();
1833 1328
1834 var node = this._nodesByRequestId.get(request.requestId); 1329 var node = this._nodesByRequestId.get(request.requestId);
1835 if (node) { 1330 if (node) {
1836 node.reveal(); 1331 node.reveal();
1837 this._highlightNode(node); 1332 this._highlightNode(node);
1838 } 1333 }
1839 }, 1334 },
1840 1335
1841 _removeAllNodeHighlights: function() 1336 removeAllNodeHighlights: function()
1842 { 1337 {
1843 if (this._highlightedNode) { 1338 if (this._highlightedNode) {
1844 this._highlightedNode.element().classList.remove("highlighted-row"); 1339 this._highlightedNode.element().classList.remove("highlighted-row");
1845 delete this._highlightedNode; 1340 delete this._highlightedNode;
1846 } 1341 }
1847 }, 1342 },
1848 1343
1849 /** 1344 /**
1850 * @param {!WebInspector.NetworkDataGridNode} node 1345 * @param {!WebInspector.NetworkDataGridNode} node
1851 */ 1346 */
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
2193 return false; 1688 return false;
2194 return true; 1689 return true;
2195 } 1690 }
2196 1691
2197 WebInspector.NetworkLogView.EventTypes = { 1692 WebInspector.NetworkLogView.EventTypes = {
2198 RequestSelected: "RequestSelected", 1693 RequestSelected: "RequestSelected",
2199 SearchCountUpdated: "SearchCountUpdated", 1694 SearchCountUpdated: "SearchCountUpdated",
2200 SearchIndexUpdated: "SearchIndexUpdated", 1695 SearchIndexUpdated: "SearchIndexUpdated",
2201 UpdateRequest: "UpdateRequest" 1696 UpdateRequest: "UpdateRequest"
2202 }; 1697 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698