Fixes a crash seen in Xcode where CallUIDelegateReturningBoolean
authortimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 May 2008 22:31:34 +0000 (22:31 +0000)
committertimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 May 2008 22:31:34 +0000 (22:31 +0000)
was referencing a nil WebView under validateUserInterfaceItem.
The validateUserInterfaceItem methods was being called at a time
when the WebHTMLView is being torndown.

<rdar://problem/5806229> A crash occurs at CallUIDelegateReturningBoolean()
while mousing down on menu bar after Xcode News window is opened

Reviewed by Ada Chan.

* WebView/WebHTMLView.mm:
(-[WebHTMLView validateUserInterfaceItem:]): NULL check the WebView and
return NO when it is nil. Adds a comment.
* WebView/WebPDFView.mm:
(-[WebPDFView validateUserInterfaceItem:]): Ditto.

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

WebKit/mac/ChangeLog
WebKit/mac/WebView/WebHTMLView.mm
WebKit/mac/WebView/WebPDFView.mm

index 3d43692..7385d8a 100644 (file)
@@ -1,3 +1,21 @@
+2008-05-13  Timothy Hatcher  <timothy@apple.com>
+
+        Fixes a crash seen in Xcode where CallUIDelegateReturningBoolean
+        was referencing a nil WebView under validateUserInterfaceItem.
+        The validateUserInterfaceItem methods was being called at a time
+        when the WebHTMLView is being torndown.
+
+        <rdar://problem/5806229> A crash occurs at CallUIDelegateReturningBoolean()
+        while mousing down on menu bar after Xcode News window is opened
+
+        Reviewed by Ada Chan.
+
+        * WebView/WebHTMLView.mm:
+        (-[WebHTMLView validateUserInterfaceItem:]): NULL check the WebView and
+        return NO when it is nil. Adds a comment.
+        * WebView/WebPDFView.mm:
+        (-[WebPDFView validateUserInterfaceItem:]): Ditto.
+
 2008-05-13  Mark Rowe  <mrowe@apple.com>
 
         Reviewed by John Sullivan.
index 13c3959..48034a4 100644 (file)
@@ -2416,6 +2416,10 @@ WEBCORE_COMMAND(yankAndSelect)
 
 - (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item
 {
+    // This can be called during teardown when _webView is nil. Return NO when this happens, because CallUIDelegateReturningBoolean
+    // assumes the WebVIew is non-nil.
+    if (![self _webView])
+        return NO;
     BOOL result = [self validateUserInterfaceItemWithoutDelegate:item];
     return CallUIDelegateReturningBoolean(result, [self _webView], @selector(webView:validateUserInterfaceItem:defaultValidation:), item, result);
 }
index 21f8566..a6742e4 100644 (file)
@@ -491,6 +491,10 @@ static BOOL _PDFSelectionsAreEqual(PDFSelection *selectionA, PDFSelection *selec
 
 - (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item
 {
+    // This can be called during teardown when _webView is nil. Return NO when this happens, because CallUIDelegateReturningBoolean
+    // assumes the WebVIew is non-nil.
+    if (![self _webView])
+        return NO;
     BOOL result = [self validateUserInterfaceItemWithoutDelegate:item];
     return CallUIDelegateReturningBoolean(result, [self _webView], @selector(webView:validateUserInterfaceItem:defaultValidation:), item, result);
 }