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

Simplify recorder API by requiring that requestWillBeSent: is called first with the request.

This way, we don’t need to pass the request to every recorder method.
Ryan Olson лет назад: 11
Родитель
Сommit
fd54e4cae0

+ 4 - 4
Classes/Network/FLEXNetworkRecorder.h

@@ -45,16 +45,16 @@ extern NSString *const kFLEXNetworkRecorderTransactionsClearedNotification;
 - (void)recordRequestWillBeSentWithRequestId:(NSString *)requestId request:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;
 
 /// Call when HTTP response is available.
-- (void)recordResponseReceivedWithRequestId:(NSString *)requestId request:(NSURLRequest *)request response:(NSURLResponse *)response;
+- (void)recordResponseReceivedWithRequestId:(NSString *)requestId response:(NSURLResponse *)response;
 
 /// Call when data chunk is received over the network.
-- (void)recordDataReceivedWithRequestId:(NSString *)requestId request:(NSURLRequest *)request dataLength:(int64_t)dataLength;
+- (void)recordDataReceivedWithRequestId:(NSString *)requestId dataLength:(int64_t)dataLength;
 
 /// Call when HTTP request has finished loading.
-- (void)recordLoadingFinishedWithRequestId:(NSString *)requestId request:(NSURLRequest *)request responseBody:(NSData *)responseBody;
+- (void)recordLoadingFinishedWithRequestId:(NSString *)requestId responseBody:(NSData *)responseBody;
 
 /// Call when HTTP request has failed to load.
-- (void)recordLoadingFailedWithRequestId:(NSString *)requestId request:(NSURLRequest *)request error:(NSError *)error;
+- (void)recordLoadingFailedWithRequestId:(NSString *)requestId error:(NSError *)error;
 
 /// Call to set the request mechanism anytime after recordRequestWillBeSent... has been called.
 /// This string can be set to anything useful about the API used to make the request.

+ 38 - 31
Classes/Network/FLEXNetworkRecorder.m

@@ -104,22 +104,32 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 - (void)recordRequestWillBeSentWithRequestId:(NSString *)requestId request:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
 {
     if (redirectResponse) {
-        [self recordResponseReceivedWithRequestId:requestId request:request response:redirectResponse];
-        [self recordLoadingFinishedWithRequestId:requestId request:request responseBody:nil];
+        [self recordResponseReceivedWithRequestId:requestId response:redirectResponse];
+        [self recordLoadingFinishedWithRequestId:requestId responseBody:nil];
     }
 
     dispatch_async(self.queue, ^{
-        FLEXNetworkTransaction *transaction = [self addOrRetrieveTransactionForRequestId:requestId request:request];
+        FLEXNetworkTransaction *transaction = [[FLEXNetworkTransaction alloc] init];
+        transaction.requestId = requestId;
+        transaction.request = request;
+        transaction.startTime = [NSDate date];
+
+        [self.orderedTransactions insertObject:transaction atIndex:0];
+        [self.networkTransactionsForRequestIdentifiers setObject:transaction forKey:requestId];
         transaction.transactionState = FLEXNetworkTransactionStateAwaitingResponse;
 
         [self postNewTransactionNotificationWithTransaction:transaction];
     });
 }
 
-- (void)recordResponseReceivedWithRequestId:(NSString *)requestId request:(NSURLRequest *)request response:(NSURLResponse *)response
+- (void)recordResponseReceivedWithRequestId:(NSString *)requestId response:(NSURLResponse *)response
 {
     dispatch_async(self.queue, ^{
-        FLEXNetworkTransaction *transaction = [self addOrRetrieveTransactionForRequestId:requestId request:request];
+        FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            NSLog(@"Unknown transaction; reponseReceived; id: %@", requestId);
+            return;
+        }
         transaction.response = response;
         transaction.transactionState = FLEXNetworkTransactionStateReceivingData;
         transaction.latency = -[transaction.startTime timeIntervalSinceNow];
@@ -128,20 +138,28 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
     });
 }
 
-- (void)recordDataReceivedWithRequestId:(NSString *)requestId request:(NSURLRequest *)request dataLength:(int64_t)dataLength
+- (void)recordDataReceivedWithRequestId:(NSString *)requestId dataLength:(int64_t)dataLength
 {
     dispatch_async(self.queue, ^{
-        FLEXNetworkTransaction *transaction = [self addOrRetrieveTransactionForRequestId:requestId request:request];
+        FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            NSLog(@"Unknown transaction; dataReceived; id: %@", requestId);
+            return;
+        }
         transaction.receivedDataLength += dataLength;
 
         [self postUpdateNotificationForTransaction:transaction];
     });
 }
 
-- (void)recordLoadingFinishedWithRequestId:(NSString *)requestId request:(NSURLRequest *)request responseBody:(NSData *)responseBody
+- (void)recordLoadingFinishedWithRequestId:(NSString *)requestId responseBody:(NSData *)responseBody
 {
     dispatch_async(self.queue, ^{
-        FLEXNetworkTransaction *transaction = [self addOrRetrieveTransactionForRequestId:requestId request:request];
+        FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            NSLog(@"Unknown transaction; loadingFinished; id: %@", requestId);
+            return;
+        }
         transaction.transactionState = FLEXNetworkTransactionStateFinished;
         transaction.duration = -[transaction.startTime timeIntervalSinceNow];
 
@@ -191,10 +209,14 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
     });
 }
 
