Index: content/child/dwrite_font_proxy/dwrite_font_proxy_init_win.cc |
diff --git a/content/child/dwrite_font_proxy/dwrite_font_proxy_init_win.cc b/content/child/dwrite_font_proxy/dwrite_font_proxy_init_win.cc |
index 7ec2a42451b9d98e4fa20b6db9e99ab5fc70ef73..65319c7b073809ec68e84f6b14271279ffcb3a8a 100644 |
--- a/content/child/dwrite_font_proxy/dwrite_font_proxy_init_win.cc |
+++ b/content/child/dwrite_font_proxy/dwrite_font_proxy_init_win.cc |
@@ -14,6 +14,7 @@ |
#include "content/child/dwrite_font_proxy/dwrite_font_proxy_win.h" |
#include "content/common/font_warmup_win.h" |
#include "skia/ext/fontmgr_default_win.h" |
+#include "skia/ext/refptr.h" |
#include "third_party/WebKit/public/web/win/WebFontRendering.h" |
#include "third_party/skia/include/ports/SkTypeface_win.h" |
@@ -58,24 +59,6 @@ void CreateDirectWriteFactory(IDWriteFactory** factory) { |
reinterpret_cast<IUnknown**>(factory)))); |
} |
-HRESULT STDMETHODCALLTYPE StubFontCollection(IDWriteFactory* factory, |
- IDWriteFontCollection** col, |
- BOOL checkUpdates) { |
- DCHECK(g_font_collection); |
- g_font_collection.CopyTo(col); |
- return S_OK; |
-} |
- |
-// Copied from content/common/font_warmup_win.cc |
-void PatchDWriteFactory(IDWriteFactory* factory) { |
- const unsigned int kGetSystemFontCollectionVTableIndex = 3; |
- |
- PROC* vtable = *reinterpret_cast<PROC**>(factory); |
- PROC* function_ptr = &vtable[kGetSystemFontCollectionVTableIndex]; |
- void* stub_function = &StubFontCollection; |
- base::win::ModifyCode(function_ptr, &stub_function, sizeof(PROC)); |
-} |
- |
// Needed as a function for Bind() |
IPC::Sender* GetSenderOverride() { |
return g_sender_override; |
@@ -99,11 +82,14 @@ void InitializeDWriteFontProxy( |
} |
} |
- PatchDWriteFactory(factory.Get()); |
+ skia::RefPtr<SkFontMgr> skia_font_manager = skia::AdoptRef( |
+ SkFontMgr_New_DirectWrite(factory.Get(), g_font_collection.Get())); |
+ blink::WebFontRendering::setSkiaFontManager(skia_font_manager); |
- blink::WebFontRendering::setDirectWriteFactory(factory.Get()); |
- SkFontMgr* skia_font_manager = SkFontMgr_New_DirectWrite(factory.Get()); |
- SetDefaultSkiaFactory(skia_font_manager); |
+ // Add an extra ref for SetDefaultSkiaFactory, which keeps a ref but doesn't |
+ // addref. |
+ skia_font_manager->ref(); |
+ SetDefaultSkiaFactory(skia_font_manager.get()); |
} |
void UninitializeDWriteFontProxy() { |