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 c33e325cef30eaab1a331b7c0dcf7f6d7f8f6166..207788f04e72b91678915c507d5a43bcc8be6104 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
@@ -382,7 +382,6 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host, |
cursor_visibility_state_in_renderer_(UNKNOWN), |
#if defined(OS_WIN) |
legacy_render_widget_host_HWND_(nullptr), |
- legacy_window_destroyed_(false), |
#endif |
has_snapped_to_boundary_(false), |
is_guest_view_hack_(is_guest_view_hack), |
@@ -555,20 +554,6 @@ void RenderWidgetHostViewAura::Show() { |
} |
delegated_frame_host_->WasShown(browser_latency_info); |
- |
-#if defined(OS_WIN) |
- if (legacy_render_widget_host_HWND_) { |
- // Reparent the legacy Chrome_RenderWidgetHostHWND window to the parent |
- // window before reparenting any plugins. This ensures that the plugin |
- // windows stay on top of the child Zorder in the parent and receive |
- // mouse events, etc. |
- legacy_render_widget_host_HWND_->UpdateParent( |
- GetNativeView()->GetHost()->GetAcceleratedWidget()); |
- legacy_render_widget_host_HWND_->SetBounds( |
- window_->GetBoundsInRootWindow()); |
- legacy_render_widget_host_HWND_->Show(); |
- } |
-#endif |
} |
void RenderWidgetHostViewAura::Hide() { |
@@ -578,16 +563,6 @@ void RenderWidgetHostViewAura::Hide() { |
if (host_ && !host_->is_hidden()) { |
host_->WasHidden(); |
delegated_frame_host_->WasHidden(); |
- |
-#if defined(OS_WIN) |
- aura::WindowTreeHost* host = window_->GetHost(); |
- if (host) { |
- // We reparent the legacy Chrome_RenderWidgetHostHWND window to the global |
- // hidden window on the same lines as Windowed plugin windows. |
- if (legacy_render_widget_host_HWND_) |
- legacy_render_widget_host_HWND_->UpdateParent(ui::GetHiddenWindow()); |
- } |
-#endif |
} |
#if defined(OS_WIN) |
@@ -1049,12 +1024,7 @@ void RenderWidgetHostViewAura::UpdateMouseLockRegion() { |
.ToRECT(); |
::ClipCursor(&window_rect); |
} |
- |
-void RenderWidgetHostViewAura::OnLegacyWindowDestroyed() { |
- legacy_render_widget_host_HWND_ = NULL; |
- legacy_window_destroyed_ = true; |
-} |
-#endif |
+#endif // defined(OS_WIN) |
void RenderWidgetHostViewAura::OnSwapCompositorFrame( |
uint32_t output_surface_id, |
@@ -1089,6 +1059,13 @@ void RenderWidgetHostViewAura::DidStopFlinging() { |
selection_controller_client_->OnScrollCompleted(); |
} |
+#if defined(OS_WIN) |
+void RenderWidgetHostViewAura::SetLegacyRenderWidgetHostHWND( |
+ LegacyRenderWidgetHostHWND* legacy_hwnd) { |
+ legacy_render_widget_host_HWND_ = legacy_hwnd; |
+} |
+#endif |
+ |
bool RenderWidgetHostViewAura::HasAcceleratedSurface( |
const gfx::Size& desired_size) { |
// Aura doesn't use GetBackingStore for accelerated pages, so it doesn't |
@@ -1270,8 +1247,11 @@ RenderWidgetHostViewAura::CreateBrowserAccessibilityManager( |
gfx::AcceleratedWidget |
RenderWidgetHostViewAura::AccessibilityGetAcceleratedWidget() { |
#if defined(OS_WIN) |
- if (legacy_render_widget_host_HWND_) |
- return legacy_render_widget_host_HWND_->hwnd(); |
+ if (legacy_render_widget_host_HWND_) { |
+ HWND hwnd = legacy_render_widget_host_HWND_->hwnd(); |
+ if (::IsWindow(hwnd)) |
+ return hwnd; |
+ } |
#endif |
return gfx::kNullAcceleratedWidget; |
} |
@@ -1687,19 +1667,15 @@ void RenderWidgetHostViewAura::OnDeviceScaleFactorChanged( |
void RenderWidgetHostViewAura::OnWindowDestroying(aura::Window* window) { |
#if defined(OS_WIN) |
- // The LegacyRenderWidgetHostHWND instance is destroyed when its window is |
- // destroyed. Normally we control when that happens via the Destroy call |
- // in the dtor. However there may be cases where the window is destroyed |
- // by Windows, i.e. the parent window is destroyed before the |
- // RenderWidgetHostViewAura instance goes away etc. To avoid that we |
- // destroy the LegacyRenderWidgetHostHWND instance here. |
- if (legacy_render_widget_host_HWND_) { |
- legacy_render_widget_host_HWND_->set_host(NULL); |
- legacy_render_widget_host_HWND_->Destroy(); |
- // The Destroy call above will delete the LegacyRenderWidgetHostHWND |
- // instance. |
- legacy_render_widget_host_HWND_ = NULL; |
+ HWND parent = NULL; |
+ // If the tab was hidden and it's closed, host_->is_hidden would have been |
+ // reset to false in RenderWidgetHostImpl::RendererExited. |
+ if (!window_->GetRootWindow() || host_->is_hidden()) { |
+ parent = ui::GetHiddenWindow(); |
+ } else { |
+ parent = window_->GetHost()->GetAcceleratedWidget(); |
} |
+ legacy_render_widget_host_HWND_ = nullptr; |
#endif |
// Make sure that the input method no longer references to this object before |
@@ -2280,13 +2256,6 @@ RenderWidgetHostViewAura::~RenderWidgetHostViewAura() { |
popup_child_host_view_->popup_parent_host_view_ = NULL; |
} |
event_filter_for_popup_exit_.reset(); |
- |
-#if defined(OS_WIN) |
- // The LegacyRenderWidgetHostHWND window should have been destroyed in |
- // RenderWidgetHostViewAura::OnWindowDestroying and the pointer should |
- // be set to NULL. |
- DCHECK(!legacy_render_widget_host_HWND_); |
-#endif |
} |
void RenderWidgetHostViewAura::CreateAuraWindow() { |
@@ -2497,28 +2466,8 @@ void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) { |
window_->SetBounds(rect); |
host_->WasResized(); |
delegated_frame_host_->WasResized(); |
-#if defined(OS_WIN) |
- // Create the legacy dummy window which corresponds to the bounds of the |
- // webcontents. It is needed for accessibility and for scrolling to work in |
- // legacy drivers for trackpoints/trackpads, etc. |
- if (!legacy_window_destroyed_ && GetHostWindowHWND()) { |
- if (!legacy_render_widget_host_HWND_) { |
- legacy_render_widget_host_HWND_ = |
- LegacyRenderWidgetHostHWND::Create(GetHostWindowHWND()); |
- } |
- if (legacy_render_widget_host_HWND_) { |
- legacy_render_widget_host_HWND_->set_host(this); |
- legacy_render_widget_host_HWND_->SetBounds( |
- window_->GetBoundsInRootWindow()); |
- // There are cases where the parent window is created, made visible and |
- // the associated RenderWidget is also visible before the |
- // LegacyRenderWidgetHostHWND instace is created. Ensure that it is shown |
- // here. |
- if (!host_->is_hidden()) |
- legacy_render_widget_host_HWND_->Show(); |
- } |
- } |
+#if defined(OS_WIN) |
if (mouse_locked_) |
UpdateMouseLockRegion(); |
#endif |
@@ -2564,13 +2513,6 @@ void RenderWidgetHostViewAura::AddedToRootWindow() { |
input_method->SetFocusedTextInputClient(this); |
} |
-#if defined(OS_WIN) |
- // The parent may have changed here. Ensure that the legacy window is |
- // reparented accordingly. |
- if (legacy_render_widget_host_HWND_) |
- legacy_render_widget_host_HWND_->UpdateParent(GetHostWindowHWND()); |
-#endif |
- |
delegated_frame_host_->SetCompositor(window_->GetHost()->compositor()); |
} |
@@ -2584,13 +2526,6 @@ void RenderWidgetHostViewAura::RemovingFromRootWindow() { |
window_->GetHost()->RemoveObserver(this); |
delegated_frame_host_->ResetCompositor(); |
- |
-#if defined(OS_WIN) |
- // Update the legacy window's parent temporarily to the desktop window. It |
- // will eventually get reparented to the right root. |
- if (legacy_render_widget_host_HWND_) |
- legacy_render_widget_host_HWND_->UpdateParent(::GetDesktopWindow()); |
-#endif |
} |
void RenderWidgetHostViewAura::DetachFromInputMethod() { |