Преглед изворни кода

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 година
родитељ
комит
993b61ecb6
2 измењених фајлова са 13 додато и 0 уклоњено
  1. 1 0
      Classes/Network/FLEXNetworkRecorder.h
  2. 12 0
      Classes/Network/FLEXNetworkRecorder.m

+ 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;