Add toggle to filter out SOCKET rows in Network screen (#9698)
* Add toggle to filter out socket rows in Network screen
* fix: add toggle filter to hide HTTP profiler tcp sockets in Network screen
* Removed visibleForTesting annotation and fixed analyzer warnings
* fix: addresses PR review feedbacks
* Update packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
Co-authored-by: Kenzie Davisson <43759233+kenzieschmoll@users.noreply.github.com>
* Update packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
Co-authored-by: Kenzie Davisson <43759233+kenzieschmoll@users.noreply.github.com>
* Refactor test to use activeFilter.value.settingFilters and set value directly as suggested in review.
* fixed format
---------
Co-authored-by: Kenzie Davisson <43759233+kenzieschmoll@users.noreply.github.com>
diff --git a/packages/devtools_app/lib/src/screens/network/network_controller.dart b/packages/devtools_app/lib/src/screens/network/network_controller.dart
index 62fd5c5..deecab6 100644
--- a/packages/devtools_app/lib/src/screens/network/network_controller.dart
+++ b/packages/devtools_app/lib/src/screens/network/network_controller.dart
@@ -91,6 +91,8 @@
return null;
}
+ static const hideHttpSocketsFilterId = 'network-hide-http-sockets';
+
static const methodFilterId = 'network-method-filter';
static const statusFilterId = 'network-status-filter';
@@ -98,6 +100,16 @@
static const typeFilterId = 'network-type-filter';
@override
+ SettingFilters<NetworkRequest> createSettingFilters() => [
+ ToggleFilter<NetworkRequest>(
+ id: hideHttpSocketsFilterId,
+ name: 'Hide HTTP profiler sockets',
+ includeCallback: (request) => request is! Socket,
+ defaultValue: false,
+ ),
+ ];
+
+ @override
Map<String, QueryFilterArgument<NetworkRequest>> createQueryFilterArgs() => {
methodFilterId: QueryFilterArgument<NetworkRequest>(
keys: ['method', 'm'],
@@ -237,7 +249,6 @@
}
}
- @visibleForTesting
void processNetworkTrafficHelper(
List<SocketStatistic> sockets,
List<HttpProfileRequest>? httpRequests,
@@ -438,7 +449,7 @@
super.filterData(filter);
serviceConnection.errorBadgeManager.clearErrorCount(NetworkScreen.id);
final queryFilter = filter.queryFilter;
- if (queryFilter.isEmpty) {
+ if (filter.isEmpty) {
_currentNetworkRequests.value.forEach(_checkForError);
filteredData
..clear()
@@ -449,6 +460,11 @@
..clear()
..addAll(
_currentNetworkRequests.value.where((NetworkRequest r) {
+ final filteredOutBySettingFilters = filter.settingFilters.any(
+ (settingFilter) => !settingFilter.includeData(r),
+ );
+ if (filteredOutBySettingFilters) return false;
+
final filteredOutByQueryFilterArgument = queryFilter.filterArguments
.any((argument) => !argument.matchesValue(r));
if (filteredOutByQueryFilterArgument) return false;
diff --git a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
index 9963ddc..26d92bf 100644
--- a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
+++ b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
@@ -15,7 +15,7 @@
## General updates
-TODO: Remove this section if there are not any updates.
+- TODO: Remove this section if there are not any updates.
## Inspector updates
@@ -39,8 +39,7 @@
## Network profiler updates
-- Fix crash in the Network tab when viewing binary multipart request or
-response bodies. [#9680](https://github.com/flutter/devtools/pull/9680)
+- Added a filter setting to hide HTTP-profiler socket data. [#9698](https://github.com/flutter/devtools/pull/9698)
## Logging updates
diff --git a/packages/devtools_app/test/screens/network/network_controller_test.dart b/packages/devtools_app/test/screens/network/network_controller_test.dart
index a66bffa..1cc1d6d 100644
--- a/packages/devtools_app/test/screens/network/network_controller_test.dart
+++ b/packages/devtools_app/test/screens/network/network_controller_test.dart
@@ -259,6 +259,37 @@
expect(profile, hasLength(numRequests));
expect(controller.filteredData.value, hasLength(2));
});
+
+ test('filterData hides tcp sockets via setting filter', () async {
+ await controller.startRecording();
+ await controller.networkService.refreshNetworkData();
+
+ const numRequests = 9;
+ const numTcpSockets = 2;
+
+ expect(controller.filteredData.value, hasLength(numRequests));
+
+ // Enable the hide HTTP sockets toggle filter using activeFilter.
+ final socketFilter = controller.activeFilter.value.settingFilters[0];
+ socketFilter.setting.value = true;
+ controller.setActiveFilter();
+
+ expect(
+ controller.filteredData.value,
+ hasLength(numRequests - numTcpSockets),
+ );
+
+ final tcpSockets = controller.filteredData.value
+ .whereType<Socket>()
+ .where((s) => s.socketType == 'tcp')
+ .toList();
+ expect(tcpSockets, isEmpty);
+
+ // Disable and verify sockets are restored.
+ socketFilter.setting.value = false;
+ controller.setActiveFilter();
+ expect(controller.filteredData.value, hasLength(numRequests));
+ });
});
group('CurrentNetworkRequests', () {