summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_process_impl.cc
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-28 23:58:46 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-28 23:58:46 +0000
commitfd75696fceeaca48f47ad77ff40010b220f31c3c (patch)
tree31ff932cc7d6671df7d91698e5b99f3259c50e4b /chrome/renderer/render_process_impl.cc
parent948f7ab76fa314b55380a5df35768ac10af49b05 (diff)
downloadchromium_src-fd75696fceeaca48f47ad77ff40010b220f31c3c.zip
chromium_src-fd75696fceeaca48f47ad77ff40010b220f31c3c.tar.gz
chromium_src-fd75696fceeaca48f47ad77ff40010b220f31c3c.tar.bz2
Patch GetFontData for internal plugin. This is needed on XP at the least.
Review URL: http://codereview.chromium.org/2361002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48546 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_process_impl.cc')
-rw-r--r--chrome/renderer/render_process_impl.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/chrome/renderer/render_process_impl.cc b/chrome/renderer/render_process_impl.cc
index 02c3697..659d1b7 100644
--- a/chrome/renderer/render_process_impl.cc
+++ b/chrome/renderer/render_process_impl.cc
@@ -87,6 +87,26 @@ HDC WINAPI CreateDCAPatch(LPCSTR driver_name,
return CreateCompatibleDC(NULL);
}
+static iat_patch::IATPatchFunction g_iat_patch_get_font_data;
+DWORD WINAPI GetFontDataPatch(HDC hdc,
+ DWORD table,
+ DWORD offset,
+ LPVOID buffer,
+ DWORD length) {
+ int rv = GetFontData(hdc, table, offset, buffer, length);
+ if (rv == GDI_ERROR && hdc) {
+ HFONT font = static_cast<HFONT>(GetCurrentObject(hdc, OBJ_FONT));
+
+ LOGFONT logfont;
+ if (GetObject(font, sizeof(LOGFONT), &logfont)) {
+ std::vector<char> font_data;
+ if (RenderThread::current()->Send(new ViewHostMsg_PreCacheFont(logfont)))
+ rv = GetFontData(hdc, table, offset, buffer, length);
+ }
+ }
+ return rv;
+}
+
#endif
RenderProcessImpl::RenderProcessImpl()
@@ -180,6 +200,10 @@ RenderProcessImpl::RenderProcessImpl()
g_iat_patch_createdca.Patch(
pdf_lib->plugin_info().path.value().c_str(),
"gdi32.dll", "CreateDCA", CreateDCAPatch);
+ g_iat_patch_get_font_data.Patch(
+ pdf_lib->plugin_info().path.value().c_str(),
+ "gdi32.dll", "GetFontData", GetFontDataPatch);
+
#endif
}
}