From efd75ea4357c32eba1376a44d1e3587532445d36 Mon Sep 17 00:00:00 2001 From: Harold Martin Date: Mon, 9 Aug 2021 02:41:13 -0700 Subject: [PATCH] Improve protobuf support (#2513) Summary: * Update protobuf library to support map types * Improved usage messaging in UI * Always attempt to decode requests with a protobuf definition ## Changelog Improved protobuf support Pull Request resolved: https://github.com/facebook/flipper/pull/2513 Reviewed By: mweststrate Differential Revision: D30162379 Pulled By: passy fbshipit-source-id: 201fb06045822641be5840b121da180a201be974 --- .../plugins/retrofit2-protobuf/build.gradle | 2 +- .../network/ProtobufDefinitionsRepository.tsx | 4 ++++ .../plugins/public/network/RequestDetails.tsx | 20 +++++++++++++++---- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/android/plugins/retrofit2-protobuf/build.gradle b/android/plugins/retrofit2-protobuf/build.gradle index 92accde03..8f6510f55 100644 --- a/android/plugins/retrofit2-protobuf/build.gradle +++ b/android/plugins/retrofit2-protobuf/build.gradle @@ -25,7 +25,7 @@ android { implementation project(':network-plugin') implementation deps.protobuf implementation "com.squareup.retrofit2:retrofit:2.9.0" - implementation "com.github.hbmartin:protobuf_java_to_protobufjs:0.1.0" + implementation "com.github.hbmartin:protobuf_java_to_protobufjs:0.2.0" compileOnly deps.jsr305 } } diff --git a/desktop/plugins/public/network/ProtobufDefinitionsRepository.tsx b/desktop/plugins/public/network/ProtobufDefinitionsRepository.tsx index bd968cff1..814a7834d 100644 --- a/desktop/plugins/public/network/ProtobufDefinitionsRepository.tsx +++ b/desktop/plugins/public/network/ProtobufDefinitionsRepository.tsx @@ -63,6 +63,10 @@ export class ProtobufDefinitionsRepository { } } + public hasDefinition(method: string, path: string): boolean { + return this.rawDefinitions.hasOwnProperty(this.key(method, path)); + } + private generateRoots(key: string) { if (key in this.cachedDecodedDefinitions) { return; diff --git a/desktop/plugins/public/network/RequestDetails.tsx b/desktop/plugins/public/network/RequestDetails.tsx index 58e071121..0f03ad16d 100644 --- a/desktop/plugins/public/network/RequestDetails.tsx +++ b/desktop/plugins/public/network/RequestDetails.tsx @@ -670,7 +670,11 @@ class ProtobufFormatter { formatRequest(request: Request) { if ( getHeaderValue(request.requestHeaders, 'content-type') === - 'application/x-protobuf' + 'application/x-protobuf' || + this.protobufDefinitionRepository.hasDefinition( + request.method, + request.url, + ) ) { const protobufDefinition = this.protobufDefinitionRepository.getRequestType( @@ -681,7 +685,9 @@ class ProtobufFormatter { return ( Could not locate protobuf definition for request body of{' '} - {request.url} + {request.url}
+ Please send ProtobufJS definitions with the plugin's + addProtobufDefinitions method.
); } @@ -704,7 +710,11 @@ class ProtobufFormatter { if ( getHeaderValue(request.responseHeaders, 'content-type') === 'application/x-protobuf' || - request.url.endsWith('.proto') + request.url.endsWith('.proto') || + this.protobufDefinitionRepository.hasDefinition( + request.method, + request.url, + ) ) { const protobufDefinition = this.protobufDefinitionRepository.getResponseType( @@ -715,7 +725,9 @@ class ProtobufFormatter { return ( Could not locate protobuf definition for response body of{' '} - {request.url} + {request.url}
+ Please send ProtobufJS definitions with the plugin's + addProtobufDefinitions method.
); }