Diff
Modified: trunk/Source/WebCore/ChangeLog (162746 => 162747)
--- trunk/Source/WebCore/ChangeLog 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/ChangeLog 2014-01-25 02:32:23 UTC (rev 162747)
@@ -1,3 +1,28 @@
+2014-01-24 Simon Fraser <simon.fra...@apple.com>
+
+ Add typesafe casts for ScrollingTreeNode classes
+ https://bugs.webkit.org/show_bug.cgi?id=127597
+
+ Reviewed by Tim Horton.
+
+ Add a ScrollingNodeType member to ScrollingTreeNodes and
+ use it for type-safe casting.
+
+ * page/scrolling/ScrollingTreeNode.cpp:
+ (WebCore::ScrollingTreeNode::ScrollingTreeNode):
+ * page/scrolling/ScrollingTreeNode.h:
+ (WebCore::ScrollingTreeNode::nodeType):
+ (WebCore::ScrollingTreeNode::scrollingNodeID):
+ * page/scrolling/ScrollingTreeScrollingNode.cpp:
+ (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
+ * page/scrolling/ScrollingTreeScrollingNode.h:
+ * page/scrolling/mac/ScrollingTreeFixedNode.h:
+ * page/scrolling/mac/ScrollingTreeFixedNode.mm:
+ (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
+ * page/scrolling/mac/ScrollingTreeStickyNode.h:
+ * page/scrolling/mac/ScrollingTreeStickyNode.mm:
+ (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode):
+
2014-01-24 Anders Carlsson <ander...@apple.com>
Remove back/forward list related functions from Page
Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.cpp (162746 => 162747)
--- trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.cpp 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.cpp 2014-01-25 02:32:23 UTC (rev 162747)
@@ -32,8 +32,9 @@
namespace WebCore {
-ScrollingTreeNode::ScrollingTreeNode(ScrollingTree& scrollingTree, ScrollingNodeID nodeID)
+ScrollingTreeNode::ScrollingTreeNode(ScrollingTree& scrollingTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
: m_scrollingTree(scrollingTree)
+ , m_nodeType(nodeType)
, m_nodeID(nodeID)
, m_parent(0)
{
Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.h (162746 => 162747)
--- trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.h 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.h 2014-01-25 02:32:23 UTC (rev 162747)
@@ -43,13 +43,14 @@
public:
virtual ~ScrollingTreeNode();
+ ScrollingNodeType nodeType() const { return m_nodeType; }
+ ScrollingNodeID scrollingNodeID() const { return m_nodeID; }
+
virtual void updateBeforeChildren(const ScrollingStateNode&) = 0;
virtual void updateAfterChildren(const ScrollingStateNode&) { }
virtual void parentScrollPositionDidChange(const IntRect& viewportRect, const FloatSize& cumulativeDelta) = 0;
- ScrollingNodeID scrollingNodeID() const { return m_nodeID; }
-
ScrollingTreeNode* parent() const { return m_parent; }
void setParent(ScrollingTreeNode* parent) { m_parent = parent; }
@@ -57,7 +58,7 @@
void removeChild(ScrollingTreeNode*);
protected:
- ScrollingTreeNode(ScrollingTree&, ScrollingNodeID);
+ ScrollingTreeNode(ScrollingTree&, ScrollingNodeType, ScrollingNodeID);
ScrollingTree& scrollingTree() const { return m_scrollingTree; }
typedef Vector<OwnPtr<ScrollingTreeNode>> ScrollingTreeChildrenVector;
@@ -66,11 +67,15 @@
private:
ScrollingTree& m_scrollingTree;
- ScrollingNodeID m_nodeID;
+ const ScrollingNodeType m_nodeType;
+ const ScrollingNodeID m_nodeID;
ScrollingTreeNode* m_parent;
};
+#define SCROLLING_NODE_TYPE_CASTS(ToValueTypeName, predicate) \
+ TYPE_CASTS_BASE(ToValueTypeName, ScrollingTreeNode, value, value->predicate, value.predicate)
+
} // namespace WebCore
#endif // ENABLE(ASYNC_SCROLLING)
Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp (162746 => 162747)
--- trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp 2014-01-25 02:32:23 UTC (rev 162747)
@@ -34,7 +34,7 @@
namespace WebCore {
ScrollingTreeScrollingNode::ScrollingTreeScrollingNode(ScrollingTree& scrollingTree, ScrollingNodeID nodeID)
- : ScrollingTreeNode(scrollingTree, nodeID)
+ : ScrollingTreeNode(scrollingTree, ScrollingNode, nodeID)
, m_frameScaleFactor(1)
, m_headerHeight(0)
, m_footerHeight(0)
Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h (162746 => 162747)
--- trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h 2014-01-25 02:32:23 UTC (rev 162747)
@@ -100,6 +100,8 @@
ScrollBehaviorForFixedElements m_behaviorForFixed;
};
+SCROLLING_NODE_TYPE_CASTS(ScrollingTreeScrollingNode, nodeType() == ScrollingNode);
+
} // namespace WebCore
#endif // ENABLE(ASYNC_SCROLLING)
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h (162746 => 162747)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h 2014-01-25 02:32:23 UTC (rev 162747)
@@ -54,6 +54,8 @@
RetainPtr<CALayer> m_layer;
};
+SCROLLING_NODE_TYPE_CASTS(ScrollingTreeFixedNode, nodeType() == FixedNode);
+
} // namespace WebCore
#endif // ENABLE(ASYNC_SCROLLING)
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm (162746 => 162747)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm 2014-01-25 02:32:23 UTC (rev 162747)
@@ -40,7 +40,7 @@
}
ScrollingTreeFixedNode::ScrollingTreeFixedNode(ScrollingTree& scrollingTree, ScrollingNodeID nodeID)
- : ScrollingTreeNode(scrollingTree, nodeID)
+ : ScrollingTreeNode(scrollingTree, FixedNode, nodeID)
{
}
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h (162746 => 162747)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h 2014-01-25 02:32:23 UTC (rev 162747)
@@ -54,6 +54,8 @@
RetainPtr<CALayer> m_layer;
};
+SCROLLING_NODE_TYPE_CASTS(ScrollingTreeStickyNode, nodeType() == StickyNode);
+
} // namespace WebCore
#endif // ENABLE(ASYNC_SCROLLING)
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm (162746 => 162747)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm 2014-01-25 02:11:39 UTC (rev 162746)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm 2014-01-25 02:32:23 UTC (rev 162747)
@@ -40,7 +40,7 @@
}
ScrollingTreeStickyNode::ScrollingTreeStickyNode(ScrollingTree& scrollingTree, ScrollingNodeID nodeID)
- : ScrollingTreeNode(scrollingTree, nodeID)
+ : ScrollingTreeNode(scrollingTree, StickyNode, nodeID)
{
}