summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-31 22:28:40 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-31 22:28:40 +0000
commit5299356524f2e169ec97db351c44fe6da701984e (patch)
tree6aeb51a22c6d3c101fce0f17ea1e65a659232507 /chrome
parent9c8108d9356604eec57bf3c880f1580eb41fd1c3 (diff)
downloadchromium_src-5299356524f2e169ec97db351c44fe6da701984e.zip
chromium_src-5299356524f2e169ec97db351c44fe6da701984e.tar.gz
chromium_src-5299356524f2e169ec97db351c44fe6da701984e.tar.bz2
Takes steps to make our PlatformScreen implementation more portable.
Introduces ChromiumBridge as a means for our WebCore port to depend on the embedder indirectly. This will be extended to support the rest of our port. WebWidgetImpl and ChromeClientImpl both needed to have their platformWindow getter implemented. This fixes a regression related to the most recent merge. Removes the orphaned Language.cpp (see the real one in the platform/chromium directory. Changed webkit_glue::GetMonitorInfoForWindow to webkit_glue::GetScreenInfo. This resulted in a varied amount of plumbing changes. It also pushes the platform specific bits up into the browser where they belong. ScreenInfo is a struct that is part of the webkit/glue API. R=dglazkov,eseidel Review URL: http://codereview.chromium.org/8761 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4335 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/resource_message_filter.cc100
-rw-r--r--chrome/browser/resource_message_filter.h8
-rw-r--r--chrome/common/ipc_message_utils.h24
-rw-r--r--chrome/common/render_messages.h25
-rw-r--r--chrome/common/render_messages_internal.h9
-rw-r--r--chrome/renderer/renderer_glue.cc9
6 files changed, 90 insertions, 85 deletions
diff --git a/chrome/browser/resource_message_filter.cc b/chrome/browser/resource_message_filter.cc
index 534e447..17c266b 100644
--- a/chrome/browser/resource_message_filter.cc
+++ b/chrome/browser/resource_message_filter.cc
@@ -25,57 +25,9 @@
#include "chrome/common/render_messages.h"
#include "net/base/cookie_monster.h"
#include "net/base/mime_util.h"
+#include "webkit/glue/webkit_glue.h"
#include "webkit/glue/webplugin.h"
-void ResourceMessageFilter::OnGetMonitorInfoForWindow(
- HWND window, MONITORINFOEX* monitor_info) {
- HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTOPRIMARY);
- monitor_info->cbSize = sizeof(MONITORINFOEX);
- GetMonitorInfo(monitor, monitor_info);
-}
-
-void ResourceMessageFilter::OnLoadFont(LOGFONT font) {
- // If renderer is running in a sandbox, GetTextMetrics
- // can sometimes fail. If a font has not been loaded
- // previously, GetTextMetrics will try to load the font
- // from the font file. However, the sandboxed renderer does
- // not have permissions to access any font files and
- // the call fails. So we make the browser pre-load the
- // font for us by using a dummy call to GetTextMetrics of
- // the same font.
-
- // Maintain a circular queue for the fonts and DCs to be cached.
- // font_index maintains next available location in the queue.
- static const int kFontCacheSize = 32;
- static HFONT fonts[kFontCacheSize] = {0};
- static HDC hdcs[kFontCacheSize] = {0};
- static size_t font_index = 0;
-
- UMA_HISTOGRAM_COUNTS_100(L"Memory.CachedFontAndDC",
- fonts[kFontCacheSize-1] ? kFontCacheSize : static_cast<int>(font_index));
-
- HDC hdc = GetDC(NULL);
- HFONT font_handle = CreateFontIndirect(&font);
- DCHECK(NULL != font_handle);
-
- HGDIOBJ old_font = SelectObject(hdc, font_handle);
- DCHECK(NULL != old_font);
-
- TEXTMETRIC tm;
- BOOL ret = GetTextMetrics(hdc, &tm);
- DCHECK(ret);
-
- if (fonts[font_index] || hdcs[font_index]) {
- // We already have too many fonts, we will delete one and take it's place.
- DeleteObject(fonts[font_index]);
- ReleaseDC(NULL, hdcs[font_index]);
- }
-
- fonts[font_index] = font_handle;
- hdcs[font_index] = hdc;
- font_index = (font_index + 1) % kFontCacheSize;
-}
-
ResourceMessageFilter::ResourceMessageFilter(
ResourceDispatcherHost* resource_dispatcher_host,
PluginService* plugin_service,
@@ -161,8 +113,7 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ViewHostMsg_PluginMessage, OnPluginMessage)
IPC_MESSAGE_HANDLER(ViewHostMsg_PluginSyncMessage, OnPluginSyncMessage)
IPC_MESSAGE_HANDLER(ViewHostMsg_LoadFont, OnLoadFont)
- IPC_MESSAGE_HANDLER(ViewHostMsg_GetMonitorInfoForWindow,
- OnGetMonitorInfoForWindow)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_GetScreenInfo, OnGetScreenInfo)
IPC_MESSAGE_HANDLER(ViewHostMsg_GetPlugins, OnGetPlugins)
IPC_MESSAGE_HANDLER(ViewHostMsg_GetPluginPath, OnGetPluginPath)
IPC_MESSAGE_HANDLER(ViewHostMsg_DownloadUrl, OnDownloadUrl)
@@ -400,6 +351,53 @@ void ResourceMessageFilter::OnPluginSyncMessage(const std::wstring& dll_path,
}
}
+void ResourceMessageFilter::OnLoadFont(LOGFONT font) {
+ // If renderer is running in a sandbox, GetTextMetrics
+ // can sometimes fail. If a font has not been loaded
+ // previously, GetTextMetrics will try to load the font
+ // from the font file. However, the sandboxed renderer does
+ // not have permissions to access any font files and
+ // the call fails. So we make the browser pre-load the
+ // font for us by using a dummy call to GetTextMetrics of
+ // the same font.
+
+ // Maintain a circular queue for the fonts and DCs to be cached.
+ // font_index maintains next available location in the queue.
+ static const int kFontCacheSize = 32;
+ static HFONT fonts[kFontCacheSize] = {0};
+ static HDC hdcs[kFontCacheSize] = {0};
+ static size_t font_index = 0;
+
+ UMA_HISTOGRAM_COUNTS_100(L"Memory.CachedFontAndDC",
+ fonts[kFontCacheSize-1] ? kFontCacheSize : static_cast<int>(font_index));
+
+ HDC hdc = GetDC(NULL);
+ HFONT font_handle = CreateFontIndirect(&font);
+ DCHECK(NULL != font_handle);
+
+ HGDIOBJ old_font = SelectObject(hdc, font_handle);
+ DCHECK(NULL != old_font);
+
+ TEXTMETRIC tm;
+ BOOL ret = GetTextMetrics(hdc, &tm);
+ DCHECK(ret);
+
+ if (fonts[font_index] || hdcs[font_index]) {
+ // We already have too many fonts, we will delete one and take it's place.
+ DeleteObject(fonts[font_index]);
+ ReleaseDC(NULL, hdcs[font_index]);
+ }
+
+ fonts[font_index] = font_handle;
+ hdcs[font_index] = hdc;
+ font_index = (font_index + 1) % kFontCacheSize;
+}
+
+void ResourceMessageFilter::OnGetScreenInfo(
+ gfx::ViewHandle window, webkit_glue::ScreenInfo* results) {
+ *results = webkit_glue::GetScreenInfoHelper(window);
+}
+
void ResourceMessageFilter::OnGetPlugins(bool refresh,
std::vector<WebPluginInfo>* plugins) {
plugin_service_->GetPlugins(refresh, plugins);
diff --git a/chrome/browser/resource_message_filter.h b/chrome/browser/resource_message_filter.h
index 5cd9d11..1ac4c15 100644
--- a/chrome/browser/resource_message_filter.h
+++ b/chrome/browser/resource_message_filter.h
@@ -6,6 +6,7 @@
#define CHROME_BROWSER_RENDERER_RESOURCE_MSG_FILTER_H__
#include "base/gfx/rect.h"
+#include "base/gfx/native_widget_types.h"
#include "base/ref_counted.h"
#include "chrome/browser/resource_dispatcher_host.h"
#include "chrome/common/ipc_channel_proxy.h"
@@ -23,6 +24,10 @@ class PrinterQuery;
class PrintJobManager;
}
+namespace webkit_glue {
+struct ScreenInfo;
+}
+
// This class filters out incoming IPC messages for network requests and
// processes them on the IPC thread. As a result, network requests are not
// delayed by costly UI processing that may be occuring on the main thread of
@@ -95,7 +100,8 @@ class ResourceMessageFilter : public IPC::ChannelProxy::MessageFilter,
// Cache fonts for the renderer. See ResourceMessageFilter::OnLoadFont
// implementation for more details
void OnLoadFont(LOGFONT font);
- void OnGetMonitorInfoForWindow(HWND window, MONITORINFOEX* monitor_info);
+ void OnGetScreenInfo(gfx::ViewHandle window,
+ webkit_glue::ScreenInfo* results);
void OnGetPlugins(bool refresh, std::vector<WebPluginInfo>* plugins);
void OnGetPluginPath(const GURL& url,
const std::string& mime_type,
diff --git a/chrome/common/ipc_message_utils.h b/chrome/common/ipc_message_utils.h
index 23a6f06..1a4c3b1 100644
--- a/chrome/common/ipc_message_utils.h
+++ b/chrome/common/ipc_message_utils.h
@@ -313,30 +313,6 @@ struct ParamTraits<SkBitmap> {
};
template <>
-struct ParamTraits<MONITORINFOEX> {
- typedef MONITORINFOEX param_type;
- static void Write(Message* m, const param_type& p) {
- m->WriteData(reinterpret_cast<const char*>(&p), sizeof(MONITORINFOEX));
- }
- static bool Read(const Message* m, void** iter, param_type* r) {
- const char *data;
- int data_size = 0;
- bool result = m->ReadData(iter, &data, &data_size);
- if (result && data_size == sizeof(MONITORINFOEX)) {
- memcpy(r, data, sizeof(MONITORINFOEX));
- } else {
- result = false;
- NOTREACHED();
- }
-
- return result;
- }
- static void Log(const param_type& p, std::wstring* l) {
- l->append(StringPrintf(L"<MONITORINFOEX>"));
- }
-};
-
-template <>
struct ParamTraits<std::string> {
typedef std::string param_type;
static void Write(Message* m, const param_type& p) {
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h
index edbfaf8..fbc1798 100644
--- a/chrome/common/render_messages.h
+++ b/chrome/common/render_messages.h
@@ -24,6 +24,7 @@
#include "webkit/glue/password_form.h"
#include "webkit/glue/password_form_dom_manager.h"
#include "webkit/glue/resource_loader_bridge.h"
+#include "webkit/glue/screen_info.h"
#include "webkit/glue/webdropdata.h"
#include "webkit/glue/webplugin.h"
#include "webkit/glue/webpreferences.h"
@@ -1649,6 +1650,30 @@ struct ParamTraits<WebDropData> {
}
};
+// Traits for ScreenInfo
+template <>
+struct ParamTraits<webkit_glue::ScreenInfo> {
+ typedef webkit_glue::ScreenInfo param_type;
+ static void Write(Message* m, const param_type& p) {
+ WriteParam(m, p.depth);
+ WriteParam(m, p.depth_per_component);
+ WriteParam(m, p.is_monochrome);
+ WriteParam(m, p.rect);
+ WriteParam(m, p.available_rect);
+ }
+ static bool Read(const Message* m, void** iter, param_type* p) {
+ return
+ ReadParam(m, iter, &p->depth) &&
+ ReadParam(m, iter, &p->depth_per_component) &&
+ ReadParam(m, iter, &p->is_monochrome) &&
+ ReadParam(m, iter, &p->rect) &&
+ ReadParam(m, iter, &p->available_rect);
+ }
+ static void Log(const param_type& p, std::wstring* l) {
+ l->append(L"<webkit_glue::ScreenInfo>");
+ }
+};
+
} // namespace IPC
#endif // CHROME_COMMON_RENDER_MESSAGES_H_
diff --git a/chrome/common/render_messages_internal.h b/chrome/common/render_messages_internal.h
index b191d41..61da8e7 100644
--- a/chrome/common/render_messages_internal.h
+++ b/chrome/common/render_messages_internal.h
@@ -15,6 +15,7 @@
#include "webkit/glue/dom_operations.h"
#include "webkit/glue/console_message_level.h"
#include "webkit/glue/context_node_types.h"
+#include "webkit/glue/screen_info.h"
#include "webkit/glue/webcursor.h"
#include "webkit/glue/webplugin.h"
#include "webkit/glue/webinputevent.h"
@@ -813,10 +814,10 @@ IPC_BEGIN_MESSAGES(ViewHost, 2)
IPC_SYNC_MESSAGE_CONTROL1_0(ViewHostMsg_LoadFont,
LOGFONT /* font data */)
- // Returns the monitor information corresponding to the HWND.
- IPC_SYNC_MESSAGE_CONTROL1_1(ViewHostMsg_GetMonitorInfoForWindow,
- HWND /* In: Window handle */,
- MONITORINFOEX /* Out: Monitor information */)
+ // Returns ScreenInfo corresponding to the given window.
+ IPC_SYNC_MESSAGE_CONTROL1_1(ViewHostMsg_GetScreenInfo,
+ gfx::ViewHandle /* window */,
+ webkit_glue::ScreenInfo /* results */)
// Send the tooltip text for the current mouse position to the browser.
IPC_MESSAGE_ROUTED1(ViewHostMsg_SetTooltipText,
diff --git a/chrome/renderer/renderer_glue.cc b/chrome/renderer/renderer_glue.cc
index 244646e..83e5b95 100644
--- a/chrome/renderer/renderer_glue.cc
+++ b/chrome/renderer/renderer_glue.cc
@@ -234,14 +234,13 @@ bool webkit_glue::EnsureFontLoaded(HFONT font) {
return RenderThread::current()->Send(new ViewHostMsg_LoadFont(logfont));
}
-MONITORINFOEX webkit_glue::GetMonitorInfoForWindow(HWND window) {
- MONITORINFOEX monitor_info;
+webkit_glue::ScreenInfo webkit_glue::GetScreenInfo(gfx::ViewHandle window) {
+ webkit_glue::ScreenInfo results;
RenderThread::current()->Send(
- new ViewHostMsg_GetMonitorInfoForWindow(window, &monitor_info));
- return monitor_info;
+ new ViewHostMsg_GetScreenInfo(window, &results));
+ return results;
}
-
#ifndef USING_SIMPLE_RESOURCE_LOADER_BRIDGE
// Each RenderView has a ResourceDispatcher. In unit tests, this function may