[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

cblu cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:28:10 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 6680bb481da71b20843058de34027cbbc8f196c1
Author: cblu <cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Mar 2 02:59:59 2004 +0000

    	Fixed: <rdar://problem/3574979>: REGRESSION (129-TOT): crash loading macromedia.com
    
    	deliverResource was being called after it had already been called in setDefersCallbacks:.
    
            Reviewed by rjw.
    
            * WebView.subproj/WebBaseResourceHandleDelegate.h:
            * WebView.subproj/WebBaseResourceHandleDelegate.m:
            (-[WebBaseResourceHandleDelegate deliverResource]): set deliveredResource to YES
            (-[WebBaseResourceHandleDelegate deliverResourceAfterDelay]): new, calls deliverResource after a delay
            (-[WebBaseResourceHandleDelegate loadWithRequest:]): call deliverResourceAfterDelay
            (-[WebBaseResourceHandleDelegate setDefersCallbacks:]): call deliverResourceAfterDelay
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6151 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 298525c..d8b0531 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,18 @@
+2004-03-01  Chris Blumenberg  <cblu at apple.com>
+
+	Fixed: <rdar://problem/3574979>: REGRESSION (129-TOT): crash loading macromedia.com
+
+	deliverResource was being called after it had already been called in setDefersCallbacks:.
+
+        Reviewed by rjw.
+
+        * WebView.subproj/WebBaseResourceHandleDelegate.h:
+        * WebView.subproj/WebBaseResourceHandleDelegate.m:
+        (-[WebBaseResourceHandleDelegate deliverResource]): set deliveredResource to YES
+        (-[WebBaseResourceHandleDelegate deliverResourceAfterDelay]): new, calls deliverResource after a delay
+        (-[WebBaseResourceHandleDelegate loadWithRequest:]): call deliverResourceAfterDelay
+        (-[WebBaseResourceHandleDelegate setDefersCallbacks:]): call deliverResourceAfterDelay
+
 2004-03-01  Ken Kocienda  <kocienda at apple.com>
 
         Reviewed by me
diff --git a/WebKit/WebView.subproj/WebBaseResourceHandleDelegate.h b/WebKit/WebView.subproj/WebBaseResourceHandleDelegate.h
index de1d573..5e8277f 100644
--- a/WebKit/WebView.subproj/WebBaseResourceHandleDelegate.h
+++ b/WebKit/WebView.subproj/WebBaseResourceHandleDelegate.h
@@ -36,6 +36,7 @@
     BOOL reachedTerminalState;
     BOOL defersCallbacks;
     BOOL waitingToDeliverResource;
+    BOOL deliveredResource;
     WebResourceDelegateImplementationCache implementations;
     NSURL *originalURL;
     NSMutableData *resourceData;
diff --git a/WebKit/WebView.subproj/WebBaseResourceHandleDelegate.m b/WebKit/WebView.subproj/WebBaseResourceHandleDelegate.m
index cee26e1..844b845 100644
--- a/WebKit/WebView.subproj/WebBaseResourceHandleDelegate.m
+++ b/WebKit/WebView.subproj/WebBaseResourceHandleDelegate.m
@@ -131,10 +131,19 @@
         NSData *data = [resource data];
         [self didReceiveData:data lengthReceived:[data length]];
         [self didFinishLoading];
+        deliveredResource = YES;
         waitingToDeliverResource = NO;
     }
 }
 
