diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-28 23:58:46 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-28 23:58:46 +0000 |
commit | fd75696fceeaca48f47ad77ff40010b220f31c3c (patch) | |
tree | 31ff932cc7d6671df7d91698e5b99f3259c50e4b /chrome/renderer/render_process_impl.cc | |
parent | 948f7ab76fa314b55380a5df35768ac10af49b05 (diff) | |
download | chromium_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.cc | 24 |
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 } } |