 Chromium Code Reviews
 Chromium Code Reviews Issue 2781613003:
  Added a class acting as a fake caret for accessibility.  (Closed)
    
  
    Issue 2781613003:
  Added a class acting as a fake caret for accessibility.  (Closed) 
  | Index: content/browser/renderer_host/render_widget_host_view_aura.cc | 
| diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc | 
| index 61b60b05345b9f7bc3b334c2517a143d09559918..8696db3db8ae30348842429e2c8b01c331c7906b 100644 | 
| --- a/content/browser/renderer_host/render_widget_host_view_aura.cc | 
| +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc | 
| @@ -103,6 +103,7 @@ | 
| #include "content/browser/accessibility/browser_accessibility_manager_win.h" | 
| #include "content/browser/accessibility/browser_accessibility_win.h" | 
| #include "content/browser/renderer_host/legacy_render_widget_host_win.h" | 
| +#include "ui/accessibility/platform/ax_fake_caret_win.h" | 
| #include "ui/base/win/hidden_window.h" | 
| #include "ui/base/win/osk_display_manager.h" | 
| #include "ui/base/win/osk_display_observer.h" | 
| @@ -885,7 +886,9 @@ void RenderWidgetHostViewAura::UpdateMouseLockRegion() { | 
| } | 
| void RenderWidgetHostViewAura::OnLegacyWindowDestroyed() { | 
| - legacy_render_widget_host_HWND_ = NULL; | 
| + ui::AXFakeCaretWin::Get()->SetTargetForNativeAccessibilityEvent( | 
| 
dmazzoni
2017/04/21 21:06:30
Hmmm, I wonder if it'd make more sense for each
HW
 | 
| + gfx::kNullAcceleratedWidget); | 
| + legacy_render_widget_host_HWND_ = nullptr; | 
| legacy_window_destroyed_ = true; | 
| } | 
| #endif | 
| @@ -1556,6 +1559,8 @@ void RenderWidgetHostViewAura::OnWindowDestroying(aura::Window* window) { | 
| // The Destroy call above will delete the LegacyRenderWidgetHostHWND | 
| // instance. | 
| legacy_render_widget_host_HWND_ = NULL; | 
| + ui::AXFakeCaretWin::Get()->SetTargetForNativeAccessibilityEvent( | 
| + gfx::kNullAcceleratedWidget); | 
| } | 
| #endif | 
| @@ -2155,6 +2160,8 @@ void RenderWidgetHostViewAura::UpdateLegacyWin() { | 
| // here. | 
| if (!host_->is_hidden()) | 
| legacy_render_widget_host_HWND_->Show(); | 
| + ui::AXFakeCaretWin::Get()->SetTargetForNativeAccessibilityEvent( | 
| + legacy_render_widget_host_HWND_->hwnd()); | 
| } | 
| } | 
| #endif | 
| @@ -2333,7 +2340,6 @@ void RenderWidgetHostViewAura::OnSelectionBoundsChanged( | 
| void RenderWidgetHostViewAura::OnTextSelectionChanged( | 
| TextInputManager* text_input_manager, | 
| RenderWidgetHostViewBase* updated_view) { | 
| -#if defined(USE_X11) && !defined(OS_CHROMEOS) | 
| if (!GetTextInputManager()) | 
| return; | 
| @@ -2350,6 +2356,7 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged( | 
| if (!focused_view) | 
| return; | 
| +#if defined(USE_X11) && !defined(OS_CHROMEOS) | 
| const TextInputManager::TextSelection* selection = | 
| GetTextInputManager()->GetTextSelection(focused_view); | 
| if (selection->selected_text().length()) { | 
| @@ -2357,7 +2364,24 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged( | 
| ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_SELECTION); | 
| clipboard_writer.WriteText(selection->selected_text()); | 
| } | 
| -#endif // defined(USE_X11) && !defined(OS_CHROMEOS) | 
| + | 
| +// #endif defined(USE_X11) && !defined(OS_CHROMEOS) | 
| +#elif defined(OS_WIN) | 
| + // Some assistive software need to track the location of the caret. | 
| + if (!GetRenderWidgetHost()) | 
| + return; | 
| + | 
| + // Not using |GetCaretBounds| because it includes the whole of the selection, | 
| + // not just the focus. | 
| + const TextInputManager::SelectionRegion* region = | 
| + GetTextInputManager()->GetSelectionRegion(focused_view); | 
| + if (!region) | 
| + return; | 
| + gfx::Rect caret_rect = ConvertRectToScreen(gfx::Rect( | 
| + region->focus.edge_top_rounded().x(), | 
| + region->focus.edge_top_rounded().y(), 1, region->focus.GetHeight())); | 
| + ui::AXFakeCaretWin::Get()->MoveCaretTo(caret_rect); | 
| +#endif // defined(OS_WIN) | 
| } | 
| void RenderWidgetHostViewAura::SetPopupChild( |