electron/shell/browser/font_defaults.cc
Electron Bot 69f1731bbb
chore: bump chromium to ec5bc1743792d64724693eb357083 (master) (#24984)
* chore: bump chromium in DEPS to cbdeef954dfc34e94c8ca9cf72ad326b4a121158

* chore: bump chromium in DEPS to 29723f905baeab1d4228eef2c31cdb341ebeffe0

* chore: bump chromium in DEPS to 44d6d78e852137fff58c14ed26ab1e803e5bf822

* update patches

* chore: bump chromium in DEPS to 8a3a0fccb39d6b8334c9a0496c0d5056e50cdb3f

* chore: update patches

* refactor: fix PrintBackend::CreateInstance() calls

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2354541

* chore: bump chromium in DEPS to b9ebec3bcb1cabdd1426f367636f54cc98e0500e

* chore: remove patches to code that was deleted upstream

CL: https://chromium-review.googlesource.com/c/chromium/src/+/2360314

* Remove uses of kCGColorSpaceITUR_2020_PQ_EOTF/HLG

CL: https://chromium-review.googlesource.com/c/chromium/src/+/2363950

just garden variety code shear

* chore: update patch indices

* Move ColorModel to //printing/mojom/print.mojom

https://chromium-review.googlesource.com/c/chromium/src/+/2355083

sync with printing ColorModel changes: moved to mojo, different naming scheme

* chore: bump chromium in DEPS to 56c4b4d2ce5ba941acd2e0fdb5100e8a48847134

* chore: bump chromium in DEPS to 130501f220b684a79dc82c17e236e63ac1f2a093

* Convert PrintHostMsg_DidGetPrintedPagesCount to Mojo

https://chromium-review.googlesource.com/c/chromium/src/+/2326857

Update argument list to Print()

* chore: update patch indices

* DumpAccTree: convert utf16 to utf8 in PropertyFilter

https://chromium-review.googlesource.com/c/chromium/src/+/2360218

* chore: bump chromium in DEPS to 3058368c6646e0dc8be6f8ea838b0343428b7998

* chore: bump chromium in DEPS to f51b4e6555364363c61438dac7afd988c8347bfc

* chore: bump chromium in DEPS to 2dcc6f8fc23ac41b2499eb69dee0b4017e9d1046

* update patches

* chore: bump chromium in DEPS to 2d8e98ecedc7e4905540b053bc1c87e964715be5

* update patches

* 2345900: Move content::RecordContentToVisibleTimeRequest struct to mojo

https://chromium-review.googlesource.com/c/chromium/src/+/2345900

* update patches

* 2345900: Move content::RecordContentToVisibleTimeRequest struct to mojo

https://chromium-review.googlesource.com/c/chromium/src/+/2345900

* 2367394: Remove net::LOAD_DO_NOT_SEND_COOKIES and net::LOAD_DO_NOT_SEND_AUTH_DATA.

https://chromium-review.googlesource.com/c/chromium/src/+/2367394

* 2373227: [XProto] Consolidate all <X11/*> includes to //ui/gfx/x/x11.h

https://chromium-review.googlesource.com/c/chromium/src/+/2373227

* fixup! 2373227: [XProto] Consolidate all <X11/*> includes to //ui/gfx/x/x11.h

* chore: bump chromium in DEPS to c090e3f960520cbd2328608b97f87238c76d6143

* update patches

* chore: bump chromium in DEPS to 13a25e0a755de9a14271022c595f3d2e29829e1a

* chore: bump chromium in DEPS to 6adbb767b012c41efaeab0d1bdbb3eefed0977bc

* chore: bump chromium in DEPS to 339ec5455c5932ef1322ea9953a6349b0732199e

* chore: bump chromium in DEPS to 20291807c33f7ef4ef4f57d62075e099b027bfe6

* chore: bump chromium in DEPS to 226fbd1b8b17d4ac84fdb9548ef3a1c646878d47

* update patches

* fixup disable_color_correct_rendering patch

* chore: bump chromium in DEPS to 577c45979cad4359f2e206d68efd9317d3d79315

* update patches

* viz: Rename RenderPass to CompositorRenderPass (and related types).

https://chromium-review.googlesource.com/c/chromium/src/+/2380730

* chore: bump chromium in DEPS to 37e2ad5303f2c03a1b5d8eda65341bf2561196cd

* update patches

* add kOmitCookies_Electron

* update patch

* chore: bump chromium in DEPS to 256e42409ea63a7e71016de07818a983a97db463

* update patches

* fix worker script ready hook

https://chromium-review.googlesource.com/c/chromium/src/+/2335713

* Fixup printing page ranges patch

* [printing] Move PrintMsg_PrintPages_Params to print.mojom

https://chromium-review.googlesource.com/c/chromium/src/+/2340854

* Add MIME sniffer overloads that take base::StringPieces

https://chromium-review.googlesource.com/c/chromium/src/+/2382896

* [printing] Move PrintHostMsg_PreviewIds to print.mojom

https://chromium-review.googlesource.com/c/chromium/src/+/2379455

* fixup test due to new DCHECK

https://chromium-review.googlesource.com/c/chromium/src/+/2333750

* stop sending cookies when useSessionCookies is false

* chore: bump chromium in DEPS to dd429dbc556449951ee8160d8a4d61fd95a139d5

* update patches

* chore: bump chromium in DEPS to 5202bde3f9f44c2065f5dacf27e7000dd19e4e4d

* chore: bump chromium in DEPS to 099e8e07b89da65932431bb0fd51b6f7f5344c19

* chore: bump chromium in DEPS to 104e5da2a43b759732d5b94bfc750b3a9a639653

* chore: bump chromium in DEPS to a4519ce657af25834e355315fd7fefa77b13426a

* update patches

* Make FileURLLoaderFactory always owned by its |receivers_|.

https://chromium-review.googlesource.com/c/chromium/src/+/2337411

* Make FileURLLoaderFactory always owned by its |receivers_|.

https://chromium-review.googlesource.com/c/chromium/src/+/2337411

* chore: bump chromium in DEPS to 1b62e9e8c8eaf6b8e3a9c77ee67a4c1bfa6a4d6b

* chore: update patches

* fixup! Make FileURLLoaderFactory always owned by its |receivers_|.

* chore: update patches

- mac: Disable CoreServices _CSCheckFix.
  https://chromium-review.googlesource.com/c/chromium/src/+/2401334
- [XProto] Remove bad DCHECK in x11_error_tracker.cc
  https://chromium-review.googlesource.com/c/chromium/src/+/2402304
- Move content/browser/frame_host/* over to content/browser/renderer_host/
  https://chromium-review.googlesource.com/c/chromium/src/+/2401303

* Refactor WebContentSettingsClient to dedupe AllowXYZ methods

https://chromium-review.googlesource.com/c/chromium/src/+/2353552

* Introduce NonNetworkURLLoaderFactoryBase class.

https://chromium-review.googlesource.com/c/chromium/src/+/2357559

* [XProto] Remove usage of all Xlib headers

https://chromium-review.googlesource.com/c/chromium/src/+/2392140

* fixup! chore: update patches

* chore: bump chromium in DEPS to c1df55fbeb8207d036a604f59e4ea4e8ee79930a

* chore: update patches

* Move content::WebPreferences struct to Blink

https://chromium-review.googlesource.com/c/chromium/src/+/2397670

* chore: bump chromium in DEPS to 57a23ec4884fff6c2f8d9b8536131cdc9b551ec2

* Set appid on Pip windows.

https://chromium-review.googlesource.com/c/chromium/src/+/2388274

* fixup! Set appid on Pip windows.

* fix: add a patch to remove deprecated factory

* chore: bump chromium in DEPS to 1a9ddb7ea43955877823d5c4dcbf241b64228635

* fix compilation on windows

* chore: bump chromium in DEPS to 234e6c6a77f61ffad9335099d9b13892cf88fd44

* chore: update patches

* chore: bump chromium in DEPS to 7631eb0a9f57a8a47d3c28e1d265961b3a4d6b2b

* chore: update patches

* chore: bump chromium in DEPS to f9c34cd485845b95c2d17a7f55fdf92cda9a1b3a

* chore: update patches

* chore: implement GetSurveyAPIKey

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2362182

* chore: replace CreateWebUIURLLoader with CreateWebUIURLLoaderFactory

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2358309

* chore: bump chromium in DEPS to 5bdbd2373da884adf41c087be1465fcc344d168c

* chore: update node patches for common.gypi

* chore: update patches

* chore: non_network_url_loader_factory_base was moved

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2357431

* 2415752: Reland "Reland "OOR-CORS: Remove BlinkCORS supporting code outside Blink""

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2415752

* chore: bump chromium in DEPS to b943d006a33ec5bc1743792d64724693eb357083

* fix: replace x11::None with x11::Window::None

* chore: update patches

* chore: update patches

* fix: cast x11::Window to int

* 2402123: Use end date when deleting http auth cache

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2402123

* 2320268: Migrate DragHostMsg_StartDragging to Mojo

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2320268

* 2401303: Move content/browser/frame_host/* over to content/browser/renderer_host/

https://chromium-review.googlesource.com/c/chromium/src/+/2401303

* chore: fix lint

* chore: fix build

* Update config.yml

Co-authored-by: Electron Bot <anonymous@electronjs.org>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
2020-09-21 01:00:36 -07:00

182 lines
7.4 KiB
C++

// Copyright (c) 2018 Slack Technologies, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "shell/browser/font_defaults.h"
#include <string>
#include <unordered_map>
#include "base/stl_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/common/pref_names.h"
#include "chrome/grit/platform_locale_settings.h"
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
#include "ui/base/l10n/l10n_util.h"
namespace {
// The following list of font defaults was copied from
// https://chromium.googlesource.com/chromium/src/+/69.0.3497.106/chrome/browser/ui/prefs/prefs_tab_helper.cc#152
//
// The only updates that should be made to this list are copying updates that
// were made in Chromium.
//
// vvvvv DO NOT EDIT vvvvv
struct FontDefault {
const char* pref_name;
int resource_id;
};
// Font pref defaults. The prefs that have defaults vary by platform, since not
// all platforms have fonts for all scripts for all generic families.
// TODO(falken): add proper defaults when possible for all
// platforms/scripts/generic families.
const FontDefault kFontDefaults[] = {
{prefs::kWebKitStandardFontFamily, IDS_STANDARD_FONT_FAMILY},
{prefs::kWebKitFixedFontFamily, IDS_FIXED_FONT_FAMILY},
{prefs::kWebKitSerifFontFamily, IDS_SERIF_FONT_FAMILY},
{prefs::kWebKitSansSerifFontFamily, IDS_SANS_SERIF_FONT_FAMILY},
{prefs::kWebKitCursiveFontFamily, IDS_CURSIVE_FONT_FAMILY},
{prefs::kWebKitFantasyFontFamily, IDS_FANTASY_FONT_FAMILY},
{prefs::kWebKitPictographFontFamily, IDS_PICTOGRAPH_FONT_FAMILY},
#if defined(OS_CHROMEOS) || defined(OS_MAC) || defined(OS_WIN)
{prefs::kWebKitStandardFontFamilyJapanese,
IDS_STANDARD_FONT_FAMILY_JAPANESE},
{prefs::kWebKitFixedFontFamilyJapanese, IDS_FIXED_FONT_FAMILY_JAPANESE},
{prefs::kWebKitSerifFontFamilyJapanese, IDS_SERIF_FONT_FAMILY_JAPANESE},
{prefs::kWebKitSansSerifFontFamilyJapanese,
IDS_SANS_SERIF_FONT_FAMILY_JAPANESE},
{prefs::kWebKitStandardFontFamilyKorean, IDS_STANDARD_FONT_FAMILY_KOREAN},
{prefs::kWebKitSerifFontFamilyKorean, IDS_SERIF_FONT_FAMILY_KOREAN},
{prefs::kWebKitSansSerifFontFamilyKorean,
IDS_SANS_SERIF_FONT_FAMILY_KOREAN},
{prefs::kWebKitStandardFontFamilySimplifiedHan,
IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN},
{prefs::kWebKitSerifFontFamilySimplifiedHan,
IDS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN},
{prefs::kWebKitSansSerifFontFamilySimplifiedHan,
IDS_SANS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN},
{prefs::kWebKitStandardFontFamilyTraditionalHan,
IDS_STANDARD_FONT_FAMILY_TRADITIONAL_HAN},
{prefs::kWebKitSerifFontFamilyTraditionalHan,
IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN},
{prefs::kWebKitSansSerifFontFamilyTraditionalHan,
IDS_SANS_SERIF_FONT_FAMILY_TRADITIONAL_HAN},
#endif
#if defined(OS_MAC) || defined(OS_WIN)
{prefs::kWebKitCursiveFontFamilySimplifiedHan,
IDS_CURSIVE_FONT_FAMILY_SIMPLIFIED_HAN},
{prefs::kWebKitCursiveFontFamilyTraditionalHan,
IDS_CURSIVE_FONT_FAMILY_TRADITIONAL_HAN},
#endif
#if defined(OS_CHROMEOS)
{prefs::kWebKitStandardFontFamilyArabic, IDS_STANDARD_FONT_FAMILY_ARABIC},
{prefs::kWebKitSerifFontFamilyArabic, IDS_SERIF_FONT_FAMILY_ARABIC},
{prefs::kWebKitSansSerifFontFamilyArabic,
IDS_SANS_SERIF_FONT_FAMILY_ARABIC},
{prefs::kWebKitFixedFontFamilyKorean, IDS_FIXED_FONT_FAMILY_KOREAN},
{prefs::kWebKitFixedFontFamilySimplifiedHan,
IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN},
{prefs::kWebKitFixedFontFamilyTraditionalHan,
IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN},
#elif defined(OS_WIN)
{prefs::kWebKitFixedFontFamilyArabic, IDS_FIXED_FONT_FAMILY_ARABIC},
{prefs::kWebKitSansSerifFontFamilyArabic,
IDS_SANS_SERIF_FONT_FAMILY_ARABIC},
{prefs::kWebKitStandardFontFamilyCyrillic,
IDS_STANDARD_FONT_FAMILY_CYRILLIC},
{prefs::kWebKitFixedFontFamilyCyrillic, IDS_FIXED_FONT_FAMILY_CYRILLIC},
{prefs::kWebKitSerifFontFamilyCyrillic, IDS_SERIF_FONT_FAMILY_CYRILLIC},
{prefs::kWebKitSansSerifFontFamilyCyrillic,
IDS_SANS_SERIF_FONT_FAMILY_CYRILLIC},
{prefs::kWebKitStandardFontFamilyGreek, IDS_STANDARD_FONT_FAMILY_GREEK},
{prefs::kWebKitFixedFontFamilyGreek, IDS_FIXED_FONT_FAMILY_GREEK},
{prefs::kWebKitSerifFontFamilyGreek, IDS_SERIF_FONT_FAMILY_GREEK},
{prefs::kWebKitSansSerifFontFamilyGreek, IDS_SANS_SERIF_FONT_FAMILY_GREEK},
{prefs::kWebKitFixedFontFamilyKorean, IDS_FIXED_FONT_FAMILY_KOREAN},
{prefs::kWebKitCursiveFontFamilyKorean, IDS_CURSIVE_FONT_FAMILY_KOREAN},
{prefs::kWebKitFixedFontFamilySimplifiedHan,
IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN},
{prefs::kWebKitFixedFontFamilyTraditionalHan,
IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN},
#endif
};
const size_t kFontDefaultsLength = base::size(kFontDefaults);
// ^^^^^ DO NOT EDIT ^^^^^
std::string GetDefaultFontForPref(const char* pref_name) {
for (size_t i = 0; i < kFontDefaultsLength; ++i) {
FontDefault pref = kFontDefaults[i];
if (strcmp(pref.pref_name, pref_name) == 0) {
return l10n_util::GetStringUTF8(pref.resource_id);
}
}
return std::string();
}
// Map from script to font.
// Key comparison uses pointer equality.
using ScriptFontMap = std::unordered_map<const char*, base::string16>;
// Map from font family to ScriptFontMap.
// Key comparison uses pointer equality.
using FontFamilyMap = std::unordered_map<const char*, ScriptFontMap>;
// A lookup table mapping (font-family, script) -> font-name
// e.g. ("sans-serif", "Zyyy") -> "Arial"
FontFamilyMap g_font_cache;
base::string16 FetchFont(const char* script, const char* map_name) {
FontFamilyMap::const_iterator it = g_font_cache.find(map_name);
if (it != g_font_cache.end()) {
ScriptFontMap::const_iterator it2 = it->second.find(script);
if (it2 != it->second.end())
return it2->second;
}
std::string pref_name = base::StringPrintf("%s.%s", map_name, script);
std::string font = GetDefaultFontForPref(pref_name.c_str());
base::string16 font16 = base::UTF8ToUTF16(font);
ScriptFontMap& map = g_font_cache[map_name];
map[script] = font16;
return font16;
}
void FillFontFamilyMap(const char* map_name,
blink::web_pref::ScriptFontFamilyMap* map) {
for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) {
const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i];
base::string16 result = FetchFont(script, map_name);
if (!result.empty()) {
(*map)[script] = result;
}
}
}
} // namespace
namespace electron {
void SetFontDefaults(blink::web_pref::WebPreferences* prefs) {
FillFontFamilyMap(prefs::kWebKitStandardFontFamilyMap,
&prefs->standard_font_family_map);
FillFontFamilyMap(prefs::kWebKitFixedFontFamilyMap,
&prefs->fixed_font_family_map);
FillFontFamilyMap(prefs::kWebKitSerifFontFamilyMap,
&prefs->serif_font_family_map);
FillFontFamilyMap(prefs::kWebKitSansSerifFontFamilyMap,
&prefs->sans_serif_font_family_map);
FillFontFamilyMap(prefs::kWebKitCursiveFontFamilyMap,
&prefs->cursive_font_family_map);
FillFontFamilyMap(prefs::kWebKitFantasyFontFamilyMap,
&prefs->fantasy_font_family_map);
FillFontFamilyMap(prefs::kWebKitPictographFontFamilyMap,
&prefs->pictograph_font_family_map);
}
} // namespace electron