Index: ui/gfx/win/direct_write.cc |
diff --git a/ui/gfx/win/direct_write.cc b/ui/gfx/win/direct_write.cc |
index 38c926a9bd11da661c3e66b614c177427a6bf6ae..9c8250b5bbf5175e7e339e7b72fbae5cfd550ecd 100644 |
--- a/ui/gfx/win/direct_write.cc |
+++ b/ui/gfx/win/direct_write.cc |
@@ -4,8 +4,6 @@ |
#include "ui/gfx/win/direct_write.h" |
-#include <dwrite.h> |
- |
#include "base/basictypes.h" |
#include "base/command_line.h" |
#include "base/metrics/field_trial.h" |
@@ -57,12 +55,7 @@ bool ShouldUseDirectWrite() { |
return group_name != "Disabled"; |
} |
-void MaybeInitializeDirectWrite() { |
- static bool tried_dwrite_initialize = false; |
- if (tried_dwrite_initialize) |
- return; |
- tried_dwrite_initialize = true; |
- |
+void CreateDWriteFactory(IDWriteFactory** factory) { |
if (!ShouldUseDirectWrite() || |
base::CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kDisableDirectWriteForUI)) { |
@@ -81,13 +74,26 @@ void MaybeInitializeDirectWrite() { |
if (!dwrite_create_factory_proc) |
return; |
+ // Failure to create the DirectWrite factory indicates a corrupt dll. |
+ base::win::ScopedComPtr<IUnknown> factory_unknown; |
+ if (FAILED(dwrite_create_factory_proc(DWRITE_FACTORY_TYPE_SHARED, |
+ __uuidof(IDWriteFactory), |
+ factory_unknown.Receive()))) { |
+ return; |
+ } |
+ factory_unknown.QueryInterface<IDWriteFactory>(factory); |
+} |
+ |
+void MaybeInitializeDirectWrite() { |
+ static bool tried_dwrite_initialize = false; |
+ if (tried_dwrite_initialize) |
+ return; |
+ tried_dwrite_initialize = true; |
+ |
base::win::ScopedComPtr<IDWriteFactory> factory; |
+ CreateDWriteFactory(factory.Receive()); |
- // Failure to create the DirectWrite factory indicates a corrupt dll. |
- if (FAILED(dwrite_create_factory_proc( |
- DWRITE_FACTORY_TYPE_SHARED, |
- __uuidof(IDWriteFactory), |
- reinterpret_cast<IUnknown**>(factory.Receive())))) |
+ if (factory == nullptr) |
return; |
// The skia call to create a new DirectWrite font manager instance can fail |