| Index: content/browser/renderer_host/render_view_host_impl.cc | 
| diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc | 
| index c457e2c339f50a4ca165710470be9a12f0d3b7df..abee01e209e1fe10c72b2e2afe764cb7d3fcf836 100644 | 
| --- a/content/browser/renderer_host/render_view_host_impl.cc | 
| +++ b/content/browser/renderer_host/render_view_host_impl.cc | 
| @@ -90,8 +90,8 @@ | 
| #include "url/url_constants.h" | 
|  | 
| #if defined(OS_WIN) | 
| -#include "base/win/win_util.h" | 
| #include "ui/display/win/dpi.h" | 
| +#include "ui/gfx/geometry/dip_util.h" | 
| #include "ui/gfx/platform_font_win.h" | 
| #endif | 
|  | 
| @@ -108,27 +108,6 @@ namespace content { | 
| namespace { | 
|  | 
| #if defined(OS_WIN) | 
| - | 
| -const int kVirtualKeyboardDisplayWaitTimeoutMs = 100; | 
| -const int kMaxVirtualKeyboardDisplayRetries = 5; | 
| - | 
| -void DismissVirtualKeyboardTask() { | 
| -  static int virtual_keyboard_display_retries = 0; | 
| -  // If the virtual keyboard is not yet visible, then we execute the task again | 
| -  // waiting for it to show up. | 
| -  if (!base::win::DismissVirtualKeyboard()) { | 
| -    if (virtual_keyboard_display_retries < kMaxVirtualKeyboardDisplayRetries) { | 
| -      BrowserThread::PostDelayedTask( | 
| -          BrowserThread::UI, FROM_HERE, | 
| -          base::Bind(base::IgnoreResult(&DismissVirtualKeyboardTask)), | 
| -          TimeDelta::FromMilliseconds(kVirtualKeyboardDisplayWaitTimeoutMs)); | 
| -      ++virtual_keyboard_display_retries; | 
| -    } else { | 
| -      virtual_keyboard_display_retries = 0; | 
| -    } | 
| -  } | 
| -} | 
| - | 
| void GetWindowsSpecificPrefs(RendererPreferences* prefs) { | 
| NONCLIENTMETRICS_XP metrics = {0}; | 
| base::win::GetNonClientMetrics(&metrics); | 
| @@ -163,7 +142,6 @@ void GetWindowsSpecificPrefs(RendererPreferences* prefs) { | 
| display::win::GetSystemMetricsInDIP(SM_CXHSCROLL); | 
| } | 
| #endif | 
| - | 
| }  // namespace | 
|  | 
| // static | 
| @@ -227,7 +205,6 @@ RenderViewHostImpl::RenderViewHostImpl( | 
| is_waiting_for_close_ack_(false), | 
| sudden_termination_allowed_(false), | 
| render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING), | 
| -      virtual_keyboard_requested_(false), | 
| is_focused_element_editable_(false), | 
| updating_web_preferences_(false), | 
| render_view_ready_on_process_launch_(false), | 
| @@ -1127,16 +1104,6 @@ void RenderViewHostImpl::OnFocusedNodeChanged( | 
| is_focused_element_editable_ = is_editable_node; | 
| if (GetWidget()->GetView()) | 
| GetWidget()->GetView()->FocusedNodeChanged(is_editable_node); | 
| -#if defined(OS_WIN) | 
| -  if (!is_editable_node && virtual_keyboard_requested_) { | 
| -    virtual_keyboard_requested_ = false; | 
| -    delegate_->SetIsVirtualKeyboardRequested(false); | 
| -    BrowserThread::PostDelayedTask( | 
| -        BrowserThread::UI, FROM_HERE, | 
| -        base::Bind(base::IgnoreResult(&DismissVirtualKeyboardTask)), | 
| -        TimeDelta::FromMilliseconds(kVirtualKeyboardDisplayWaitTimeoutMs)); | 
| -  } | 
| -#endif | 
|  | 
| // None of the rest makes sense without a view. | 
| if (!GetWidget()->GetView()) | 
| @@ -1299,14 +1266,20 @@ void RenderViewHostImpl::OnRunFileChooser(const FileChooserParams& params) { | 
|  | 
| void RenderViewHostImpl::OnFocusedNodeTouched(bool editable) { | 
| #if defined(OS_WIN) | 
| -  if (editable) { | 
| -    virtual_keyboard_requested_ = base::win::DisplayVirtualKeyboard(); | 
| -    delegate_->SetIsVirtualKeyboardRequested(true); | 
| -  } else { | 
| -    virtual_keyboard_requested_ = false; | 
| -    delegate_->SetIsVirtualKeyboardRequested(false); | 
| -    base::win::DismissVirtualKeyboard(); | 
| -  } | 
| +  // We use the cursor position to determine where the touch occurred. | 
| +  // TODO(ananta) | 
| +  // Pass this information from blink. | 
| +  // In site isolation mode, we may not have a RenderViewHostImpl instance | 
| +  // which means that displaying the OSK is not going to work. We should | 
| +  // probably move this to RenderWidgetHostImpl and call the view from there. | 
| +  // https://bugs.chromium.org/p/chromium/issues/detail?id=613326 | 
| +  POINT cursor_pos = {}; | 
| +  ::GetCursorPos(&cursor_pos); | 
| +  float scale = GetScaleFactorForView(GetWidget()->GetView()); | 
| +  gfx::Point location_dips_screen = | 
| +      gfx::ConvertPointToDIP(scale, gfx::Point(cursor_pos)); | 
| +  if (GetWidget()->GetView()) | 
| +    GetWidget()->GetView()->FocusedNodeTouched(location_dips_screen, editable); | 
| #endif | 
| } | 
|  | 
|  |