diff options
-rw-r--r-- | chrome/browser/browser.scons | 1 | ||||
-rw-r--r-- | chrome/browser/browser.vcproj | 4 | ||||
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter.cc | 60 | ||||
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter.h | 2 | ||||
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter_gtk.cc | 34 | ||||
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter_mac.mm | 51 | ||||
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter_win.cc | 22 | ||||
-rw-r--r-- | chrome/chrome.gyp | 11 |
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', |