Przeglądaj źródła

Bail in the network recorder if we get messages for a request we don’t know about.

At the moment, we’re requiring that recordRequstWillBeSentWithRequestId:… is called for every request. We could consider relaxing that requirement and doing more inference, but we will lose some information (e.g. timing) if we allow that.
Ryan Olson 11 lat temu
rodzic
commit
993b61ecb6

+ 1 - 0
Classes/Network/FLEXNetworkRecorder.h

@@ -35,6 +35,7 @@ extern NSString *const kFLEXNetworkRecorderUserInfoTransactionKey;
 // Recording network activity
 
 /// Call when app is about to send HTTP request.
+/// This method must be called for each recorded reqeust. Prior to this call, no information will be recorded for the request.
 - (void)recordRequestWillBeSentWithRequestId:(NSString *)requestId request:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;
 
 /// Call when HTTP response is available.

+ 12 - 0
Classes/Network/FLEXNetworkRecorder.m

@@ -112,6 +112,9 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 {
     dispatch_async(self.queue, ^{
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            return;
+        }
         transaction.response = response;
         transaction.transactionState = FLEXNetworkTransactionStateReceivingData;
         transaction.latency = -[transaction.startTime timeIntervalSinceNow];
@@ -124,6 +127,9 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 {
     dispatch_async(self.queue, ^{
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            return;
+        }
         transaction.receivedDataLength += dataLength;
 
         [self postUpdateNotificationForTransaction:transaction];
@@ -134,6 +140,9 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 {
     dispatch_async(self.queue, ^{
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            return;
+        }
         transaction.transactionState = FLEXNetworkTransactionStateFinished;
         transaction.duration = -[transaction.startTime timeIntervalSinceNow];
 
@@ -165,6 +174,9 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 {
     dispatch_async(self.queue, ^{
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            return;
+        }
         transaction.transactionState = FLEXNetworkTransactionStateFailed;
         transaction.duration = [transaction.startTime timeIntervalSinceNow];
         transaction.error = error;