summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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': [