Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1851)

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 1987903002: Create only a single LegacyRenderWidgetHostHWND per WebContentsViewAura. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix last merge issue Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.h ('k') | content/browser/web_contents/web_contents_view_aura.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698