WebCore:
[WebKit-https.git] / WebCore / page / FrameTree.cpp
index 1fbea6372a71d1e305a710adb7d246dcda746408..76abdf1a1de79fed33b7da7a0b2e9b970c8b4ac6 100644 (file)
@@ -49,6 +49,13 @@ void FrameTree::setName(const AtomicString& name)
     m_name = parent()->tree()->uniqueChildName(name);
 }
 
     m_name = parent()->tree()->uniqueChildName(name);
 }
 
+Frame* FrameTree::parent(bool checkForDisconnectedFrame) const 
+{ 
+    if (checkForDisconnectedFrame && m_thisFrame->isDisconnected())
+        return 0;
+    return m_parent;
+}
+
 void FrameTree::appendChild(PassRefPtr<Frame> child)
 {
     ASSERT(child->page() == m_thisFrame->page());
 void FrameTree::appendChild(PassRefPtr<Frame> child)
 {
     ASSERT(child->page() == m_thisFrame->page());
@@ -289,14 +296,14 @@ Frame* FrameTree::deepLastChild() const
     return result;
 }
 
     return result;
 }
 
-Frame* FrameTree::top() const
+Frame* FrameTree::top(bool checkForDisconnectedFrame) const
 {
 {
-    if (Page* page = m_thisFrame->page())
-        return page->mainFrame();
-
     Frame* frame = m_thisFrame;
     Frame* frame = m_thisFrame;
-    while (Frame* parent = frame->tree()->parent())
+    for (Frame* parent = m_thisFrame; parent; parent = parent->tree()->parent()) {
         frame = parent;
         frame = parent;
+        if (checkForDisconnectedFrame && frame->isDisconnected())
+            return frame;
+    }
     return frame;
 }
 
     return frame;
 }