Title: [102874] trunk
Revision
102874
Author
[email protected]
Date
2011-12-14 20:16:25 -0800 (Wed, 14 Dec 2011)

Log Message

Opening two popup menus by dispatchEvent() makes problems.
https://bugs.webkit.org/show_bug.cgi?id=73304

Patch by Jing Zhao <[email protected]> on 2011-12-14
Reviewed by Kent Tamura.

Source/WebCore:

By using element.dispatchEvent(), a user written script can open two
popup menus, which causes various problems in different platforms.

Add a hasOpenedPopup() method in ChromeClient and a wrapper in Chrome.
In RenderMenuList::showPopup(), check if there is an opened popup menu
before opening a new popup menu.

Test: fast/forms/select-popup-crash.html

* loader/EmptyClients.h: Overrides hasOpenedPopup().
(WebCore::EmptyChromeClient::hasOpenedPopup): Returns false as a default case.
* page/Chrome.cpp:
(WebCore::Chrome::hasOpenedPopup): Calls ChromeClient::hasOpenedPopup().
* page/Chrome.h: Declares hasOpenedPopup().
* page/ChromeClient.h: Declares hasOpenedPopup() as a pure virtual function.
* rendering/RenderMenuList.cpp:
(WebCore::RenderMenuList::showPopup): Calls Chrome::hasOpenedPopup() before opening a new popup menu.

Source/WebKit/chromium:

By using element.dispatchEvent(), a user written script can open two
popup menus, which causes the assertion in WebViewImpl::popupOpened()
fail.

ChromeClientImpl::hasOpenedPopup() is called by Chrome::hasOpenedPopup()
in RenderMenuList::showPopup(), to check if there is an opened popup
menu before opening a new popup menu.

* src/ChromeClientImpl.cpp:
(WebKit::ChromeClientImpl::hasOpenedPopup): Checks the popup in WebViewImpl.
* src/ChromeClientImpl.h: Overrides hasOpenedPopup().

Source/WebKit/efl:

* WebCoreSupport/ChromeClientEfl.cpp:
(WebCore::ChromeClientEfl::hasOpenedPopup): Not implemented.
* WebCoreSupport/ChromeClientEfl.h: Overrides hasOpenedPopup().

Source/WebKit/gtk:

* WebCoreSupport/ChromeClientGtk.cpp:
(WebKit::ChromeClient::hasOpenedPopup): Not implemented.
* WebCoreSupport/ChromeClientGtk.h: Overrides hasOpenedPopup().

Source/WebKit/mac:

* WebCoreSupport/WebChromeClient.h: Overrides hasOpenedPopup().
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::hasOpenedPopup): Not implemented.

Source/WebKit/qt:

* WebCoreSupport/ChromeClientQt.cpp:
(WebCore::ChromeClientQt::hasOpenedPopup): Not implemented.
* WebCoreSupport/ChromeClientQt.h: Overrides hasOpenedPopup().

Source/WebKit/win:

* WebCoreSupport/WebChromeClient.cpp:
(WebChromeClient::hasOpenedPopup): Not implemented.
* WebCoreSupport/WebChromeClient.h: Overrides hasOpenedPopup().

Source/WebKit2:

* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::hasOpenedPopup): Not implemented.
* WebProcess/WebCoreSupport/WebChromeClient.h: Overrides hasOpenedPopup().

LayoutTests:

* fast/forms/select/menulist-popup-crash-expected.txt: Added.
* fast/forms/select/menulist-popup-crash.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (102873 => 102874)


--- trunk/LayoutTests/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/LayoutTests/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,13 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        * fast/forms/select/menulist-popup-crash-expected.txt: Added.
+        * fast/forms/select/menulist-popup-crash.html: Added.
+
 2011-12-14  Hajime Morrita  <[email protected]>
 
         Unreviewed expectation update.

Added: trunk/LayoutTests/fast/forms/select/menulist-popup-crash-expected.txt (0 => 102874)


--- trunk/LayoutTests/fast/forms/select/menulist-popup-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/select/menulist-popup-crash-expected.txt	2011-12-15 04:16:25 UTC (rev 102874)
@@ -0,0 +1,5 @@
+<select> test for opening two popup menus.
+
+PASS if the test didn't crash.
+
+

