Index: content/zygote/zygote_main_linux.cc |
diff --git a/content/zygote/zygote_main_linux.cc b/content/zygote/zygote_main_linux.cc |
index c30e1084a92c6eecaf07417f30c3d5464b9b0f8a..cebcc7b5b74e5d107be6108f5611eaad6949486e 100644 |
--- a/content/zygote/zygote_main_linux.cc |
+++ b/content/zygote/zygote_main_linux.cc |
@@ -46,8 +46,10 @@ |
#include "sandbox/linux/services/namespace_sandbox.h" |
#include "sandbox/linux/services/thread_helpers.h" |
#include "sandbox/linux/suid/client/setuid_sandbox_client.h" |
+#include "third_party/WebKit/public/web/linux/WebFontRendering.h" |
#include "third_party/icu/source/i18n/unicode/timezone.h" |
#include "third_party/skia/include/ports/SkFontConfigInterface.h" |
+#include "third_party/skia/include/ports/SkFontMgr_android.h" |
#if defined(OS_LINUX) |
#include <sys/prctl.h> |
@@ -344,8 +346,32 @@ static void ZygotePreSandboxInit() { |
#if defined(ENABLE_WEBRTC) |
InitializeWebRtcModule(); |
#endif |
+ |
SkFontConfigInterface::SetGlobal( |
new FontConfigIPC(GetSandboxFD()))->unref(); |
+ |
+ // Set the android SkFontMgr for blink. We need to ensure this is done |
+ // before the sandbox is initialized to allow the font manager to access |
+ // font configuration files on disk. |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kAndroidFontsPath)) { |
+ std::string android_fonts_dir = |
+ base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
+ switches::kAndroidFontsPath); |
+ |
+ if (android_fonts_dir.size() > 0 && android_fonts_dir.back() != '/') |
+ android_fonts_dir += '/'; |
+ std::string font_config = android_fonts_dir + "fonts.xml"; |
+ SkFontMgr_Android_CustomFonts custom; |
+ custom.fSystemFontUse = |
+ SkFontMgr_Android_CustomFonts::SystemFontUse::kOnlyCustom; |
+ custom.fBasePath = android_fonts_dir.c_str(); |
+ custom.fFontsXml = font_config.c_str(); |
+ custom.fFallbackFontsXml = nullptr; |
+ custom.fIsolated = true; |
+ |
+ blink::WebFontRendering::setSkiaFontManager(SkFontMgr_New_Android(&custom)); |
+ } |
} |
static bool CreateInitProcessReaper(base::Closure* post_fork_parent_callback) { |