Title: [119880] trunk/Source/WebKit/blackberry
Revision
119880
Author
commit-qu...@webkit.org
Date
2012-06-08 17:12:16 -0700 (Fri, 08 Jun 2012)

Log Message

[BlackBerry] Fix crash on PagePopupChromeClient
https://bugs.webkit.org/show_bug.cgi?id=88675

Patch by Crystal Zhang <haizh...@rim.com> on 2012-06-08
Reviewed by Antonio Gomes.

PR 163672.

Actually it's the bug inside InputHandler, should delete the old popup and create a new one,
because update() is problematic. Also no need to save pointer in InputHandler.

* WebCoreSupport/ChromeClientBlackBerry.cpp:
(WebCore::ChromeClientBlackBerry::openPagePopup):
(WebCore::ChromeClientBlackBerry::closePagePopup):
* WebKitSupport/InputHandler.cpp:
(BlackBerry::WebKit::InputHandler::InputHandler):
(BlackBerry::WebKit::InputHandler::~InputHandler):
(BlackBerry::WebKit::InputHandler::openSelectPopup):
* WebKitSupport/InputHandler.h:
(WebCore):
(InputHandler):

Modified Paths

Diff

Modified: trunk/Source/WebKit/blackberry/ChangeLog (119879 => 119880)


--- trunk/Source/WebKit/blackberry/ChangeLog	2012-06-09 00:07:36 UTC (rev 119879)
+++ trunk/Source/WebKit/blackberry/ChangeLog	2012-06-09 00:12:16 UTC (rev 119880)
@@ -1,3 +1,26 @@
+2012-06-08  Crystal Zhang  <haizh...@rim.com>
+
+        [BlackBerry] Fix crash on PagePopupChromeClient
+        https://bugs.webkit.org/show_bug.cgi?id=88675
+
+        Reviewed by Antonio Gomes.
+
+        PR 163672.
+
+        Actually it's the bug inside InputHandler, should delete the old popup and create a new one,
+        because update() is problematic. Also no need to save pointer in InputHandler.
+
+        * WebCoreSupport/ChromeClientBlackBerry.cpp:
+        (WebCore::ChromeClientBlackBerry::openPagePopup):
+        (WebCore::ChromeClientBlackBerry::closePagePopup):
+        * WebKitSupport/InputHandler.cpp:
+        (BlackBerry::WebKit::InputHandler::InputHandler):
+        (BlackBerry::WebKit::InputHandler::~InputHandler):
+        (BlackBerry::WebKit::InputHandler::openSelectPopup):
+        * WebKitSupport/InputHandler.h:
+        (WebCore):
+        (InputHandler):
+
 2012-06-08  Eli Fidler  <efid...@rim.com>
 
         [BlackBerry] Default font settings are getting deleted

Modified: trunk/Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp (119879 => 119880)


--- trunk/Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp	2012-06-09 00:07:36 UTC (rev 119879)
+++ trunk/Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp	2012-06-09 00:12:16 UTC (rev 119880)
@@ -301,27 +301,21 @@
 
 PagePopup* ChromeClientBlackBerry::openPagePopup(PagePopupClient* client, const IntRect& originBoundsInRootView)
 {
-    PagePopupBlackBerry* webPopup;
+    closePagePopup(0);
 
-    if (!hasOpenedPopup()) {
-        webPopup = new PagePopupBlackBerry(m_webPagePrivate, client,
-                rootViewToScreen(originBoundsInRootView));
-        m_webPagePrivate->m_webPage->popupOpened(webPopup);
-    } else
-        webPopup = m_webPagePrivate->m_webPage->popup();
-
+    PagePopupBlackBerry* webPopup = new PagePopupBlackBerry(m_webPagePrivate, client, rootViewToScreen(originBoundsInRootView));
+    m_webPagePrivate->m_webPage->popupOpened(webPopup);
     webPopup->sendCreatePopupWebViewRequest();
     return webPopup;
 }
 
