Просмотр исходного кода

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
Родитель
Сommit
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
 // Recording network activity
 
 
 /// Call when app is about to send HTTP request.
 /// 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;
 - (void)recordRequestWillBeSentWithRequestId:(NSString *)requestId request:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;
 
 
 /// Call when HTTP response is available.
 /// 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, ^{
     dispatch_async(self.queue, ^{
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            return;
+        }
         transaction.response = response;
         transaction.response = response;
         transaction.transactionState = FLEXNetworkTransactionStateReceivingData;
         transaction.transactionState = FLEXNetworkTransactionStateReceivingData;
         transaction.latency = -[transaction.startTime timeIntervalSinceNow];
         transaction.latency = -[transaction.startTime timeIntervalSinceNow];
@@ -124,6 +127,9 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 {
 {
     dispatch_async(self.queue, ^{
     dispatch_async(self.queue, ^{
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            return;
+        }
         transaction.receivedDataLength += dataLength;
         transaction.receivedDataLength += dataLength;
 
 
         [self postUpdateNotificationForTransaction:transaction];
         [self postUpdateNotificationForTransaction:transaction];
@@ -134,6 +140,9 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 {
 {
     dispatch_async(self.queue, ^{
     dispatch_async(self.queue, ^{
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            return;
+        }
         transaction.transactionState = FLEXNetworkTransactionStateFinished;
         transaction.transactionState = FLEXNetworkTransactionStateFinished;
         transaction.duration = -[transaction.startTime timeIntervalSinceNow];
         transaction.duration = -[transaction.startTime timeIntervalSinceNow];
 
 
@@ -165,6 +174,9 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 {
 {
     dispatch_async(self.queue, ^{
     dispatch_async(self.queue, ^{
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
         FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            return;
+        }
         transaction.transactionState = FLEXNetworkTransactionStateFailed;
         transaction.transactionState = FLEXNetworkTransactionStateFailed;
         transaction.duration = [transaction.startTime timeIntervalSinceNow];
         transaction.duration = [transaction.startTime timeIntervalSinceNow];
         transaction.error = error;
         transaction.error = error;