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

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

Issue 151083002: Create a visible window with class name Chrome_RenderWidgetHostHWND which corresponds to the bounds… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 10 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
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.h ('k') | content/content_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/render_widget_host_view_aura.cc
===================================================================
--- content/browser/renderer_host/render_widget_host_view_aura.cc (revision 249488)
+++ content/browser/renderer_host/render_widget_host_view_aura.cc (working copy)
@@ -82,6 +82,7 @@
#if defined(OS_WIN)
#include "content/browser/accessibility/browser_accessibility_manager_win.h"
#include "content/browser/accessibility/browser_accessibility_win.h"
+#include "content/browser/renderer_host/legacy_render_widget_host_win.h"
#include "content/common/plugin_constants_win.h"
#include "ui/base/win/hidden_window.h"
#include "ui/gfx/gdi_util.h"
@@ -486,9 +487,6 @@
gfx::Screen::GetScreenFor(window_)->AddObserver(this);
software_frame_manager_.reset(new SoftwareFrameManager(
weak_ptr_factory_.GetWeakPtr()));
-#if defined(OS_WIN)
- plugin_parent_window_ = NULL;
-#endif
ImageTransportFactory::GetInstance()->AddObserver(this);
}
@@ -618,15 +616,18 @@
}
#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()->GetDispatcher()->host()->GetAcceleratedWidget());
+ legacy_render_widget_host_HWND_->SetBounds(
+ window_->GetBoundsInRootWindow());
+ }
LPARAM lparam = reinterpret_cast<LPARAM>(this);
EnumChildWindows(ui::GetHiddenWindow(), ShowWindowsCallback, lparam);
-
- if (::IsWindow(plugin_parent_window_)) {
- gfx::Rect window_bounds = window_->GetBoundsInRootWindow();
- ::SetWindowPos(plugin_parent_window_, NULL, window_bounds.x(),
- window_bounds.y(), window_bounds.width(),
- window_bounds.height(), 0);
- }
#endif
}
@@ -644,11 +645,12 @@
if (dispatcher) {
HWND parent = dispatcher->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());
}
- if (::IsWindow(plugin_parent_window_))
- ::SetWindowPos(plugin_parent_window_, NULL, 0, 0, 0, 0, 0);
#endif
}
@@ -867,11 +869,19 @@
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() {
@@ -1213,27 +1223,26 @@
selection_focus_rect_);
}
#if defined(OS_WIN)
- // Create the dummy plugin parent window which will be passed as the
- // container window to windowless plugins.
+ // 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.
- if (!plugin_parent_window_ && GetNativeViewId()) {
- plugin_parent_window_ = ::CreateWindowEx(
- 0, L"Static", NULL, WS_CHILDWINDOW, 0, 0, 0, 0,
- reinterpret_cast<HWND>(GetNativeViewId()), NULL, NULL, NULL);
- if (::IsWindow(plugin_parent_window_))
- ::SetProp(plugin_parent_window_, content::kPluginDummyParentProperty,
- reinterpret_cast<HANDLE>(true));
+ // Additonally the legacy dummy window is needed for accessibility and for
+ // scrolling to work in legacy drivers for trackpoints/trackpads, etc.
+ if (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_->SetBounds(
+ window_->GetBoundsInRootWindow());
+ }
}
- if (::IsWindow(plugin_parent_window_)) {
- gfx::Rect window_bounds = window_->GetBoundsInRootWindow();
- ::SetWindowPos(plugin_parent_window_, NULL, window_bounds.x(),
- window_bounds.y(), window_bounds.width(),
- window_bounds.height(), 0);
- }
#endif
}
@@ -1700,7 +1709,11 @@
gfx::NativeViewId RenderWidgetHostViewAura::GetParentForWindowlessPlugin()
const {
- return reinterpret_cast<gfx::NativeViewId>(plugin_parent_window_);
+ if (legacy_render_widget_host_HWND_) {
+ return reinterpret_cast<gfx::NativeViewId>(
+ legacy_render_widget_host_HWND_->hwnd());
+ }
+ return NULL;
}
#endif
@@ -2192,6 +2205,7 @@
if (GetBrowserAccessibilityManager())
return;
+ BrowserAccessibilityManager* manager = NULL;
#if defined(OS_WIN)
aura::WindowEventDispatcher* dispatcher = window_->GetDispatcher();
if (!dispatcher)
@@ -2205,14 +2219,15 @@
gfx::NativeViewAccessible accessible_parent =
host_->GetParentNativeViewAccessible();
- BrowserAccessibilityManager* manager = new BrowserAccessibilityManagerWin(
- hwnd, accessible_parent,
- BrowserAccessibilityManagerWin::GetEmptyDocument(), this);
+ if (legacy_render_widget_host_HWND_) {
+ manager = new BrowserAccessibilityManagerWin(
+ legacy_render_widget_host_HWND_.get(), accessible_parent,
+ BrowserAccessibilityManagerWin::GetEmptyDocument(), this);
+ }
#else
- BrowserAccessibilityManager* manager = BrowserAccessibilityManager::Create(
+ manager = BrowserAccessibilityManager::Create(
BrowserAccessibilityManager::GetEmptyDocument(), this);
#endif
-
SetBrowserAccessibilityManager(manager);
}
@@ -3335,8 +3350,7 @@
active_frame_subscriber_textures_.clear();
#if defined(OS_WIN)
- if (::IsWindow(plugin_parent_window_))
- ::DestroyWindow(plugin_parent_window_);
+ legacy_render_widget_host_HWND_.reset(NULL);
#endif
}
@@ -3483,7 +3497,6 @@
void RenderWidgetHostViewAura::AddedToRootWindow() {
window_->GetDispatcher()->AddRootWindowObserver(this);
- host_->ParentChanged(GetNativeViewId());
UpdateScreenInfo(window_);
aura::client::CursorClient* cursor_client =
@@ -3499,6 +3512,14 @@
if (input_method)
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
}
void RenderWidgetHostViewAura::RemovingFromRootWindow() {
@@ -3510,7 +3531,6 @@
DetachFromInputMethod();
window_->GetDispatcher()->RemoveRootWindowObserver(this);
- host_->ParentChanged(0);
ui::Compositor* compositor = GetCompositor();
if (current_surface_.get()) {
// We can't get notification for commits after this point, which would
@@ -3525,6 +3545,13 @@
host_->WasResized();
if (compositor && compositor->HasObserver(this))
compositor->RemoveObserver(this);
+
+#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
}
ui::Compositor* RenderWidgetHostViewAura::GetCompositor() const {
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.h ('k') | content/content_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698