diff --git a/Source/core/page/CreateWindow.cpp b/Source/core/page/CreateWindow.cpp
index 4ed2842..6f588fa 100644
--- a/Source/core/page/CreateWindow.cpp
+++ b/Source/core/page/CreateWindow.cpp
@@ -32,6 +32,7 @@
 #include "core/loader/FrameLoadRequest.h"
 #include "core/page/Chrome.h"
 #include "core/page/ChromeClient.h"
+#include "core/page/FocusController.h"
 #include "core/page/Page.h"
 #include "core/frame/Settings.h"
 #include "core/page/WindowFeatures.h"
@@ -48,10 +49,8 @@
 
     if (!request.frameName().isEmpty() && request.frameName() != "_blank" && policy == NavigationPolicyIgnore) {
         if (Frame* frame = lookupFrame->loader().findFrameForNavigation(request.frameName(), openerFrame->document())) {
-            if (request.frameName() != "_self") {
-                if (Page* page = frame->page())
-                    page->chrome().focus();
-            }
+            if (request.frameName() != "_self")
+                frame->page()->focusController().setFocusedFrame(frame);
             created = false;
             return frame;
         }
diff --git a/Source/web/WebInputEventConversion.cpp b/Source/web/WebInputEventConversion.cpp
index e27ffea..755c16b 100644
--- a/Source/web/WebInputEventConversion.cpp
+++ b/Source/web/WebInputEventConversion.cpp
@@ -743,9 +743,7 @@
 
 WebGestureEventBuilder::WebGestureEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const GestureEvent& event)
 {
-    if (event.type() == EventTypeNames::gesturetap)
-        type = GestureTap;
-    else if (event.type() == EventTypeNames::gestureshowpress)
+    if (event.type() == EventTypeNames::gestureshowpress)
         type = GestureShowPress;
     else if (event.type() == EventTypeNames::gesturetapdown)
         type = GestureTapDown;
@@ -757,6 +755,9 @@
         type = GestureScrollUpdate;
         data.scrollUpdate.deltaX = event.deltaX();
         data.scrollUpdate.deltaY = event.deltaY();
+    } else if (event.type() == EventTypeNames::gesturetap) {
+        type = GestureTap;
+        data.tap.tapCount = 1;
     }
 
     timeStampSeconds = event.timeStamp() / millisPerSecond;
diff --git a/Source/web/tests/WebInputEventConversionTest.cpp b/Source/web/tests/WebInputEventConversionTest.cpp
index fac6a83..4e8143b 100644
--- a/Source/web/tests/WebInputEventConversionTest.cpp
+++ b/Source/web/tests/WebInputEventConversionTest.cpp
@@ -438,4 +438,51 @@
     }
 }
 
+TEST(WebInputEventConversionTest, InputEventsConversions)
+{
+    const std::string baseURL("http://www.test3.com/");
+    const std::string fileName("fixed_layout.html");
+
+    URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(baseURL.c_str()), WebString::fromUTF8("fixed_layout.html"));
+    FrameTestHelpers::WebViewHelper webViewHelper;
+    WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(baseURL + fileName, true);
+    int pageWidth = 640;
+    int pageHeight = 480;
+    webViewImpl->resize(WebSize(pageWidth, pageHeight));
+    webViewImpl->layout();
+
+    FrameView* view = webViewImpl->page()->mainFrame()->view();
+    RefPtr<Document> document = webViewImpl->page()->mainFrame()->document();
+    DOMWindow* domWindow = webViewImpl->page()->mainFrame()->document()->domWindow();
+    RenderObject* docRenderer = webViewImpl->page()->mainFrame()->document()->renderer();
+
+    {
+        WebGestureEvent webGestureEvent;
+        webGestureEvent.type = WebInputEvent::GestureTap;
+        webGestureEvent.x = 10;
+        webGestureEvent.y = 10;
+        webGestureEvent.globalX = 10;
+        webGestureEvent.globalY = 10;
+        webGestureEvent.data.tap.tapCount = 1;
+        webGestureEvent.data.tap.width = 10;
+        webGestureEvent.data.tap.height = 10;
+
+        PlatformGestureEventBuilder platformGestureBuilder(view, webGestureEvent);
+        EXPECT_EQ(10, platformGestureBuilder.position().x());
+        EXPECT_EQ(10, platformGestureBuilder.position().y());
+        EXPECT_EQ(10, platformGestureBuilder.globalPosition().x());
+        EXPECT_EQ(10, platformGestureBuilder.globalPosition().y());
+        EXPECT_EQ(1, platformGestureBuilder.tapCount());
+
+        RefPtr<WebCore::GestureEvent> coreGestureEvent = WebCore::GestureEvent::create(domWindow, platformGestureBuilder);
+        WebGestureEventBuilder recreatedWebGestureEvent(view, docRenderer, *coreGestureEvent);
+        EXPECT_EQ(webGestureEvent.type, recreatedWebGestureEvent.type);
+        EXPECT_EQ(webGestureEvent.x, recreatedWebGestureEvent.x);
+        EXPECT_EQ(webGestureEvent.y, recreatedWebGestureEvent.y);
+        EXPECT_EQ(webGestureEvent.globalX, recreatedWebGestureEvent.globalX);
+        EXPECT_EQ(webGestureEvent.globalY, recreatedWebGestureEvent.globalY);
+        EXPECT_EQ(webGestureEvent.data.tap.tapCount, recreatedWebGestureEvent.data.tap.tapCount);
+    }
+}
+
 } // anonymous namespace
