[chromium] Notify the document if a plugin accepts touch input events
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jun 2012 23:24:56 +0000 (23:24 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jun 2012 23:24:56 +0000 (23:24 +0000)
https://bugs.webkit.org/show_bug.cgi?id=89769

Patch by Sadrul Habib Chowdhury <sadrul@chromium.org> on 2012-06-22
Reviewed by Adam Barth.

The browser sends touch events to webkit only if webkit has any touch-event handlers. So it is
necessary to notify the document when a plugin starts accepting touch-events so that it can in
turn tell the browser to send it touch events.

* public/WebPluginContainer.h:
(WebPluginContainer):
* src/WebPluginContainerImpl.cpp:
(WebKit::WebPluginContainerImpl::setIsAcceptingTouchEvents):
(WebKit):
(WebKit::WebPluginContainerImpl::WebPluginContainerImpl):
(WebKit::WebPluginContainerImpl::~WebPluginContainerImpl):
* src/WebPluginContainerImpl.h:
(WebPluginContainerImpl):

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

Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/public/WebPluginContainer.h
Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
Source/WebKit/chromium/src/WebPluginContainerImpl.h

index dab7faa..7d59db4 100644 (file)
@@ -1,3 +1,24 @@
+2012-06-22  Sadrul Habib Chowdhury  <sadrul@chromium.org>
+
+        [chromium] Notify the document if a plugin accepts touch input events
+        https://bugs.webkit.org/show_bug.cgi?id=89769
+
+        Reviewed by Adam Barth.
+
+        The browser sends touch events to webkit only if webkit has any touch-event handlers. So it is
+        necessary to notify the document when a plugin starts accepting touch-events so that it can in
+        turn tell the browser to send it touch events.
+
+        * public/WebPluginContainer.h:
+        (WebPluginContainer):
+        * src/WebPluginContainerImpl.cpp:
+        (WebKit::WebPluginContainerImpl::setIsAcceptingTouchEvents):
+        (WebKit):
+        (WebKit::WebPluginContainerImpl::WebPluginContainerImpl):
+        (WebKit::WebPluginContainerImpl::~WebPluginContainerImpl):
+        * src/WebPluginContainerImpl.h:
+        (WebPluginContainerImpl):
+
 2012-06-22  Kenneth Russell  <kbr@google.com>
 
         Unreviewed, rolling out r121064.
index 777431f..99f078f 100644 (file)
@@ -107,6 +107,9 @@ public:
     // content. The rectangle is in the plugin's coordinate system.
     virtual bool isRectTopmost(const WebRect&) = 0;
 
+    // Notifies when the plugin starts/stops accepting touch events.
+    virtual void setIsAcceptingTouchEvents(bool) = 0;
+
     virtual WebPlugin* plugin() = 0;
     virtual void setPlugin(WebPlugin*) = 0;
 
index f4c43bc..040eb63 100644 (file)
@@ -481,6 +481,18 @@ bool WebPluginContainerImpl::isRectTopmost(const WebRect& rect)
     return (nodes.first().get() == m_element);
 }
 
+void WebPluginContainerImpl::setIsAcceptingTouchEvents(bool acceptingTouchEvents)
+{
+    if (m_isAcceptingTouchEvents == acceptingTouchEvents)
+        return;
+    m_isAcceptingTouchEvents = acceptingTouchEvents;
+    if (m_isAcceptingTouchEvents) {
+        m_element->document()->didAddTouchEventHandler();
+        m_element->document()->addListenerType(Document::TOUCH_LISTENER);
+    } else
+        m_element->document()->didRemoveTouchEventHandler();
+}
+
 void WebPluginContainerImpl::didReceiveResponse(const ResourceResponse& response)
 {
     // Make sure that the plugin receives window geometry before data, or else
@@ -579,11 +591,15 @@ WebPluginContainerImpl::WebPluginContainerImpl(WebCore::HTMLPlugInElement* eleme
     , m_textureId(0)
     , m_ioSurfaceId(0)
 #endif
+    , m_isAcceptingTouchEvents(false)
 {
 }
 
 WebPluginContainerImpl::~WebPluginContainerImpl()
 {
+    if (m_isAcceptingTouchEvents)
+        m_element->document()->didRemoveTouchEventHandler();
+
     for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i)
         m_pluginLoadObservers[i]->clearPluginContainer();
     m_webPlugin->destroy();
index 772b223..a151f70 100644 (file)
@@ -110,6 +110,7 @@ public:
     virtual void zoomLevelChanged(double zoomLevel);    
     virtual void setOpaque(bool);
     virtual bool isRectTopmost(const WebRect&);
+    virtual void setIsAcceptingTouchEvents(bool);
 
     // This cannot be null.
     WebPlugin* plugin() { return m_webPlugin; }
@@ -188,6 +189,8 @@ private:
     // The associated scrollbar group object, created lazily. Used for Pepper
     // scrollbars.
     OwnPtr<ScrollbarGroup> m_scrollbarGroup;
+
+    bool m_isAcceptingTouchEvents;
 };
 
 } // namespace WebKit