Added: trunk/LayoutTests/fast/forms/select/menulist-popup-crash.html (0 => 102874)


--- trunk/LayoutTests/fast/forms/select/menulist-popup-crash.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/select/menulist-popup-crash.html	2011-12-15 04:16:25 UTC (rev 102874)
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+</head>
+<body>
+<p id="description">&lt;select> test for opening two popup menus.</p>
+<div id="console"></div>
+<p id="debug">PASS if the test didn't crash.</p>
+<script>
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    var parent = document.createElement('div');
+    parent.innerHTML = '<select id="sl1">'
+        + '<option>one</option>'
+        + '<option>two</option>'
+        + '<option>three</option>'
+        + '<option>four</option>'
+        + '<option>five</option>'
+        + '<option>six</option>'
+        + '<option>seven</option>'
+        + '<option>eight</option>'
+        + '<option>nine</option>'
+        + '<option>ten</option>'
+        + '<option>eleven</option>'
+        + '<option>twelve</option>'
+        + '<option>thirteen</option>'
+        + '<option>fourteen</option>'
+        + '<option>fifteen</option>'
+        + '<option>sixteen</option>'
+        + '<option>seventeen</option>'
+        + '</select>'
+        + '<select id="sl2">'
+        + '<option>one</option>'
+        + '<option>two</option>'
+        + '<option>three</option>'
+        + '</select>';
+    document.body.appendChild(parent);
+
+    function mouseDownOnSelect(selId)
+    {
+        var sl = document.getElementById(selId);
+        var event = document.createEvent("MouseEvent");
+        event.initMouseEvent("mousedown", true, true, document.defaultView, 1, sl.offsetLeft, sl.offsetTop, sl.offsetLeft, sl.offsetTop, false, false, false, false, 0, document);
+        sl.dispatchEvent(event);
+    }
+
+    mouseDownOnSelect("sl1");
+    mouseDownOnSelect("sl2");
+
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (102873 => 102874)


--- trunk/Source/WebCore/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebCore/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,28 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        By using element.dispatchEvent(), a user written script can open two
+        popup menus, which causes various problems in different platforms.
+
+        Add a hasOpenedPopup() method in ChromeClient and a wrapper in Chrome.
+        In RenderMenuList::showPopup(), check if there is an opened popup menu
+        before opening a new popup menu.
+
+        Test: fast/forms/select-popup-crash.html
+
+        * loader/EmptyClients.h: Overrides hasOpenedPopup().
+        (WebCore::EmptyChromeClient::hasOpenedPopup): Returns false as a default case.
+        * page/Chrome.cpp:
+        (WebCore::Chrome::hasOpenedPopup): Calls ChromeClient::hasOpenedPopup().
+        * page/Chrome.h: Declares hasOpenedPopup().
+        * page/ChromeClient.h: Declares hasOpenedPopup() as a pure virtual function.
+        * rendering/RenderMenuList.cpp:
+        (WebCore::RenderMenuList::showPopup): Calls Chrome::hasOpenedPopup() before opening a new popup menu.
+
 2011-12-14  Tony Chang  <[email protected]>
 
         Clean up style in CSSStyleSelector.cpp

Modified: trunk/Source/WebCore/loader/EmptyClients.h (102873 => 102874)


--- trunk/Source/WebCore/loader/EmptyClients.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebCore/loader/EmptyClients.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -140,6 +140,7 @@
 
     virtual bool selectItemWritingDirectionIsNatural() { return false; }
     virtual bool selectItemAlignmentFollowsMenuWritingDirection() { return false; }
+    virtual bool hasOpenedPopup() const OVERRIDE { return false; }
     virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptyPopupMenu()); }
     virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptySearchPopupMenu()); }
 

Modified: trunk/Source/WebCore/page/Chrome.cpp (102873 => 102874)


--- trunk/Source/WebCore/page/Chrome.cpp	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebCore/page/Chrome.cpp	2011-12-15 04:16:25 UTC (rev 102874)
@@ -555,6 +555,11 @@
     return m_client->selectItemAlignmentFollowsMenuWritingDirection();
 }
 
