Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(497)

Unified Diff: third_party/harfbuzz-ng/src/hb-coretext.cc

Issue 2114883002: Cherry pick CoreText Helvetica collision fix into HarfBuzz (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/harfbuzz-ng/README.chromium ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/harfbuzz-ng/src/hb-coretext.cc
diff --git a/third_party/harfbuzz-ng/src/hb-coretext.cc b/third_party/harfbuzz-ng/src/hb-coretext.cc
index e64d2651a5e73bfa579880adf7276350f42cb426..98592af846f450fe320c44ee227b3c110adc3c2f 100644
--- a/third_party/harfbuzz-ng/src/hb-coretext.cc
+++ b/third_party/harfbuzz-ng/src/hb-coretext.cc
@@ -145,6 +145,7 @@ create_ct_font (CGFontRef cg_font, CGFloat font_size)
DEBUG_MSG (CORETEXT, cg_font, "Font CTFontCreateWithGraphicsFont() failed");
return NULL;
}
+ CFURLRef original_url = (CFURLRef)CTFontCopyAttribute(ct_font, kCTFontURLAttribute);
/* Create font copy with cascade list that has LastResort first; this speeds up CoreText
* font fallback which we don't need anyway. */
@@ -154,14 +155,31 @@ create_ct_font (CGFontRef cg_font, CGFloat font_size)
CFRelease (last_resort_font_desc);
if (new_ct_font)
{
- CFRelease (ct_font);
- ct_font = new_ct_font;
+ // The CTFontCreateCopyWithAttributes call fails to stay on the same font
+ // when reconfiguring the cascade list and may switch to a different font
+ // when there are fonts that go by the same name, since the descriptor is
+ // just name and size.
+
+ // Avoid reconfiguring the cascade lists if the new font is outside the
+ // system locations that we cannot access from the sandboxed renderer
+ // process in Blink. This can be detected by the new file URL location
+ // that the newly found font points to.
+ CFURLRef new_url = (CFURLRef)CTFontCopyAttribute(new_ct_font, kCTFontURLAttribute);
+ if (CFEqual(original_url, new_url)) {
+ CFRelease (ct_font);
+ ct_font = new_ct_font;
+ } else {
+ CFRelease(new_ct_font);
+ DEBUG_MSG (CORETEXT, ct_font, "Discarding reconfigured CTFont, location changed.");
+ }
+ CFRelease(new_url);
}
else
DEBUG_MSG (CORETEXT, ct_font, "Font copy with empty cascade list failed");
}
- return ct_font;
+ CFRelease(original_url);
+ return ct_font;
}
struct hb_coretext_shaper_face_data_t {
« no previous file with comments | « third_party/harfbuzz-ng/README.chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698