Procházet zdrojové kódy

Fix response recording for NSURLSessionDownloadTasks

This logic was relying on the request not getting recorded until the first call of URLSession:downloadTask:didWriteData:… Now that we begin recording from -resume, we need a different way to tell if we should record that the response has been received.
Ryan Olson před 11 roky
rodič
revize
b1d6ac4d52
1 změnil soubory, kde provedl 4 přidání a 15 odebrání
  1. 4 15
      Classes/Network/PonyDebugger/FLEXNetworkObserver.m

+ 4 - 15
Classes/Network/PonyDebugger/FLEXNetworkObserver.m

@@ -995,24 +995,13 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id <NSU
 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite delegate:(id<NSURLSessionDelegate>)delegate
 {
     [self performBlock:^{
-        // If the request wasn't generated yet, then willSendRequest was not called. This appears to be an inconsistency in documentation
-        // and behavior.
-        NSURLRequest *request = [self requestForTask:downloadTask];
-        if (!request) {
-            request = downloadTask.currentRequest;
-            [self setRequest:request forTask:downloadTask];
-            NSString *requestID = [self requestIDForTask:downloadTask];
-
-            [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestId:requestID request:request redirectResponse:nil];
-
-            NSMutableData *dataAccumulator = nil;
-            dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger) totalBytesExpectedToWrite];
+        NSString *requestID = [self requestIDForTask:downloadTask];
+        if (![[self requestStateForTask:downloadTask] dataAccumulator]) {
+            NSMutableData *dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)totalBytesExpectedToWrite];
             [self setAccumulatedData:dataAccumulator forTask:downloadTask];
-
-            [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID request:request response:downloadTask.response];
+            [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID request:downloadTask.currentRequest response:downloadTask.response];
         }
 
-        NSString *requestID = [self requestIDForTask:downloadTask];
         NSString *requestMechanism = [NSString stringWithFormat:@"NSURLSessionDownloadTask (delegate: %@)", [delegate class]];
         [[FLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism forRequestId:requestID];
         [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestId:requestID request:downloadTask.currentRequest dataLength:bytesWritten];