diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index fcc91f9..2191ad3 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,12 @@
+2008-01-02  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Set layoutTestController.globalFlag so tests merged back from trunk, such as
+        those in http/tests/security/frameNavigation, function correctly.
+
+        * http/tests/security/resources/cross-frame-iframe.html:
+
 2007-12-01  Mark Rowe  <mrowe@apple.com>
 
         Merge r28056 to Safari-3-branch.
diff --git a/LayoutTests/http/tests/security/resources/cross-frame-iframe.html b/LayoutTests/http/tests/security/resources/cross-frame-iframe.html
index 2e9518b..09f99f6 100644
--- a/LayoutTests/http/tests/security/resources/cross-frame-iframe.html
+++ b/LayoutTests/http/tests/security/resources/cross-frame-iframe.html
@@ -1,5 +1,14 @@
 <html>
-<body>
+<head>
+    <script>
+        function fireSentinel()
+        {
+            if (window.layoutTestController)
+                layoutTestController.globalFlag = true;
+        }
+    </script>
+</head>
+<body onload="fireSentinel();">
     <p id='accessMe'></p>
     <p>Inner iframe.</p>
     <iframe name='flag'></iframe>
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 325ec28..1ba9922 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,24 +1,44 @@
+2008-01-02  Mark Rowe  <mrowe@apple.com>
+
+        Merge r27238 to fix a hang during the layout tests.
+
+    2007-10-29  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Adam Roben.
+
+        Add a globalFlag property to the LayoutTestController to allow cross-domain indications.
+
+        * DumpRenderTree/LayoutTestController.cpp:
+        (LayoutTestController::LayoutTestController):
+        (getGlobalFlagCallback):
+        (setGlobalFlagCallback):
+        (LayoutTestController::getJSClass):
+        (LayoutTestController::staticValues):
+        * DumpRenderTree/LayoutTestController.h:
+        (LayoutTestController::globalFlag):
+        (LayoutTestController::setGlobalFlag):
+
 2007-11-30  Adam Roben  <aroben@apple.com>
 
         Merge r26734
 
-        2007-10-17  Adam Roben  <aroben@apple.com>
+    2007-10-17  Adam Roben  <aroben@apple.com>
 
-                Make it possible to have Windows-specific tests and results
+        Make it possible to have Windows-specific tests and results
 
-                When searching for tests to run and the Skipped file, we will only
-                look in platform/win and the cross-platform directory. When looking
-                for expected results, we will look in platform/win, then
-                platform/mac-leopard, then platform/mac, then finally the
-                cross-platform directory.
+        When searching for tests to run and the Skipped file, we will only
+        look in platform/win and the cross-platform directory. When looking
+        for expected results, we will look in platform/win, then
+        platform/mac-leopard, then platform/mac, then finally the
+        cross-platform directory.
 
-                Reviewed by Sam.
+        Reviewed by Sam.
 
-                * Scripts/run-webkit-tests:
-                (sub expectedDirectoryForTest): Search in mac-leopard and mac before
-                searching in the cross-platform directory.
-                (sub buildPlatformHierarchy): Removed some unneeded calls to
-                dirname/basename.
+        * Scripts/run-webkit-tests:
+        (sub expectedDirectoryForTest): Search in mac-leopard and mac before
+        searching in the cross-platform directory.
+        (sub buildPlatformHierarchy): Removed some unneeded calls to
+        dirname/basename.
 
 2007-10-19  Maciej Stachowiak  <mjs@apple.com>
 
diff --git a/WebKitTools/DumpRenderTree/LayoutTestController.cpp b/WebKitTools/DumpRenderTree/LayoutTestController.cpp
index 1764e33..81ac399 100644
--- a/WebKitTools/DumpRenderTree/LayoutTestController.cpp
+++ b/WebKitTools/DumpRenderTree/LayoutTestController.cpp
@@ -53,6 +53,7 @@
     , m_testRepaintSweepHorizontally(testRepaintSweepHorizontallyDefault)
     , m_waitToDump(false)
     , m_windowIsKey(true)
+    , m_globalFlag(false)
 {
 }
 
@@ -465,6 +466,21 @@
     return JSValueMakeNumber(context, windows);
 }
 
+// Static Values
+
+static JSValueRef getGlobalFlagCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
+{
+    LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+    return JSValueMakeBoolean(context, controller->globalFlag());
+}
+
+static bool setGlobalFlagCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
+{
+    LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+    controller->setGlobalFlag(JSValueToBoolean(context, value));
+    return true;
+}
+
 // Object Creation
 
 void LayoutTestController::makeWindowObject(JSContextRef context, JSObjectRef windowObject, JSValueRef* exception)
@@ -476,12 +492,13 @@
 
 JSClassRef LayoutTestController::getJSClass()
 {
-    static JSClassRef layoutTestControllerClass = 0;
+    static JSClassRef layoutTestControllerClass;
 
     if (!layoutTestControllerClass) {
+        JSStaticValue* staticValues = LayoutTestController::staticValues();
         JSStaticFunction* staticFunctions = LayoutTestController::staticFunctions();
         JSClassDefinition classDefinition = {
-            0, kJSClassAttributeNone, "LayoutTestController", 0, 0, staticFunctions,
+            0, kJSClassAttributeNone, "LayoutTestController", 0, staticValues, staticFunctions,
             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
         };
 
@@ -491,6 +508,16 @@
     return layoutTestControllerClass;
 }
 
+JSStaticValue* LayoutTestController::staticValues()
+{
+    static JSStaticValue staticValues[] = {
+        { "globalFlag", getGlobalFlagCallback, setGlobalFlagCallback, kJSPropertyAttributeNone },
+        { 0, 0, 0, 0 }
+    };
+    return staticValues;
+
+}
+
 JSStaticFunction* LayoutTestController::staticFunctions()
 {
     static JSStaticFunction staticFunctions[] = {
@@ -538,3 +565,5 @@
 
     return staticFunctions;
 }
+
+
diff --git a/WebKitTools/DumpRenderTree/LayoutTestController.h b/WebKitTools/DumpRenderTree/LayoutTestController.h
index 8d70e4f..21ebe31 100644
--- a/WebKitTools/DumpRenderTree/LayoutTestController.h
+++ b/WebKitTools/DumpRenderTree/LayoutTestController.h
@@ -117,6 +117,9 @@
     bool windowIsKey() const { return m_windowIsKey; }
     void setWindowIsKey(bool windowIsKey);
 
+    bool globalFlag() const { return m_globalFlag; }
+    void setGlobalFlag(bool globalFlag) { m_globalFlag = globalFlag; }
+
 private:
     bool m_dumpAsText;
     bool m_dumpBackForwardList;
@@ -138,7 +141,10 @@
     bool m_waitToDump; // True if waitUntilDone() has been called, but notifyDone() has not yet been called.
     bool m_windowIsKey;
 
+    bool m_globalFlag;
+
     static JSClassRef getJSClass();
+    static JSStaticValue* staticValues();
     static JSStaticFunction* staticFunctions();
 };
 
