Modified: trunk/Source/WebCore/ChangeLog (161702 => 161703)
--- trunk/Source/WebCore/ChangeLog 2014-01-11 01:09:58 UTC (rev 161702)
+++ trunk/Source/WebCore/ChangeLog 2014-01-11 01:19:15 UTC (rev 161703)
@@ -1,3 +1,30 @@
+2014-01-10 Anders Carlsson <[email protected]>
+
+ CTTE FrameTree
+ https://bugs.webkit.org/show_bug.cgi?id=126795
+
+ Reviewed by Tim Horton.
+
+ * page/Frame.cpp:
+ (WebCore::Frame::Frame):
+ * page/FrameTree.cpp:
+ (WebCore::FrameTree::transferChild):
+ (WebCore::FrameTree::appendChild):
+ (WebCore::FrameTree::actuallyAppendChild):
+ (WebCore::FrameTree::uniqueChildName):
+ (WebCore::FrameTree::scopedChild):
+ (WebCore::FrameTree::scopedChildCount):
+ (WebCore::FrameTree::child):
+ (WebCore::FrameTree::find):
+ (WebCore::FrameTree::isDescendantOf):
+ (WebCore::FrameTree::traverseNext):
+ (WebCore::FrameTree::traverseNextWithWrap):
+ (WebCore::FrameTree::traversePreviousWithWrap):
+ (WebCore::FrameTree::deepLastChild):
+ (WebCore::FrameTree::top):
+ * page/FrameTree.h:
+ (WebCore::FrameTree::FrameTree):
+
2014-01-10 Simon Fraser <[email protected]>
Fix iOS build.
Modified: trunk/Source/WebCore/page/Frame.cpp (161702 => 161703)
--- trunk/Source/WebCore/page/Frame.cpp 2014-01-11 01:09:58 UTC (rev 161702)
+++ trunk/Source/WebCore/page/Frame.cpp 2014-01-11 01:19:15 UTC (rev 161703)
@@ -162,7 +162,7 @@
: m_mainFrame(ownerElement ? page.mainFrame() : static_cast<MainFrame&>(*this))
, m_page(&page)
, m_settings(&page.settings())
- , m_treeNode(this, parentFromOwnerElement(ownerElement))
+ , m_treeNode(*this, parentFromOwnerElement(ownerElement))
, m_loader(*this, frameLoaderClient)
, m_navigationScheduler(*this)
, m_ownerElement(ownerElement)
Modified: trunk/Source/WebCore/page/FrameTree.cpp (161702 => 161703)
--- trunk/Source/WebCore/page/FrameTree.cpp 2014-01-11 01:09:58 UTC (rev 161702)
+++ trunk/Source/WebCore/page/FrameTree.cpp 2014-01-11 01:19:15 UTC (rev 161703)
@@ -66,14 +66,14 @@
bool FrameTree::transferChild(PassRefPtr<Frame> child)
{
Frame* oldParent = child->tree().parent();
- if (oldParent == m_thisFrame)
+ if (oldParent == &m_thisFrame)
return false; // |child| is already a child of m_thisFrame.
if (oldParent)
oldParent->tree().removeChild(child.get());
- ASSERT(child->page() == m_thisFrame->page());
- child->tree().m_parent = m_thisFrame;
+ ASSERT(child->page() == m_thisFrame.page());
+ child->tree().m_parent = &m_thisFrame;
// We need to ensure that the child still has a unique frame name with respect to its new parent.
child->tree().setName(child->tree().m_name);
@@ -84,14 +84,14 @@
void FrameTree::appendChild(PassRefPtr<Frame> child)
{
- ASSERT(child->page() == m_thisFrame->page());
- child->tree().m_parent = m_thisFrame;
+ ASSERT(child->page() == m_thisFrame.page());
+ child->tree().m_parent = &m_thisFrame;
actuallyAppendChild(child); // Note, on return |child| is null.
}
void FrameTree::actuallyAppendChild(PassRefPtr<Frame> child)
{
- ASSERT(child->tree().m_parent == m_thisFrame);
+ ASSERT(child->tree().m_parent == &m_thisFrame);
Frame* oldLast = m_lastChild;
m_lastChild = child.get();
@@ -145,7 +145,7 @@
// Find the nearest parent that has a frame with a path in it.
Vector<Frame*, 16> chain;
Frame* frame;
- for (frame = m_thisFrame; frame; frame = frame->tree().parent()) {
+ for (frame = &m_thisFrame; frame; frame = frame->tree().parent()) {
if (frame->tree().uniqueName().startsWith(framePathPrefix))
break;
chain.append(frame);
@@ -183,7 +183,7 @@
inline Frame* FrameTree::scopedChild(unsigned index, TreeScope* scope) const
{
if (!scope)
- return 0;
+ return nullptr;
unsigned scopedIndex = 0;
for (Frame* result = firstChild(); result; result = result->tree().nextSibling()) {
@@ -194,19 +194,19 @@
}
}
- return 0;
+ return nullptr;
}
inline Frame* FrameTree::scopedChild(const AtomicString& name, TreeScope* scope) const
{
if (!scope)
- return 0;
+ return nullptr;
for (Frame* child = firstChild(); child; child = child->tree().nextSibling()) {
if (child->tree().uniqueName() == name && inScope(*child, *scope))
return child;
}
- return 0;
+ return nullptr;
}
inline unsigned FrameTree::scopedChildCount(TreeScope* scope) const
@@ -225,18 +225,18 @@
Frame* FrameTree::scopedChild(unsigned index) const
{
- return scopedChild(index, m_thisFrame->document());
+ return scopedChild(index, m_thisFrame.document());
}
Frame* FrameTree::scopedChild(const AtomicString& name) const
{
- return scopedChild(name, m_thisFrame->document());
+ return scopedChild(name, m_thisFrame.document());
}
unsigned FrameTree::scopedChildCount() const
{
if (m_scopedChildCount == invalidCount)
- m_scopedChildCount = scopedChildCount(m_thisFrame->document());
+ m_scopedChildCount = scopedChildCount(m_thisFrame.document());
return m_scopedChildCount;
}
@@ -261,44 +261,43 @@
for (Frame* child = firstChild(); child; child = child->tree().nextSibling())
if (child->tree().uniqueName() == name)
return child;
- return 0;
+ return nullptr;
}
Frame* FrameTree::find(const AtomicString& name) const
{
if (name == "_self" || name == "_current" || name.isEmpty())
- return m_thisFrame;
+ return &m_thisFrame;
if (name == "_top")
return &top();
if (name == "_parent")
- return parent() ? parent() : m_thisFrame;
+ return parent() ? parent() : &m_thisFrame;
// Since "_blank" should never be any frame's name, the following is only an optimization.
if (name == "_blank")
- return 0;
+ return nullptr;
// Search subtree starting with this frame first.
- for (Frame* frame = m_thisFrame; frame; frame = frame->tree().traverseNext(m_thisFrame)) {
+ for (Frame* frame = &m_thisFrame; frame; frame = frame->tree().traverseNext(&m_thisFrame)) {
if (frame->tree().uniqueName() == name)
return frame;
}
// Then the rest of the tree.
- for (Frame* frame = &m_thisFrame->mainFrame(); frame; frame = frame->tree().traverseNext()) {
+ for (Frame* frame = &m_thisFrame.mainFrame(); frame; frame = frame->tree().traverseNext()) {
if (frame->tree().uniqueName() == name)
return frame;
}
// Search the entire tree of each of the other pages in this namespace.
// FIXME: Is random order OK?
- Page* page = m_thisFrame->page();
+ Page* page = m_thisFrame.page();
if (!page)
- return 0;
- const HashSet<Page*>& pages = page->group().pages();
- for (auto it = pages.begin(), end = pages.end(); it != end; ++it) {
- Page* otherPage = *it;
+ return nullptr;
+
+ for (auto* otherPage : page->group().pages()) {
if (otherPage == page)
continue;
for (Frame* frame = &otherPage->mainFrame(); frame; frame = frame->tree().traverseNext()) {
@@ -307,7 +306,7 @@
}
}
- return 0;
+ return nullptr;
}
bool FrameTree::isDescendantOf(const Frame* ancestor) const
@@ -315,10 +314,10 @@
if (!ancestor)
return false;
- if (m_thisFrame->page() != ancestor->page())
+ if (m_thisFrame.page() != ancestor->page())
return false;
- for (Frame* frame = m_thisFrame; frame; frame = frame->tree().parent())
+ for (Frame* frame = &m_thisFrame; frame; frame = frame->tree().parent())
if (frame == ancestor)
return true;
return false;
@@ -332,8 +331,8 @@
return child;
}
- if (m_thisFrame == stayWithin)
- return 0;
+ if (&m_thisFrame == stayWithin)
+ return nullptr;
Frame* sibling = nextSibling();
if (sibling) {
@@ -341,11 +340,11 @@
return sibling;
}
- Frame* frame = m_thisFrame;
+ Frame* frame = &m_thisFrame;
while (!sibling && (!stayWithin || frame->tree().parent() != stayWithin)) {
frame = frame->tree().parent();
if (!frame)
- return 0;
+ return nullptr;
sibling = frame->tree().nextSibling();
}
@@ -354,7 +353,7 @@
return sibling;
}
- return 0;
+ return nullptr;
}
Frame* FrameTree::traverseNextWithWrap(bool wrap) const
@@ -363,9 +362,9 @@
return result;
if (wrap)
- return &m_thisFrame->mainFrame();
+ return &m_thisFrame.mainFrame();
- return 0;
+ return nullptr;
}
Frame* FrameTree::traversePreviousWithWrap(bool wrap) const
@@ -382,12 +381,12 @@
return deepLastChild();
// top view is always the last one in this ordering, so prev is nil without wrap
- return 0;
+ return nullptr;
}
Frame* FrameTree::deepLastChild() const
{
- Frame* result = m_thisFrame;
+ Frame* result = &m_thisFrame;
for (Frame* last = lastChild(); last; last = last->tree().lastChild())
result = last;
@@ -396,8 +395,8 @@
Frame& FrameTree::top() const
{
- Frame* frame = m_thisFrame;
- for (Frame* parent = m_thisFrame; parent; parent = parent->tree().parent())
+ Frame* frame = &m_thisFrame;
+ for (Frame* parent = &m_thisFrame; parent; parent = parent->tree().parent())
frame = parent;
return *frame;
}
Modified: trunk/Source/WebCore/page/FrameTree.h (161702 => 161703)
--- trunk/Source/WebCore/page/FrameTree.h 2014-01-11 01:09:58 UTC (rev 161702)
+++ trunk/Source/WebCore/page/FrameTree.h 2014-01-11 01:19:15 UTC (rev 161703)
@@ -32,7 +32,7 @@
public:
const static unsigned invalidCount = static_cast<unsigned>(-1);
- FrameTree(Frame* thisFrame, Frame* parentFrame)
+ FrameTree(Frame& thisFrame, Frame* parentFrame)
: m_thisFrame(thisFrame)
, m_parent(parentFrame)
, m_previousSibling(0)
@@ -87,7 +87,7 @@
Frame* scopedChild(const AtomicString& name, TreeScope*) const;
unsigned scopedChildCount(TreeScope*) const;
- Frame* m_thisFrame;
+ Frame& m_thisFrame;
Frame* m_parent;
AtomicString m_name; // The actual frame name (may be empty).