fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Kyrylo Hrechykhin <[email protected]>
  3. Date: Thu, 6 Oct 2022 18:30:53 +0200
  4. Subject: fix: on-screen-keyboard hides on input blur in webview
  5. Changes introduced by this patch fix issue where OSK does not hide on
  6. input rendered inside webview is blurred. This patch should be removed
  7. when proper fix in chromium repo is available.
  8. Note: the issue still occurs if input rendered in webview blurred due
  9. to touch outside of webview. It is caused by webview implementation
  10. details. Specificaly due to webview has its own tree nodes and focused
  11. node does not change in this case.
  12. chromium-bug: https://crbug.com/1369605
  13. diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.cc b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
  14. index c4312c899d5293eeb59d679dfa81a8f005f30940..906b47e935bdc3d37cf8313e5938bf79da335517 100644
  15. --- a/content/browser/renderer_host/render_widget_host_view_child_frame.cc
  16. +++ b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
  17. @@ -1039,6 +1039,12 @@ RenderWidgetHostViewChildFrame::DidUpdateVisualProperties(
  18. return viz::ScopedSurfaceIdAllocator(std::move(allocation_task));
  19. }
  20. +void RenderWidgetHostViewChildFrame::FocusedNodeChanged(
  21. + bool is_editable_node,
  22. + const gfx::Rect& node_bounds_in_screen) {
  23. + NOTREACHED();
  24. +}
  25. +
  26. ui::TextInputType RenderWidgetHostViewChildFrame::GetTextInputType() const {
  27. if (!text_input_manager_)
  28. return ui::TEXT_INPUT_TYPE_NONE;
  29. diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.h b/content/browser/renderer_host/render_widget_host_view_child_frame.h
  30. index e340087e3ab2f07937ed6e6bd8e0ec8aa2a76d48..2b29e246b2f6ecf5d7605abfa36028642a7850c0 100644
  31. --- a/content/browser/renderer_host/render_widget_host_view_child_frame.h
  32. +++ b/content/browser/renderer_host/render_widget_host_view_child_frame.h
  33. @@ -181,6 +181,8 @@ class CONTENT_EXPORT RenderWidgetHostViewChildFrame
  34. void DisableAutoResize(const gfx::Size& new_size) override;
  35. viz::ScopedSurfaceIdAllocator DidUpdateVisualProperties(
  36. const cc::RenderFrameMetadata& metadata) override;
  37. + void FocusedNodeChanged(bool is_editable_node,
  38. + const gfx::Rect& node_bounds_in_screen) override;
  39. // RenderFrameMetadataProvider::Observer implementation.
  40. void OnRenderFrameMetadataChangedBeforeActivation(
  41. diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
  42. index a2e8526344318df726ea3af130aab3f72a3125e1..35b1cdcd9099bac3fd926ab6c9587dc5597c0d7d 100644
  43. --- a/content/browser/web_contents/web_contents_impl.cc
  44. +++ b/content/browser/web_contents/web_contents_impl.cc
  45. @@ -8645,7 +8645,7 @@ void WebContentsImpl::OnFocusedElementChangedInFrame(
  46. "WebContentsImpl::OnFocusedElementChangedInFrame",
  47. "render_frame_host", frame);
  48. RenderWidgetHostViewBase* root_view =
  49. - static_cast<RenderWidgetHostViewBase*>(GetRenderWidgetHostView());
  50. + static_cast<RenderWidgetHostViewBase*>(GetTopLevelRenderWidgetHostView());
  51. if (!root_view || !frame->GetView()) {
  52. return;
  53. }