Fix <rdar://5615283> Crash in WebFrame::receivedPolicyDecision
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Dec 2007 01:04:43 +0000 (01:04 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Dec 2007 01:04:43 +0000 (01:04 +0000)
WebKit/mac:

        Remove some assertions we know can fire and replace them with a FIXME

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.mm:

WebKit/win:

        Fix <rdar://5615283> Crash in WebFrame::receivedPolicyDecision

        It's possible for a second policy listener to be created while we're
        waiting for a decision on the first policy listener. In this case we
        would crash when the first policy listener had a decision made. Mac
        WebKit already handles this by invalidating any existing policy
        listener when creating a new one.

        A test case is coming in a future commit.

        Reviewed by Anders.

        * WebFrame.cpp:
        (WebFrame::setUpPolicyListener): Copy the Mac behavior of invalidating
        any existing policy listener, and remove some assertions that we know
        can fire.

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

WebKit/mac/ChangeLog
WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
WebKit/win/ChangeLog
WebKit/win/WebFrame.cpp

index 94e8f5792a8544cb5249c0d40fb822bdb9c62bd6..43a62b16aa798af5afa513a88d0915f5db277c36 100644 (file)
@@ -1,3 +1,11 @@
+2007-12-06  Adam Roben  <aroben@apple.com>
+
+        Remove some assertions we know can fire and replace them with a FIXME
+
+        Reviewed by Anders.
+
+        * WebCoreSupport/WebFrameLoaderClient.mm:
+
 2007-12-06  Timothy Hatcher  <timothy@apple.com>
 
         Change the ASSERT added for the previous fix. The ASSERT was firing for 10.5.0.
index 2091a89e03a54bb6cbcece2259432fbad93d3f5e..df5348b6a4bfa1f4617433aaaf99bdbf961c078b 100644 (file)
@@ -1060,8 +1060,7 @@ void WebFrameLoaderClient::saveDocumentViewToCachedPage(CachedPage* cachedPage)
 
 RetainPtr<WebFramePolicyListener> WebFrameLoaderClient::setUpPolicyListener(FramePolicyFunction function)
 {
-    ASSERT(!m_policyListener);
-    ASSERT(!m_policyFunction);
+    // FIXME: <rdar://5634381> We need to support multiple active policy listeners.
 
     [m_policyListener.get() invalidate];
 
index b715d89bbc3f0f2cdd2a0a513b800acd609655d1..8388b791cabbb893186e118137d918f2e421d0df 100644 (file)
@@ -1,3 +1,22 @@
+2007-12-06  Adam Roben  <aroben@apple.com>
+
+        Fix <rdar://5615283> Crash in WebFrame::receivedPolicyDecision
+
+        It's possible for a second policy listener to be created while we're
+        waiting for a decision on the first policy listener. In this case we
+        would crash when the first policy listener had a decision made. Mac
+        WebKit already handles this by invalidating any existing policy
+        listener when creating a new one.
+
+        A test case is coming in a future commit.
+
+        Reviewed by Anders.
+
+        * WebFrame.cpp:
+        (WebFrame::setUpPolicyListener): Copy the Mac behavior of invalidating
+        any existing policy listener, and remove some assertions that we know
+        can fire.
+
 2007-12-06  Adam Roben  <aroben@apple.com>
 
         Add SPI so that DumpRenderTree can turn on the Mac font ascent hack
index a89cc6bb6702469c6f7497ee9f748e394b712cde..1e0650adfe8ff31bfa03961aa360b2a6bd2c05a6 100644 (file)
@@ -1985,8 +1985,10 @@ void WebFrame::receivedData(const char* data, int length, const String& textEnco
 
 COMPtr<WebFramePolicyListener> WebFrame::setUpPolicyListener(WebCore::FramePolicyFunction function)
 {
-    ASSERT(!d->m_policyListener);
-    ASSERT(!d->m_policyFunction);
+    // FIXME: <rdar://5634381> We need to support multiple active policy listeners.
+
+    if (d->m_policyListener)
+        d->m_policyListener->invalidate();
 
     Frame* coreFrame = core(this);
     ASSERT(coreFrame);