fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch 3.2 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 f509de422c2eb340b706afa364370e64107a4c84..76fa4ef05837a44632e9a05afea90da7e79d86d2 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. @@ -996,6 +996,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 ed0641b888c6421b1791c086466bd9c158e9109d..3760b3823d5af3325017bb53f5b1d38e6d9091d8 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 57c5157e28c26daf3c61497cc9f9e0216325771d..89f8b3aaf5d86d30c56562db7072c795f1fac58a 100644
  43. --- a/content/browser/web_contents/web_contents_impl.cc
  44. +++ b/content/browser/web_contents/web_contents_impl.cc
  45. @@ -8201,7 +8201,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. // Convert to screen coordinates from window coordinates by adding the