summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoroshima@google.com <oshima@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-24 07:23:30 +0000
committeroshima@google.com <oshima@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-24 07:23:30 +0000
commitc866f5d328386101f7f884375ce1d7f63d45bc64 (patch)
tree79cf4ab60fe277fe9bbebd988a250f673be3d521
parent16998eac4eceb53e29c5a478771f70aeb18cc84d (diff)
downloadchromium_src-c866f5d328386101f7f884375ce1d7f63d45bc64.zip
chromium_src-c866f5d328386101f7f884375ce1d7f63d45bc64.tar.gz
chromium_src-c866f5d328386101f7f884375ce1d7f63d45bc64.tar.bz2
Remove IdFromNativeView, move this logic to RenderWidgetHostViwe::GetNativeViewId
[Linux/Mac] Changed RenderWidgetHost::GetScreenInfo/GetWindowRect/GetRootWindowRect to use RWHV instead of NativeViewId as use of NativeViewId is no longer necessary. This is necessary to allow us to switch RWHV implementations (RenderWidgetHostViewGtk and RenderWidgetHostViewViews) on the fly. (Windows will need something similar to support NPAPI with pure views, but this part is not implemented) The current code doesn't work with RenderWidgetHostWin as win uses IPC method to get screen/window information and needs more work. BUG=none TEST=none No functional change. All test should pass. Review URL: http://codereview.chromium.org/7670039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98009 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_mac.h7
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_mac.mm46
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_views.cc36
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_views.h7
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc63
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_win.cc6
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_win.h3
-rw-r--r--chrome/chrome_browser.gypi3
-rw-r--r--content/browser/renderer_host/render_widget_host.cc26
-rw-r--r--content/browser/renderer_host/render_widget_host.h2
-rw-r--r--content/browser/renderer_host/render_widget_host_gtk.cc82
-rw-r--r--content/browser/renderer_host/render_widget_host_mac.cc26
-rw-r--r--content/browser/renderer_host/render_widget_host_view.h18
-rw-r--r--content/browser/renderer_host/render_widget_host_view_gtk.cc61
-rw-r--r--content/browser/renderer_host/render_widget_host_view_gtk.h5
-rw-r--r--content/browser/renderer_host/test_render_view_host.cc17
-rw-r--r--content/browser/renderer_host/test_render_view_host.h8
-rw-r--r--ui/gfx/native_widget_types.h12
-rw-r--r--ui/gfx/native_widget_types_gtk.cc15
-rw-r--r--ui/ui.gyp1
20 files changed, 252 insertions, 192 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.h b/chrome/browser/renderer_host/render_widget_host_view_mac.h
index 7dcce36..2adc925 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_mac.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_mac.h
@@ -206,7 +206,8 @@ class RenderWidgetHostViewMac : public RenderWidgetHostView {
virtual void WasHidden() OVERRIDE;
virtual void SetSize(const gfx::Size& size) OVERRIDE;
virtual void SetBounds(const gfx::Rect& rect) OVERRIDE;
- virtual gfx::NativeView GetNativeView() OVERRIDE;
+ virtual gfx::NativeView GetNativeView() const OVERRIDE;
+ virtual gfx::NativeViewId GetNativeViewId() const OVERRIDE;
virtual void MovePluginWindows(
const std::vector<webkit::npapi::WebPluginGeometry>& moves) OVERRIDE;
virtual void Focus() OVERRIDE;
@@ -239,7 +240,6 @@ class RenderWidgetHostViewMac : public RenderWidgetHostView {
virtual void SetTakesFocusOnlyOnMouseDown(bool flag) OVERRIDE;
// See comment in RenderWidgetHostView!
virtual gfx::Rect GetViewCocoaBounds() const OVERRIDE;
- virtual gfx::Rect GetRootWindowRect() OVERRIDE;
virtual void SetActive(bool active) OVERRIDE;
virtual void SetWindowVisibility(bool visible) OVERRIDE;
virtual void WindowFrameChanged() OVERRIDE;
@@ -289,7 +289,8 @@ class RenderWidgetHostViewMac : public RenderWidgetHostView {
int gpu_host_id,
uint64 swap_buffers_count);
virtual void GpuRenderingStateDidChange() OVERRIDE;
-
+ virtual void GetScreenInfo(WebKit::WebScreenInfo* results) OVERRIDE;
+ virtual gfx::Rect GetRootWindowBounds() OVERRIDE;
virtual gfx::PluginWindowHandle GetCompositingSurface() OVERRIDE;
// Returns |true| if a context menu is currently being shown.
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.mm b/chrome/browser/renderer_host/render_widget_host_view_mac.mm
index 558f617..b1bbba9 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/chrome/browser/renderer_host/render_widget_host_view_mac.mm
@@ -48,8 +48,10 @@
#include "skia/ext/platform_canvas.h"
#import "third_party/mozilla/ComplexTextInputPanel.h"
#include "third_party/skia/include/core/SkColor.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebInputEventFactory.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebInputEventFactory.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebScreenInfoFactory.h"
#include "ui/gfx/point.h"
#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
#include "ui/gfx/surface/io_surface_support_mac.h"
@@ -427,10 +429,14 @@ void RenderWidgetHostViewMac::SetBounds(const gfx::Rect& rect) {
}
}
-gfx::NativeView RenderWidgetHostViewMac::GetNativeView() {
+gfx::NativeView RenderWidgetHostViewMac::GetNativeView() const {
return native_view();
}
+gfx::NativeViewId RenderWidgetHostViewMac::GetNativeViewId() const {
+ return reinterpret_cast<gfx::NativeViewId>(native_view());
+}
+
void RenderWidgetHostViewMac::MovePluginWindows(
const std::vector<webkit::npapi::WebPluginGeometry>& moves) {
TRACE_EVENT0("browser", "RenderWidgetHostViewMac::MovePluginWindows");
@@ -1026,6 +1032,22 @@ void RenderWidgetHostViewMac::GpuRenderingStateDidChange() {
}
}
+void RenderWidgetHostViewMac::GetScreenInfo(WebKit::WebScreenInfo* results) {
+ *results = WebKit::WebScreenInfoFactory::screenInfo(GetNativeView());
+}
+
+gfx::Rect RenderWidgetHostViewMac::GetRootWindowBounds() {
+ // TODO(shess): In case of !window, the view has been removed from
+ // the view hierarchy because the tab isn't main. Could retrieve
+ // the information from the main tab for our window.
+ NSWindow* enclosing_window = ApparentWindowForView(cocoa_view_);
+ if (!enclosing_window)
+ return gfx::Rect();
+
+ NSRect bounds = [enclosing_window frame];
+ return FlipNSRectToRectScreen(bounds);
+}
+
gfx::PluginWindowHandle RenderWidgetHostViewMac::GetCompositingSurface() {
if (compositing_surface_ == gfx::kNullPluginWindow)
compositing_surface_ = AllocateFakePluginWindowHandle(
@@ -1088,18 +1110,6 @@ gfx::Rect RenderWidgetHostViewMac::GetViewCocoaBounds() const {
return gfx::Rect(NSRectToCGRect([cocoa_view_ bounds]));
}
-gfx::Rect RenderWidgetHostViewMac::GetRootWindowRect() {
- // TODO(shess): In case of !window, the view has been removed from
- // the view hierarchy because the tab isn't main. Could retrieve
- // the information from the main tab for our window.
- NSWindow* enclosing_window = ApparentWindowForView(cocoa_view_);
- if (!enclosing_window)
- return gfx::Rect();
-
- NSRect bounds = [enclosing_window frame];
- return FlipNSRectToRectScreen(bounds);
-}
-
void RenderWidgetHostViewMac::SetActive(bool active) {
if (render_widget_host_) {
render_widget_host_->Send(new ViewMsg_SetActive(
@@ -1121,7 +1131,7 @@ void RenderWidgetHostViewMac::SetWindowVisibility(bool visible) {
void RenderWidgetHostViewMac::WindowFrameChanged() {
if (render_widget_host_) {
render_widget_host_->Send(new ViewMsg_WindowFrameChanged(
- render_widget_host_->routing_id(), GetRootWindowRect(),
+ render_widget_host_->routing_id(), GetRootWindowBounds(),
GetViewBounds()));
}
}
@@ -1155,6 +1165,12 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
}
}
+// static
+void RenderWidgetHostView::GetDefaultScreenInfo(
+ WebKit::WebScreenInfo* results) {
+ *results = WebKit::WebScreenInfoFactory::screenInfo(NULL);
+}
+
// RenderWidgetHostViewCocoa ---------------------------------------------------
@implementation RenderWidgetHostViewCocoa
diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.cc b/chrome/browser/renderer_host/render_widget_host_view_views.cc
index 66e3b3d..6178cbf 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_views.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_views.cc
@@ -8,7 +8,6 @@
#include <string>
#include "base/command_line.h"
-#include "base/logging.h"
#include "base/message_loop.h"
#include "base/metrics/histogram.h"
#include "base/string_number_conversions.h"
@@ -23,6 +22,7 @@
#include "content/common/view_messages.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/gtk/WebInputEventFactory.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/x11/WebScreenInfoFactory.h"
#include "ui/base/text/text_elider.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/canvas_skia.h"
@@ -31,6 +31,12 @@
#include "views/widget/tooltip_manager.h"
#include "views/widget/widget.h"
+#if defined(TOOLKIT_USES_GTK)
+#include <gtk/gtk.h>
+#include <gtk/gtkwindow.h>
+#include <gdk/gdkx.h>
+#endif
+
#if defined(TOUCH_UI)
#include "chrome/browser/renderer_host/accelerated_surface_container_touch.h"
#endif
@@ -177,10 +183,23 @@ void RenderWidgetHostViewViews::SetBounds(const gfx::Rect& rect) {
NOTIMPLEMENTED();
}
-gfx::NativeView RenderWidgetHostViewViews::GetNativeView() {
- if (GetWidget())
- return GetWidget()->GetNativeView();
- return NULL;
+gfx::NativeView RenderWidgetHostViewViews::GetNativeView() const {
+ // TODO(oshima): There is no native view here for RWHVV.
+ // Use top level widget's native view for now. This is not
+ // correct and has to be fixed somehow.
+ return GetWidget() ? GetWidget()->GetNativeView() : NULL;
+}
+
+gfx::NativeViewId RenderWidgetHostViewViews::GetNativeViewId() const {
+#if defined(OS_WIN)
+ // TODO(oshima): Windows uses message filter to handle inquiry for
+ // window/screen info, which requires HWND. Just pass the
+ // browser window's HWND (same as before) for now.
+ return reinterpret_cast<gfx::NativeViewId>(GetNativeView());
+#else
+ return reinterpret_cast<gfx::NativeViewId>(
+ const_cast<RenderWidgetHostViewViews*>(this));
+#endif
}
void RenderWidgetHostViewViews::MovePluginWindows(
@@ -206,7 +225,7 @@ bool RenderWidgetHostViewViews::IsShowing() {
}
gfx::Rect RenderWidgetHostViewViews::GetViewBounds() const {
- return bounds();
+ return GetScreenBounds();
}
void RenderWidgetHostViewViews::SetIsLoading(bool is_loading) {
@@ -643,9 +662,6 @@ void RenderWidgetHostViewViews::OnPaint(gfx::Canvas* canvas) {
bounds().width(), bounds().height(),
SkXfermode::kClear_Mode);
-#if defined(TOOLKIT_USES_GTK)
- GdkWindow* window = GetInnerNativeView()->window;
-#endif
DCHECK(!about_to_validate_and_paint_);
// TODO(anicolao): get the damage somehow
@@ -667,7 +683,7 @@ void RenderWidgetHostViewViews::OnPaint(gfx::Canvas* canvas) {
// Only render the widget if it is attached to a window; there's a short
// period where this object isn't attached to a window but hasn't been
// Destroy()ed yet and it receives paint messages...
- if (window) {
+ if (GetInnerNativeView()->window) {
#endif
if (!visually_deemphasized_) {
// In the common case, use XCopyArea. We don't draw more than once, so
diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.h b/chrome/browser/renderer_host/render_widget_host_view_views.h
index aeb60fa..94c6f9e 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_views.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_views.h
@@ -58,7 +58,8 @@ class RenderWidgetHostViewViews : public RenderWidgetHostView,
virtual void WasHidden() OVERRIDE;
virtual void SetSize(const gfx::Size& size) OVERRIDE;
virtual void SetBounds(const gfx::Rect& rect) OVERRIDE;
- virtual gfx::NativeView GetNativeView() OVERRIDE;
+ virtual gfx::NativeView GetNativeView() const OVERRIDE;
+ virtual gfx::NativeViewId GetNativeViewId() const OVERRIDE;
virtual void MovePluginWindows(
const std::vector<webkit::npapi::WebPluginGeometry>& moves) OVERRIDE;
virtual bool HasFocus() OVERRIDE;
@@ -86,6 +87,10 @@ class RenderWidgetHostViewViews : public RenderWidgetHostView,
virtual void ShowingContextMenu(bool showing) OVERRIDE;
virtual BackingStore* AllocBackingStore(const gfx::Size& size) OVERRIDE;
virtual void SetBackground(const SkBitmap& background) OVERRIDE;
+#if defined(OS_POSIX)
+ virtual void GetScreenInfo(WebKit::WebScreenInfo* results) OVERRIDE;
+ virtual gfx::Rect GetRootWindowBounds() OVERRIDE;
+#endif
#if defined(TOOLKIT_USES_GTK)
virtual void CreatePluginContainer(gfx::PluginWindowHandle id) OVERRIDE;
virtual void DestroyPluginContainer(gfx::PluginWindowHandle id) OVERRIDE;
diff --git a/chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc
index 5f9f51ae..a8f721b 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc
@@ -4,12 +4,41 @@
#include "chrome/browser/renderer_host/render_widget_host_view_views.h"
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
#include "ui/base/keycodes/keyboard_code_conversion_gtk.h"
#include "ui/base/x/x11_util.h"
#include "ui/gfx/gtk_native_view_id_manager.h"
#include "views/views_delegate.h"
#include "views/widget/native_widget_gtk.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/x11/WebScreenInfoFactory.h"
+
+namespace {
+
+// TODO(oshima): This is a copy from RenderWidgetHostViewGtk. Replace this
+// with gdk-less implementation.
+void GetScreenInfoFromNativeWindow(
+ GdkWindow* gdk_window, WebKit::WebScreenInfo* results) {
+ GdkScreen* screen = gdk_drawable_get_screen(gdk_window);
+ *results = WebKit::WebScreenInfoFactory::screenInfo(
+ gdk_x11_drawable_get_xdisplay(gdk_window),
+ gdk_x11_screen_get_screen_number(screen));
+
+ // TODO(tony): We should move this code into WebScreenInfoFactory.
+ int monitor_number = gdk_screen_get_monitor_at_window(screen, gdk_window);
+ GdkRectangle monitor_rect;
+ gdk_screen_get_monitor_geometry(screen, monitor_number, &monitor_rect);
+ results->rect = WebKit::WebRect(monitor_rect.x, monitor_rect.y,
+ monitor_rect.width, monitor_rect.height);
+ // TODO(tony): Should we query _NET_WORKAREA to get the workarea?
+ results->availableRect = results->rect;
+}
+
+} // namespace
+
void RenderWidgetHostViewViews::UpdateCursor(const WebCursor& cursor) {
// Optimize the common case, where the cursor hasn't changed.
// However, we can switch between different pixmaps, so only on the
@@ -33,6 +62,17 @@ void RenderWidgetHostViewViews::DestroyPluginContainer(
// TODO(anicolao): plugin_container_manager_.DestroyPluginContainer(id);
}
+void RenderWidgetHostViewViews::GetScreenInfo(WebKit::WebScreenInfo* results) {
+ views::Widget* widget = GetWidget() ? GetWidget()->GetTopLevelWidget() : NULL;
+ if (widget)
+ GetScreenInfoFromNativeWindow(widget->GetNativeView()->window, results);
+}
+
+gfx::Rect RenderWidgetHostViewViews::GetRootWindowBounds() {
+ views::Widget* widget = GetWidget() ? GetWidget()->GetTopLevelWidget() : NULL;
+ return widget ? widget->GetWindowScreenBounds() : gfx::Rect();
+}
+
void RenderWidgetHostViewViews::AcceleratedCompositingActivated(
bool activated) {
// TODO(anicolao): figure out if we need something here
@@ -42,14 +82,12 @@ void RenderWidgetHostViewViews::AcceleratedCompositingActivated(
#if !defined(TOUCH_UI)
gfx::PluginWindowHandle RenderWidgetHostViewViews::GetCompositingSurface() {
- GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance();
- gfx::PluginWindowHandle surface = gfx::kNullPluginWindow;
- gfx::NativeViewId view_id = gfx::IdFromNativeView(GetInnerNativeView());
-
- if (!manager->GetXIDForId(&surface, view_id)) {
- DLOG(ERROR) << "Can't find XID for view id " << view_id;
- }
- return surface;
+ // TODO(oshima): The original implementation was broken as
+ // GtkNativeViewManager doesn't know about NativeWidgetGtk. Figure
+ // out if this makes sense without compositor. If it does, then find
+ // out the right way to handle.
+ NOTIMPLEMENTED();
+ return gfx::kNullPluginWindow;
}
#endif
@@ -77,3 +115,12 @@ void RenderWidgetHostViewViews::ShowCurrentCursor() {
native_cursor_ = current_cursor_.GetNativeCursor();
}
+#if defined(TOUCH_UI)
+// static
+void RenderWidgetHostView::GetDefaultScreenInfo(
+ WebKit::WebScreenInfo* results) {
+ GdkWindow* gdk_window =
+ gdk_display_get_default_group(gdk_display_get_default());
+ GetScreenInfoFromNativeWindow(gdk_window, results);
+}
+#endif
diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.cc b/chrome/browser/renderer_host/render_widget_host_view_win.cc
index 7e9960d..f004127 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_win.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_win.cc
@@ -352,10 +352,14 @@ void RenderWidgetHostViewWin::SetBounds(const gfx::Rect& rect) {
EnsureTooltip();
}
-gfx::NativeView RenderWidgetHostViewWin::GetNativeView() {
+gfx::NativeView RenderWidgetHostViewWin::GetNativeView() const {
return m_hWnd;
}
+gfx::NativeViewId RenderWidgetHostViewWin::GetNativeViewId() const {
+ return reinterpret_cast<gfx::NativeViewId>(m_hWnd);
+}
+
void RenderWidgetHostViewWin::MovePluginWindows(
const std::vector<WebPluginGeometry>& plugin_window_moves) {
if (plugin_window_moves.empty())
diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.h b/chrome/browser/renderer_host/render_widget_host_view_win.h
index 0f1e727..07e9107 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_win.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_win.h
@@ -137,7 +137,8 @@ class RenderWidgetHostViewWin
virtual void WasHidden() OVERRIDE;
virtual void SetSize(const gfx::Size& size) OVERRIDE;
virtual void SetBounds(const gfx::Rect& rect) OVERRIDE;
- virtual gfx::NativeView GetNativeView() OVERRIDE;
+ virtual gfx::NativeView GetNativeView() const OVERRIDE;
+ virtual gfx::NativeViewId GetNativeViewId() const OVERRIDE;
virtual void MovePluginWindows(
const std::vector<webkit::npapi::WebPluginGeometry>& moves) OVERRIDE;
virtual void Focus() OVERRIDE;
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 8e35c32..f1000ea 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -4601,6 +4601,9 @@
['exclude', '^browser/extensions/extension_input_api.h'],
['exclude', '^browser/extensions/key_identifier_conversion_views.cc'],
['exclude', '^browser/extensions/key_identifier_conversion_views.h'],
+ ['exclude', '^browser/renderer_host/render_widget_host_view_views_gtk.h'],
+ ['exclude', '^browser/renderer_host/render_widget_host_view_views_gtk.cc'],
+
],
}],
# These GTK files haven't been ported to views, while ChromeOS has
diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc
index eb7ee88..2a506d0 100644
--- a/content/browser/renderer_host/render_widget_host.cc
+++ b/content/browser/renderer_host/render_widget_host.cc
@@ -114,9 +114,9 @@ void RenderWidgetHost::SetView(RenderWidgetHostView* view) {
process_->SetCompositingSurface(routing_id_, gfx::kNullPluginWindow);
}
-gfx::NativeViewId RenderWidgetHost::GetNativeViewId() {
+gfx::NativeViewId RenderWidgetHost::GetNativeViewId() const {
if (view_)
- return gfx::IdFromNativeView(view_->GetNativeView());
+ return view_->GetNativeViewId();
return 0;
}
@@ -1111,6 +1111,28 @@ void RenderWidgetHost::OnMsgDidActivateAcceleratedCompositing(bool activated) {
#endif
}
+#if defined(OS_POSIX)
+void RenderWidgetHost::OnMsgGetScreenInfo(gfx::NativeViewId window_id,
+ WebKit::WebScreenInfo* results) {
+ if (view_)
+ view_->GetScreenInfo(results);
+ else
+ RenderWidgetHostView::GetDefaultScreenInfo(results);
+}
+
+void RenderWidgetHost::OnMsgGetWindowRect(gfx::NativeViewId window_id,
+ gfx::Rect* results) {
+ if (view_)
+ *results = view_->GetViewBounds();
+}
+
+void RenderWidgetHost::OnMsgGetRootWindowRect(gfx::NativeViewId window_id,
+ gfx::Rect* results) {
+ if (view_)
+ *results = view_->GetRootWindowBounds();
+}
+#endif
+
void RenderWidgetHost::PaintBackingStoreRect(
TransportDIB::Id bitmap,
const gfx::Rect& bitmap_rect,
diff --git a/content/browser/renderer_host/render_widget_host.h b/content/browser/renderer_host/render_widget_host.h
index 3ae1c42..776bbc6 100644
--- a/content/browser/renderer_host/render_widget_host.h
+++ b/content/browser/renderer_host/render_widget_host.h
@@ -384,7 +384,7 @@ class RenderWidgetHost : public IPC::Channel::Listener,
// Retrieves an id the renderer can use to refer to its view.
// This is used for various IPC messages, including plugins.
- gfx::NativeViewId GetNativeViewId();
+ gfx::NativeViewId GetNativeViewId() const;
// Retrieves an id for the surface that the renderer can draw to
// when accelerated compositing is enabled.
diff --git a/content/browser/renderer_host/render_widget_host_gtk.cc b/content/browser/renderer_host/render_widget_host_gtk.cc
index 77877ca..e378edf 100644
--- a/content/browser/renderer_host/render_widget_host_gtk.cc
+++ b/content/browser/renderer_host/render_widget_host_gtk.cc
@@ -4,89 +4,7 @@
#include "content/browser/renderer_host/render_widget_host.h"
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#include "base/synchronization/lock.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/x11/WebScreenInfoFactory.h"
-#include "ui/gfx/gtk_native_view_id_manager.h"
-#include "ui/gfx/rect.h"
-
-using WebKit::WebScreenInfo;
-using WebKit::WebScreenInfoFactory;
-
-// We get a null |view| passed into this function please see
-// http://crbug.com/9060 for more details.
-void RenderWidgetHost::OnMsgGetScreenInfo(gfx::NativeViewId view,
- WebScreenInfo* results) {
- GtkWidget* widget = NULL;
- GdkWindow* gdk_window = NULL;
- if (GtkNativeViewManager::GetInstance()->GetNativeViewForId(
- &widget, view) && widget) {
- gdk_window = widget->window;
- } else {
- GdkDisplay* display = gdk_display_get_default();
- gdk_window = gdk_display_get_default_group(display);
- }
- if (!gdk_window)
- return;
- GdkScreen* screen = gdk_drawable_get_screen(gdk_window);
- *results = WebScreenInfoFactory::screenInfo(
- gdk_x11_drawable_get_xdisplay(gdk_window),
- gdk_x11_screen_get_screen_number(screen));
-
- // TODO(tony): We should move this code into WebScreenInfoFactory.
- int monitor_number = gdk_screen_get_monitor_at_window(screen, gdk_window);
- GdkRectangle monitor_rect;
- gdk_screen_get_monitor_geometry(screen, monitor_number, &monitor_rect);
- results->rect = WebKit::WebRect(monitor_rect.x, monitor_rect.y,
- monitor_rect.width, monitor_rect.height);
- // TODO(tony): Should we query _NET_WORKAREA to get the workarea?
- results->availableRect = results->rect;
-}
-
-// We get null window_ids passed into this function please see
-// http://crbug.com/9060 for more details.
-void RenderWidgetHost::OnMsgGetWindowRect(gfx::NativeViewId window_id,
- gfx::Rect* results) {
- GtkWidget* widget = NULL;
- if (!GtkNativeViewManager::GetInstance()->GetNativeViewForId(
- &widget, window_id) || !widget) {
- return;
- }
- GdkWindow* gdk_window = widget->window;
- if (!gdk_window)
- return;
- GdkRectangle window_rect;
- gdk_window_get_origin(gdk_window, &window_rect.x, &window_rect.y);
- gdk_drawable_get_size(gdk_window, &window_rect.width, &window_rect.height);
- *results = window_rect;
-}
-
-// We get null window_ids passed into this function please see
-// http://crbug.com/9060 for more details.
-void RenderWidgetHost::OnMsgGetRootWindowRect(gfx::NativeViewId window_id,
- gfx::Rect* results) {
- GtkWidget* widget = NULL;
- if (!GtkNativeViewManager::GetInstance()->GetNativeViewForId(
- &widget, window_id) || !widget) {
- return;
- }
- GtkWidget* toplevel = gtk_widget_get_toplevel(widget);
- if (!toplevel)
- return;
-
- GdkRectangle frame_extents;
- GdkWindow* gdk_window = toplevel->window;
- if (!gdk_window)
- return;
-
- gdk_window_get_frame_extents(gdk_window, &frame_extents);
- *results = gfx::Rect(frame_extents.x, frame_extents.y,
- frame_extents.width, frame_extents.height);
-}
void RenderWidgetHost::OnMsgCreatePluginContainer(gfx::PluginWindowHandle id) {
// TODO(piman): view_ can only be NULL with delayed view creation in
diff --git a/content/browser/renderer_host/render_widget_host_mac.cc b/content/browser/renderer_host/render_widget_host_mac.cc
index b4641e7..38a8fac 100644
--- a/content/browser/renderer_host/render_widget_host_mac.cc
+++ b/content/browser/renderer_host/render_widget_host_mac.cc
@@ -3,33 +3,7 @@
// found in the LICENSE file.
#include "content/browser/renderer_host/render_widget_host.h"
-
#include "content/browser/renderer_host/render_widget_host_view.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebScreenInfoFactory.h"
-
-using WebKit::WebScreenInfo;
-using WebKit::WebScreenInfoFactory;
-
-void RenderWidgetHost::OnMsgGetScreenInfo(gfx::NativeViewId view,
- WebScreenInfo* results) {
- gfx::NativeView native_view = view_ ? view_->GetNativeView() : NULL;
- *results = WebScreenInfoFactory::screenInfo(native_view);
-}
-
-void RenderWidgetHost::OnMsgGetWindowRect(gfx::NativeViewId window_id,
- gfx::Rect* results) {
- if (view_) {
- *results = view_->GetViewBounds();
- }
-}
-
-void RenderWidgetHost::OnMsgGetRootWindowRect(gfx::NativeViewId window_id,
- gfx::Rect* results) {
- if (view_) {
- *results = view_->GetRootWindowRect();
- }
-}
void RenderWidgetHost::OnMsgPluginFocusChanged(bool focused, int plugin_id) {
if (view_)
diff --git a/content/browser/renderer_host/render_widget_host_view.h b/content/browser/renderer_host/render_widget_host_view.h
index 38f281e..3a85148 100644
--- a/content/browser/renderer_host/render_widget_host_view.h
+++ b/content/browser/renderer_host/render_widget_host_view.h
@@ -49,6 +49,12 @@ struct WebPluginGeometry;
}
}
+#if defined(OS_POSIX)
+namespace WebKit {
+struct WebScreenInfo;
+}
+#endif
+
// RenderWidgetHostView is an interface implemented by an object that acts as
// the "View" portion of a RenderWidgetHost. The RenderWidgetHost and its
// associated RenderProcessHost own the "Model" in this case which is the
@@ -101,7 +107,8 @@ class RenderWidgetHostView {
// Retrieves the native view used to contain plugins and identify the
// renderer in IPC messages.
- virtual gfx::NativeView GetNativeView() = 0;
+ virtual gfx::NativeView GetNativeView() const = 0;
+ virtual gfx::NativeViewId GetNativeViewId() const = 0;
// Moves all plugin windows as described in the given list.
virtual void MovePluginWindows(
@@ -203,9 +210,6 @@ class RenderWidgetHostView {
// Even though this returns an gfx::Rect, the result is NOT IN PIXELS.
virtual gfx::Rect GetViewCocoaBounds() const = 0;
- // Get the view's window's position on the screen.
- virtual gfx::Rect GetRootWindowRect() = 0;
-
// Set the view's active state (i.e., tint state of controls).
virtual void SetActive(bool active) = 0;
@@ -282,6 +286,12 @@ class RenderWidgetHostView {
virtual void ShowCompositorHostWindow(bool show) = 0;
#endif
+#if defined(OS_POSIX)
+ static void GetDefaultScreenInfo(WebKit::WebScreenInfo* results);
+ virtual void GetScreenInfo(WebKit::WebScreenInfo* results) = 0;
+ virtual gfx::Rect GetRootWindowBounds() = 0;
+#endif
+
virtual gfx::PluginWindowHandle GetCompositingSurface() = 0;
// Toggles visual muting of the render view area. This is on when a
diff --git a/content/browser/renderer_host/render_widget_host_view_gtk.cc b/content/browser/renderer_host/render_widget_host_view_gtk.cc
index 9a9ab04..b6b5ec9 100644
--- a/content/browser/renderer_host/render_widget_host_view_gtk.cc
+++ b/content/browser/renderer_host/render_widget_host_view_gtk.cc
@@ -32,7 +32,9 @@
#include "content/browser/renderer_host/render_widget_host.h"
#include "content/common/content_switches.h"
#include "content/common/native_web_keyboard_event.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/gtk/WebInputEventFactory.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/x11/WebScreenInfoFactory.h"
#include "ui/base/text/text_elider.h"
#include "ui/base/x/x11_util.h"
#include "ui/gfx/gtk_native_view_id_manager.h"
@@ -92,6 +94,23 @@ GdkCursor* GetMozSpinningCursor() {
return moz_spinning_cursor;
}
+void GetScreenInfoFromNativeWindow(
+ GdkWindow* gdk_window, WebKit::WebScreenInfo* results) {
+ GdkScreen* screen = gdk_drawable_get_screen(gdk_window);
+ *results = WebKit::WebScreenInfoFactory::screenInfo(
+ gdk_x11_drawable_get_xdisplay(gdk_window),
+ gdk_x11_screen_get_screen_number(screen));
+
+ // TODO(tony): We should move this code into WebScreenInfoFactory.
+ gint monitor_number = gdk_screen_get_monitor_at_window(screen, gdk_window);
+ GdkRectangle monitor_rect;
+ gdk_screen_get_monitor_geometry(screen, monitor_number, &monitor_rect);
+ results->rect = WebKit::WebRect(monitor_rect.x, monitor_rect.y,
+ monitor_rect.width, monitor_rect.height);
+ // TODO(tony): Should we query _NET_WORKAREA to get the workarea?
+ results->availableRect = results->rect;
+}
+
} // namespace
using WebKit::WebInputEventFactory;
@@ -665,10 +684,14 @@ void RenderWidgetHostViewGtk::SetBounds(const gfx::Rect& rect) {
SetSize(rect.size());
}
-gfx::NativeView RenderWidgetHostViewGtk::GetNativeView() {
+gfx::NativeView RenderWidgetHostViewGtk::GetNativeView() const {
return view_.get();
}
+gfx::NativeViewId RenderWidgetHostViewGtk::GetNativeViewId() const {
+ return GtkNativeViewManager::GetInstance()->GetIdForWidget(view_.get());
+}
+
void RenderWidgetHostViewGtk::MovePluginWindows(
const std::vector<webkit::npapi::WebPluginGeometry>& moves) {
for (size_t i = 0; i < moves.size(); ++i) {
@@ -1140,10 +1163,36 @@ void RenderWidgetHostViewGtk::AcceleratedCompositingActivated(bool activated) {
gtk_preserve_window_delegate_resize(widget, activated);
}
+void RenderWidgetHostViewGtk::GetScreenInfo(WebKit::WebScreenInfo* results) {
+ GdkWindow* gdk_window = view_.get()->window;
+ if (!gdk_window) {
+ GdkDisplay* display = gdk_display_get_default();
+ gdk_window = gdk_display_get_default_group(display);
+ }
+ if (!gdk_window)
+ return;
+ GetScreenInfoFromNativeWindow(gdk_window, results);
+}
+
+gfx::Rect RenderWidgetHostViewGtk::GetRootWindowBounds() {
+ GtkWidget* toplevel = gtk_widget_get_toplevel(view_.get());
+ if (!toplevel)
+ return gfx::Rect();
+
+ GdkRectangle frame_extents;
+ GdkWindow* gdk_window = toplevel->window;
+ if (!gdk_window)
+ return gfx::Rect();
+
+ gdk_window_get_frame_extents(gdk_window, &frame_extents);
+ return gfx::Rect(frame_extents.x, frame_extents.y,
+ frame_extents.width, frame_extents.height);
+}
+
gfx::PluginWindowHandle RenderWidgetHostViewGtk::GetCompositingSurface() {
if (compositing_surface_ == gfx::kNullPluginWindow) {
GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance();
- gfx::NativeViewId view_id = gfx::IdFromNativeView(GetNativeView());
+ gfx::NativeViewId view_id = GetNativeViewId();
if (!manager->GetPermanentXIDForId(&compositing_surface_, view_id)) {
DLOG(ERROR) << "Can't find XID for view id " << view_id;
@@ -1199,3 +1248,11 @@ void RenderWidgetHostViewGtk::set_last_mouse_down(GdkEventButton* event) {
last_mouse_down_ = temp;
}
+
+// static
+void RenderWidgetHostView::GetDefaultScreenInfo(
+ WebKit::WebScreenInfo* results) {
+ GdkWindow* gdk_window =
+ gdk_display_get_default_group(gdk_display_get_default());
+ GetScreenInfoFromNativeWindow(gdk_window, results);
+}
diff --git a/content/browser/renderer_host/render_widget_host_view_gtk.h b/content/browser/renderer_host/render_widget_host_view_gtk.h
index 5dbac2e..1aa159a 100644
--- a/content/browser/renderer_host/render_widget_host_view_gtk.h
+++ b/content/browser/renderer_host/render_widget_host_view_gtk.h
@@ -60,7 +60,8 @@ class RenderWidgetHostViewGtk : public RenderWidgetHostView,
virtual void WasHidden() OVERRIDE;
virtual void SetSize(const gfx::Size& size) OVERRIDE;
virtual void SetBounds(const gfx::Rect& rect) OVERRIDE;
- virtual gfx::NativeView GetNativeView() OVERRIDE;
+ virtual gfx::NativeView GetNativeView() const OVERRIDE;
+ virtual gfx::NativeViewId GetNativeViewId() const OVERRIDE;
virtual void MovePluginWindows(
const std::vector<webkit::npapi::WebPluginGeometry>& moves) OVERRIDE;
virtual void Focus() OVERRIDE;
@@ -102,6 +103,8 @@ class RenderWidgetHostViewGtk : public RenderWidgetHostView,
virtual void SetScrollOffsetPinning(
bool is_pinned_to_left, bool is_pinned_to_right) OVERRIDE;
virtual void AcceleratedCompositingActivated(bool activated) OVERRIDE;
+ virtual void GetScreenInfo(WebKit::WebScreenInfo* results) OVERRIDE;
+ virtual gfx::Rect GetRootWindowBounds() OVERRIDE;
virtual gfx::PluginWindowHandle GetCompositingSurface() OVERRIDE;
// ui::AnimationDelegate implementation.
diff --git a/content/browser/renderer_host/test_render_view_host.cc b/content/browser/renderer_host/test_render_view_host.cc
index a757d79..1ddb875 100644
--- a/content/browser/renderer_host/test_render_view_host.cc
+++ b/content/browser/renderer_host/test_render_view_host.cc
@@ -137,10 +137,14 @@ RenderWidgetHost* TestRenderWidgetHostView::GetRenderWidgetHost() const {
return NULL;
}
-gfx::NativeView TestRenderWidgetHostView::GetNativeView() {
+gfx::NativeView TestRenderWidgetHostView::GetNativeView() const {
return NULL;
}
+gfx::NativeViewId TestRenderWidgetHostView::GetNativeViewId() const {
+ return 0;
+}
+
bool TestRenderWidgetHostView::HasFocus() {
return true;
}
@@ -177,10 +181,6 @@ gfx::Rect TestRenderWidgetHostView::GetViewCocoaBounds() const {
return gfx::Rect();
}
-gfx::Rect TestRenderWidgetHostView::GetRootWindowRect() {
- return gfx::Rect();
-}
-
void TestRenderWidgetHostView::SetActive(bool active) {
// <viettrungluu@gmail.com>: Do I need to do anything here?
}
@@ -233,6 +233,7 @@ void TestRenderWidgetHostView::AcceleratedSurfaceBuffersSwapped(
void TestRenderWidgetHostView::GpuRenderingStateDidChange() {
}
+
#elif defined(OS_WIN)
void TestRenderWidgetHostView::WillWmDestroy() {
}
@@ -241,6 +242,12 @@ void TestRenderWidgetHostView::ShowCompositorHostWindow(bool show) {
}
#endif
+#if defined(OS_POSIX)
+gfx::Rect TestRenderWidgetHostView::GetRootWindowBounds() {
+ return gfx::Rect();
+}
+#endif
+
gfx::PluginWindowHandle TestRenderWidgetHostView::GetCompositingSurface() {
return gfx::kNullPluginWindow;
}
diff --git a/content/browser/renderer_host/test_render_view_host.h b/content/browser/renderer_host/test_render_view_host.h
index 6a3841e..9a79900 100644
--- a/content/browser/renderer_host/test_render_view_host.h
+++ b/content/browser/renderer_host/test_render_view_host.h
@@ -61,7 +61,8 @@ class TestRenderWidgetHostView : public RenderWidgetHostView {
virtual void WasHidden() OVERRIDE {}
virtual void SetSize(const gfx::Size& size) OVERRIDE {}
virtual void SetBounds(const gfx::Rect& rect) OVERRIDE {}
- virtual gfx::NativeView GetNativeView() OVERRIDE;
+ virtual gfx::NativeView GetNativeView() const OVERRIDE;
+ virtual gfx::NativeViewId GetNativeViewId() const OVERRIDE;
virtual void MovePluginWindows(
const std::vector<webkit::npapi::WebPluginGeometry>& moves) OVERRIDE {}
virtual void Focus() OVERRIDE {}
@@ -89,7 +90,6 @@ class TestRenderWidgetHostView : public RenderWidgetHostView {
#if defined(OS_MACOSX)
virtual void SetTakesFocusOnlyOnMouseDown(bool flag) OVERRIDE {}
virtual gfx::Rect GetViewCocoaBounds() const OVERRIDE;
- virtual gfx::Rect GetRootWindowRect() OVERRIDE;
virtual void SetActive(bool active) OVERRIDE;
virtual void SetWindowVisibility(bool visible) OVERRIDE {}
virtual void WindowFrameChanged() OVERRIDE {}
@@ -123,6 +123,10 @@ class TestRenderWidgetHostView : public RenderWidgetHostView {
virtual void WillWmDestroy() OVERRIDE;
virtual void ShowCompositorHostWindow(bool show) OVERRIDE;
#endif
+#if defined(OS_POSIX)
+ virtual void GetScreenInfo(WebKit::WebScreenInfo* results) OVERRIDE {};
+ virtual gfx::Rect GetRootWindowBounds() OVERRIDE;
+#endif
virtual void SetVisuallyDeemphasized(const SkColor* color, bool animate) { }
virtual void UnhandledWheelEvent(
const WebKit::WebMouseWheelEvent& event) { }
diff --git a/ui/gfx/native_widget_types.h b/ui/gfx/native_widget_types.h
index 251b4d5..affb459 100644
--- a/ui/gfx/native_widget_types.h
+++ b/ui/gfx/native_widget_types.h
@@ -163,18 +163,6 @@ static inline NativeView NativeViewFromIdInBrowser(NativeViewId id) {
}
#endif // defined(OS_POSIX)
-// Convert a NativeView to a NativeViewId. See the comments at the top of
-// this file.
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(USE_WAYLAND)
-static inline NativeViewId IdFromNativeView(NativeView view) {
- return reinterpret_cast<NativeViewId>(view);
-}
-#elif defined(USE_X11)
-// Not inlined because it involves pulling too many headers.
-UI_EXPORT NativeViewId IdFromNativeView(NativeView view);
-#endif // defined(USE_X11)
-
-
// PluginWindowHandle is an abstraction wrapping "the types of windows
// used by NPAPI plugins". On Windows it's an HWND, on X it's an X
// window id.
diff --git a/ui/gfx/native_widget_types_gtk.cc b/ui/gfx/native_widget_types_gtk.cc
deleted file mode 100644
index 1beeec5..0000000
--- a/ui/gfx/native_widget_types_gtk.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/gfx/native_widget_types.h"
-
-#include "ui/gfx/gtk_native_view_id_manager.h"
-
-namespace gfx {
-
-NativeViewId IdFromNativeView(NativeView view) {
- return GtkNativeViewManager::GetInstance()->GetIdForWidget(view);
-}
-
-} // namespace gfx
diff --git a/ui/ui.gyp b/ui/ui.gyp
index 9dce600..40bf774 100644
--- a/ui/ui.gyp
+++ b/ui/ui.gyp
@@ -299,7 +299,6 @@
'gfx/gtk_util.h',
'gfx/native_theme_linux.cc',
'gfx/native_theme_linux.h',
- 'gfx/native_widget_types_gtk.cc',
],
'link_settings': {
'libraries': [