| 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 f71e0d81143fc7c8720a7f7da927338aca506e40..9ffd8dd36c62bbfaab2b5b5bfe8ae63897a9a1ba 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,9 +14,7 @@
|
| #include "content/child/dwrite_font_proxy/dwrite_font_proxy_win.h"
|
| #include "content/child/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/SkFontMgr.h"
|
| #include "third_party/skia/include/ports/SkTypeface_win.h"
|
|
|
| namespace mswr = Microsoft::WRL;
|
| @@ -60,6 +58,24 @@
|
| 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;
|
| @@ -83,14 +99,11 @@
|
| }
|
| }
|
|
|
| - skia::RefPtr<SkFontMgr> skia_font_manager = skia::AdoptRef(
|
| - SkFontMgr_New_DirectWrite(factory.Get(), g_font_collection.Get()));
|
| - blink::WebFontRendering::setSkiaFontManager(skia_font_manager.get());
|
| + PatchDWriteFactory(factory.Get());
|
|
|
| - // Add an extra ref for SetDefaultSkiaFactory, which keeps a ref but doesn't
|
| - // addref.
|
| - skia_font_manager->ref();
|
| - SetDefaultSkiaFactory(skia_font_manager.get());
|
| + blink::WebFontRendering::setDirectWriteFactory(factory.Get());
|
| + SkFontMgr* skia_font_manager = SkFontMgr_New_DirectWrite(factory.Get());
|
| + SetDefaultSkiaFactory(skia_font_manager);
|
| }
|
|
|
| void UninitializeDWriteFontProxy() {
|
|
|