summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCary Clark <caryclark@skia.org>2017-07-05 11:05:00 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-07-05 21:48:15 +0000
commitddf2418ba8e5d925909d7955ac22b33f37ccce44 (patch)
tree554cf2f5d122760bdc84506822e258de757e043a
parent0ba3c6da16d4e90f0ad1fc9f326bf863860c0470 (diff)
downloadpdfium-ddf2418ba8e5d925909d7955ac22b33f37ccce44.tar.xz
typeface double deletechromium/3150
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>
-rw-r--r--core/fxge/cfx_facecache.h6
-rw-r--r--core/fxge/ge/cfx_facecache.cpp15
2 files changed, 10 insertions, 11 deletions
diff --git a/core/fxge/cfx_facecache.h b/core/fxge/cfx_facecache.h
index d6847debdb..076ba1f330 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 @@ class CFX_FaceCache {
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 6049729089..e675e11510 100644
--- a/core/fxge/ge/cfx_facecache.cpp
+++ b/core/fxge/ge/cfx_facecache.cpp
@@ -89,9 +89,6 @@ CFX_FaceCache::CFX_FaceCache(FXFT_Face face)
}
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 @@ const CFX_GlyphBitmap* CFX_FaceCache::LoadGlyphBitmap(const CFX_Font* pFont,
#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