summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-02 18:55:20 +0000
committercpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-02 18:55:20 +0000
commitd3153af8482f04d947fc2ca7652c4040a2136afc (patch)
tree763b74f88109f191bbf90c8d71d1d58204dcd734
parentf8acb6a1a774cb011ac6a267ef4eb77eaa2f5af6 (diff)
downloadchromium_src-d3153af8482f04d947fc2ca7652c4040a2136afc.zip
chromium_src-d3153af8482f04d947fc2ca7652c4040a2136afc.tar.gz
chromium_src-d3153af8482f04d947fc2ca7652c4040a2136afc.tar.bz2
Merge 237646 "Ensure that the OSK on Windows 8 shows up when we ..."
> Ensure that the OSK on Windows 8 shows up when we tap on an editable field in any WebContents. > > The current implementation was displaying the OSK only when we tapped on a WebContents hosted by a Browser window. This > relied on the ChromeRenderViewObserver object in the renderer sending an IPC message ChromeViewHostMsg_FocusedNodeTouched > which is handled by the Chrome browser code via a WebContentsObserver implementation. > > Based on discussions with jam and comments from avi in the review, we decided to implement this functionality in content. > > Fixes are as below:- > 1. We have a new IPc message ViewHostMsg_FocusedNodeTouched which is defined in the view_messages.h file. > 2. This IPC is sent by the RenderViewImpl::didHandleGestureEvent method if we tapped on an editable field. > 3, This IPC is handled by the RenderViewHostImpl class. We display the OSK on Windows 8 Aura if a focused editable > node was tapped. > 4. The ChromeViewHostMsg_FocusedNodeTouched IPC has been deleted along with the didHandleGestureEvent method in the > RenderViewObserver interface. > > BUG=321576, 319219 > R=jam@chromium.org, palmer@chromium.org, jam > TBR=jschuh > > Review URL: https://codereview.chromium.org/89873002 TBR=ananta@chromium.org Review URL: https://codereview.chromium.org/99843002 git-svn-id: svn://svn.chromium.org/chrome/branches/1700/src@238143 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/ui/tab_contents/core_tab_helper.cc16
-rw-r--r--chrome/browser/ui/tab_contents/core_tab_helper.h1
-rw-r--r--chrome/common/render_messages.h6
-rw-r--r--chrome/renderer/chrome_render_view_observer.cc13
-rw-r--r--chrome/renderer/chrome_render_view_observer.h2
-rw-r--r--content/browser/renderer_host/render_view_host_impl.cc13
-rw-r--r--content/browser/renderer_host/render_view_host_impl.h1
-rw-r--r--content/common/view_messages.h6
-rw-r--r--content/public/renderer/render_view_observer.h1
-rw-r--r--content/renderer/render_view_impl.cc11
10 files changed, 29 insertions, 41 deletions
diff --git a/chrome/browser/ui/tab_contents/core_tab_helper.cc b/chrome/browser/ui/tab_contents/core_tab_helper.cc
index f543139..e0d59bf 100644
--- a/chrome/browser/ui/tab_contents/core_tab_helper.cc
+++ b/chrome/browser/ui/tab_contents/core_tab_helper.cc
@@ -31,10 +31,6 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/codec/jpeg_codec.h"
-#if defined(OS_WIN)
-#include "base/win/win_util.h"
-#endif
-
using content::WebContents;
DEFINE_WEB_CONTENTS_USER_DATA_KEY(CoreTabHelper);
@@ -195,8 +191,6 @@ void CoreTabHelper::BeforeUnloadDialogCancelled() {
bool CoreTabHelper::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(CoreTabHelper, message)
- IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FocusedNodeTouched,
- OnFocusedNodeTouched)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_RequestThumbnailForContextNode_ACK,
OnRequestThumbnailForContextNodeACK)
IPC_MESSAGE_UNHANDLED(handled = false)
@@ -204,16 +198,6 @@ bool CoreTabHelper::OnMessageReceived(const IPC::Message& message) {
return handled;
}
-void CoreTabHelper::OnFocusedNodeTouched(bool editable) {
-#if defined(OS_WIN) && defined(USE_AURA)
- if (editable) {
- base::win::DisplayVirtualKeyboard();
- } else {
- base::win::DismissVirtualKeyboard();
- }
-#endif // OS_WIN && USE_AURA
-}
-
// Handles the image thumbnail for the context node, composes a image search
// request based on the received thumbnail and opens the request in a new tab.
void CoreTabHelper::OnRequestThumbnailForContextNodeACK(
diff --git a/chrome/browser/ui/tab_contents/core_tab_helper.h b/chrome/browser/ui/tab_contents/core_tab_helper.h
index bb57f4e..767c1fe 100644
--- a/chrome/browser/ui/tab_contents/core_tab_helper.h
+++ b/chrome/browser/ui/tab_contents/core_tab_helper.h
@@ -65,7 +65,6 @@ class CoreTabHelper : public content::WebContentsObserver,
virtual void BeforeUnloadDialogCancelled() OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
- void OnFocusedNodeTouched(bool editable);
void OnRequestThumbnailForContextNodeACK(const SkBitmap& bitmap,
const gfx::Size& original_size);
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h
index e1b2117..3810214 100644
--- a/chrome/common/render_messages.h
+++ b/chrome/common/render_messages.h
@@ -666,12 +666,6 @@ IPC_MESSAGE_ROUTED4(ChromeViewHostMsg_DidRetrieveWebappInformation,
GURL /* expected_url */)
#endif // defined(OS_ANDROID)
-// Message sent from renderer to the browser when the element that is focused
-// has been touched. A bool is passed in this message which indicates if the
-// node is editable.
-IPC_MESSAGE_ROUTED1(ChromeViewHostMsg_FocusedNodeTouched,
- bool /* editable */)
-
// The currently displayed PDF has an unsupported feature.
IPC_MESSAGE_ROUTED0(ChromeViewHostMsg_PDFHasUnsupportedFeature)
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
index 239af55..32944b8 100644
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ b/chrome/renderer/chrome_render_view_observer.cc
@@ -831,19 +831,6 @@ void ChromeRenderViewObserver::DidClearWindowObject(WebFrame* frame) {
}
}
-void ChromeRenderViewObserver::DidHandleGestureEvent(
- const WebGestureEvent& event) {
- if (event.type != WebKit::WebGestureEvent::GestureTap)
- return;
-
- WebKit::WebTextInputType text_input_type =
- render_view()->GetWebView()->textInputInfo().type;
-
- render_view()->Send(new ChromeViewHostMsg_FocusedNodeTouched(
- routing_id(),
- text_input_type != WebKit::WebTextInputTypeNone));
-}
-
void ChromeRenderViewObserver::DetailedConsoleMessageAdded(
const base::string16& message,
const base::string16& source,
diff --git a/chrome/renderer/chrome_render_view_observer.h b/chrome/renderer/chrome_render_view_observer.h
index d60d1b1..0c7d5c50 100644
--- a/chrome/renderer/chrome_render_view_observer.h
+++ b/chrome/renderer/chrome_render_view_observer.h
@@ -72,8 +72,6 @@ class ChromeRenderViewObserver : public content::RenderViewObserver,
virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
bool is_new_navigation) OVERRIDE;
virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE;
- virtual void DidHandleGestureEvent(
- const WebKit::WebGestureEvent& event) OVERRIDE;
virtual void DetailedConsoleMessageAdded(const base::string16& message,
const base::string16& source,
const base::string16& stack_trace,
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 0b1f7c6..0912144 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -83,6 +83,8 @@
#include "content/browser/renderer_host/popup_menu_helper_mac.h"
#elif defined(OS_ANDROID)
#include "content/browser/media/android/browser_media_player_manager.h"
+#elif defined(OS_WIN)
+#include "base/win/win_util.h"
#endif
using base::TimeDelta;
@@ -1227,6 +1229,7 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(ViewHostMsg_DomOperationResponse,
OnDomOperationResponse)
IPC_MESSAGE_HANDLER(AccessibilityHostMsg_Events, OnAccessibilityEvents)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeTouched, OnFocusedNodeTouched)
// Have the super handle all other messages.
IPC_MESSAGE_UNHANDLED(
handled = RenderWidgetHostImpl::OnMessageReceived(msg))
@@ -2198,6 +2201,16 @@ void RenderViewHostImpl::OnDomOperationResponse(
Details<DomOperationNotificationDetails>(&details));
}
+void RenderViewHostImpl::OnFocusedNodeTouched(bool editable) {
+#if defined(OS_WIN) && defined(USE_AURA)
+ if (editable) {
+ base::win::DisplayVirtualKeyboard();
+ } else {
+ base::win::DismissVirtualKeyboard();
+ }
+#endif
+}
+
#if defined(OS_MACOSX) || defined(OS_ANDROID)
void RenderViewHostImpl::OnShowPopup(
const ViewHostMsg_ShowPopup_Params& params) {
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index a3401c3..d63bae3 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -585,6 +585,7 @@ class CONTENT_EXPORT RenderViewHostImpl
void OnDidAccessInitialDocument();
void OnDomOperationResponse(const std::string& json_string,
int automation_id);
+ void OnFocusedNodeTouched(bool editable);
#if defined(OS_MACOSX) || defined(OS_ANDROID)
void OnShowPopup(const ViewHostMsg_ShowPopup_Params& params);
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 356d33f..0a2ecb9 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -2264,6 +2264,12 @@ IPC_MESSAGE_ROUTED2(ViewHostMsg_UpdateFaviconURL,
IPC_MESSAGE_ROUTED1(ViewHostMsg_DidFirstVisuallyNonEmptyPaint,
int /* page_id */)
+// Message sent from renderer to the browser when the element that is focused
+// has been touched. A bool is passed in this message which indicates if the
+// node is editable.
+IPC_MESSAGE_ROUTED1(ViewHostMsg_FocusedNodeTouched,
+ bool /* editable */)
+
#if defined(OS_ANDROID)
// Response to ViewMsg_FindMatchRects.
//
diff --git a/content/public/renderer/render_view_observer.h b/content/public/renderer/render_view_observer.h
index d4ad79a..87ee60f 100644
--- a/content/public/renderer/render_view_observer.h
+++ b/content/public/renderer/render_view_observer.h
@@ -94,7 +94,6 @@ class CONTENT_EXPORT RenderViewObserver : public IPC::Listener,
// These match the RenderView methods.
virtual void DidHandleMouseEvent(const WebKit::WebMouseEvent& event) {}
virtual void DidHandleTouchEvent(const WebKit::WebTouchEvent& event) {}
- virtual void DidHandleGestureEvent(const WebKit::WebGestureEvent& event) {}
virtual void DidCreatePepperPlugin(RendererPpapiHost* host) {}
// Called when we receive a console message from WebKit for which we requested
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 8a62e94..33e79bc 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -3055,8 +3055,15 @@ void RenderViewImpl::didHandleGestureEvent(
const WebGestureEvent& event,
bool event_cancelled) {
RenderWidget::didHandleGestureEvent(event, event_cancelled);
- FOR_EACH_OBSERVER(RenderViewObserver, observers_,
- DidHandleGestureEvent(event));
+
+ if (event.type != blink::WebGestureEvent::GestureTap)
+ return;
+
+ blink::WebTextInputType text_input_type =
+ GetWebView()->textInputInfo().type;
+
+ Send(new ViewHostMsg_FocusedNodeTouched(
+ routing_id(), text_input_type != blink::WebTextInputTypeNone));
}
void RenderViewImpl::initializeLayerTreeView() {