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

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

Issue 2914033002: [Devtools] NetworkLogView now uses NetworkLog as source of truth. (Closed)
Patch Set: fixes Created 3 years, 6 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 function updateRowHeight() { 64 function updateRowHeight() {
65 /** @type {number} */ 65 /** @type {number} */
66 this._rawRowHeight = !!this._networkLogLargeRowsSetting.get() ? 41 : 21; 66 this._rawRowHeight = !!this._networkLogLargeRowsSetting.get() ? 41 : 21;
67 this._updateRowHeight(); 67 this._updateRowHeight();
68 } 68 }
69 updateRowHeight.call(this); 69 updateRowHeight.call(this);
70 70
71 this._columns = new Network.NetworkLogViewColumns( 71 this._columns = new Network.NetworkLogViewColumns(
72 this, this._timeCalculator, this._durationCalculator, networkLogLargeRow sSetting); 72 this, this._timeCalculator, this._durationCalculator, networkLogLargeRow sSetting);
73 73
74 /** @type {!Map.<string, !Network.NetworkRequestNode>} */ 74 /** @type {!Set<!SDK.NetworkRequest>} */
75 this._nodesByRequestId = new Map(); 75 this._staleRequests = new Set();
76 /** @type {!Object.<string, boolean>} */ 76 /** @type {!Set<!SDK.NetworkRequest>} */
77 this._staleRequestIds = {}; 77 this._nodesToRemove = new Set();
78 /** @type {number} */ 78 /** @type {number} */
79 this._mainRequestLoadTime = -1; 79 this._mainRequestLoadTime = -1;
80 /** @type {number} */ 80 /** @type {number} */
81 this._mainRequestDOMContentLoadedTime = -1; 81 this._mainRequestDOMContentLoadedTime = -1;
82 this._matchedRequestCount = 0; 82 this._matchedRequestCount = 0;
83 this._highlightedSubstringChanges = []; 83 this._highlightedSubstringChanges = [];
84 84
85 /** @type {!Array.<!Network.NetworkLogView.Filter>} */ 85 /** @type {!Array.<!Network.NetworkLogView.Filter>} */
86 this._filters = []; 86 this._filters = [];
87 /** @type {?Network.NetworkLogView.Filter} */ 87 /** @type {?Network.NetworkLogView.Filter} */
(...skipping 19 matching lines...) Expand all
107 this._activeGroupLookup = null; 107 this._activeGroupLookup = null;
108 108
109 this._addFilters(); 109 this._addFilters();
110 this._resetSuggestionBuilder(); 110 this._resetSuggestionBuilder();
111 this._initializeView(); 111 this._initializeView();
112 112
113 Common.moduleSetting('networkColorCodeResourceTypes') 113 Common.moduleSetting('networkColorCodeResourceTypes')
114 .addChangeListener(this._invalidateAllItems.bind(this, false), this); 114 .addChangeListener(this._invalidateAllItems.bind(this, false), this);
115 115
116 SDK.targetManager.observeModels(SDK.NetworkManager, this); 116 SDK.targetManager.observeModels(SDK.NetworkManager, this);
117 SDK.targetManager.addModelListener( 117 NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestA dded, this._onRequestUpdated, this);
118 SDK.NetworkManager, SDK.NetworkManager.Events.RequestStarted, this._onRe questStarted, this); 118 NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestU pdated, this._onRequestUpdated, this);
119 SDK.targetManager.addModelListener( 119 NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.Reset, t his._reset, this);
120 SDK.NetworkManager, SDK.NetworkManager.Events.RequestUpdated, this._onRe questUpdated, this); 120 NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.Requests Removed, this._onRequestsRemoved, this);
121 SDK.targetManager.addModelListener(
122 SDK.NetworkManager, SDK.NetworkManager.Events.RequestFinished, this._onR equestUpdated, this);
123 121
124 this._updateGroupByFrame(); 122 this._updateGroupByFrame();
125 Common.moduleSetting('network.group-by-frame').addChangeListener(() => this. _updateGroupByFrame()); 123 Common.moduleSetting('network.group-by-frame').addChangeListener(() => this. _updateGroupByFrame());
126 } 124 }
127 125
128 _updateGroupByFrame() { 126 _updateGroupByFrame() {
129 var value = Common.moduleSetting('network.group-by-frame').get(); 127 var value = Common.moduleSetting('network.group-by-frame').get();
130 this._setGrouping(value ? 'Frame' : null); 128 this._setGrouping(value ? 'Frame' : null);
131 } 129 }
132 130
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 return false; 356 return false;
359 return true; 357 return true;
360 } 358 }
361 359
362 /** 360 /**
363 * @param {?string} groupKey 361 * @param {?string} groupKey
364 */ 362 */
365 _setGrouping(groupKey) { 363 _setGrouping(groupKey) {
366 var groupLookup = groupKey ? this._groupLookups.get(groupKey) || null : null ; 364 var groupLookup = groupKey ? this._groupLookups.get(groupKey) || null : null ;
367 this._activeGroupLookup = groupLookup; 365 this._activeGroupLookup = groupLookup;
368 if (groupLookup)
369 groupLookup.reset();
370 this._invalidateAllItems(); 366 this._invalidateAllItems();
371 } 367 }
372 368
373 _updateRowHeight() { 369 _updateRowHeight() {
374 this._rowHeight = Math.floor(this._rawRowHeight * window.devicePixelRatio) / window.devicePixelRatio; 370 this._rowHeight = Math.floor(this._rawRowHeight * window.devicePixelRatio) / window.devicePixelRatio;
375 } 371 }
376 372
377 /** 373 /**
378 * @param {!SDK.NetworkRequest} request 374 * @param {!SDK.NetworkRequest} request
379 * @return {?Network.NetworkRequestNode} 375 * @return {?Network.NetworkRequestNode}
380 */ 376 */
381 nodeForRequest(request) { 377 nodeForRequest(request) {
382 return this._nodesByRequestId.get(request.requestId()); 378 return request[Network.NetworkLogView._networkNodeSymbol] || null;
383 } 379 }
384 380
385 /** 381 /**
386 * @return {number} 382 * @return {number}
387 */ 383 */
388 headerHeight() { 384 headerHeight() {
389 return this._headerHeight; 385 return this._headerHeight;
390 } 386 }
391 387
392 /** 388 /**
393 * @param {boolean} recording 389 * @param {boolean} recording
394 */ 390 */
395 setRecording(recording) { 391 setRecording(recording) {
396 this._recording = recording; 392 this._recording = recording;
397 this._updateSummaryBar(); 393 this._updateSummaryBar();
398 } 394 }
399 395
400 /** 396 /**
401 * @override 397 * @override
402 * @param {!SDK.NetworkManager} networkManager 398 * @param {!SDK.NetworkManager} networkManager
403 */ 399 */
404 modelAdded(networkManager) { 400 modelAdded(networkManager) {
405 if (!networkManager.target().parentTarget()) { 401 // TODO(allada) Remove dependency on networkManager and instead use NetworkL og and PageLoad for needed data.
406 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeMode l); 402 if (networkManager.target().parentTarget())
407 if (resourceTreeModel) { 403 return;
408 resourceTreeModel.addEventListener( 404 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel) ;
409 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavi gated, this); 405 if (resourceTreeModel) {
410 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, th is._loadEventFired, this); 406 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this ._loadEventFired, this);
411 resourceTreeModel.addEventListener( 407 resourceTreeModel.addEventListener(
412 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoade dEventFired, this); 408 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedE ventFired, this);
413 }
414 } 409 }
415 NetworkLog.networkLog.requestsForManager(networkManager).forEach(this._appen dRequest.bind(this));
416 } 410 }
417 411
418 /** 412 /**
419 * @override 413 * @override
420 * @param {!SDK.NetworkManager} networkManager 414 * @param {!SDK.NetworkManager} networkManager
421 */ 415 */
422 modelRemoved(networkManager) { 416 modelRemoved(networkManager) {
423 if (!networkManager.target().parentTarget()) { 417 if (!networkManager.target().parentTarget()) {
424 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeMode l); 418 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeMode l);
425 if (resourceTreeModel) { 419 if (resourceTreeModel) {
426 resourceTreeModel.removeEventListener(
427 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavi gated, this);
428 resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this); 420 resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this);
429 resourceTreeModel.removeEventListener( 421 resourceTreeModel.removeEventListener(
430 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoade dEventFired, this); 422 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoade dEventFired, this);
431 } 423 }
432 } 424 }
433 } 425 }
434 426
435 /** 427 /**
436 * @param {number} start 428 * @param {number} start
437 * @param {number} end 429 * @param {number} end
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 reloadShortcutNode.textContent = UI.shortcutRegistry.shortcutDescriptorsForA ction('main.reload')[0].name; 505 reloadShortcutNode.textContent = UI.shortcutRegistry.shortcutDescriptorsForA ction('main.reload')[0].name;
514 506
515 if (this._recording) { 507 if (this._recording) {
516 var recordingText = hintText.createChild('span'); 508 var recordingText = hintText.createChild('span');
517 recordingText.textContent = Common.UIString('Recording network activity\u2 026'); 509 recordingText.textContent = Common.UIString('Recording network activity\u2 026');
518 hintText.createChild('br'); 510 hintText.createChild('br');
519 hintText.appendChild( 511 hintText.appendChild(
520 UI.formatLocalized('Perform a request or hit %s to record the reload.' , [reloadShortcutNode])); 512 UI.formatLocalized('Perform a request or hit %s to record the reload.' , [reloadShortcutNode]));
521 } else { 513 } else {
522 var recordNode = hintText.createChild('b'); 514 var recordNode = hintText.createChild('b');
523 recordNode.textContent = UI.shortcutRegistry.shortcutTitleForAction('netwo rk.toggle-recording'); 515 recordNode.textContent = UI.shortcutRegistry.shortcutTitleForAction('netwo rk_log.toggle-recording');
dgozman 2017/06/14 22:21:47 This does not work.
allada 2017/06/15 00:19:48 Done.
524 hintText.appendChild(UI.formatLocalized( 516 hintText.appendChild(UI.formatLocalized(
525 'Record (%s) or reload (%s) to display network activity.', [recordNode , reloadShortcutNode])); 517 'Record (%s) or reload (%s) to display network activity.', [recordNode , reloadShortcutNode]));
526 } 518 }
527 } 519 }
528 520
529 _hideRecordingHint() { 521 _hideRecordingHint() {
530 if (this._recordingHint) 522 if (this._recordingHint)
531 this._recordingHint.remove(); 523 this._recordingHint.remove();
532 delete this._recordingHint; 524 delete this._recordingHint;
533 } 525 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 585
594 /** 586 /**
595 * @param {!Event} event 587 * @param {!Event} event
596 */ 588 */
597 _dataGridMouseDown(event) { 589 _dataGridMouseDown(event) {
598 if (!this._dataGrid.selectedNode && event.button) 590 if (!this._dataGrid.selectedNode && event.button)
599 event.consume(); 591 event.consume();
600 } 592 }
601 593
602 _updateSummaryBar() { 594 _updateSummaryBar() {
603 var requestsNumber = this._nodesByRequestId.size;
604
605 if (!requestsNumber) {
606 this._showRecordingHint();
607 return;
608 }
609 this._hideRecordingHint(); 595 this._hideRecordingHint();
610 596
611 var transferSize = 0; 597 var transferSize = 0;
612 var selectedRequestsNumber = 0; 598 var selectedNodeNumber = 0;
613 var selectedTransferSize = 0; 599 var selectedTransferSize = 0;
614 var baseTime = -1; 600 var baseTime = -1;
615 var maxTime = -1; 601 var maxTime = -1;
616 var nodes = this._nodesByRequestId.valuesArray(); 602
617 for (var i = 0; i < nodes.length; ++i) { 603 var nodeCount = 0;
618 var request = nodes[i].request(); 604 for (var request of NetworkLog.networkLog.requests()) {
605 var node = request[Network.NetworkLogView._networkNodeSymbol];
606 if (!node)
607 continue;
608 nodeCount++;
619 var requestTransferSize = request.transferSize; 609 var requestTransferSize = request.transferSize;
620 transferSize += requestTransferSize; 610 transferSize += requestTransferSize;
621 if (!nodes[i][Network.NetworkLogView._isFilteredOutSymbol]) { 611 if (!node[Network.NetworkLogView._isFilteredOutSymbol]) {
622 selectedRequestsNumber++; 612 selectedNodeNumber++;
623 selectedTransferSize += requestTransferSize; 613 selectedTransferSize += requestTransferSize;
624 } 614 }
625 if (request.url() === request.networkManager().target().inspectedURL() && 615 if (request.url() === request.networkManager().target().inspectedURL() &&
626 request.resourceType() === Common.resourceTypes.Document) 616 request.resourceType() === Common.resourceTypes.Document)
627 baseTime = request.startTime; 617 baseTime = request.startTime;
628 if (request.endTime > maxTime) 618 if (request.endTime > maxTime)
629 maxTime = request.endTime; 619 maxTime = request.endTime;
630 } 620 }
631 621
622 if (!nodeCount) {
623 this._showRecordingHint();
624 return;
625 }
626
632 var summaryBar = this._summaryBarElement; 627 var summaryBar = this._summaryBarElement;
633 summaryBar.removeChildren(); 628 summaryBar.removeChildren();
634 var separator = '\u2002\u2758\u2002'; 629 var separator = '\u2002\u2758\u2002';
635 var text = ''; 630 var text = '';
636 /** 631 /**
637 * @param {string} chunk 632 * @param {string} chunk
638 * @return {!Element} 633 * @return {!Element}
639 */ 634 */
640 function appendChunk(chunk) { 635 function appendChunk(chunk) {
641 var span = summaryBar.createChild('span'); 636 var span = summaryBar.createChild('span');
642 span.textContent = chunk; 637 span.textContent = chunk;
643 text += chunk; 638 text += chunk;
644 return span; 639 return span;
645 } 640 }
646 641
647 if (selectedRequestsNumber !== requestsNumber) { 642 if (selectedNodeNumber !== nodeCount) {
648 appendChunk(Common.UIString('%d / %d requests', selectedRequestsNumber, re questsNumber)); 643 appendChunk(Common.UIString('%d / %d requests', selectedNodeNumber, nodeCo unt));
649 appendChunk(separator); 644 appendChunk(separator);
650 appendChunk(Common.UIString( 645 appendChunk(Common.UIString(
651 '%s / %s transferred', Number.bytesToString(selectedTransferSize), Num ber.bytesToString(transferSize))); 646 '%s / %s transferred', Number.bytesToString(selectedTransferSize), Num ber.bytesToString(transferSize)));
652 } else { 647 } else {
653 appendChunk(Common.UIString('%d requests', requestsNumber)); 648 appendChunk(Common.UIString('%d requests', nodeCount));
654 appendChunk(separator); 649 appendChunk(separator);
655 appendChunk(Common.UIString('%s transferred', Number.bytesToString(transfe rSize))); 650 appendChunk(Common.UIString('%s transferred', Number.bytesToString(transfe rSize)));
656 } 651 }
657 if (baseTime !== -1 && maxTime !== -1) { 652 if (baseTime !== -1 && maxTime !== -1) {
658 appendChunk(separator); 653 appendChunk(separator);
659 appendChunk(Common.UIString('Finish: %s', Number.secondsToString(maxTime - baseTime))); 654 appendChunk(Common.UIString('Finish: %s', Number.secondsToString(maxTime - baseTime)));
660 if (this._mainRequestDOMContentLoadedTime !== -1 && this._mainRequestDOMCo ntentLoadedTime > baseTime) { 655 if (this._mainRequestDOMContentLoadedTime !== -1 && this._mainRequestDOMCo ntentLoadedTime > baseTime) {
661 appendChunk(separator); 656 appendChunk(separator);
662 var domContentLoadedText = Common.UIString( 657 var domContentLoadedText = Common.UIString(
663 'DOMContentLoaded: %s', Number.secondsToString(this._mainRequestDOMC ontentLoadedTime - baseTime)); 658 'DOMContentLoaded: %s', Number.secondsToString(this._mainRequestDOMC ontentLoadedTime - baseTime));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 697
703 _refreshIfNeeded() { 698 _refreshIfNeeded() {
704 if (this._needsRefresh) 699 if (this._needsRefresh)
705 this._refresh(); 700 this._refresh();
706 } 701 }
707 702
708 /** 703 /**
709 * @param {boolean=} deferUpdate 704 * @param {boolean=} deferUpdate
710 */ 705 */
711 _invalidateAllItems(deferUpdate) { 706 _invalidateAllItems(deferUpdate) {
712 var requestIds = this._nodesByRequestId.keysArray(); 707 this._staleRequests = new Set(NetworkLog.networkLog.requests());
713 for (var i = 0; i < requestIds.length; ++i)
714 this._staleRequestIds[requestIds[i]] = true;
715 if (deferUpdate) 708 if (deferUpdate)
716 this.scheduleRefresh(); 709 this.scheduleRefresh();
717 else 710 else
718 this._refresh(); 711 this._refresh();
719 } 712 }
720 713
721 /** 714 /**
722 * @return {!Network.NetworkTimeCalculator} 715 * @return {!Network.NetworkTimeCalculator}
723 */ 716 */
724 timeCalculator() { 717 timeCalculator() {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 818
826 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime) ; 819 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime) ;
827 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestLoadT ime); 820 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestLoadT ime);
828 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMConten tLoadedTime); 821 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMConten tLoadedTime);
829 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestDOMCo ntentLoadedTime); 822 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestDOMCo ntentLoadedTime);
830 823
831 /** @type {!Map<!Network.NetworkNode, !Network.NetworkNode>} */ 824 /** @type {!Map<!Network.NetworkNode, !Network.NetworkNode>} */
832 var nodesToInsert = new Map(); 825 var nodesToInsert = new Map();
833 /** @type {!Array<!Network.NetworkNode>} */ 826 /** @type {!Array<!Network.NetworkNode>} */
834 var nodesToRefresh = []; 827 var nodesToRefresh = [];
835 for (var requestId in this._staleRequestIds) { 828
836 var node = this._nodesByRequestId.get(requestId); 829 /** @type {!Set<!Network.NetworkRequestNode>} */
830 var staleNodes = new Set();
831
832 for (var node of this._nodesToRemove) {
833 if (node.parent)
834 node.parent.removeChild(node);
835 }
836
837 this._nodesToRemove.clear();
838
839 // While creating nodes it may add more entries into _staleRequests because redirect request nodes update the parent
840 // node so we loop until we have no more stale requests.
841 while (this._staleRequests.size) {
842 var request = this._staleRequests.firstValue();
843 this._staleRequests.delete(request);
844 var node = request[Network.NetworkLogView._networkNodeSymbol];
837 if (!node) 845 if (!node)
838 continue; 846 node = this._createNodeForRequest(request);
847 staleNodes.add(node);
848 }
849
850 for (var node of staleNodes) {
839 var isFilteredOut = !this._applyFilter(node); 851 var isFilteredOut = !this._applyFilter(node);
840 if (isFilteredOut && node === this._hoveredNode) 852 if (isFilteredOut && node === this._hoveredNode)
841 this._setHoveredNode(null); 853 this._setHoveredNode(null);
842 854
843 if (!isFilteredOut) 855 if (!isFilteredOut)
844 nodesToRefresh.push(node); 856 nodesToRefresh.push(node);
845 var request = node.request(); 857 var request = node.request();
846 this._timeCalculator.updateBoundaries(request); 858 this._timeCalculator.updateBoundaries(request);
847 this._durationCalculator.updateBoundaries(request); 859 this._durationCalculator.updateBoundaries(request);
848 var newParent = this._parentNodeForInsert(node); 860 var newParent = this._parentNodeForInsert(node);
(...skipping 28 matching lines...) Expand all
877 node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchR equest(request); 889 node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchR equest(request);
878 parent.appendChild(node); 890 parent.appendChild(node);
879 } 891 }
880 892
881 for (var node of nodesToRefresh) 893 for (var node of nodesToRefresh)
882 node.refresh(); 894 node.refresh();
883 895
884 this._highlightNthMatchedRequestForSearch( 896 this._highlightNthMatchedRequestForSearch(
885 this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode) , false); 897 this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode) , false);
886 898
887 this._staleRequestIds = {};
888 this._updateSummaryBar(); 899 this._updateSummaryBar();
889 900
890 if (nodesToInsert.size) 901 if (nodesToInsert.size)
891 this._columns.sortByCurrentColumn(); 902 this._columns.sortByCurrentColumn();
892 903
893 this._dataGrid.updateInstantly(); 904 this._dataGrid.updateInstantly();
905 this._didRefreshForTest();
906 }
907
908 _didRefreshForTest() {
894 } 909 }
895 910
896 /** 911 /**
897 * @param {!Network.NetworkRequestNode} node 912 * @param {!Network.NetworkRequestNode} node
898 * @return {?Network.NetworkNode} 913 * @return {?Network.NetworkNode}
899 */ 914 */
900 _parentNodeForInsert(node) { 915 _parentNodeForInsert(node) {
901 if (!this._activeGroupLookup) 916 if (!this._activeGroupLookup)
902 return this._dataGrid.rootNode(); 917 return this._dataGrid.rootNode();
903 918
904 var groupNode = this._activeGroupLookup.groupNodeForRequest(node.request()); 919 var groupNode = this._activeGroupLookup.groupNodeForRequest(node.request());
905 if (!groupNode) 920 if (!groupNode)
906 return this._dataGrid.rootNode(); 921 return this._dataGrid.rootNode();
907 return groupNode; 922 return groupNode;
908 } 923 }
909 924
910 reset() { 925 _reset() {
911 this._requestWithHighlightedInitiators = null; 926 this._requestWithHighlightedInitiators = null;
912 this.dispatchEventToListeners(Network.NetworkLogView.Events.RequestSelected, null); 927 this.dispatchEventToListeners(Network.NetworkLogView.Events.RequestSelected, null);
913 928
914 this._clearSearchMatchedList(); 929 this._clearSearchMatchedList();
915 930
916 this._setHoveredNode(null); 931 this._setHoveredNode(null);
917 this._columns.reset(); 932 this._columns.reset();
918 933
919 this._timeFilter = null; 934 this._timeFilter = null;
920 this._calculator.reset(); 935 this._calculator.reset();
921 936
922 this._timeCalculator.setWindow(null); 937 this._timeCalculator.setWindow(null);
923 this.linkifier.reset(); 938 this.linkifier.reset();
924 this.badgePool.reset(); 939 this.badgePool.reset();
925 940
926 if (this._activeGroupLookup) 941 this._staleRequests.clear();
927 this._activeGroupLookup.reset();
928 this._nodesByRequestId.clear();
929 this._staleRequestIds = {};
930 this._resetSuggestionBuilder(); 942 this._resetSuggestionBuilder();
931 943
932 this._mainRequestLoadTime = -1; 944 this._mainRequestLoadTime = -1;
933 this._mainRequestDOMContentLoadedTime = -1; 945 this._mainRequestDOMContentLoadedTime = -1;
934 946
935 this._dataGrid.rootNode().removeChildren(); 947 this._dataGrid.rootNode().removeChildren();
936 this._updateSummaryBar(); 948 this._updateSummaryBar();
937 this._dataGrid.setStickToBottom(true); 949 this._dataGrid.setStickToBottom(true);
938 } 950 }
939 951
940 /** 952 /**
941 * @param {string} filterString 953 * @param {string} filterString
942 */ 954 */
943 setTextFilterValue(filterString) { 955 setTextFilterValue(filterString) {
944 this._textFilterUI.setValue(filterString); 956 this._textFilterUI.setValue(filterString);
945 this._textFilterUI.setRegexChecked(false); 957 this._textFilterUI.setRegexChecked(false);
946 this._dataURLFilterUI.setChecked(false); 958 this._dataURLFilterUI.setChecked(false);
947 this._resourceCategoryFilterUI.reset(); 959 this._resourceCategoryFilterUI.reset();
948 } 960 }
949 961
950 /** 962 /**
963 * @param {!SDK.NetworkRequest} request
964 */
965 _createNodeForRequest(request) {
966 var node = new Network.NetworkRequestNode(this, request);
967 request[Network.NetworkLogView._networkNodeSymbol] = node;
968 node[Network.NetworkLogView._isFilteredOutSymbol] = true;
dgozman 2017/06/14 22:21:47 Why filtered by default?
allada 2017/06/15 00:19:48 This is what it was doing, I did not change the lo
969 node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = false;
970
971 if (request.redirects)
972 request.redirects.forEach(this._refreshRequest.bind(this));
973 return node;
974 }
975
976 /**
951 * @param {!Common.Event} event 977 * @param {!Common.Event} event
952 */ 978 */
953 _onRequestStarted(event) { 979 _onRequestsRemoved(event) {
dgozman 2017/06/14 22:21:47 As discussed offline, let's recreate everything in
allada 2017/06/15 00:19:48 Done.
954 if (!this._recording) 980 var requests = /** @type {!Set<!SDK.NetworkRequest>} */ (event.data);
955 return; 981 var rootNode = this._dataGrid.rootNode();
956 var request = /** @type {!SDK.NetworkRequest} */ (event.data); 982 for (var request of requests) {
957 this._appendRequest(request); 983 var node = request[Network.NetworkLogView._networkNodeSymbol];
984 while (node && node.parent) {
985 var parent = node.parent;
986 this._nodesToRemove.add(node);
987 if (parent === rootNode || !parent.children.every(child => this._nodesTo Remove.has(child)))
dgozman 2017/06/14 22:21:47 I think this is still O(n^2).
allada 2017/06/15 00:19:48 Acknowledged.
988 break;
989 node = parent;
990 }
991 this._staleRequests.delete(request);
992 delete request[Network.NetworkLogView._networkNodeSymbol];
993 }
994
995 // TODO(allada) We need to unify these calculators with NetworkOverview.
996 this._calculator.reset();
997 this._durationCalculator.reset();
998 for (var request of NetworkLog.networkLog.requests()) {
999 this._timeCalculator.updateBoundaries(request);
1000 this._durationCalculator.updateBoundaries(request);
1001 }
958 } 1002 }
959 1003
960 /** 1004 /**
961 * @param {!SDK.NetworkRequest} request
962 */
963 _appendRequest(request) {
964 var node = new Network.NetworkRequestNode(this, request);
965 node[Network.NetworkLogView._isFilteredOutSymbol] = true;
966 node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = false;
967
968 // In case of redirect request id is reassigned to a redirected
969 // request and we need to update _nodesByRequestId and search results.
970 var originalRequestNode = this._nodesByRequestId.get(request.requestId());
971 if (originalRequestNode)
972 this._nodesByRequestId.set(originalRequestNode.request().requestId(), orig inalRequestNode);
973 this._nodesByRequestId.set(request.requestId(), node);
974
975 // Pull all the redirects of the main request upon commit load.
976 if (request.redirects) {
977 for (var i = 0; i < request.redirects.length; ++i)
978 this._refreshRequest(request.redirects[i]);
979 }
980
981 this._refreshRequest(request);
982 }
983
984 /**
985 * @param {!Common.Event} event 1005 * @param {!Common.Event} event
986 */ 1006 */
987 _onRequestUpdated(event) { 1007 _onRequestUpdated(event) {
988 var request = /** @type {!SDK.NetworkRequest} */ (event.data); 1008 var request = /** @type {!SDK.NetworkRequest} */ (event.data);
989 this._refreshRequest(request); 1009 this._refreshRequest(request);
990 } 1010 }
991 1011
992 /** 1012 /**
993 * @param {!SDK.NetworkRequest} request 1013 * @param {!SDK.NetworkRequest} request
994 */ 1014 */
995 _refreshRequest(request) { 1015 _refreshRequest(request) {
996 if (!this._nodesByRequestId.get(request.requestId()))
997 return;
998
999 Network.NetworkLogView._subdomains(request.domain) 1016 Network.NetworkLogView._subdomains(request.domain)
1000 .forEach( 1017 .forEach(
1001 this._suggestionBuilder.addItem.bind(this._suggestionBuilder, Networ k.NetworkLogView.FilterType.Domain)); 1018 this._suggestionBuilder.addItem.bind(this._suggestionBuilder, Networ k.NetworkLogView.FilterType.Domain));
1002 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Method, re quest.requestMethod); 1019 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Method, re quest.requestMethod);
1003 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.MimeType, request.mimeType); 1020 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.MimeType, request.mimeType);
1004 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Scheme, '' + request.scheme); 1021 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Scheme, '' + request.scheme);
1005 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.StatusCode , '' + request.statusCode); 1022 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.StatusCode , '' + request.statusCode);
1006 1023
1007 var priority = request.initialPriority(); 1024 var priority = request.initialPriority();
1008 if (priority) { 1025 if (priority) {
(...skipping 21 matching lines...) Expand all
1030 for (var i = 0, l = responseHeaders.length; i < l; ++i) 1047 for (var i = 0, l = responseHeaders.length; i < l; ++i)
1031 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.HasRespo nseHeader, responseHeaders[i].name); 1048 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.HasRespo nseHeader, responseHeaders[i].name);
1032 var cookies = request.responseCookies; 1049 var cookies = request.responseCookies;
1033 for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) { 1050 for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) {
1034 var cookie = cookies[i]; 1051 var cookie = cookies[i];
1035 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eDomain, cookie.domain()); 1052 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eDomain, cookie.domain());
1036 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eName, cookie.name()); 1053 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eName, cookie.name());
1037 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eValue, cookie.value()); 1054 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eValue, cookie.value());
1038 } 1055 }
1039 1056
1040 this._staleRequestIds[request.requestId()] = true; 1057 this._staleRequests.add(request);
1041 this.dispatchEventToListeners(Network.NetworkLogView.Events.UpdateRequest, r equest);
1042 this.scheduleRefresh(); 1058 this.scheduleRefresh();
1043 } 1059 }
1044 1060
1045 /** 1061 /**
1046 * @param {!Common.Event} event
1047 */
1048 _mainFrameNavigated(event) {
1049 if (!this._recording)
1050 return;
1051
1052 var frame = /** @type {!SDK.ResourceTreeFrame} */ (event.data);
1053 var loaderId = frame.loaderId;
1054
1055 // Pick provisional load requests.
1056 var requestsToPick = [];
1057 var networkManager = frame.resourceTreeModel().target().model(SDK.NetworkMan ager);
1058 var requests = networkManager ? NetworkLog.networkLog.requestsForManager(net workManager) : [];
1059 for (var i = 0; i < requests.length; ++i) {
1060 var request = requests[i];
1061 if (request.loaderId === loaderId)
1062 requestsToPick.push(request);
1063 }
1064
1065 if (!Common.moduleSetting('network.preserve-log').get()) {
1066 this.reset();
1067 for (var i = 0; i < requestsToPick.length; ++i)
1068 this._appendRequest(requestsToPick[i]);
1069 }
1070 for (var i = 0; i < requestsToPick.length; ++i) {
1071 var request = requestsToPick[i];
1072 var node = this._nodesByRequestId.get(request.requestId());
1073 if (node) {
1074 node.markAsNavigationRequest();
1075 break;
1076 }
1077 }
1078 }
1079
1080 /**
1081 * @return {number} 1062 * @return {number}
1082 */ 1063 */
1083 rowHeight() { 1064 rowHeight() {
1084 return this._rowHeight; 1065 return this._rowHeight;
1085 } 1066 }
1086 1067
1087 /** 1068 /**
1088 * @param {boolean} gridMode 1069 * @param {boolean} gridMode
1089 */ 1070 */
1090 switchViewMode(gridMode) { 1071 switchViewMode(gridMode) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 */ 1159 */
1179 function removeBlockedURL(url) { 1160 function removeBlockedURL(url) {
1180 patterns = patterns.filter(pattern => pattern.url !== url); 1161 patterns = patterns.filter(pattern => pattern.url !== url);
1181 manager.setBlockedPatterns(patterns); 1162 manager.setBlockedPatterns(patterns);
1182 UI.viewManager.showView('network.blocked-urls'); 1163 UI.viewManager.showView('network.blocked-urls');
1183 } 1164 }
1184 } 1165 }
1185 } 1166 }
1186 1167
1187 _harRequests() { 1168 _harRequests() {
1188 var requests = this._nodesByRequestId.valuesArray().map(function(node) { 1169 var httpRequests = NetworkLog.networkLog.requests().filter(Network.NetworkLo gView.HTTPRequestsFilter);
1189 return node.request();
1190 });
1191 var httpRequests = requests.filter(Network.NetworkLogView.HTTPRequestsFilter );
1192 return httpRequests.filter(Network.NetworkLogView.FinishedRequestsFilter); 1170 return httpRequests.filter(Network.NetworkLogView.FinishedRequestsFilter);
1193 } 1171 }
1194 1172
1195 _copyAll() { 1173 _copyAll() {
1196 var harArchive = {log: (new NetworkLog.HARLog(this._harRequests())).build()} ; 1174 var harArchive = {log: (new NetworkLog.HARLog(this._harRequests())).build()} ;
1197 InspectorFrontendHost.copyText(JSON.stringify(harArchive, null, 2)); 1175 InspectorFrontendHost.copyText(JSON.stringify(harArchive, null, 2));
1198 } 1176 }
1199 1177
1200 /** 1178 /**
1201 * @param {!SDK.NetworkRequest} request 1179 * @param {!SDK.NetworkRequest} request
(...skipping 29 matching lines...) Expand all
1231 * @param {string} platform 1209 * @param {string} platform
1232 */ 1210 */
1233 _copyCurlCommand(request, platform) { 1211 _copyCurlCommand(request, platform) {
1234 InspectorFrontendHost.copyText(this._generateCurlCommand(request, platform)) ; 1212 InspectorFrontendHost.copyText(this._generateCurlCommand(request, platform)) ;
1235 } 1213 }
1236 1214
1237 /** 1215 /**
1238 * @param {string} platform 1216 * @param {string} platform
1239 */ 1217 */
1240 _copyAllCurlCommand(platform) { 1218 _copyAllCurlCommand(platform) {
1241 var requests = this._nodesByRequestId.valuesArray().map(node => node.request ()); 1219 var requests = NetworkLog.networkLog.requests();
1242 var commands = []; 1220 var commands = [];
1243 for (var request of requests) 1221 for (var request of requests)
1244 commands.push(this._generateCurlCommand(request, platform)); 1222 commands.push(this._generateCurlCommand(request, platform));
1245 if (platform === 'win') 1223 if (platform === 'win')
1246 InspectorFrontendHost.copyText(commands.join(' &\r\n')); 1224 InspectorFrontendHost.copyText(commands.join(' &\r\n'));
1247 else 1225 else
1248 InspectorFrontendHost.copyText(commands.join(' ;\n')); 1226 InspectorFrontendHost.copyText(commands.join(' ;\n'));
1249 } 1227 }
1250 1228
1251 _exportAll() { 1229 _exportAll() {
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 this._clearSearchMatchedList(); 1577 this._clearSearchMatchedList();
1600 this.dispatchEventToListeners(Network.NetworkLogView.Events.SearchCountUpdat ed, 0); 1578 this.dispatchEventToListeners(Network.NetworkLogView.Events.SearchCountUpdat ed, 0);
1601 } 1579 }
1602 1580
1603 /** 1581 /**
1604 * @param {!SDK.NetworkRequest} request 1582 * @param {!SDK.NetworkRequest} request
1605 */ 1583 */
1606 revealAndHighlightRequest(request) { 1584 revealAndHighlightRequest(request) {
1607 this.removeAllNodeHighlights(); 1585 this.removeAllNodeHighlights();
1608 1586
1609 var node = this._nodesByRequestId.get(request.requestId()); 1587 var node = request[Network.NetworkLogView._networkNodeSymbol];
1610 if (node) { 1588 if (node) {
1611 node.reveal(); 1589 node.reveal();
1612 this._highlightNode(node); 1590 this._highlightNode(node);
1613 } 1591 }
1614 } 1592 }
1615 1593
1616 removeAllNodeHighlights() { 1594 removeAllNodeHighlights() {
1617 if (this._highlightedNode) { 1595 if (this._highlightedNode) {
1618 this._highlightedNode.element().classList.remove('highlighted-row'); 1596 this._highlightedNode.element().classList.remove('highlighted-row');
1619 delete this._highlightedNode; 1597 delete this._highlightedNode;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 command.push('--compressed'); 1728 command.push('--compressed');
1751 1729
1752 if (request.securityState() === Protocol.Security.SecurityState.Insecure) 1730 if (request.securityState() === Protocol.Security.SecurityState.Insecure)
1753 command.push('--insecure'); 1731 command.push('--insecure');
1754 return command.join(' '); 1732 return command.join(' ');
1755 } 1733 }
1756 }; 1734 };
1757 1735
1758 Network.NetworkLogView._isFilteredOutSymbol = Symbol('isFilteredOut'); 1736 Network.NetworkLogView._isFilteredOutSymbol = Symbol('isFilteredOut');
1759 Network.NetworkLogView._isMatchingSearchQuerySymbol = Symbol('isMatchingSearchQu ery'); 1737 Network.NetworkLogView._isMatchingSearchQuerySymbol = Symbol('isMatchingSearchQu ery');
1738 Network.NetworkLogView._networkNodeSymbol = Symbol('NetworkNode');
1760 1739
1761 Network.NetworkLogView.HTTPSchemas = { 1740 Network.NetworkLogView.HTTPSchemas = {
1762 'http': true, 1741 'http': true,
1763 'https': true, 1742 'https': true,
1764 'ws': true, 1743 'ws': true,
1765 'wss': true 1744 'wss': true
1766 }; 1745 };
1767 1746
1768 /** @enum {symbol} */ 1747 /** @enum {symbol} */
1769 Network.NetworkLogView.Events = { 1748 Network.NetworkLogView.Events = {
1770 RequestSelected: Symbol('RequestSelected'), 1749 RequestSelected: Symbol('RequestSelected'),
1771 SearchCountUpdated: Symbol('SearchCountUpdated'), 1750 SearchCountUpdated: Symbol('SearchCountUpdated'),
1772 SearchIndexUpdated: Symbol('SearchIndexUpdated'), 1751 SearchIndexUpdated: Symbol('SearchIndexUpdated')
1773 UpdateRequest: Symbol('UpdateRequest')
1774 }; 1752 };
1775 1753
1776 /** @enum {string} */ 1754 /** @enum {string} */
1777 Network.NetworkLogView.FilterType = { 1755 Network.NetworkLogView.FilterType = {
1778 Domain: 'domain', 1756 Domain: 'domain',
1779 HasResponseHeader: 'has-response-header', 1757 HasResponseHeader: 'has-response-header',
1780 Is: 'is', 1758 Is: 'is',
1781 LargerThan: 'larger-than', 1759 LargerThan: 'larger-than',
1782 Method: 'method', 1760 Method: 'method',
1783 MimeType: 'mime-type', 1761 MimeType: 'mime-type',
(...skipping 30 matching lines...) Expand all
1814 /** 1792 /**
1815 * @interface 1793 * @interface
1816 */ 1794 */
1817 Network.GroupLookupInterface = function() {}; 1795 Network.GroupLookupInterface = function() {};
1818 1796
1819 Network.GroupLookupInterface.prototype = { 1797 Network.GroupLookupInterface.prototype = {
1820 /** 1798 /**
1821 * @param {!SDK.NetworkRequest} request 1799 * @param {!SDK.NetworkRequest} request
1822 * @return {?Network.NetworkGroupNode} 1800 * @return {?Network.NetworkGroupNode}
1823 */ 1801 */
1824 groupNodeForRequest: function(request) {}, 1802 groupNodeForRequest: function(request) {}
1825
1826 reset: function() {}
1827 }; 1803 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698