+bool Chrome::hasOpenedPopup() const
+{
+    return m_client->hasOpenedPopup();
+}
+
 PassRefPtr<PopupMenu> Chrome::createPopupMenu(PopupMenuClient* client) const
 {
     return m_client->createPopupMenu(client);

Modified: trunk/Source/WebCore/page/Chrome.h (102873 => 102874)


--- trunk/Source/WebCore/page/Chrome.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebCore/page/Chrome.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -174,6 +174,7 @@
 
         bool selectItemWritingDirectionIsNatural();
         bool selectItemAlignmentFollowsMenuWritingDirection();
+        bool hasOpenedPopup() const;
         PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
         PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
 

Modified: trunk/Source/WebCore/page/ChromeClient.h (102873 => 102874)


--- trunk/Source/WebCore/page/ChromeClient.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebCore/page/ChromeClient.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -302,6 +302,8 @@
 
         virtual bool selectItemWritingDirectionIsNatural() = 0;
         virtual bool selectItemAlignmentFollowsMenuWritingDirection() = 0;
+        // Checks if there is an opened popup, called by RenderMenuList::showPopup().
+        virtual bool hasOpenedPopup() const = 0;
         virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const = 0;
         virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const = 0;
 

Modified: trunk/Source/WebCore/rendering/RenderMenuList.cpp (102873 => 102874)


--- trunk/Source/WebCore/rendering/RenderMenuList.cpp	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebCore/rendering/RenderMenuList.cpp	2011-12-15 04:16:25 UTC (rev 102874)
@@ -293,6 +293,9 @@
     if (m_popupIsVisible)
         return;
 
+    if (document()->page()->chrome()->hasOpenedPopup())
+        return;
+
     // Create m_innerBlock here so it ends up as the first child.
     // This is important because otherwise we might try to create m_innerBlock
     // inside the showPopup call and it would fail.

Modified: trunk/Source/WebKit/chromium/ChangeLog (102873 => 102874)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,22 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        By using element.dispatchEvent(), a user written script can open two
+        popup menus, which causes the assertion in WebViewImpl::popupOpened()
+        fail.
+
+        ChromeClientImpl::hasOpenedPopup() is called by Chrome::hasOpenedPopup()
+        in RenderMenuList::showPopup(), to check if there is an opened popup
+        menu before opening a new popup menu.
+
+        * src/ChromeClientImpl.cpp:
+        (WebKit::ChromeClientImpl::hasOpenedPopup): Checks the popup in WebViewImpl.
+        * src/ChromeClientImpl.h: Overrides hasOpenedPopup().
+
 2011-12-14  Kenichi Ishibashi  <[email protected]>
 
         [Chromium] Implement PluginViewBase::getFormValue

Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp (102873 => 102874)


--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2011-12-15 04:16:25 UTC (rev 102874)
@@ -939,6 +939,11 @@
     return true;
 }
 
+bool ChromeClientImpl::hasOpenedPopup() const
+{
+    return !!m_webView->selectPopup();
+}
+
 PassRefPtr<PopupMenu> ChromeClientImpl::createPopupMenu(PopupMenuClient* client) const
 {
     if (WebViewImpl::useExternalPopupMenus())

Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.h (102873 => 102874)


--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -185,6 +185,7 @@
 
     virtual bool selectItemWritingDirectionIsNatural();
     virtual bool selectItemAlignmentFollowsMenuWritingDirection();
+    virtual bool hasOpenedPopup() const OVERRIDE;
     virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
     virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
 

Modified: trunk/Source/WebKit/efl/ChangeLog (102873 => 102874)


--- trunk/Source/WebKit/efl/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/efl/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,14 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        * WebCoreSupport/ChromeClientEfl.cpp:
+        (WebCore::ChromeClientEfl::hasOpenedPopup): Not implemented.
+        * WebCoreSupport/ChromeClientEfl.h: Overrides hasOpenedPopup().
+
 2011-12-12  Raphael Kubo da Costa  <[email protected]>
 
         [EFL] Add API to query the validity of a frame's SSL certificate.

Modified: trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp (102873 => 102874)


--- trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp	2011-12-15 04:16:25 UTC (rev 102874)
@@ -544,6 +544,12 @@
     return false;
 }
 
