Index: content/renderer/renderer_main_platform_delegate_mac.mm |
diff --git a/content/renderer/renderer_main_platform_delegate_mac.mm b/content/renderer/renderer_main_platform_delegate_mac.mm |
index c890040b81f38e1064b0cdb89a7396f96a08bed9..f4d65b0e77b3bfd7cc19b9918f7811b4b95d6fc6 100644 |
--- a/content/renderer/renderer_main_platform_delegate_mac.mm |
+++ b/content/renderer/renderer_main_platform_delegate_mac.mm |
@@ -19,6 +19,12 @@ |
#include "content/common/sandbox_mac.h" |
#include "content/public/common/content_switches.h" |
+extern "C" { |
+void CGSSetDenyWindowServerConnections(bool); |
+void CGSShutdownServerConnections(); |
+OSStatus SetApplicationIsDaemon(Boolean isDaemon); |
+}; |
+ |
namespace content { |
namespace { |
@@ -128,8 +134,28 @@ void RendererMainPlatformDelegate::PlatformUninitialize() { |
} |
bool RendererMainPlatformDelegate::EnableSandbox() { |
Robert Sesek
2017/07/06 21:28:09
(… continuing comment from sandbox_init_mac.h):
T
Greg K
2017/07/07 18:10:21
Done.
|
+ // Acquire resources before the sandbox is enabled. |
+ ExplicitlyWarmupSandbox(); |
+ |
+ // `ExplicitlyWarmupSandbox` and `ExplicitlyEnableSandbox` are no-ops |
Greg K
2017/07/03 21:26:08
I know there are a lot of comments here but I kept
Robert Sesek
2017/07/06 21:28:09
I think the comments are very helpful as well.
Greg K
2017/07/07 18:10:21
Acknowledged.
|
+ // at this stage of execution when the V2 sandbox is enabled. Thus the |
+ // calls to shut down window server connections and continue with an ASN |
+ // must be made here, as they must still be executed in the V2 sandbox. |
+ |
+ // Now disconnect from WindowServer, after all objects have been warmed up. |
+ // Shutting down the connection requires connecting to WindowServer, |
+ // so do this before actually engaging the sandbox. This may cause two log |
+ // messages to be printed to the system logger on certain OS versions. |
+ CGSSetDenyWindowServerConnections(true); |
+ CGSShutdownServerConnections(); |
+ // Allow the process to continue without a LaunchServices ASN. The |
+ // INIT_Process function in HIServices will abort if it cannot connect to |
+ // launchservicesd to get an ASN. By setting this flag, HIServices skips |
+ // that. |
+ SetApplicationIsDaemon(true); |
+ |
// Enable the sandbox. |
- bool sandbox_initialized = InitializeSandbox(); |
+ bool sandbox_initialized = ExplicitlyEnableSandbox(); |
// The sandbox is now engaged. Make sure that the renderer has not connected |
// itself to Cocoa. |