Index: content/common/sandbox_win.cc |
diff --git a/content/common/sandbox_win.cc b/content/common/sandbox_win.cc |
index 8be9b1115c9e61cc12f7b0a5d374c0d640c31253..86b0dcb4fb42cf41797feb882d2a0dbbb57db798 100644 |
--- a/content/common/sandbox_win.cc |
+++ b/content/common/sandbox_win.cc |
@@ -32,6 +32,7 @@ |
#include "content/common/content_switches_internal.h" |
#include "content/public/common/content_client.h" |
#include "content/public/common/content_switches.h" |
+#include "content/public/common/dwrite_font_platform_win.h" |
#include "content/public/common/sandbox_init.h" |
#include "content/public/common/sandboxed_process_launcher_delegate.h" |
#include "sandbox/win/src/process_mitigations.h" |
@@ -756,6 +757,24 @@ |
true, |
sandbox::TargetPolicy::FILES_ALLOW_READONLY, |
policy); |
+ |
+ if (!ShouldUseDirectWriteFontProxyFieldTrial()) { |
+ // If DirectWrite is enabled for font rendering then open the font |
+ // cache section which is created by the browser and pass the handle to |
+ // the renderer process. This is needed because renderer processes on |
+ // Windows 8+ may be running in an AppContainer sandbox and hence their |
+ // kernel object namespace may be partitioned. |
+ std::string name(content::kFontCacheSharedSectionName); |
+ name.append(base::UintToString(base::GetCurrentProcId())); |
+ |
+ if (direct_write_font_cache_section.Open(name, true)) { |
+ HANDLE handle = direct_write_font_cache_section.handle().GetHandle(); |
+ policy->AddHandleToShare(handle); |
+ cmd_line->AppendSwitchASCII( |
+ switches::kFontCacheSharedHandle, |
+ base::UintToString(base::win::HandleToUint32(handle))); |
+ } |
+ } |
} |
} |
#endif |