+bool ChromeClientEfl::hasOpenedPopup() const
+{
+    notImplemented();
+    return false;
+}
+
 PassRefPtr<PopupMenu> ChromeClientEfl::createPopupMenu(PopupMenuClient* client) const
 {
     return adoptRef(new PopupMenuEfl(client));

Modified: trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h (102873 => 102874)


--- trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -167,6 +167,7 @@
 
     virtual bool selectItemWritingDirectionIsNatural();
     virtual bool selectItemAlignmentFollowsMenuWritingDirection();
+    virtual bool hasOpenedPopup() const;
     virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
     virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
 

Modified: trunk/Source/WebKit/gtk/ChangeLog (102873 => 102874)


--- trunk/Source/WebKit/gtk/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/gtk/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,14 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        * WebCoreSupport/ChromeClientGtk.cpp:
+        (WebKit::ChromeClient::hasOpenedPopup): Not implemented.
+        * WebCoreSupport/ChromeClientGtk.h: Overrides hasOpenedPopup().
+
 2011-12-12  Ryosuke Niwa  <[email protected]>
 
         WebKit code shouldn't be calling applyCommand directly

Modified: trunk/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp (102873 => 102874)


--- trunk/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp	2011-12-15 04:16:25 UTC (rev 102874)
@@ -861,6 +861,12 @@
     return true;
 }
 
+bool ChromeClient::hasOpenedPopup() const
+{
+    notImplemented();
+    return false;
+}
+
 PassRefPtr<WebCore::PopupMenu> ChromeClient::createPopupMenu(WebCore::PopupMenuClient* client) const
 {
     return adoptRef(new PopupMenuGtk(client));

Modified: trunk/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h (102873 => 102874)


--- trunk/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -142,6 +142,7 @@
 
         virtual bool selectItemWritingDirectionIsNatural();
         virtual bool selectItemAlignmentFollowsMenuWritingDirection();
+        virtual bool hasOpenedPopup() const;
         virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
         virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
 #if ENABLE(VIDEO)

Modified: trunk/Source/WebKit/mac/ChangeLog (102873 => 102874)


--- trunk/Source/WebKit/mac/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/mac/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,14 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        * WebCoreSupport/WebChromeClient.h: Overrides hasOpenedPopup().
+        * WebCoreSupport/WebChromeClient.mm:
+        (WebChromeClient::hasOpenedPopup): Not implemented.
+
 2011-12-14  Michael Saboff  <[email protected]>
 
         Mac WebScriptDebugger crashes beneath sourceParsed()

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h (102873 => 102874)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -170,6 +170,7 @@
 
     virtual bool selectItemWritingDirectionIsNatural() OVERRIDE;
     virtual bool selectItemAlignmentFollowsMenuWritingDirection() OVERRIDE;
+    virtual bool hasOpenedPopup() const OVERRIDE;
     virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const OVERRIDE;
     virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const OVERRIDE;
 

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm (102873 => 102874)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm	2011-12-15 04:16:25 UTC (rev 102874)
@@ -840,6 +840,12 @@
 #endif
 }
 
+bool WebChromeClient::hasOpenedPopup() const
+{
+    notImplemented();
+    return false;
+}
+
 PassRefPtr<WebCore::PopupMenu> WebChromeClient::createPopupMenu(WebCore::PopupMenuClient* client) const
 {
     return adoptRef(new PopupMenuMac(client));

Modified: trunk/Source/WebKit/qt/ChangeLog (102873 => 102874)


--- trunk/Source/WebKit/qt/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/qt/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,14 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        * WebCoreSupport/ChromeClientQt.cpp:
+        (WebCore::ChromeClientQt::hasOpenedPopup): Not implemented.
+        * WebCoreSupport/ChromeClientQt.h: Overrides hasOpenedPopup().
+
 2011-12-14  Hajime Morrita  <[email protected]>
 
         JS_INLINE and WTF_INLINE should be visible from WebCore

Modified: trunk/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp (102873 => 102874)


--- trunk/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp	2011-12-15 04:16:25 UTC (rev 102874)
@@ -712,6 +712,12 @@
     return false;
 }
 
