2011-01-17 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Jan 2011 03:49:08 +0000 (03:49 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Jan 2011 03:49:08 +0000 (03:49 +0000)
        Reviewed by Dan Bernstein.

        Some WebKit2 layout tests crash due to focus being on a frame in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=52607

        No new tests. Existing tests crash in WebKit2 without this fix.

        I suspect there are other consequences besides the WebKit2 crash, but I
        was unable to identify any for certain.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): If a frame still has focus when its page
        goes in the page cache, reset focus to the main frame.

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

Source/WebCore/ChangeLog
Source/WebCore/history/CachedFrame.cpp

index e8fe2cd1288ac7c6d8d9ff810954fb13c135002f..375817f1873884932cff86a39f1439dc3fd226e9 100644 (file)
@@ -1,3 +1,19 @@
+2011-01-17  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Some WebKit2 layout tests crash due to focus being on a frame in the page cache
+        https://bugs.webkit.org/show_bug.cgi?id=52607
+
+        No new tests. Existing tests crash in WebKit2 without this fix.
+        
+        I suspect there are other consequences besides the WebKit2 crash, but I
+        was unable to identify any for certain.
+
+        * history/CachedFrame.cpp:
+        (WebCore::CachedFrame::CachedFrame): If a frame still has focus when its page
+        goes in the page cache, reset focus to the main frame.
+
 2011-01-17  Adam Roben  <aroben@apple.com>
 
         Simplify WKCACFLayerRenderer's API
 2011-01-17  Adam Roben  <aroben@apple.com>
 
         Simplify WKCACFLayerRenderer's API
index d21f95828f2f4f6dd9e4d5654688870308e4a4a9..ab6b4d6f0df51104c925ec20706c72c59d5ad101 100644 (file)
@@ -30,6 +30,7 @@
 #include "DocumentLoader.h"
 #include "ExceptionCode.h"
 #include "EventNames.h"
 #include "DocumentLoader.h"
 #include "ExceptionCode.h"
 #include "EventNames.h"
+#include "FocusController.h"
 #include "Frame.h"
 #include "FrameLoaderClient.h"
 #include "FrameView.h"
 #include "Frame.h"
 #include "FrameLoaderClient.h"
 #include "FrameView.h"
@@ -131,6 +132,9 @@ CachedFrame::CachedFrame(Frame* frame)
     ASSERT(m_documentLoader);
     ASSERT(m_view);
 
     ASSERT(m_documentLoader);
     ASSERT(m_view);
 
+    if (frame->page()->focusController()->focusedFrame() == frame)
+        frame->page()->focusController()->setFocusedFrame(frame->page()->mainFrame());
+
     // Active DOM objects must be suspended before we cached the frame script data
     m_document->suspendActiveDOMObjects(ActiveDOMObject::DocumentWillBecomeInactive);
     m_cachedFrameScriptData = adoptPtr(new ScriptCachedFrameData(frame));
     // Active DOM objects must be suspended before we cached the frame script data
     m_document->suspendActiveDOMObjects(ActiveDOMObject::DocumentWillBecomeInactive);
     m_cachedFrameScriptData = adoptPtr(new ScriptCachedFrameData(frame));