OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
372 | 370 |
373 _updateRowHeight() { | 371 _updateRowHeight() { |
374 this._rowHeight = Math.floor(this._rawRowHeight * window.devicePixelRatio) / window.devicePixelRatio; | 372 this._rowHeight = Math.floor(this._rawRowHeight * window.devicePixelRatio) / window.devicePixelRatio; |
375 } | 373 } |
376 | 374 |
377 /** | 375 /** |
378 * @param {!SDK.NetworkRequest} request | 376 * @param {!SDK.NetworkRequest} request |
379 * @return {?Network.NetworkRequestNode} | 377 * @return {?Network.NetworkRequestNode} |
380 */ | 378 */ |
381 nodeForRequest(request) { | 379 nodeForRequest(request) { |
382 return this._nodesByRequestId.get(request.requestId()); | 380 return request[Network.NetworkLogView._networkNodeSymbol] || null; |
383 } | 381 } |
384 | 382 |
385 /** | 383 /** |
386 * @return {number} | 384 * @return {number} |
387 */ | 385 */ |
388 headerHeight() { | 386 headerHeight() { |
389 return this._headerHeight; | 387 return this._headerHeight; |
390 } | 388 } |
391 | 389 |
392 /** | 390 /** |
393 * @param {boolean} recording | 391 * @param {boolean} recording |
394 */ | 392 */ |
395 setRecording(recording) { | 393 setRecording(recording) { |
396 this._recording = recording; | 394 this._recording = recording; |
397 this._updateSummaryBar(); | 395 this._updateSummaryBar(); |
398 } | 396 } |
399 | 397 |
400 /** | 398 /** |
401 * @override | 399 * @override |
402 * @param {!SDK.NetworkManager} networkManager | 400 * @param {!SDK.NetworkManager} networkManager |
403 */ | 401 */ |
404 modelAdded(networkManager) { | 402 modelAdded(networkManager) { |
405 if (!networkManager.target().parentTarget()) { | 403 // 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); | 404 if (networkManager.target().parentTarget()) |
407 if (resourceTreeModel) { | 405 return; |
408 resourceTreeModel.addEventListener( | 406 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel) ; |
409 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavi gated, this); | 407 if (resourceTreeModel) { |
410 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, th is._loadEventFired, this); | 408 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this ._loadEventFired, this); |
411 resourceTreeModel.addEventListener( | 409 resourceTreeModel.addEventListener( |
412 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoade dEventFired, this); | 410 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedE ventFired, this); |
413 } | |
414 } | 411 } |
415 NetworkLog.networkLog.requestsForManager(networkManager).forEach(this._appen dRequest.bind(this)); | |
416 } | 412 } |
417 | 413 |
418 /** | 414 /** |
419 * @override | 415 * @override |
420 * @param {!SDK.NetworkManager} networkManager | 416 * @param {!SDK.NetworkManager} networkManager |
421 */ | 417 */ |
422 modelRemoved(networkManager) { | 418 modelRemoved(networkManager) { |
423 if (!networkManager.target().parentTarget()) { | 419 if (!networkManager.target().parentTarget()) { |
424 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeMode l); | 420 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeMode l); |
425 if (resourceTreeModel) { | 421 if (resourceTreeModel) { |
426 resourceTreeModel.removeEventListener( | |
427 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavi gated, this); | |
428 resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this); | 422 resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this); |
429 resourceTreeModel.removeEventListener( | 423 resourceTreeModel.removeEventListener( |
430 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoade dEventFired, this); | 424 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoade dEventFired, this); |
431 } | 425 } |
432 } | 426 } |
433 } | 427 } |
434 | 428 |
435 /** | 429 /** |
436 * @param {number} start | 430 * @param {number} start |
437 * @param {number} end | 431 * @param {number} end |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
513 reloadShortcutNode.textContent = UI.shortcutRegistry.shortcutDescriptorsForA ction('main.reload')[0].name; | 507 reloadShortcutNode.textContent = UI.shortcutRegistry.shortcutDescriptorsForA ction('main.reload')[0].name; |
514 | 508 |
515 if (this._recording) { | 509 if (this._recording) { |
516 var recordingText = hintText.createChild('span'); | 510 var recordingText = hintText.createChild('span'); |
517 recordingText.textContent = Common.UIString('Recording network activity\u2 026'); | 511 recordingText.textContent = Common.UIString('Recording network activity\u2 026'); |
518 hintText.createChild('br'); | 512 hintText.createChild('br'); |
519 hintText.appendChild( | 513 hintText.appendChild( |
520 UI.formatLocalized('Perform a request or hit %s to record the reload.' , [reloadShortcutNode])); | 514 UI.formatLocalized('Perform a request or hit %s to record the reload.' , [reloadShortcutNode])); |
521 } else { | 515 } else { |
522 var recordNode = hintText.createChild('b'); | 516 var recordNode = hintText.createChild('b'); |
523 recordNode.textContent = UI.shortcutRegistry.shortcutTitleForAction('netwo rk.toggle-recording'); | 517 recordNode.textContent = UI.shortcutRegistry.shortcutTitleForAction('netwo rk_log.toggle-recording'); |
524 hintText.appendChild(UI.formatLocalized( | 518 hintText.appendChild(UI.formatLocalized( |
525 'Record (%s) or reload (%s) to display network activity.', [recordNode , reloadShortcutNode])); | 519 'Record (%s) or reload (%s) to display network activity.', [recordNode , reloadShortcutNode])); |
526 } | 520 } |
527 } | 521 } |
528 | 522 |
529 _hideRecordingHint() { | 523 _hideRecordingHint() { |
530 if (this._recordingHint) | 524 if (this._recordingHint) |
531 this._recordingHint.remove(); | 525 this._recordingHint.remove(); |
532 delete this._recordingHint; | 526 delete this._recordingHint; |
533 } | 527 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
593 | 587 |
594 /** | 588 /** |
595 * @param {!Event} event | 589 * @param {!Event} event |
596 */ | 590 */ |
597 _dataGridMouseDown(event) { | 591 _dataGridMouseDown(event) { |
598 if (!this._dataGrid.selectedNode && event.button) | 592 if (!this._dataGrid.selectedNode && event.button) |
599 event.consume(); | 593 event.consume(); |
600 } | 594 } |
601 | 595 |
602 _updateSummaryBar() { | 596 _updateSummaryBar() { |
603 var requestsNumber = this._nodesByRequestId.size; | |
604 | |
605 if (!requestsNumber) { | |
606 this._showRecordingHint(); | |
607 return; | |
608 } | |
609 this._hideRecordingHint(); | 597 this._hideRecordingHint(); |
610 | 598 |
611 var transferSize = 0; | 599 var transferSize = 0; |
612 var selectedRequestsNumber = 0; | 600 var selectedNodeNumber = 0; |
613 var selectedTransferSize = 0; | 601 var selectedTransferSize = 0; |
614 var baseTime = -1; | 602 var baseTime = -1; |
615 var maxTime = -1; | 603 var maxTime = -1; |
616 var nodes = this._nodesByRequestId.valuesArray(); | 604 |
617 for (var i = 0; i < nodes.length; ++i) { | 605 var nodeCount = 0; |
618 var request = nodes[i].request(); | 606 for (var request of NetworkLog.networkLog.requests()) { |
607 var node = request[Network.NetworkLogView._networkNodeSymbol]; | |
608 if (!node) | |
609 continue; | |
610 nodeCount++; | |
619 var requestTransferSize = request.transferSize; | 611 var requestTransferSize = request.transferSize; |
620 transferSize += requestTransferSize; | 612 transferSize += requestTransferSize; |
621 if (!nodes[i][Network.NetworkLogView._isFilteredOutSymbol]) { | 613 if (!node[Network.NetworkLogView._isFilteredOutSymbol]) { |
622 selectedRequestsNumber++; | 614 selectedNodeNumber++; |
623 selectedTransferSize += requestTransferSize; | 615 selectedTransferSize += requestTransferSize; |
624 } | 616 } |
625 if (request.url() === request.networkManager().target().inspectedURL() && | 617 if (request.url() === request.networkManager().target().inspectedURL() && |
626 request.resourceType() === Common.resourceTypes.Document) | 618 request.resourceType() === Common.resourceTypes.Document) |
627 baseTime = request.startTime; | 619 baseTime = request.startTime; |
628 if (request.endTime > maxTime) | 620 if (request.endTime > maxTime) |
629 maxTime = request.endTime; | 621 maxTime = request.endTime; |
630 } | 622 } |
631 | 623 |
624 if (!nodeCount) { | |
625 this._showRecordingHint(); | |
626 return; | |
627 } | |
628 | |
632 var summaryBar = this._summaryBarElement; | 629 var summaryBar = this._summaryBarElement; |
633 summaryBar.removeChildren(); | 630 summaryBar.removeChildren(); |
634 var separator = '\u2002\u2758\u2002'; | 631 var separator = '\u2002\u2758\u2002'; |
635 var text = ''; | 632 var text = ''; |
636 /** | 633 /** |
637 * @param {string} chunk | 634 * @param {string} chunk |
638 * @return {!Element} | 635 * @return {!Element} |
639 */ | 636 */ |
640 function appendChunk(chunk) { | 637 function appendChunk(chunk) { |
641 var span = summaryBar.createChild('span'); | 638 var span = summaryBar.createChild('span'); |
642 span.textContent = chunk; | 639 span.textContent = chunk; |
643 text += chunk; | 640 text += chunk; |
644 return span; | 641 return span; |
645 } | 642 } |
646 | 643 |
647 if (selectedRequestsNumber !== requestsNumber) { | 644 if (selectedNodeNumber !== nodeCount) { |
648 appendChunk(Common.UIString('%d / %d requests', selectedRequestsNumber, re questsNumber)); | 645 appendChunk(Common.UIString('%d / %d requests', selectedNodeNumber, nodeCo unt)); |
649 appendChunk(separator); | 646 appendChunk(separator); |
650 appendChunk(Common.UIString( | 647 appendChunk(Common.UIString( |
651 '%s / %s transferred', Number.bytesToString(selectedTransferSize), Num ber.bytesToString(transferSize))); | 648 '%s / %s transferred', Number.bytesToString(selectedTransferSize), Num ber.bytesToString(transferSize))); |
652 } else { | 649 } else { |
653 appendChunk(Common.UIString('%d requests', requestsNumber)); | 650 appendChunk(Common.UIString('%d requests', nodeCount)); |
654 appendChunk(separator); | 651 appendChunk(separator); |
655 appendChunk(Common.UIString('%s transferred', Number.bytesToString(transfe rSize))); | 652 appendChunk(Common.UIString('%s transferred', Number.bytesToString(transfe rSize))); |
656 } | 653 } |
657 if (baseTime !== -1 && maxTime !== -1) { | 654 if (baseTime !== -1 && maxTime !== -1) { |
658 appendChunk(separator); | 655 appendChunk(separator); |
659 appendChunk(Common.UIString('Finish: %s', Number.secondsToString(maxTime - baseTime))); | 656 appendChunk(Common.UIString('Finish: %s', Number.secondsToString(maxTime - baseTime))); |
660 if (this._mainRequestDOMContentLoadedTime !== -1 && this._mainRequestDOMCo ntentLoadedTime > baseTime) { | 657 if (this._mainRequestDOMContentLoadedTime !== -1 && this._mainRequestDOMCo ntentLoadedTime > baseTime) { |
661 appendChunk(separator); | 658 appendChunk(separator); |
662 var domContentLoadedText = Common.UIString( | 659 var domContentLoadedText = Common.UIString( |
663 'DOMContentLoaded: %s', Number.secondsToString(this._mainRequestDOMC ontentLoadedTime - baseTime)); | 660 'DOMContentLoaded: %s', Number.secondsToString(this._mainRequestDOMC ontentLoadedTime - baseTime)); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
702 | 699 |
703 _refreshIfNeeded() { | 700 _refreshIfNeeded() { |
704 if (this._needsRefresh) | 701 if (this._needsRefresh) |
705 this._refresh(); | 702 this._refresh(); |
706 } | 703 } |
707 | 704 |
708 /** | 705 /** |
709 * @param {boolean=} deferUpdate | 706 * @param {boolean=} deferUpdate |
710 */ | 707 */ |
711 _invalidateAllItems(deferUpdate) { | 708 _invalidateAllItems(deferUpdate) { |
712 var requestIds = this._nodesByRequestId.keysArray(); | 709 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) | 710 if (deferUpdate) |
716 this.scheduleRefresh(); | 711 this.scheduleRefresh(); |
717 else | 712 else |
718 this._refresh(); | 713 this._refresh(); |
719 } | 714 } |
720 | 715 |
721 /** | 716 /** |
722 * @return {!Network.NetworkTimeCalculator} | 717 * @return {!Network.NetworkTimeCalculator} |
723 */ | 718 */ |
724 timeCalculator() { | 719 timeCalculator() { |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
825 | 820 |
826 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime) ; | 821 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime) ; |
827 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestLoadT ime); | 822 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestLoadT ime); |
828 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMConten tLoadedTime); | 823 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMConten tLoadedTime); |
829 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestDOMCo ntentLoadedTime); | 824 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestDOMCo ntentLoadedTime); |
830 | 825 |
831 /** @type {!Map<!Network.NetworkNode, !Network.NetworkNode>} */ | 826 /** @type {!Map<!Network.NetworkNode, !Network.NetworkNode>} */ |
832 var nodesToInsert = new Map(); | 827 var nodesToInsert = new Map(); |
833 /** @type {!Array<!Network.NetworkNode>} */ | 828 /** @type {!Array<!Network.NetworkNode>} */ |
834 var nodesToRefresh = []; | 829 var nodesToRefresh = []; |
835 for (var requestId in this._staleRequestIds) { | 830 |
836 var node = this._nodesByRequestId.get(requestId); | 831 /** @type {!Set<!Network.NetworkRequestNode>} */ |
832 var staleNodes = new Set(); | |
833 | |
834 for (var node of this._nodesToRemove) { | |
835 if (node.parent) | |
836 node.parent.removeChild(node); | |
837 } | |
838 | |
839 this._nodesToRemove.clear(); | |
840 | |
841 // While creating nodes it may add more entries into _staleRequests because redirect request nodes update the parent | |
842 // node so we loop until we have no more stale requests. | |
843 while (this._staleRequests.size) { | |
844 var request = this._staleRequests.firstValue(); | |
845 this._staleRequests.delete(request); | |
846 var node = request[Network.NetworkLogView._networkNodeSymbol]; | |
837 if (!node) | 847 if (!node) |
838 continue; | 848 node = this._createNodeForRequest(request); |
849 staleNodes.add(node); | |
850 } | |
851 | |
852 for (var node of staleNodes) { | |
839 var isFilteredOut = !this._applyFilter(node); | 853 var isFilteredOut = !this._applyFilter(node); |
840 if (isFilteredOut && node === this._hoveredNode) | 854 if (isFilteredOut && node === this._hoveredNode) |
841 this._setHoveredNode(null); | 855 this._setHoveredNode(null); |
842 | 856 |
843 if (!isFilteredOut) | 857 if (!isFilteredOut) |
844 nodesToRefresh.push(node); | 858 nodesToRefresh.push(node); |
845 var request = node.request(); | 859 var request = node.request(); |
846 this._timeCalculator.updateBoundaries(request); | 860 this._timeCalculator.updateBoundaries(request); |
847 this._durationCalculator.updateBoundaries(request); | 861 this._durationCalculator.updateBoundaries(request); |
848 var newParent = this._parentNodeForInsert(node); | 862 var newParent = this._parentNodeForInsert(node); |
(...skipping 28 matching lines...) Expand all Loading... | |
877 node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchR equest(request); | 891 node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchR equest(request); |
878 parent.appendChild(node); | 892 parent.appendChild(node); |
879 } | 893 } |
880 | 894 |
881 for (var node of nodesToRefresh) | 895 for (var node of nodesToRefresh) |
882 node.refresh(); | 896 node.refresh(); |
883 | 897 |
884 this._highlightNthMatchedRequestForSearch( | 898 this._highlightNthMatchedRequestForSearch( |
885 this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode) , false); | 899 this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode) , false); |
886 | 900 |
887 this._staleRequestIds = {}; | |
888 this._updateSummaryBar(); | 901 this._updateSummaryBar(); |
889 | 902 |
890 if (nodesToInsert.size) | 903 if (nodesToInsert.size) |
891 this._columns.sortByCurrentColumn(); | 904 this._columns.sortByCurrentColumn(); |
892 | 905 |
893 this._dataGrid.updateInstantly(); | 906 this._dataGrid.updateInstantly(); |
907 this._didRefreshForTest(); | |
908 } | |
909 | |
910 _didRefreshForTest() { | |
894 } | 911 } |
895 | 912 |
896 /** | 913 /** |
897 * @param {!Network.NetworkRequestNode} node | 914 * @param {!Network.NetworkRequestNode} node |
898 * @return {?Network.NetworkNode} | 915 * @return {?Network.NetworkNode} |
899 */ | 916 */ |
900 _parentNodeForInsert(node) { | 917 _parentNodeForInsert(node) { |
901 if (!this._activeGroupLookup) | 918 if (!this._activeGroupLookup) |
902 return this._dataGrid.rootNode(); | 919 return this._dataGrid.rootNode(); |
903 | 920 |
904 var groupNode = this._activeGroupLookup.groupNodeForRequest(node.request()); | 921 var groupNode = this._activeGroupLookup.groupNodeForRequest(node.request()); |
905 if (!groupNode) | 922 if (!groupNode) |
906 return this._dataGrid.rootNode(); | 923 return this._dataGrid.rootNode(); |
907 return groupNode; | 924 return groupNode; |
908 } | 925 } |
909 | 926 |
910 reset() { | 927 _reset() { |
911 this._requestWithHighlightedInitiators = null; | 928 this._requestWithHighlightedInitiators = null; |
912 this.dispatchEventToListeners(Network.NetworkLogView.Events.RequestSelected, null); | 929 this.dispatchEventToListeners(Network.NetworkLogView.Events.RequestSelected, null); |
913 | 930 |
914 this._clearSearchMatchedList(); | 931 this._clearSearchMatchedList(); |
915 | 932 |
916 this._setHoveredNode(null); | 933 this._setHoveredNode(null); |
917 this._columns.reset(); | 934 this._columns.reset(); |
918 | 935 |
919 this._timeFilter = null; | 936 this._timeFilter = null; |
920 this._calculator.reset(); | 937 this._calculator.reset(); |
921 | 938 |
922 this._timeCalculator.setWindow(null); | 939 this._timeCalculator.setWindow(null); |
923 this.linkifier.reset(); | 940 this.linkifier.reset(); |
924 this.badgePool.reset(); | 941 this.badgePool.reset(); |
925 | 942 |
926 if (this._activeGroupLookup) | 943 if (this._activeGroupLookup) |
927 this._activeGroupLookup.reset(); | 944 this._activeGroupLookup.reset(); |
928 this._nodesByRequestId.clear(); | 945 this._staleRequests.clear(); |
929 this._staleRequestIds = {}; | |
930 this._resetSuggestionBuilder(); | 946 this._resetSuggestionBuilder(); |
931 | 947 |
932 this._mainRequestLoadTime = -1; | 948 this._mainRequestLoadTime = -1; |
933 this._mainRequestDOMContentLoadedTime = -1; | 949 this._mainRequestDOMContentLoadedTime = -1; |
934 | 950 |
935 this._dataGrid.rootNode().removeChildren(); | 951 this._dataGrid.rootNode().removeChildren(); |
936 this._updateSummaryBar(); | 952 this._updateSummaryBar(); |
937 this._dataGrid.setStickToBottom(true); | 953 this._dataGrid.setStickToBottom(true); |
938 } | 954 } |
939 | 955 |
940 /** | 956 /** |
941 * @param {string} filterString | 957 * @param {string} filterString |
942 */ | 958 */ |
943 setTextFilterValue(filterString) { | 959 setTextFilterValue(filterString) { |
944 this._textFilterUI.setValue(filterString); | 960 this._textFilterUI.setValue(filterString); |
945 this._textFilterUI.setRegexChecked(false); | 961 this._textFilterUI.setRegexChecked(false); |
946 this._dataURLFilterUI.setChecked(false); | 962 this._dataURLFilterUI.setChecked(false); |
947 this._resourceCategoryFilterUI.reset(); | 963 this._resourceCategoryFilterUI.reset(); |
948 } | 964 } |
949 | 965 |
950 /** | 966 /** |
967 * @param {!SDK.NetworkRequest} request | |
968 */ | |
969 _createNodeForRequest(request) { | |
970 var node = new Network.NetworkRequestNode(this, request); | |
971 request[Network.NetworkLogView._networkNodeSymbol] = node; | |
972 node[Network.NetworkLogView._isFilteredOutSymbol] = true; | |
973 node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = false; | |
974 | |
975 if (request.redirects) | |
976 request.redirects.forEach(this._refreshRequest.bind(this)); | |
977 return node; | |
978 } | |
979 | |
980 /** | |
951 * @param {!Common.Event} event | 981 * @param {!Common.Event} event |
952 */ | 982 */ |
953 _onRequestStarted(event) { | 983 _onRequestsRemoved(event) { |
954 if (!this._recording) | 984 var requests = /** @type {!Set<!SDK.NetworkRequest>} */ (event.data); |
955 return; | 985 for (var request of requests) { |
956 var request = /** @type {!SDK.NetworkRequest} */ (event.data); | 986 var node = request[Network.NetworkLogView._networkNodeSymbol]; |
957 this._appendRequest(request); | 987 while (node && node.parent) { |
988 var parent = node.parent; | |
989 this._nodesToRemove.add(node); | |
990 if (parent.children.length > 1) | |
dgozman
2017/06/08 18:25:17
This won't ever remove parents with 2 children, si
allada
2017/06/08 21:06:51
Good catch, I forgot to check if the children were
| |
991 break; | |
992 node = parent; | |
993 } | |
994 this._staleRequests.delete(request); | |
995 delete request[Network.NetworkLogView._networkNodeSymbol]; | |
996 } | |
958 } | 997 } |
959 | 998 |
960 /** | 999 /** |
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 | 1000 * @param {!Common.Event} event |
986 */ | 1001 */ |
987 _onRequestUpdated(event) { | 1002 _onRequestUpdated(event) { |
988 var request = /** @type {!SDK.NetworkRequest} */ (event.data); | 1003 var request = /** @type {!SDK.NetworkRequest} */ (event.data); |
989 this._refreshRequest(request); | 1004 this._refreshRequest(request); |
990 } | 1005 } |
991 | 1006 |
992 /** | 1007 /** |
993 * @param {!SDK.NetworkRequest} request | 1008 * @param {!SDK.NetworkRequest} request |
994 */ | 1009 */ |
995 _refreshRequest(request) { | 1010 _refreshRequest(request) { |
996 if (!this._nodesByRequestId.get(request.requestId())) | |
997 return; | |
998 | |
999 Network.NetworkLogView._subdomains(request.domain) | 1011 Network.NetworkLogView._subdomains(request.domain) |
1000 .forEach( | 1012 .forEach( |
1001 this._suggestionBuilder.addItem.bind(this._suggestionBuilder, Networ k.NetworkLogView.FilterType.Domain)); | 1013 this._suggestionBuilder.addItem.bind(this._suggestionBuilder, Networ k.NetworkLogView.FilterType.Domain)); |
1002 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Method, re quest.requestMethod); | 1014 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Method, re quest.requestMethod); |
1003 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.MimeType, request.mimeType); | 1015 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.MimeType, request.mimeType); |
1004 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Scheme, '' + request.scheme); | 1016 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Scheme, '' + request.scheme); |
1005 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.StatusCode , '' + request.statusCode); | 1017 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.StatusCode , '' + request.statusCode); |
1006 | 1018 |
1007 var priority = request.initialPriority(); | 1019 var priority = request.initialPriority(); |
1008 if (priority) { | 1020 if (priority) { |
(...skipping 21 matching lines...) Expand all Loading... | |
1030 for (var i = 0, l = responseHeaders.length; i < l; ++i) | 1042 for (var i = 0, l = responseHeaders.length; i < l; ++i) |
1031 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.HasRespo nseHeader, responseHeaders[i].name); | 1043 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.HasRespo nseHeader, responseHeaders[i].name); |
1032 var cookies = request.responseCookies; | 1044 var cookies = request.responseCookies; |
1033 for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) { | 1045 for (var i = 0, l = cookies ? cookies.length : 0; i < l; ++i) { |
1034 var cookie = cookies[i]; | 1046 var cookie = cookies[i]; |
1035 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eDomain, cookie.domain()); | 1047 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eDomain, cookie.domain()); |
1036 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eName, cookie.name()); | 1048 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eName, cookie.name()); |
1037 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eValue, cookie.value()); | 1049 this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCooki eValue, cookie.value()); |
1038 } | 1050 } |
1039 | 1051 |
1040 this._staleRequestIds[request.requestId()] = true; | 1052 this._staleRequests.add(request); |
1041 this.dispatchEventToListeners(Network.NetworkLogView.Events.UpdateRequest, r equest); | |
1042 this.scheduleRefresh(); | 1053 this.scheduleRefresh(); |
1043 } | 1054 } |
1044 | 1055 |
1045 /** | 1056 /** |
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} | 1057 * @return {number} |
1082 */ | 1058 */ |
1083 rowHeight() { | 1059 rowHeight() { |
1084 return this._rowHeight; | 1060 return this._rowHeight; |
1085 } | 1061 } |
1086 | 1062 |
1087 /** | 1063 /** |
1088 * @param {boolean} gridMode | 1064 * @param {boolean} gridMode |
1089 */ | 1065 */ |
1090 switchViewMode(gridMode) { | 1066 switchViewMode(gridMode) { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1182 */ | 1158 */ |
1183 function removeBlockedURL(url) { | 1159 function removeBlockedURL(url) { |
1184 patterns = patterns.filter(pattern => pattern.url !== url); | 1160 patterns = patterns.filter(pattern => pattern.url !== url); |
1185 manager.setBlockedPatterns(patterns); | 1161 manager.setBlockedPatterns(patterns); |
1186 UI.viewManager.showView('network.blocked-urls'); | 1162 UI.viewManager.showView('network.blocked-urls'); |
1187 } | 1163 } |
1188 } | 1164 } |
1189 } | 1165 } |
1190 | 1166 |
1191 _harRequests() { | 1167 _harRequests() { |
1192 var requests = this._nodesByRequestId.valuesArray().map(function(node) { | 1168 var httpRequests = NetworkLog.networkLog.requests().filter(Network.NetworkLo gView.HTTPRequestsFilter); |
1193 return node.request(); | |
1194 }); | |
1195 var httpRequests = requests.filter(Network.NetworkLogView.HTTPRequestsFilter ); | |
1196 return httpRequests.filter(Network.NetworkLogView.FinishedRequestsFilter); | 1169 return httpRequests.filter(Network.NetworkLogView.FinishedRequestsFilter); |
1197 } | 1170 } |
1198 | 1171 |
1199 _copyAll() { | 1172 _copyAll() { |
1200 var harArchive = {log: (new NetworkLog.HARLog(this._harRequests())).build()} ; | 1173 var harArchive = {log: (new NetworkLog.HARLog(this._harRequests())).build()} ; |
1201 InspectorFrontendHost.copyText(JSON.stringify(harArchive, null, 2)); | 1174 InspectorFrontendHost.copyText(JSON.stringify(harArchive, null, 2)); |
1202 } | 1175 } |
1203 | 1176 |
1204 /** | 1177 /** |
1205 * @param {!SDK.NetworkRequest} request | 1178 * @param {!SDK.NetworkRequest} request |
(...skipping 29 matching lines...) Expand all Loading... | |
1235 * @param {string} platform | 1208 * @param {string} platform |
1236 */ | 1209 */ |
1237 _copyCurlCommand(request, platform) { | 1210 _copyCurlCommand(request, platform) { |
1238 InspectorFrontendHost.copyText(this._generateCurlCommand(request, platform)) ; | 1211 InspectorFrontendHost.copyText(this._generateCurlCommand(request, platform)) ; |
1239 } | 1212 } |
1240 | 1213 |
1241 /** | 1214 /** |
1242 * @param {string} platform | 1215 * @param {string} platform |
1243 */ | 1216 */ |
1244 _copyAllCurlCommand(platform) { | 1217 _copyAllCurlCommand(platform) { |
1245 var requests = this._nodesByRequestId.valuesArray().map(node => node.request ()); | 1218 var requests = NetworkLog.networkLog.requests(); |
1246 var commands = []; | 1219 var commands = []; |
1247 for (var request of requests) | 1220 for (var request of requests) |
1248 commands.push(this._generateCurlCommand(request, platform)); | 1221 commands.push(this._generateCurlCommand(request, platform)); |
1249 if (platform === 'win') | 1222 if (platform === 'win') |
1250 InspectorFrontendHost.copyText(commands.join(' &\r\n')); | 1223 InspectorFrontendHost.copyText(commands.join(' &\r\n')); |
1251 else | 1224 else |
1252 InspectorFrontendHost.copyText(commands.join(' ;\n')); | 1225 InspectorFrontendHost.copyText(commands.join(' ;\n')); |
1253 } | 1226 } |
1254 | 1227 |
1255 _exportAll() { | 1228 _exportAll() { |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1603 this._clearSearchMatchedList(); | 1576 this._clearSearchMatchedList(); |
1604 this.dispatchEventToListeners(Network.NetworkLogView.Events.SearchCountUpdat ed, 0); | 1577 this.dispatchEventToListeners(Network.NetworkLogView.Events.SearchCountUpdat ed, 0); |
1605 } | 1578 } |
1606 | 1579 |
1607 /** | 1580 /** |
1608 * @param {!SDK.NetworkRequest} request | 1581 * @param {!SDK.NetworkRequest} request |
1609 */ | 1582 */ |
1610 revealAndHighlightRequest(request) { | 1583 revealAndHighlightRequest(request) { |
1611 this.removeAllNodeHighlights(); | 1584 this.removeAllNodeHighlights(); |
1612 | 1585 |
1613 var node = this._nodesByRequestId.get(request.requestId()); | 1586 var node = request[Network.NetworkLogView._networkNodeSymbol]; |
1614 if (node) { | 1587 if (node) { |
1615 node.reveal(); | 1588 node.reveal(); |
1616 this._highlightNode(node); | 1589 this._highlightNode(node); |
1617 } | 1590 } |
1618 } | 1591 } |
1619 | 1592 |
1620 removeAllNodeHighlights() { | 1593 removeAllNodeHighlights() { |
1621 if (this._highlightedNode) { | 1594 if (this._highlightedNode) { |
1622 this._highlightedNode.element().classList.remove('highlighted-row'); | 1595 this._highlightedNode.element().classList.remove('highlighted-row'); |
1623 delete this._highlightedNode; | 1596 delete this._highlightedNode; |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1754 command.push('--compressed'); | 1727 command.push('--compressed'); |
1755 | 1728 |
1756 if (request.securityState() === Protocol.Security.SecurityState.Insecure) | 1729 if (request.securityState() === Protocol.Security.SecurityState.Insecure) |
1757 command.push('--insecure'); | 1730 command.push('--insecure'); |
1758 return command.join(' '); | 1731 return command.join(' '); |
1759 } | 1732 } |
1760 }; | 1733 }; |
1761 | 1734 |
1762 Network.NetworkLogView._isFilteredOutSymbol = Symbol('isFilteredOut'); | 1735 Network.NetworkLogView._isFilteredOutSymbol = Symbol('isFilteredOut'); |
1763 Network.NetworkLogView._isMatchingSearchQuerySymbol = Symbol('isMatchingSearchQu ery'); | 1736 Network.NetworkLogView._isMatchingSearchQuerySymbol = Symbol('isMatchingSearchQu ery'); |
1737 Network.NetworkLogView._networkNodeSymbol = Symbol('NetworkNode'); | |
1764 | 1738 |
1765 Network.NetworkLogView.HTTPSchemas = { | 1739 Network.NetworkLogView.HTTPSchemas = { |
1766 'http': true, | 1740 'http': true, |
1767 'https': true, | 1741 'https': true, |
1768 'ws': true, | 1742 'ws': true, |
1769 'wss': true | 1743 'wss': true |
1770 }; | 1744 }; |
1771 | 1745 |
1772 /** @enum {symbol} */ | 1746 /** @enum {symbol} */ |
1773 Network.NetworkLogView.Events = { | 1747 Network.NetworkLogView.Events = { |
1774 RequestSelected: Symbol('RequestSelected'), | 1748 RequestSelected: Symbol('RequestSelected'), |
1775 SearchCountUpdated: Symbol('SearchCountUpdated'), | 1749 SearchCountUpdated: Symbol('SearchCountUpdated'), |
1776 SearchIndexUpdated: Symbol('SearchIndexUpdated'), | 1750 SearchIndexUpdated: Symbol('SearchIndexUpdated') |
1777 UpdateRequest: Symbol('UpdateRequest') | |
1778 }; | 1751 }; |
1779 | 1752 |
1780 /** @enum {string} */ | 1753 /** @enum {string} */ |
1781 Network.NetworkLogView.FilterType = { | 1754 Network.NetworkLogView.FilterType = { |
1782 Domain: 'domain', | 1755 Domain: 'domain', |
1783 HasResponseHeader: 'has-response-header', | 1756 HasResponseHeader: 'has-response-header', |
1784 Is: 'is', | 1757 Is: 'is', |
1785 LargerThan: 'larger-than', | 1758 LargerThan: 'larger-than', |
1786 Method: 'method', | 1759 Method: 'method', |
1787 MimeType: 'mime-type', | 1760 MimeType: 'mime-type', |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1822 | 1795 |
1823 Network.GroupLookupInterface.prototype = { | 1796 Network.GroupLookupInterface.prototype = { |
1824 /** | 1797 /** |
1825 * @param {!SDK.NetworkRequest} request | 1798 * @param {!SDK.NetworkRequest} request |
1826 * @return {?Network.NetworkGroupNode} | 1799 * @return {?Network.NetworkGroupNode} |
1827 */ | 1800 */ |
1828 groupNodeForRequest: function(request) {}, | 1801 groupNodeForRequest: function(request) {}, |
1829 | 1802 |
1830 reset: function() {} | 1803 reset: function() {} |
1831 }; | 1804 }; |
OLD | NEW |