diff options
author | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-02 18:55:20 +0000 |
---|---|---|
committer | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-02 18:55:20 +0000 |
commit | d3153af8482f04d947fc2ca7652c4040a2136afc (patch) | |
tree | 763b74f88109f191bbf90c8d71d1d58204dcd734 | |
parent | f8acb6a1a774cb011ac6a267ef4eb77eaa2f5af6 (diff) | |
download | chromium_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.cc | 16 | ||||
-rw-r--r-- | chrome/browser/ui/tab_contents/core_tab_helper.h | 1 | ||||
-rw-r--r-- | chrome/common/render_messages.h | 6 | ||||
-rw-r--r-- | chrome/renderer/chrome_render_view_observer.cc | 13 | ||||
-rw-r--r-- | chrome/renderer/chrome_render_view_observer.h | 2 | ||||
-rw-r--r-- | content/browser/renderer_host/render_view_host_impl.cc | 13 | ||||
-rw-r--r-- | content/browser/renderer_host/render_view_host_impl.h | 1 | ||||
-rw-r--r-- | content/common/view_messages.h | 6 | ||||
-rw-r--r-- | content/public/renderer/render_view_observer.h | 1 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 11 |
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() { |