summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/resource_message_filter.cc5
-rw-r--r--chrome/renderer/render_widget.cc6
-rw-r--r--chrome/renderer/render_widget.h2
-rw-r--r--webkit/glue/chrome_client_impl.cc36
-rw-r--r--webkit/glue/webwidget_delegate.h4
-rw-r--r--webkit/tools/test_shell/test_webview_delegate.cc8
-rw-r--r--webkit/tools/test_shell/test_webview_delegate.h2
7 files changed, 36 insertions, 27 deletions
diff --git a/chrome/browser/resource_message_filter.cc b/chrome/browser/resource_message_filter.cc
index 99b188c..e175db7 100644
--- a/chrome/browser/resource_message_filter.cc
+++ b/chrome/browser/resource_message_filter.cc
@@ -458,9 +458,10 @@ void ResourceMessageFilter::OnClipboardReadHTML(std::wstring* markup,
*src_url = GURL(src_url_str);
}
-void ResourceMessageFilter::OnGetWindowRect(HWND window, gfx::Rect *rect) {
+void ResourceMessageFilter::OnGetWindowRect(HWND hwnd_view_container,
+ gfx::Rect *rect) {
RECT window_rect = {0};
- // GetWindowRect can fail if window is invalid.
+ HWND window = ::GetAncestor(hwnd_view_container, GA_ROOT);
GetWindowRect(window, &window_rect);
*rect = window_rect;
}
diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc
index 749fd8c..3f5d6c5 100644
--- a/chrome/renderer/render_widget.cc
+++ b/chrome/renderer/render_widget.cc
@@ -652,10 +652,8 @@ void RenderWidget::Close() {
}
}
-void RenderWidget::GetWindowLocation(WebWidget* webwidget, gfx::Point* origin) {
- gfx::Rect rect;
- Send(new ViewHostMsg_GetWindowRect(routing_id_, host_window_, &rect));
- *origin = rect.origin();
+void RenderWidget::GetWindowRect(WebWidget* webwidget, gfx::Rect* rect) {
+ Send(new ViewHostMsg_GetWindowRect(routing_id_, host_window_, rect));
}
void RenderWidget::SetWindowRect(WebWidget* webwidget, const gfx::Rect& pos) {
diff --git a/chrome/renderer/render_widget.h b/chrome/renderer/render_widget.h
index adb1033..4207c53 100644
--- a/chrome/renderer/render_widget.h
+++ b/chrome/renderer/render_widget.h
@@ -90,7 +90,7 @@ class RenderWidget : public IPC::Channel::Listener,
virtual void CloseWidgetSoon(WebWidget* webwidget);
virtual void Focus(WebWidget* webwidget);
virtual void Blur(WebWidget* webwidget);
- virtual void GetWindowLocation(WebWidget* webwidget, gfx::Point* origin);
+ virtual void GetWindowRect(WebWidget* webwidget, gfx::Rect* rect);
virtual void SetWindowRect(WebWidget* webwidget, const gfx::Rect& rect);
virtual void DidMove(WebWidget* webwidget, const WebPluginGeometry& move);
virtual void RunModal(WebWidget* webwidget) {}
diff --git a/webkit/glue/chrome_client_impl.cc b/webkit/glue/chrome_client_impl.cc
index 20109b9..ddb1e85 100644
--- a/webkit/glue/chrome_client_impl.cc
+++ b/webkit/glue/chrome_client_impl.cc
@@ -97,16 +97,26 @@ void ChromeClientImpl::setWindowRect(const WebCore::FloatRect& r) {
}
WebCore::FloatRect ChromeClientImpl::windowRect() {
- gfx::Point origin;
- if (webview_->delegate())
- webview_->delegate()->GetWindowLocation(webview_, &origin);
- const gfx::Size size = webview_->size();
-
- return WebCore::FloatRect(
- static_cast<float>(origin.x()),
- static_cast<float>(origin.y()),
- static_cast<float>(size.width()),
- static_cast<float>(size.height()));
+ if (webview_->delegate()) {
+ gfx::Rect rect;
+ webview_->delegate()->GetWindowRect(webview_, &rect);
+ return WebCore::FloatRect(
+ static_cast<float>(rect.x()),
+ static_cast<float>(rect.y()),
+ static_cast<float>(rect.width()),
+ static_cast<float>(rect.height()));
+ } else {
+ // These numbers will be fairly wrong. The window's x/y coordinates will
+ // be the top left corner of the screen and the size will be the content
+ // size instead of the window size.
+ gfx::Point origin;
+ const gfx::Size size = webview_->size();
+ return WebCore::FloatRect(
+ static_cast<float>(origin.x()),
+ static_cast<float>(origin.y()),
+ static_cast<float>(size.width()),
+ static_cast<float>(size.height()));
+ }
}
WebCore::FloatRect ChromeClientImpl::pageRect() {
@@ -420,9 +430,9 @@ WebCore::IntRect ChromeClientImpl::windowToScreen(const WebCore::IntRect& rect)
WebViewDelegate* d = webview_->delegate();
if (d) {
- gfx::Point window_pos;
- d->GetWindowLocation(webview_, &window_pos);
- screen_rect.move(window_pos.x(), window_pos.y());
+ gfx::Rect window_rect;
+ d->GetWindowRect(webview_, &window_rect);
+ screen_rect.move(window_rect.x(), window_rect.y());
}
return screen_rect;
diff --git a/webkit/glue/webwidget_delegate.h b/webkit/glue/webwidget_delegate.h
index 80f8ba4d..20b26f1 100644
--- a/webkit/glue/webwidget_delegate.h
+++ b/webkit/glue/webwidget_delegate.h
@@ -78,8 +78,8 @@ class WebWidgetDelegate {
virtual void SetCursor(WebWidget* webwidget,
const WebCursor& cursor) = 0;
- // Returns the location (x,y) of the WebWidget in screen coordinates.
- virtual void GetWindowLocation(WebWidget* webwidget, gfx::Point* origin) = 0;
+ // Returns the rectangle of the WebWidget in screen coordinates.
+ virtual void GetWindowRect(WebWidget* webwidget, gfx::Rect* rect) = 0;
// This method is called to re-position the WebWidget on the screen. The given
// rect is in screen coordinates. The implementation may choose to ignore
diff --git a/webkit/tools/test_shell/test_webview_delegate.cc b/webkit/tools/test_shell/test_webview_delegate.cc
index e111877..de84d38 100644
--- a/webkit/tools/test_shell/test_webview_delegate.cc
+++ b/webkit/tools/test_shell/test_webview_delegate.cc
@@ -747,12 +747,12 @@ void TestWebViewDelegate::SetCursor(WebWidget* webwidget,
}
}
-void TestWebViewDelegate::GetWindowLocation(WebWidget* webwidget,
- gfx::Point* origin) {
+void TestWebViewDelegate::GetWindowRect(WebWidget* webwidget,
+ gfx::Rect* out_rect) {
if (WebWidgetHost* host = GetHostForWidget(webwidget)) {
RECT rect;
- GetWindowRect(host->window_handle(), &rect);
- origin->SetPoint(rect.left, rect.top);
+ ::GetWindowRect(host->window_handle(), &rect);
+ *out_rect = gfx::Rect(rect);
}
}
diff --git a/webkit/tools/test_shell/test_webview_delegate.h b/webkit/tools/test_shell/test_webview_delegate.h
index ee1a4f9..1c9cf0f 100644
--- a/webkit/tools/test_shell/test_webview_delegate.h
+++ b/webkit/tools/test_shell/test_webview_delegate.h
@@ -217,7 +217,7 @@ class TestWebViewDelegate : public base::RefCounted<TestWebViewDelegate>, public
virtual void Blur(WebWidget* webwidget);
virtual void SetCursor(WebWidget* webwidget,
const WebCursor& cursor);
- virtual void GetWindowLocation(WebWidget* webwidget, gfx::Point* origin);
+ virtual void GetWindowRect(WebWidget* webwidget, gfx::Rect* rect);
virtual void SetWindowRect(WebWidget* webwidget, const gfx::Rect& rect);
virtual void DidMove(WebWidget* webwidget, const WebPluginGeometry& move);
virtual void RunModal(WebWidget* webwidget);