-- (void)recordLoadingFailedWithRequestId:(NSString *)requestId request:(NSURLRequest *)request error:(NSError *)error
+- (void)recordLoadingFailedWithRequestId:(NSString *)requestId error:(NSError *)error
 {
     dispatch_async(self.queue, ^{
-        FLEXNetworkTransaction *transaction = [self addOrRetrieveTransactionForRequestId:requestId request:request];
+        FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            NSLog(@"Unknown transaction; loadingFailed; id: %@", requestId);
+            return;
+        }
         transaction.transactionState = FLEXNetworkTransactionStateFailed;
         transaction.duration = -[transaction.startTime timeIntervalSinceNow];
         transaction.error = error;
@@ -206,32 +228,17 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 - (void)recordMechanism:(NSString *)mechanism forRequestId:(NSString *)requestId
 {
     dispatch_async(self.queue, ^{
-        FLEXNetworkTransaction *transaction = [self addOrRetrieveTransactionForRequestId:requestId request:nil];
+        FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
+        if (!transaction) {
+            NSLog(@"Unknown transaction; recordMechanism; id: %@", requestId);
+            return;
+        }
         transaction.requestMechanism = mechanism;
 
         [self postUpdateNotificationForTransaction:transaction];
     });
 }
 
-/// Should only be called on the serial queue used in this class
-- (FLEXNetworkTransaction *)addOrRetrieveTransactionForRequestId:(NSString *)requestId request:(NSURLRequest *)request
-{
-    FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
-    if (!transaction) {
-        transaction = [[FLEXNetworkTransaction alloc] init];
-        transaction.requestId = requestId;
-        transaction.request = request;
-        transaction.startTime = [NSDate date];
-
-        [self.orderedTransactions insertObject:transaction atIndex:0];
-        [self.networkTransactionsForRequestIdentifiers setObject:transaction forKey:requestId];
-    }
-    if (request) {
-        transaction.request = request;
-    }
-    return transaction;
-}
-
 #pragma mark Notification Posting
 
 - (void)postNewTransactionNotificationWithTransaction:(FLEXNetworkTransaction *)transaction

+ 19 - 10
Classes/Network/PonyDebugger/FLEXNetworkObserver.m

@@ -857,7 +857,7 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
         [self setAccumulatedData:dataAccumulator forConnection:connection];
 
         NSString *requestID = [self requestIDForConnection:connection];
-        [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID request:connection.currentRequest response:response];
+        [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID response:response];
     }];
 }
 
@@ -872,7 +872,7 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
         
         NSString *requestID = [self requestIDForConnection:connection];
         
-        [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestId:requestID request:connection.currentRequest dataLength:data.length];
+        [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestId:requestID dataLength:data.length];
     }];
 }
 
@@ -883,7 +883,7 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
 
         NSData *accumulatedData = [self accumulatedDataForConnection:connection];
         
-        [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestId:requestID request:connection.currentRequest responseBody:accumulatedData];
+        [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestId:requestID responseBody:accumulatedData];
         
         [self connectionFinished:connection];
     }];
@@ -893,7 +893,16 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
 {
     [self performBlock:^{
         NSString *requestID = [self requestIDForConnection:connection];
-        [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestId:requestID request:connection.currentRequest error:error];
+
+        // Errors can occur prior to the willSendRequest:... delegate call. In those cases, let the recorder know about the request before logging the failure.
+        NSURLRequest *request = [self requestForConnection:connection];
+        if (!request) {
+            request = connection.currentRequest;
+            [self setRequest:request forConnection:connection];
+            [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestId:requestID request:request redirectResponse:nil];
+        }
+
+        [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestId:requestID error:error];
         
         [self connectionFinished:connection];
     }];
@@ -946,7 +955,7 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
         NSString *requestID = [self requestIDForTask:dataTask];
         NSString *requestMechanism = [NSString stringWithFormat:@"NSURLSessionDataTask (delegate: %@)", [delegate class]];
         [[FLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism forRequestId:requestID];
-        [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID request:dataTask.currentRequest response:response];
+        [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID response:response];
     }];
 }
 
@@ -971,7 +980,7 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
 
         NSString *requestID = [self requestIDForTask:dataTask];
 
-        [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestId:requestID request:dataTask.currentRequest dataLength:data.length];
+        [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestId:requestID dataLength:data.length];
     }];
 }
 
@@ -983,9 +992,9 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
         NSData *accumulatedData = [self accumulatedDataForTask:task];
 
         if (error) {
-            [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestId:requestID request:task.currentRequest error:error];
+            [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestId:requestID error:error];
         } else {
-            [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestId:requestID request:task.currentRequest responseBody:accumulatedData];
+            [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestId:requestID responseBody:accumulatedData];
         }
 
         [self taskFinished:task];
@@ -999,12 +1008,12 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
         if (![[self requestStateForTask:downloadTask] dataAccumulator]) {
             NSMutableData *dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)totalBytesExpectedToWrite];
             [self setAccumulatedData:dataAccumulator forTask:downloadTask];
-            [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID request:downloadTask.currentRequest response:downloadTask.response];
+            [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID response:downloadTask.response];
         }
 
         NSString *requestMechanism = [NSString stringWithFormat:@"NSURLSessionDownloadTask (delegate: %@)", [delegate class]];
         [[FLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism forRequestId:requestID];
-        [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestId:requestID request:downloadTask.currentRequest dataLength:bytesWritten];
+        [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestId:requestID dataLength:bytesWritten];
     }];
 }