summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/browser.scons1
-rw-r--r--chrome/browser/browser.vcproj4
-rw-r--r--chrome/browser/renderer_host/resource_message_filter.cc60
-rw-r--r--chrome/browser/renderer_host/resource_message_filter.h2
-rw-r--r--chrome/browser/renderer_host/resource_message_filter_gtk.cc34
-rw-r--r--chrome/browser/renderer_host/resource_message_filter_mac.mm51
-rw-r--r--chrome/browser/renderer_host/resource_message_filter_win.cc22
-rw-r--r--chrome/chrome.gyp11
8 files changed, 120 insertions, 65 deletions
diff --git a/chrome/browser/browser.scons b/chrome/browser/browser.scons
index ec8a77a..273355e 100644
--- a/chrome/browser/browser.scons
+++ b/chrome/browser/browser.scons
@@ -558,6 +558,7 @@ input_files = ChromeFileList([
'renderer_host/resource_handler.h',
'renderer_host/resource_message_filter.cc',
'renderer_host/resource_message_filter.h',
+ 'renderer_host/resource_message_filter_gtk.cc',
'renderer_host/resource_request_details.h',
'renderer_host/safe_browsing_resource_handler.cc',
'renderer_host/safe_browsing_resource_handler.h',
diff --git a/chrome/browser/browser.vcproj b/chrome/browser/browser.vcproj
index e0a49be..2e84c1f 100644
--- a/chrome/browser/browser.vcproj
+++ b/chrome/browser/browser.vcproj
@@ -2122,6 +2122,10 @@
>
</File>
<File
+ RelativePath=".\renderer_host\resource_message_filter_win.cc"
+ >
+ </File>
+ <File
RelativePath=".\renderer_host\resource_request_details.h"
>
</File>
diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc
index e3b1887..2ea6ac8 100644
--- a/chrome/browser/renderer_host/resource_message_filter.cc
+++ b/chrome/browser/renderer_host/resource_message_filter.cc
@@ -4,10 +4,6 @@
#include "chrome/browser/renderer_host/resource_message_filter.h"
-#if defined(OS_LINUX)
-#include <gtk/gtk.h>
-#endif
-
#include "base/clipboard.h"
#include "base/gfx/native_widget_types.h"
#include "base/histogram.h"
@@ -185,7 +181,7 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = resource_dispatcher_host_->OnMessageReceived(
message, this, &msg_is_ok);
if (!handled) {
- handled = true;
+ handled = true;
IPC_BEGIN_MESSAGE_MAP_EX(ResourceMessageFilter, message, msg_is_ok)
IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWindow, OnMsgCreateWindow)
IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnMsgCreateWidget)
@@ -226,10 +222,8 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
OnClipboardReadAsciiText)
IPC_MESSAGE_HANDLER(ViewHostMsg_ClipboardReadHTML,
OnClipboardReadHTML)
-#if defined(OS_WIN)|| defined(OS_LINUX)
IPC_MESSAGE_HANDLER(ViewHostMsg_GetWindowRect, OnGetWindowRect)
IPC_MESSAGE_HANDLER(ViewHostMsg_GetRootWindowRect, OnGetRootWindowRect)
-#endif
IPC_MESSAGE_HANDLER(ViewHostMsg_GetMimeTypeFromExtension,
OnGetMimeTypeFromExtension)
IPC_MESSAGE_HANDLER(ViewHostMsg_GetMimeTypeFromFile,
@@ -529,58 +523,6 @@ void ResourceMessageFilter::OnClipboardReadHTML(string16* markup,
*src_url = GURL(src_url_str);
}
-#if defined(OS_WIN)
-
-void ResourceMessageFilter::OnGetWindowRect(gfx::NativeViewId window_id,
- gfx::Rect* rect) {
- HWND window = gfx::NativeViewFromId(window_id);
- RECT window_rect = {0};
- GetWindowRect(window, &window_rect);
- *rect = window_rect;
-}
-
-void ResourceMessageFilter::OnGetRootWindowRect(gfx::NativeViewId window_id,
- gfx::Rect* rect) {
- HWND window = gfx::NativeViewFromId(window_id);
- RECT window_rect = {0};
- HWND root_window = ::GetAncestor(window, GA_ROOT);
- GetWindowRect(root_window, &window_rect);
- *rect = window_rect;
-}
-
-#elif defined(OS_LINUX)
-
-// Returns the rectangle of the WebWidget in screen coordinates.
-void ResourceMessageFilter::OnGetWindowRect(gfx::NativeViewId window_id,
- gfx::Rect* rect) {
- // Ideally this would be gtk_widget_get_window but that's only
- // from gtk 2.14 onwards. :(
- GdkWindow* window = gfx::NativeViewFromId(window_id)->window;
- DCHECK(window);
- gint x, y, width, height;
- // This is the "position of a window in root window coordinates".
- gdk_window_get_origin(window, &x, &y);
- gdk_window_get_size(window, &width, &height);
- *rect = gfx::Rect(x, y, width, height);
-}
-
-// Returns the rectangle of the window in which this WebWidget is embedded.
-void ResourceMessageFilter::OnGetRootWindowRect(gfx::NativeViewId window_id,
- gfx::Rect* rect) {
- // Windows uses GetAncestor(window, GA_ROOT) here which probably means
- // we want the top level window.
- GdkWindow* window =
- gdk_window_get_toplevel(gfx::NativeViewFromId(window_id)->window);
- DCHECK(window);
- gint x, y, width, height;
- // This is the "position of a window in root window coordinates".
- gdk_window_get_origin(window, &x, &y);
- gdk_window_get_size(window, &width, &height);
- *rect = gfx::Rect(x, y, width, height);
-}
-
-#endif // OS_LINUX
-
void ResourceMessageFilter::OnGetMimeTypeFromExtension(
const FilePath::StringType& ext, std::string* mime_type) {
net::GetMimeTypeFromExtension(ext, mime_type);
diff --git a/chrome/browser/renderer_host/resource_message_filter.h b/chrome/browser/renderer_host/resource_message_filter.h
index 59ba421..f29e7ec 100644
--- a/chrome/browser/renderer_host/resource_message_filter.h
+++ b/chrome/browser/renderer_host/resource_message_filter.h
@@ -152,10 +152,8 @@ class ResourceMessageFilter : public IPC::ChannelProxy::MessageFilter,
void OnClipboardReadText(string16* result);
void OnClipboardReadAsciiText(std::string* result);
void OnClipboardReadHTML(string16* markup, GURL* src_url);
-#if defined(OS_WIN)|| defined(OS_LINUX)
void OnGetWindowRect(gfx::NativeViewId window, gfx::Rect *rect);
void OnGetRootWindowRect(gfx::NativeViewId window, gfx::Rect *rect);
-#endif
void OnGetMimeTypeFromExtension(const FilePath::StringType& ext,
std::string* mime_type);
void OnGetMimeTypeFromFile(const FilePath& file_path,
diff --git a/chrome/browser/renderer_host/resource_message_filter_gtk.cc b/chrome/browser/renderer_host/resource_message_filter_gtk.cc
new file mode 100644
index 0000000..6b5d585
--- /dev/null
+++ b/chrome/browser/renderer_host/resource_message_filter_gtk.cc
@@ -0,0 +1,34 @@
+// Copyright (c) 2006-2009 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 "chrome/browser/renderer_host/resource_message_filter.h"
+
+#include <gtk/gtk.h>
+
+void ResourceMessageFilter::OnGetWindowRect(gfx::NativeViewId window_id,
+ gfx::Rect* rect) {
+ // Ideally this would be gtk_widget_get_window but that's only
+ // from gtk 2.14 onwards. :(
+ GdkWindow* window = gfx::NativeViewFromId(window_id)->window;
+ DCHECK(window);
+ gint x, y, width, height;
+ // This is the "position of a window in root window coordinates".
+ gdk_window_get_origin(window, &x, &y);
+ gdk_window_get_size(window, &width, &height);
+ *rect = gfx::Rect(x, y, width, height);
+}
+
+void ResourceMessageFilter::OnGetRootWindowRect(gfx::NativeViewId window_id,
+ gfx::Rect* rect) {
+ // Windows uses GetAncestor(window, GA_ROOT) here which probably means
+ // we want the top level window.
+ GdkWindow* window =
+ gdk_window_get_toplevel(gfx::NativeViewFromId(window_id)->window);
+ DCHECK(window);
+ gint x, y, width, height;
+ // This is the "position of a window in root window coordinates".
+ gdk_window_get_origin(window, &x, &y);
+ gdk_window_get_size(window, &width, &height);
+ *rect = gfx::Rect(x, y, width, height);
+}
diff --git a/chrome/browser/renderer_host/resource_message_filter_mac.mm b/chrome/browser/renderer_host/resource_message_filter_mac.mm
new file mode 100644
index 0000000..c23e4ef
--- /dev/null
+++ b/chrome/browser/renderer_host/resource_message_filter_mac.mm
@@ -0,0 +1,51 @@
+// Copyright (c) 2009 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 "chrome/browser/renderer_host/resource_message_filter.h"
+
+#import <Cocoa/Cocoa.h>
+
+namespace {
+
+// Adjusts an NSRect in screen coordinates to have an origin in the upper left,
+// and stuffs it into a gfx::Rect. This is likely incorrect for a multiple-
+// monitor setup.
+gfx::Rect NSRectToRect(const NSRect rect, NSScreen* screen) {
+ gfx::Rect new_rect(NSRectToCGRect(rect));
+ new_rect.set_y([screen frame].size.height - new_rect.y() - new_rect.height());
+ return new_rect;
+}
+
+}
+
+void ResourceMessageFilter::OnGetWindowRect(gfx::NativeViewId window_id,
+ gfx::Rect* rect) {
+ NSView* view = gfx::NativeViewFromId(window_id);
+ DCHECK(view);
+
+ if (!view) { // paranoia
+ *rect = gfx::Rect();
+ return;
+ }
+
+ NSRect bounds = [view bounds];
+ bounds = [view convertRect:bounds toView:nil];
+ bounds.origin = [[view window] convertBaseToScreen:bounds.origin];
+ *rect = NSRectToRect(bounds, [[view window] screen]);
+}
+
+void ResourceMessageFilter::OnGetRootWindowRect(gfx::NativeViewId window_id,
+ gfx::Rect* rect) {
+ NSView* view = gfx::NativeViewFromId(window_id);
+ DCHECK(view);
+
+ if (!view) { // paranoia
+ *rect = gfx::Rect();
+ return;
+ }
+
+ NSWindow* window = [view window];
+ NSRect bounds = [window frame];
+ *rect = NSRectToRect(bounds, [window screen]);
+}
diff --git a/chrome/browser/renderer_host/resource_message_filter_win.cc b/chrome/browser/renderer_host/resource_message_filter_win.cc
new file mode 100644
index 0000000..131deeb
--- /dev/null
+++ b/chrome/browser/renderer_host/resource_message_filter_win.cc
@@ -0,0 +1,22 @@
+// Copyright (c) 2006-2009 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 "chrome/browser/renderer_host/resource_message_filter.h"
+
+void ResourceMessageFilter::OnGetWindowRect(gfx::NativeViewId window_id,
+ gfx::Rect* rect) {
+ HWND window = gfx::NativeViewFromId(window_id);
+ RECT window_rect = {0};
+ GetWindowRect(window, &window_rect);
+ *rect = window_rect;
+}
+
+void ResourceMessageFilter::OnGetRootWindowRect(gfx::NativeViewId window_id,
+ gfx::Rect* rect) {
+ HWND window = gfx::NativeViewFromId(window_id);
+ RECT window_rect = {0};
+ HWND root_window = ::GetAncestor(window, GA_ROOT);
+ GetWindowRect(root_window, &window_rect);
+ *rect = window_rect;
+}
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index f772692..05e1e5a 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -484,10 +484,10 @@
'browser/chrome_thread.h',
'browser/cocoa/base_view.h',
'browser/cocoa/base_view.mm',
- 'browser/cocoa/bookmark_bar_state_controller.h',
- 'browser/cocoa/bookmark_bar_state_controller.mm',
- 'browser/cocoa/bookmark_menu_bridge.h',
- 'browser/cocoa/bookmark_menu_bridge.mm',
+ 'browser/cocoa/bookmark_bar_state_controller.h',
+ 'browser/cocoa/bookmark_bar_state_controller.mm',
+ 'browser/cocoa/bookmark_menu_bridge.h',
+ 'browser/cocoa/bookmark_menu_bridge.mm',
'browser/cocoa/browser_test_helper.h',
'browser/cocoa/browser_window_cocoa.h',
'browser/cocoa/browser_window_cocoa.mm',
@@ -882,6 +882,9 @@
'browser/renderer_host/resource_handler.h',
'browser/renderer_host/resource_message_filter.cc',
'browser/renderer_host/resource_message_filter.h',
+ 'browser/renderer_host/resource_message_filter_gtk.cc',
+ 'browser/renderer_host/resource_message_filter_mac.mm',
+ 'browser/renderer_host/resource_message_filter_win.cc',
'browser/renderer_host/resource_request_details.h',
'browser/renderer_host/safe_browsing_resource_handler.cc',
'browser/renderer_host/safe_browsing_resource_handler.h',