Fix <https://bugs.webkit.org/show_bug.cgi?id=24642>.
authormrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Jun 2009 07:33:06 +0000 (07:33 +0000)
committermrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Jun 2009 07:33:06 +0000 (07:33 +0000)
Bug 24642: REGRESSION: Nightly builds sometimes erroneously display a message about failing to launch successfully

Safari 4 on Tiger plays some shenanigans during launch that can confuse the nightly launcher application
in to running its initialization code too soon.

* WebKitLauncher/WebKitNightlyEnabler.m:
(insideSafariOnTigerTrampoline): Detect these shenanigans.
(enableWebKitNightlyBehaviour): Delay initialization when needed.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@44524 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKitTools/ChangeLog
WebKitTools/WebKitLauncher/WebKitNightlyEnabler.m

index 11c6c0b..a13110e 100644 (file)
@@ -1,3 +1,17 @@
+2009-06-09  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Fix <https://bugs.webkit.org/show_bug.cgi?id=24642>.
+        Bug 24642: REGRESSION: Nightly builds sometimes erroneously display a message about failing to launch successfully
+
+        Safari 4 on Tiger plays some shenanigans during launch that can confuse the nightly launcher application
+        in to running its initialization code too soon.
+
+        * WebKitLauncher/WebKitNightlyEnabler.m:
+        (insideSafariOnTigerTrampoline): Detect these shenanigans.
+        (enableWebKitNightlyBehaviour): Delay initialization when needed.
+
 2009-06-08  Brady Eidson  <beidson@apple.com>
 
         Reviewed by Antti Koivisto
index 02a4bb4..f3a339f 100644 (file)
@@ -128,8 +128,33 @@ NSBundle *webKitLauncherBundle()
     return [NSBundle bundleWithPath:appPath];
 }
 
+static BOOL insideSafariOnTigerTrampoline()
+{
+    SInt32 version;
+    if (Gestalt(gestaltSystemVersion, &version) != noErr)
+        return NO;
+
+    // If we're not on Tiger then we can't be in the trampoline state.
+    if ((version & 0xFFF0) != 0x1040)
+        return NO;
+
+    const char* frameworkPath = getenv("DYLD_FRAMEWORK_PATH");
+    if (!frameworkPath)
+        frameworkPath = "";
+
+    // If the framework search path is empty or otherwise does not contain the Safari
+    // framework's Frameworks directory then we are in the trampoline state.
+    const char safariFrameworkSearchPath[] = "/System/Library/PrivateFrameworks/Safari.framework/Frameworks";
+    return strstr(frameworkPath, safariFrameworkSearchPath) == 0;
+}
+
 static void enableWebKitNightlyBehaviour()
 {
+    // If we're inside Safari in its trampoline state, it will very shortly relaunch itself.
+    // We bail out here so that we'll be called again in the freshly-launched Safari process.
+    if (insideSafariOnTigerTrampoline())
+        return;
+
     unsetenv("DYLD_INSERT_LIBRARIES");
     poseAsWebKitApp();