Fixed <rdar://problem/4057004> Data from XMLHTTPRequest is never dealloced
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Mar 2005 22:56:39 +0000 (22:56 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Mar 2005 22:56:39 +0000 (22:56 +0000)
WebDataSource keeps an array of all the NSURLResponses associated
with the load for a page.  This is used to playback delegate messages
when loading from the page cache.  However, after the document
has completed it's initial load, we continue to keep track of responses.
So, this has the consequence of keeping all the responses for a page
around for the life of the page.  NSURLResponses are now very
heavy.  They indirectly reference the resource data (via the
download assessment dictionary).  This fix will keep
references to responses around for those resources loaded during initial
page load, but not after that point.

        Reviewed by Ken.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _addResponse:]):
        (-[WebDataSource _stopRecordingResponses]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _opened]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8922 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/WebView.subproj/WebDataSource.m
WebKit/WebView.subproj/WebDataSourcePrivate.h
WebKit/WebView.subproj/WebFrame.m

index d9ed8a0fb78d0ce9d1765ce72e9ef8fea69a246c..15cf47172f0646268c8a9300d727494935990768 100644 (file)
@@ -1,3 +1,27 @@
+2005-03-18  Richard Williamson   <rjw@apple.com>
+       
+       Fixed <rdar://problem/4057004> Data from XMLHTTPRequest is never dealloced
+
+       WebDataSource keeps an array of all the NSURLResponses associated
+       with the load for a page.  This is used to playback delegate messages
+       when loading from the page cache.  However, after the document
+       has completed it's initial load, we continue to keep track of responses. 
+       So, this has the consequence of keeping all the responses for a page
+       around for the life of the page.  NSURLResponses are now very
+       heavy.  They indirectly reference the resource data (via the
+       download assessment dictionary).  This fix will keep
+       references to responses around for those resources loaded during initial
+       page load, but not after that point.
+
+        Reviewed by Ken.
+
+        * WebView.subproj/WebDataSource.m:
+        (-[WebDataSource _addResponse:]):
+        (-[WebDataSource _stopRecordingResponses]):
+        * WebView.subproj/WebDataSourcePrivate.h:
+        * WebView.subproj/WebFrame.m:
+        (-[WebFrame _opened]):
+
 2005-03-18  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by Darin
index 6516ccb484c7cd863e9c6d89cfc83076f3062bbc..445e53325cb9016c1c6ef07ff881867870bf0556 100644 (file)
 
 - (void)_addResponse: (NSURLResponse *)r
 {
-    if (!_private->responses)
-        _private->responses = [[NSMutableArray alloc] init];
-    [_private->responses addObject: r];
+    if (!_private->stopRecordingResponses) {
+        if (!_private->responses)
+            _private->responses = [[NSMutableArray alloc] init];
+        [_private->responses addObject: r];
+    }
+}
+
+- (void)_stopRecordingResponses
+{
+    _private->stopRecordingResponses = YES;
 }
 
 - (NSArray *)_responses
index bef80a239730845239546e75854b068d942e325c..fda2a924da6960ebee372b1a2fa00e623a13e0be 100644 (file)
     // WebResourceLoadDelegate messages if the item is loaded from the
     // page cache.
     NSMutableArray *responses;
+    BOOL stopRecordingResponses;
 
     BOOL justOpenedForTargetedLink;
 
 
 - (void)_addResponse:(NSURLResponse *)r;
 - (NSArray *)_responses;
+- (void)_stopRecordingResponses;
 
 - (void)_stopLoadingWithError:(NSError *)error;
 
index 93452fac2711743ceb581b078f0c121da4586563..87790be5ebdf36554ccadd96da0434443c8142f5 100644 (file)
@@ -1065,6 +1065,8 @@ static CFAbsoluteTime _timeOfLastCompletedLoad;
         [[self dataSource] _setPrimaryLoadComplete: YES];
         [self _checkLoadCompleteForThisFrame];
     }
+
+    [[self dataSource] _stopRecordingResponses];
 }
 
 - (void)_checkLoadCompleteForThisFrame