+- (void)deliverResourceAfterDelay
+{
+    if (resource && !defersCallbacks && !waitingToDeliverResource && !deliveredResource) {
+        [self performSelector:@selector(deliverResource) withObject:nil afterDelay:0];
+        waitingToDeliverResource = YES;
+    }
+}
+
 - (BOOL)loadWithRequest:(NSURLRequest *)r
 {
     ASSERT(connection == nil);
@@ -143,6 +152,9 @@
     NSURL *URL = [[r URL] retain];
     [originalURL release];
     originalURL = URL;
+    
+    deliveredResource = NO;
+    waitingToDeliverResource = NO;
 
     r = [self connection:connection willSendRequest:r redirectResponse:nil];
     
@@ -150,11 +162,8 @@
         resource = [dataSource subresourceForURL:originalURL];
         if (resource) {
             [resource retain];
-            waitingToDeliverResource = YES;
-            if (!defersCallbacks) {
-                // Deliver the resource after a delay because callers don't expect to receive callbacks while calling this method.
-                [self performSelector:@selector(deliverResource) withObject:nil afterDelay:0];
-            }
+            // Deliver the resource after a delay because callers don't expect to receive callbacks while calling this method.
+            [self deliverResourceAfterDelay];
             return YES;
         }
     }
@@ -171,9 +180,8 @@
 {
     defersCallbacks = defers;
     [connection setDefersCallbacks:defers];
-    if (!defersCallbacks && waitingToDeliverResource) {
-        [self deliverResource];
-    }
+    // Deliver the resource after a delay because callers don't expect to receive callbacks while calling this method.
+    [self deliverResourceAfterDelay];
 }
 
 - (BOOL)defersCallbacks
diff --git a/WebKit/WebView.subproj/WebLoader.h b/WebKit/WebView.subproj/WebLoader.h
index de1d573..5e8277f 100644
--- a/WebKit/WebView.subproj/WebLoader.h
+++ b/WebKit/WebView.subproj/WebLoader.h
@@ -36,6 +36,7 @@
     BOOL reachedTerminalState;
     BOOL defersCallbacks;
     BOOL waitingToDeliverResource;
+    BOOL deliveredResource;
     WebResourceDelegateImplementationCache implementations;
     NSURL *originalURL;
     NSMutableData *resourceData;
diff --git a/WebKit/WebView.subproj/WebLoader.m b/WebKit/WebView.subproj/WebLoader.m
index cee26e1..844b845 100644
--- a/WebKit/WebView.subproj/WebLoader.m
+++ b/WebKit/WebView.subproj/WebLoader.m
@@ -131,10 +131,19 @@
         NSData *data = [resource data];
         [self didReceiveData:data lengthReceived:[data length]];
         [self didFinishLoading];
+        deliveredResource = YES;
         waitingToDeliverResource = NO;
     }
 }
 
+- (void)deliverResourceAfterDelay
+{
+    if (resource && !defersCallbacks && !waitingToDeliverResource && !deliveredResource) {
+        [self performSelector:@selector(deliverResource) withObject:nil afterDelay:0];
+        waitingToDeliverResource = YES;
+    }
+}
+
 - (BOOL)loadWithRequest:(NSURLRequest *)r
 {
     ASSERT(connection == nil);
@@ -143,6 +152,9 @@
     NSURL *URL = [[r URL] retain];
     [originalURL release];
     originalURL = URL;
+    
+    deliveredResource = NO;
+    waitingToDeliverResource = NO;
 
     r = [self connection:connection willSendRequest:r redirectResponse:nil];
     
@@ -150,11 +162,8 @@
         resource = [dataSource subresourceForURL:originalURL];
         if (resource) {
             [resource retain];
-            waitingToDeliverResource = YES;
-            if (!defersCallbacks) {
-                // Deliver the resource after a delay because callers don't expect to receive callbacks while calling this method.
-                [self performSelector:@selector(deliverResource) withObject:nil afterDelay:0];
-            }
+            // Deliver the resource after a delay because callers don't expect to receive callbacks while calling this method.
+            [self deliverResourceAfterDelay];
             return YES;
         }
     }
@@ -171,9 +180,8 @@
 {
     defersCallbacks = defers;
     [connection setDefersCallbacks:defers];
-    if (!defersCallbacks && waitingToDeliverResource) {
-        [self deliverResource];
-    }
+    // Deliver the resource after a delay because callers don't expect to receive callbacks while calling this method.
+    [self deliverResourceAfterDelay];
 }
 
 - (BOOL)defersCallbacks

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list