When mouse down or plugin handles touch down, set the plugin
to be the focus of the document so that it can receive key
events. This has the same logic as in PluginViewMac.cpp's
handleMouseEvent().
diff --git a/WebCore/plugins/android/PluginViewAndroid.cpp b/WebCore/plugins/android/PluginViewAndroid.cpp
index d98ccef..7d10993 100644
--- a/WebCore/plugins/android/PluginViewAndroid.cpp
+++ b/WebCore/plugins/android/PluginViewAndroid.cpp
@@ -31,6 +31,7 @@
 #include "Document.h"
 #include "Element.h"
 #include "EventNames.h"
+#include "FocusController.h"
 #include "FrameLoader.h"
 #include "FrameLoadRequest.h"
 #include "FrameTree.h"
@@ -243,6 +244,12 @@
     evt.data.touch.y = event->pageY() - m_npWindow.y;
 
     if (m_plugin->pluginFuncs()->event(m_instance, &evt)) {
+        // The plugin needs focus to receive keyboard events
+        if (evt.data.touch.action == kDown_ANPTouchAction) {
+            if (Page* page = m_parentFrame->page())
+                page->focusController()->setFocusedFrame(m_parentFrame);
+            m_parentFrame->document()->setFocusedNode(m_element);
+        }
         event->setDefaultPrevented(true);
     }
 }
@@ -264,6 +271,12 @@
         // coordinates despite their misleading name.
         evt.data.mouse.x = event->pageX() - m_npWindow.x;
         evt.data.mouse.y = event->pageY() - m_npWindow.y;
+        if (isDown) {
+            // The plugin needs focus to receive keyboard events
+            if (Page* page = m_parentFrame->page())
+                page->focusController()->setFocusedFrame(m_parentFrame);
+            m_parentFrame->document()->setFocusedNode(m_element);
+        }
     }
     else {
       return;