+bool ChromeClientQt::hasOpenedPopup() const
+{
+    notImplemented();
+    return false;
+}
+
 PassRefPtr<PopupMenu> ChromeClientQt::createPopupMenu(PopupMenuClient* client) const
 {
     return adoptRef(new PopupMenuQt(client, this));

Modified: trunk/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h (102873 => 102874)


--- trunk/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -181,6 +181,7 @@
 
     virtual bool selectItemWritingDirectionIsNatural();
     virtual bool selectItemAlignmentFollowsMenuWritingDirection();
+    virtual bool hasOpenedPopup() const;
     virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
     virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
     virtual void populateVisitedLinks();

Modified: trunk/Source/WebKit/win/ChangeLog (102873 => 102874)


--- trunk/Source/WebKit/win/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/win/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,14 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        * WebCoreSupport/WebChromeClient.cpp:
+        (WebChromeClient::hasOpenedPopup): Not implemented.
+        * WebCoreSupport/WebChromeClient.h: Overrides hasOpenedPopup().
+
 2011-12-14  Sam Weinig  <[email protected]>
 
         Remove whitespace from InheritedPropertySheets attributes in

Modified: trunk/Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp (102873 => 102874)


--- trunk/Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp	2011-12-15 04:16:25 UTC (rev 102874)
@@ -786,6 +786,12 @@
     return false;
 }
 
+bool WebChromeClient::hasOpenedPopup() const
+{
+    notImplemented();
+    return false;
+}
+
 PassRefPtr<PopupMenu> WebChromeClient::createPopupMenu(PopupMenuClient* client) const
 {
     return adoptRef(new PopupMenuWin(client));

Modified: trunk/Source/WebKit/win/WebCoreSupport/WebChromeClient.h (102873 => 102874)


--- trunk/Source/WebKit/win/WebCoreSupport/WebChromeClient.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit/win/WebCoreSupport/WebChromeClient.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -165,6 +165,7 @@
 
     virtual bool selectItemWritingDirectionIsNatural();
     virtual bool selectItemAlignmentFollowsMenuWritingDirection();
+    virtual bool hasOpenedPopup() const;
     virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
     virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
 

Modified: trunk/Source/WebKit2/ChangeLog (102873 => 102874)


--- trunk/Source/WebKit2/ChangeLog	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit2/ChangeLog	2011-12-15 04:16:25 UTC (rev 102874)
@@ -1,3 +1,14 @@
+2011-12-14  Jing Zhao  <[email protected]>
+
+        Opening two popup menus by dispatchEvent() makes problems.
+        https://bugs.webkit.org/show_bug.cgi?id=73304
+
+        Reviewed by Kent Tamura.
+
+        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+        (WebKit::WebChromeClient::hasOpenedPopup): Not implemented.
+        * WebProcess/WebCoreSupport/WebChromeClient.h: Overrides hasOpenedPopup().
+
 2011-12-14  Sam Weinig  <[email protected]>
 
         Remove whitespace from InheritedPropertySheets attributes in

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp (102873 => 102874)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp	2011-12-15 04:16:25 UTC (rev 102874)
@@ -660,6 +660,12 @@
 #endif
 }
 
+bool WebChromeClient::hasOpenedPopup() const
+{
+    notImplemented();
+    return false;
+}
+
 PassRefPtr<WebCore::PopupMenu> WebChromeClient::createPopupMenu(WebCore::PopupMenuClient* client) const
 {
     return WebPopupMenu::create(m_page, client);

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h (102873 => 102874)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h	2011-12-15 03:39:51 UTC (rev 102873)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h	2011-12-15 04:16:25 UTC (rev 102874)
@@ -170,6 +170,7 @@
 
     virtual bool selectItemWritingDirectionIsNatural() OVERRIDE;
     virtual bool selectItemAlignmentFollowsMenuWritingDirection() OVERRIDE;
+    virtual bool hasOpenedPopup() const OVERRIDE;
     virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const OVERRIDE;
     virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const OVERRIDE;
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to