typeface double delete

SkTypeface was doubly deleted at pdfium teardown
SkTypeface has two pointers but no owners.
Making the font cache an owner fixes the bug but
violates checkdeps rules. Let me know what to
do about that.

R=dsinclair@chromium.org,npm@chromium.org
Bug: 736133
Change-Id: I756a41258a5ac86e70139d7a587c5da9bb7a707b
Reviewed-on: https://pdfium-review.googlesource.com/7270
Reviewed-by: Nicolás Peña <npm@chromium.org>
Commit-Queue: Cary Clark <caryclark@google.com>
diff --git a/core/fxge/cfx_facecache.h b/core/fxge/cfx_facecache.h
index d6847de..076ba1f 100644
--- a/core/fxge/cfx_facecache.h
+++ b/core/fxge/cfx_facecache.h
@@ -14,6 +14,10 @@
 #include "core/fxge/fx_font.h"
 #include "core/fxge/fx_freetype.h"
 
+#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+#include "third_party/skia/include/core/SkTypeface.h"
+#endif
+
 class CFX_FaceCache {
  public:
   explicit CFX_FaceCache(FXFT_Face face);
@@ -60,7 +64,7 @@
   std::map<CFX_ByteString, std::unique_ptr<CFX_SizeGlyphCache>> m_SizeMap;
   std::map<uint32_t, std::unique_ptr<CFX_PathData>> m_PathMap;
 #if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
-  CFX_UnownedPtr<CFX_TypeFace> m_pTypeface;
+  sk_sp<SkTypeface> m_pTypeface;
 #endif
 };
 
diff --git a/core/fxge/ge/cfx_facecache.cpp b/core/fxge/ge/cfx_facecache.cpp
index 6049729..e675e11 100644
--- a/core/fxge/ge/cfx_facecache.cpp
+++ b/core/fxge/ge/cfx_facecache.cpp
@@ -89,9 +89,6 @@
 }
 
 CFX_FaceCache::~CFX_FaceCache() {
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
-  SkSafeUnref(m_pTypeface.Get());
-#endif
 }
 
 std::unique_ptr<CFX_GlyphBitmap> CFX_FaceCache::RenderGlyph(
@@ -358,19 +355,17 @@
 #if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
 CFX_TypeFace* CFX_FaceCache::GetDeviceCache(const CFX_Font* pFont) {
   if (!m_pTypeface) {
-    m_pTypeface =
-        SkTypeface::MakeFromStream(
-            new SkMemoryStream(pFont->GetFontData(), pFont->GetSize()))
-            .release();
+    m_pTypeface = SkTypeface::MakeFromStream(
+        new SkMemoryStream(pFont->GetFontData(), pFont->GetSize()));
   }
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
   if (!m_pTypeface) {
     sk_sp<SkFontMgr> customMgr(SkFontMgr_New_Custom_Empty());
-    m_pTypeface = customMgr->createFromStream(
-        new SkMemoryStream(pFont->GetFontData(), pFont->GetSize()));
+    m_pTypeface.reset(customMgr->createFromStream(
+        new SkMemoryStream(pFont->GetFontData(), pFont->GetSize())));
   }
 #endif
-  return m_pTypeface.Get();
+  return m_pTypeface.get();
 }
 #endif