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

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

Issue 387353004: Create only a single LegacyRenderWidgetHostHWND per WebContentsViewAura. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@render_frame_ax_3
Patch Set: Oops, forgot to upload delegate in new file Created 6 years, 2 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 0cb6a0897c81bff6d02e69742a202305c728dbcd..074a309e045a43ef514afa1c672bd7bb5a927292 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -448,7 +448,6 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host,
cursor_visibility_state_in_renderer_(UNKNOWN),
#if defined(OS_WIN)
legacy_render_widget_host_HWND_(NULL),
- legacy_window_destroyed_(false),
#endif
has_snapped_to_boundary_(false),
touch_editing_client_(NULL),
@@ -602,16 +601,6 @@ void RenderWidgetHostViewAura::WasShown() {
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());
- }
LPARAM lparam = reinterpret_cast<LPARAM>(this);
EnumChildWindows(ui::GetHiddenWindow(), ShowWindowsCallback, lparam);
#endif
@@ -630,10 +619,6 @@ void RenderWidgetHostViewAura::WasHidden() {
HWND parent = host->GetAcceleratedWidget();
LPARAM lparam = reinterpret_cast<LPARAM>(this);
EnumChildWindows(parent, HideWindowsCallback, lparam);
- // 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
}
@@ -798,19 +783,11 @@ bool RenderWidgetHostViewAura::IsSurfaceAvailableForCopy() const {
void RenderWidgetHostViewAura::Show() {
window_->Show();
WasShown();
-#if defined(OS_WIN)
- if (legacy_render_widget_host_HWND_)
- legacy_render_widget_host_HWND_->Show();
-#endif
}
void RenderWidgetHostViewAura::Hide() {
window_->Hide();
WasHidden();
-#if defined(OS_WIN)
- if (legacy_render_widget_host_HWND_)
- legacy_render_widget_host_HWND_->Hide();
-#endif
}
bool RenderWidgetHostViewAura::IsShowing() {
@@ -1035,12 +1012,7 @@ void RenderWidgetHostViewAura::UpdateMouseLockRegion() {
::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 output_surface_id,
@@ -1072,6 +1044,11 @@ void RenderWidgetHostViewAura::DidStopFlinging() {
}
#if defined(OS_WIN)
+void RenderWidgetHostViewAura::SetLegacyRenderWidgetHostHWND(
+ LegacyRenderWidgetHostHWND* legacy_hwnd) {
+ legacy_render_widget_host_HWND_ = legacy_hwnd;
+}
+
void RenderWidgetHostViewAura::SetParentNativeViewAccessible(
gfx::NativeViewAccessible accessible_parent) {
}
@@ -1079,8 +1056,9 @@ void RenderWidgetHostViewAura::SetParentNativeViewAccessible(
gfx::NativeViewId RenderWidgetHostViewAura::GetParentForWindowlessPlugin()
const {
if (legacy_render_widget_host_HWND_) {
- return reinterpret_cast<gfx::NativeViewId>(
- legacy_render_widget_host_HWND_->hwnd());
+ HWND hwnd = legacy_render_widget_host_HWND_->hwnd();
+ if (::IsWindow(hwnd))
+ return reinterpret_cast<gfx::NativeViewId>(hwnd);
}
return NULL;
}
@@ -1223,8 +1201,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;
}
@@ -1747,20 +1728,7 @@ void RenderWidgetHostViewAura::OnWindowDestroying(aura::Window* window) {
}
LPARAM lparam = reinterpret_cast<LPARAM>(this);
EnumChildWindows(parent, WindowDestroyingCallback, lparam);
-
- // 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;
- }
+ legacy_render_widget_host_HWND_ = NULL;
#endif
// Make sure that the input method no longer references to this object before
@@ -2268,13 +2236,6 @@ RenderWidgetHostViewAura::~RenderWidgetHostViewAura() {
// Aura root window and we don't have a way to get an input method object
// associated with the window, but just in case.
DetachFromInputMethod();
-
-#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::UpdateCursorIfOverSelf() {
@@ -2431,34 +2392,6 @@ void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) {
selection_focus_rect_);
}
#if defined(OS_WIN)
- // Create the legacy dummy window which corresponds to the bounds of the
- // webcontents. This will be passed as the container window for windowless
- // plugins.
- // Plugins like Flash assume the container window which is returned via the
- // NPNVnetscapeWindow property corresponds to the bounds of the webpage.
- // This is not true in Aura where we have only HWND which is the main Aura
- // window. If we return this window to plugins like Flash then it causes the
- // coordinate translations done by these plugins to break.
- // Additonally the legacy dummy window is needed for accessibility and for
- // scrolling to work in legacy drivers for trackpoints/trackpads, etc.
- if (!legacy_window_destroyed_ && GetNativeViewId()) {
- if (!legacy_render_widget_host_HWND_) {
- legacy_render_widget_host_HWND_ = LegacyRenderWidgetHostHWND::Create(
- reinterpret_cast<HWND>(GetNativeViewId()));
- }
- 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 (mouse_locked_)
UpdateMouseLockRegion();
#endif
@@ -2504,14 +2437,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(
- reinterpret_cast<HWND>(GetNativeViewId()));
-#endif
-
delegated_frame_host_->AddedToWindow();
}
@@ -2525,13 +2450,6 @@ void RenderWidgetHostViewAura::RemovingFromRootWindow() {
window_->GetHost()->RemoveObserver(this);
delegated_frame_host_->RemovingFromWindow();
-
-#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