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

Unified Diff: content/browser/web_contents/web_contents_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: Created 6 years, 5 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/web_contents/web_contents_view_aura.cc
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index d04508ecd4cd6cf81ba68380725524958f605a5d..b78399ff02274278f5b3c83ac4368a651f14cd2a 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -70,6 +70,10 @@
#include "ui/wm/public/drag_drop_client.h"
#include "ui/wm/public/drag_drop_delegate.h"
+#if defined(OS_WIN)
+#include "ui/base/win/hidden_window.h"
+#endif
+
namespace content {
WebContentsView* CreateWebContentsView(
WebContentsImpl* web_contents,
@@ -633,6 +637,8 @@ class WebContentsViewAura::WindowObserver
#if defined(OS_WIN)
if (!window->GetRootWindow()->HasObserver(this))
window->GetRootWindow()->AddObserver(this);
+ view_->legacy_hwnd_->UpdateParent(
+ window->GetHost()->GetAcceleratedWidget());
#endif
}
}
@@ -652,6 +658,10 @@ class WebContentsViewAura::WindowObserver
root_children[i]->RemoveObserver(this);
}
}
+
+ // Update the legacy window's parent temporarily to the desktop window.
+ // It will eventually get reparented to the right root.
+ view_->legacy_hwnd_->UpdateParent(::GetDesktopWindow());
#endif
}
}
@@ -1005,6 +1015,7 @@ void WebContentsViewAura::SizeContents(const gfx::Size& size) {
if (bounds.size() != size) {
bounds.set_size(size);
window_->SetBounds(bounds);
+ legacy_hwnd_->SetBounds(window_->GetBoundsInRootWindow());
} else {
// Our size matches what we want but the renderers size may not match.
// Pretend we were resized so that the renderers size is updated too.
@@ -1098,6 +1109,15 @@ void WebContentsViewAura::CreateView(
// platforms as well.
if (delegate_)
drag_dest_delegate_ = delegate_->GetDragDestDelegate();
+
+#if defined(OS_WIN)
+ HWND parent_hwnd;
+ if (context && context->GetHost())
+ parent_hwnd = context->GetHost()->GetAcceleratedWidget();
+ else
+ parent_hwnd = ::GetDesktopWindow();
+ legacy_hwnd_.reset(LegacyRenderWidgetHostHWND::Create(parent_hwnd, this));
+#endif
}
RenderWidgetHostViewBase* WebContentsViewAura::CreateViewForWidget(
@@ -1138,12 +1158,22 @@ RenderWidgetHostViewBase* WebContentsViewAura::CreateViewForWidget(
}
AttachTouchEditableToRenderView();
+
+#if defined(OS_WIN)
+ view->SetLegacyRenderWidgetHostHWND(legacy_hwnd_.get());
+#endif
+
return view;
}
RenderWidgetHostViewBase* WebContentsViewAura::CreateViewForPopupWidget(
RenderWidgetHost* render_widget_host) {
- return new RenderWidgetHostViewAura(render_widget_host);
+ RenderWidgetHostViewAura* view =
+ new RenderWidgetHostViewAura(render_widget_host);
+#if defined(OS_WIN)
+ view->SetLegacyRenderWidgetHostHWND(legacy_hwnd_.get());
+#endif
+ return view;
}
void WebContentsViewAura::SetPageTitle(const base::string16& title) {
@@ -1612,6 +1642,31 @@ void WebContentsViewAura::UpdateWebContentsVisibility(bool visible) {
if (web_contents_->should_normally_be_visible())
web_contents_->WasHidden();
}
+
+#if defined(OS_WIN)
+ if (visible) {
+ legacy_hwnd_->UpdateParent(
+ GetNativeView()->GetHost()->GetAcceleratedWidget());
+ legacy_hwnd_->SetBounds(window_->GetBoundsInRootWindow());
+ legacy_hwnd_->Show();
+ } else {
+ // We reparent the legacy Chrome_RenderWidgetHostHWND window to the global
+ // hidden window on the same lines as Windowed plugin windows.
+ legacy_hwnd_->UpdateParent(ui::GetHiddenWindow());
+ legacy_hwnd_->Hide();
+ }
+#endif
+}
+
+#if defined(OS_WIN)
+BrowserAccessibilityManager*
+ WebContentsViewAura::GetRootBrowserAccessibilityManager() {
+ return web_contents_->GetRootBrowserAccessibilityManager();
}
+void WebContentsViewAura::OnLegacyHwndDestroyed(
+ LegacyRenderWidgetHostHWND* owner) {
+}
+#endif
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698