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

Unified Diff: content/renderer/renderer_font_platform_win.cc

Issue 521483002: Added restricted font fallback to custom font collection loader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review Created 6 years, 4 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/renderer_font_platform_win.cc
diff --git a/content/renderer/renderer_font_platform_win.cc b/content/renderer/renderer_font_platform_win.cc
index 089e876fb8959a7adc664d6d01b8b702ac3da21f..b125fe7fc233f376b34c6e1514b4f8f054cbfb5f 100644
--- a/content/renderer/renderer_font_platform_win.cc
+++ b/content/renderer/renderer_font_platform_win.cc
@@ -49,6 +49,7 @@ class FontCollectionLoader
std::wstring GetFontNameFromKey(UINT32 idx);
bool LoadFontListFromRegistry();
+ bool LoadRestrictedFontList();
FontCollectionLoader() {};
virtual ~FontCollectionLoader() {};
@@ -283,6 +284,47 @@ bool FontCollectionLoader::LoadFontListFromRegistry() {
return true;
}
+// This list is mainly based on prefs/prefs_tab_helper.cc kFontDefaults.
+const wchar_t* kRestrictedFontSet[] = {
+ L"times.ttf", // IDS_STANDARD_FONT_FAMILY
+ L"timesbd.ttf", // IDS_STANDARD_FONT_FAMILY
+ L"timesbi.ttf", // IDS_STANDARD_FONT_FAMILY
+ L"timesi.ttf", // IDS_STANDARD_FONT_FAMILY
+ L"cour.ttf", // IDS_FIXED_FONT_FAMILY
+ L"courbd.ttf", // IDS_FIXED_FONT_FAMILY
+ L"courbi.ttf", // IDS_FIXED_FONT_FAMILY
+ L"couri.ttf", // IDS_FIXED_FONT_FAMILY
+ L"consola.ttf", // IDS_FIXED_FONT_FAMILY_ALT_WIN
+ L"consolab.ttf", // IDS_FIXED_FONT_FAMILY_ALT_WIN
+ L"consolai.ttf", // IDS_FIXED_FONT_FAMILY_ALT_WIN
+ L"consolaz.ttf", // IDS_FIXED_FONT_FAMILY_ALT_WIN
+ L"arial.ttf", // IDS_SANS_SERIF_FONT_FAMILY
+ L"arialbd.ttf", // IDS_SANS_SERIF_FONT_FAMILY
+ L"arialbi.ttf", // IDS_SANS_SERIF_FONT_FAMILY
+ L"ariali.ttf", // IDS_SANS_SERIF_FONT_FAMILY
+ L"comic.ttf", // IDS_CURSIVE_FONT_FAMILY
+ L"comicbd.ttf", // IDS_CURSIVE_FONT_FAMILY
+ L"comici.ttf", // IDS_CURSIVE_FONT_FAMILY
+ L"comicz.ttf", // IDS_CURSIVE_FONT_FAMILY
+ L"impact.ttf", // IDS_FANTASY_FONT_FAMILY
+ L"segoeui.ttf", // IDS_PICTOGRAPH_FONT_FAMILY
+ L"segoeuib.ttf", // IDS_PICTOGRAPH_FONT_FAMILY
+ L"segoeuii.ttf", // IDS_PICTOGRAPH_FONT_FAMILY
+ L"msgothic.ttc", // IDS_STANDARD_FONT_FAMILY_JAPANESE
+ L"msmincho.ttc", // IDS_SERIF_FONT_FAMILY_JAPANESE
+ L"gulim.ttc", // IDS_FIXED_FONT_FAMILY_KOREAN
+ L"batang.ttc", // IDS_SERIF_FONT_FAMILY_KOREAN
+ L"simsun.ttc", // IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN
+ L"mingliu.ttc", // IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN
+};
+
+bool FontCollectionLoader::LoadRestrictedFontList() {
+ reg_fonts_.clear();
+ reg_fonts_.assign(kRestrictedFontSet,
+ kRestrictedFontSet + _countof(kRestrictedFontSet));
+ return true;
scottmg 2014/08/29 02:51:05 no need for return value here
+}
+
} // namespace
namespace content {
@@ -297,14 +339,29 @@ IDWriteFontCollection* GetCustomFontCollection(IDWriteFactory* factory) {
FontCollectionLoader::Initialize(factory);
- HRESULT hr = factory->CreateCustomFontCollection(
- g_font_loader.Get(), NULL, 0, g_font_collection.GetAddressOf());
+ // We try here to put arbitrary limit on max number of fonts that could
+ // be loaded, otherwise we fallback to restricted set of fonts.
+ const UINT32 kMaxFontThreshold = 1000;
+ HRESULT hr = E_FAIL;
+ if (g_font_loader->GetFontMapSize() < kMaxFontThreshold) {
+ hr = factory->CreateCustomFontCollection(
+ g_font_loader.Get(), NULL, 0, g_font_collection.GetAddressOf());
+ }
+
+ bool loadingRestricted = false;
scottmg 2014/08/29 02:51:05 nit; loading_restricted
+ if (FAILED(hr) || !g_font_collection.Get()) {
+ // We will try here just one more time with restricted font set.
+ g_font_loader->LoadRestrictedFontList();
+ hr = factory->CreateCustomFontCollection(
+ g_font_loader.Get(), NULL, 0, g_font_collection.GetAddressOf());
scottmg 2014/08/29 02:51:05 does this succeed if any one of those fonts don't
Shrikant Kelkar 2014/08/29 23:26:28 IIRC, it will not load that particular font/font f
+ }
base::TimeDelta time_delta = base::TimeTicks::Now() - start_tick;
int64 delta = time_delta.ToInternalValue();
base::debug::Alias(&delta);
UINT32 size = g_font_loader->GetFontMapSize();
base::debug::Alias(&size);
+ base::debug::Alias(&loadingRestricted);
CHECK(SUCCEEDED(hr));
CHECK(g_font_collection.Get() != NULL);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698