[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

jcivelli at chromium.org jcivelli at chromium.org
Wed Dec 22 15:32:34 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 89f0ba2b36340aed90fe7ce60aab63b6d1c1d548
Author: jcivelli at chromium.org <jcivelli at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sun Nov 7 09:42:10 2010 +0000

    2010-11-07  Jay Civelli  <jcivelli at chromium.org>
    
            Reviewed by Kent Tamura.
    
            Fixing a crasher with the select popup on Mac that happens when a
            page removes the select node when the select changes.
            https://bugs.webkit.org/show_bug.cgi?id=49108
    
            * src/ExternalPopupMenu.cpp:
            (WebKit::ExternalPopupMenu::didAcceptIndex):
            (WebKit::ExternalPopupMenu::didCancel):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71480 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index db5e9db..ff4ad3d 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,15 @@
+2010-11-07  Jay Civelli  <jcivelli at chromium.org>
+
+        Reviewed by Kent Tamura.
+
+        Fixing a crasher with the select popup on Mac that happens when a
+        page removes the select node when the select changes.
+        https://bugs.webkit.org/show_bug.cgi?id=49108
+
+        * src/ExternalPopupMenu.cpp:
+        (WebKit::ExternalPopupMenu::didAcceptIndex):
+        (WebKit::ExternalPopupMenu::didCancel):
+
 2010-11-06  Pavel Feldman  <pfeldman at chromium.org>
 
         Not reviewed. Chromium DevTools: disable filesystem inspection
diff --git a/WebKit/chromium/src/ExternalPopupMenu.cpp b/WebKit/chromium/src/ExternalPopupMenu.cpp
index a0243eb..0f208fb 100644
--- a/WebKit/chromium/src/ExternalPopupMenu.cpp
+++ b/WebKit/chromium/src/ExternalPopupMenu.cpp
@@ -98,15 +98,26 @@ void ExternalPopupMenu::didChangeSelection(int index)
 
 void ExternalPopupMenu::didAcceptIndex(int index)
 {
+    // Calling methods on the PopupMenuClient might lead to this object being
+    // derefed. This ensures it does not get deleted while we are running this
+    // method.
+    RefPtr<ExternalPopupMenu> guard(this);
+
     if (m_popupMenuClient) {
         m_popupMenuClient->valueChanged(index);
-        m_popupMenuClient->popupDidHide();
+        // The call to valueChanged above might have lead to a call to
+        // disconnectClient, so we might not have a PopupMenuClient anymore.
+        if (m_popupMenuClient)
+            m_popupMenuClient->popupDidHide();
     }
     m_webExternalPopupMenu = 0;
 }
 
 void ExternalPopupMenu::didCancel()
 {
+    // See comment in didAcceptIndex on why we need this.
+    RefPtr<ExternalPopupMenu> guard(this);
+
     if (m_popupMenuClient)
         m_popupMenuClient->popupDidHide();
     m_webExternalPopupMenu = 0;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list