-void ChromeClientBlackBerry::closePagePopup(PagePopup* popup)
+void ChromeClientBlackBerry::closePagePopup(PagePopup*)
 {
-    if (!popup)
-        return;
-
-    PagePopupBlackBerry* webPopup = m_webPagePrivate->m_webPage->popup();
-    webPopup->closePopup();
-    m_webPagePrivate->m_webPage->popupClosed();
+    if (hasOpenedPopup()) {
+        PagePopupBlackBerry* webPopup = m_webPagePrivate->m_webPage->popup();
+        webPopup->closePopup();
+        m_webPagePrivate->m_webPage->popupClosed();
+    }
 }
 
 void ChromeClientBlackBerry::setToolbarsVisible(bool)

Modified: trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp (119879 => 119880)


--- trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp	2012-06-09 00:07:36 UTC (rev 119879)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp	2012-06-09 00:12:16 UTC (rev 119880)
@@ -120,13 +120,12 @@
     , m_composingTextEnd(0)
     , m_pendingKeyboardVisibilityChange(NoChange)
     , m_delayKeyboardVisibilityChange(false)
-    , m_selectClient(0)
 {
 }
 
 InputHandler::~InputHandler()
 {
-    delete m_selectClient;
+    m_webPage->m_page->chrome()->client()->closePagePopup(0);
 }
 
 static BlackBerryInputType convertInputType(const HTMLInputElement* inputElement)
@@ -1142,16 +1141,17 @@
     ScopeArray<WebString> labels;
     labels.reset(new WebString[size]);
 
-    if (!size) {
-        if (!m_selectClient)
-            m_selectClient = new SelectPopupClient(multiple, size, labels, 0, 0, 0, m_webPage, select);
-        else
-            m_selectClient->update(multiple, size, labels, enableds, itemTypes, selecteds, m_webPage, select);
-    } else {
-        bool* enableds = new bool[size];
-        int* itemTypes = new int[size];
-        bool* selecteds = new bool[size];
+    // Check if popup already exists, close it if does.
+    m_webPage->m_page->chrome()->client()->closePagePopup(0);
 
+    bool* enableds = 0;
+    int* itemTypes = 0;
+    bool* selecteds = 0;
+
+    if (size) {
+        enableds = new bool[size];
+        itemTypes = new int[size];
+        selecteds = new bool[size];
         for (int i = 0; i < size; i++) {
             if (listItems[i]->hasTagName(HTMLNames::optionTag)) {
                 HTMLOptionElement* option = static_cast<HTMLOptionElement*>(listItems[i]);
@@ -1171,15 +1171,11 @@
                 itemTypes[i] = TypeSeparator;
             }
         }
-
-        if (!m_selectClient)
-            m_selectClient = new SelectPopupClient(multiple, size, labels, enableds, itemTypes, selecteds, m_webPage, select);
-        else
-            m_selectClient->update(multiple, size, labels, enableds, itemTypes, selecteds, m_webPage, select);
     }
 
+    SelectPopupClient* selectClient = new SelectPopupClient(multiple, size, labels, enableds, itemTypes, selecteds, m_webPage, select);
     WebCore::IntRect elementRectInRootView = select->document()->view()->contentsToRootView(select->getRect());
-    m_webPage->m_page->chrome()->client()->openPagePopup(m_selectClient, elementRectInRootView);
+    m_webPage->m_page->chrome()->client()->openPagePopup(selectClient, elementRectInRootView);
     return true;
 }
 

Modified: trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h (119879 => 119880)


--- trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h	2012-06-09 00:07:36 UTC (rev 119879)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h	2012-06-09 00:12:16 UTC (rev 119880)
@@ -37,7 +37,6 @@
 class HTMLSelectElement;
 class IntRect;
 class Node;
-class SelectPopupClient;
 }
 
 namespace BlackBerry {
@@ -193,8 +192,6 @@
 
     PendingKeyboardStateChange m_pendingKeyboardVisibilityChange;
     bool m_delayKeyboardVisibilityChange;
-
-    WebCore::SelectPopupClient* m_selectClient;
 };
 
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to