Title: [89440] trunk/Source
Revision
89440
Author
[email protected]
Date
2011-06-22 09:45:47 -0700 (Wed, 22 Jun 2011)

Log Message

2011-06-22  Ryosuke Niwa  <[email protected]>

        Reviewed by Darin Adler.

        Make instantiation of legacy editing position more explicit
        https://bugs.webkit.org/show_bug.cgi?id=63037

        Create new positions since we can't create a legacy editing position outside of WebCore anymore.

        * WebView/WebFrame.mm:
        (-[WebFrame _smartDeleteRangeForProposedRange:]): Calls createLegacyEditingPosition.
        (-[WebFrame _smartInsertForString:replacingRange:beforeString:afterString:]): Ditto.
2011-06-22  Ryosuke Niwa  <[email protected]>

        Reviewed by Darin Adler.

        Make instantiation of legacy editing position more explicit
        https://bugs.webkit.org/show_bug.cgi?id=63037

        Replaced the constructor of Position class that used to instantiate a legacy editing position
        by a function called createLegacyEditingPosition.

        * WebCore.exp.in: Removed the constructor from the list.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData): Calls createLegacyEditingPosition.
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): No longer uses Positions to instantiate a range.
        * dom/Position.cpp:
        (WebCore::Position::Position): New constructor takes LegacyEditingOffset, which can only be instantiated
        by createLegacyEditingPosition.
        (WebCore::Position::previous): Calls createLegacyEditingPosition.
        (WebCore::Position::next): Ditto.
        (WebCore::Position::upstream): Ditto.
        (WebCore::Position::downstream): Ditto.
        * dom/Position.h: Added new Position::LegacyEditingOffset class to hide the legacy constructor from the world.
        (WebCore::Position::LegacyEditingOffset::value): Added.
        (WebCore::Position::LegacyEditingOffset::LegacyEditingOffset): Added.
        (WebCore::createLegacyEditingPosition): Added.
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position): Calls createLegacyEditingPosition.
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::toPosition): Ditto.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::performTrivialReplace): Instantiates new Position instead of old one; this is always
        safe since the anchor node is always a text node.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate): Calls createLegacyEditingPosition.
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate): Ditto.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::renderedText): Ditto.
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): Ditto.
        (WebCore::previousLinePosition): Ditto.
        (WebCore::nextLinePosition): Ditto.
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse): Ditto.
        (WebCore::DOMSelection::setBaseAndExtent): Ditto.
        (WebCore::DOMSelection::setPosition): Ditto.
        (WebCore::DOMSelection::extend): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForBox): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint): Calls Position() instead of Position(0, 0).
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition): Calls createLegacyEditingPosition.s

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (89439 => 89440)


--- trunk/Source/WebCore/ChangeLog	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/ChangeLog	2011-06-22 16:45:47 UTC (rev 89440)
@@ -1,3 +1,57 @@
+2011-06-22  Ryosuke Niwa  <[email protected]>
+
+        Reviewed by Darin Adler.
+
+        Make instantiation of legacy editing position more explicit
+        https://bugs.webkit.org/show_bug.cgi?id=63037
+
+        Replaced the constructor of Position class that used to instantiate a legacy editing position
+        by a function called createLegacyEditingPosition.
+
+        * WebCore.exp.in: Removed the constructor from the list.
+        * accessibility/AXObjectCache.cpp:
+        (WebCore::AXObjectCache::visiblePositionForTextMarkerData): Calls createLegacyEditingPosition.
+        * accessibility/gtk/AXObjectCacheAtk.cpp:
+        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): No longer uses Positions to instantiate a range.
+        * dom/Position.cpp:
+        (WebCore::Position::Position): New constructor takes LegacyEditingOffset, which can only be instantiated
+        by createLegacyEditingPosition.
+        (WebCore::Position::previous): Calls createLegacyEditingPosition.
+        (WebCore::Position::next): Ditto.
+        (WebCore::Position::upstream): Ditto.
+        (WebCore::Position::downstream): Ditto.
+        * dom/Position.h: Added new Position::LegacyEditingOffset class to hide the legacy constructor from the world.
+        (WebCore::Position::LegacyEditingOffset::value): Added.
+        (WebCore::Position::LegacyEditingOffset::LegacyEditingOffset): Added.
+        (WebCore::createLegacyEditingPosition): Added.
+        * dom/PositionIterator.cpp:
+        (WebCore::PositionIterator::operator Position): Calls createLegacyEditingPosition.
+        * dom/RangeBoundaryPoint.h:
+        (WebCore::RangeBoundaryPoint::toPosition): Ditto.
+        * editing/InsertTextCommand.cpp:
+        (WebCore::InsertTextCommand::performTrivialReplace): Instantiates new Position instead of old one; this is always
+        safe since the anchor node is always a text node.
+        * editing/VisiblePosition.cpp:
+        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate): Calls createLegacyEditingPosition.
+        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate): Ditto.
+        * editing/markup.cpp:
+        (WebCore::StyledMarkupAccumulator::renderedText): Ditto.
+        * editing/visible_units.cpp:
+        (WebCore::previousBoundary): Ditto.
+        (WebCore::previousLinePosition): Ditto.
+        (WebCore::nextLinePosition): Ditto.
+        * page/DOMSelection.cpp:
+        (WebCore::DOMSelection::collapse): Ditto.
+        (WebCore::DOMSelection::setBaseAndExtent): Ditto.
+        (WebCore::DOMSelection::setPosition): Ditto.
+        (WebCore::DOMSelection::extend): Ditto.
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::positionForBox): Ditto.
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::positionForPoint): Calls Position() instead of Position(0, 0).
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::createVisiblePosition): Calls createLegacyEditingPosition.s
+
 2011-06-22  Pavel Feldman  <[email protected]>
 
         Reviewed by Yury Semikhatsky.

Modified: trunk/Source/WebCore/WebCore.exp.in (89439 => 89440)


--- trunk/Source/WebCore/WebCore.exp.in	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/WebCore.exp.in	2011-06-22 16:45:47 UTC (rev 89440)
@@ -849,7 +849,6 @@
 __ZN7WebCore8Gradient12addColorStopEfRKNS_5ColorE
 __ZN7WebCore8GradientC1ERKNS_10FloatPointES3_
 __ZN7WebCore8IntPointC1ERK8_NSPoint
-__ZN7WebCore8PositionC1EN3WTF10PassRefPtrINS_4NodeEEEi
 __ZN7WebCore8PositionC1EN3WTF10PassRefPtrINS_4NodeEEEiNS0_10AnchorTypeE
 __ZN7WebCore8Settings14setJavaEnabledEb
 __ZN7WebCore8Settings15setWebGLEnabledEb

Modified: trunk/Source/WebCore/accessibility/AXObjectCache.cpp (89439 => 89440)


--- trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -581,7 +581,7 @@
         return VisiblePosition();
     
     // FIXME: Accessability should make it clear these are DOM-compliant offsets or store Position objects.
-    VisiblePosition visiblePos = VisiblePosition(Position(textMarkerData.node, textMarkerData.offset), textMarkerData.affinity);
+    VisiblePosition visiblePos = VisiblePosition(createLegacyEditingPosition(textMarkerData.node, textMarkerData.offset), textMarkerData.affinity);
     Position deepPos = visiblePos.deepEquivalent();
     if (deepPos.isNull())
         return VisiblePosition();

Modified: trunk/Source/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp (89439 => 89440)


--- trunk/Source/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -187,7 +187,7 @@
         return;
 
     Node* node = object->node();
-    RefPtr<Range> range = Range::create(node->document(),  Position(node->parentNode(), 0), Position(node, 0));
+    RefPtr<Range> range = Range::create(node->document(), node->parentNode(), 0, node, 0);
     emitTextChanged(object, textChange, offset + TextIterator::rangeLength(range.get()), count);
 }
 

Modified: trunk/Source/WebCore/dom/Position.cpp (89439 => 89440)


--- trunk/Source/WebCore/dom/Position.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/dom/Position.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -74,9 +74,9 @@
     return 0;
 }
 
-Position::Position(PassRefPtr<Node> anchorNode, int offset)
+Position::Position(PassRefPtr<Node> anchorNode, LegacyEditingOffset offset)
     : m_anchorNode(anchorNode)
-    , m_offset(offset)
+    , m_offset(offset.value())
     , m_anchorType(anchorTypeForLegacyEditingPosition(m_anchorNode.get(), m_offset))
     , m_isLegacyEditingPosition(true)
 {
@@ -265,11 +265,11 @@
         //      Going from 1 to 0 is correct.
         switch (moveType) {
         case CodePoint:
-            return Position(n, o - 1);
+            return createLegacyEditingPosition(n, o - 1);
         case Character:
-            return Position(n, uncheckedPreviousOffset(n, o));
+            return createLegacyEditingPosition(n, uncheckedPreviousOffset(n, o));
         case BackwardDeletion:
-            return Position(n, uncheckedPreviousOffsetForBackwardDeletion(n, o));
+            return createLegacyEditingPosition(n, uncheckedPreviousOffsetForBackwardDeletion(n, o));
         }
     }
 
@@ -277,7 +277,7 @@
     if (!parent)
         return *this;
 
-    return Position(parent, n->nodeIndex());
+    return createLegacyEditingPosition(parent, n->nodeIndex());
 }
 
 Position Position::next(PositionMoveType moveType) const
@@ -302,14 +302,14 @@
         //      Going forward one character at a time is correct.
         //   2) The new offset is a bogus offset like (<br>, 1), and there is no child.
         //      Going from 0 to 1 is correct.
-        return Position(n, (moveType == Character) ? uncheckedNextOffset(n, o) : o + 1);
+        return createLegacyEditingPosition(n, (moveType == Character) ? uncheckedNextOffset(n, o) : o + 1);
     }
 
     ContainerNode* parent = n->nonShadowBoundaryParentNode();
     if (!parent)
         return *this;
 
-    return Position(parent, n->nodeIndex() + 1);
+    return createLegacyEditingPosition(parent, n->nodeIndex() + 1);
 }
 
 int Position::uncheckedPreviousOffset(const Node* n, int current)
@@ -529,7 +529,7 @@
     // iterate backward from there, looking for a qualified position
     Node* boundary = enclosingVisualBoundary(startNode);
     // FIXME: PositionIterator should respect Before and After positions.
-    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? Position(m_anchorNode, caretMaxOffset(m_anchorNode.get())) : *this;
+    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? createLegacyEditingPosition(m_anchorNode.get(), caretMaxOffset(m_anchorNode.get())) : *this;
     PositionIterator currentPos = lastVisible;
     bool startEditable = startNode->rendererIsEditable();
     Node* lastNode = startNode;
@@ -589,7 +589,7 @@
                 // render tree which can have a different length due to case transformation.
                 // Until we resolve that, disable this so we can run the layout tests!
                 //ASSERT(currentOffset >= renderer->caretMaxOffset());
-                return Position(currentNode, renderer->caretMaxOffset());
+                return createLegacyEditingPosition(currentNode, renderer->caretMaxOffset());
             }
 
             unsigned textOffset = currentPos.offsetInLeafNode();
@@ -651,7 +651,7 @@
     // iterate forward from there, looking for a qualified position
     Node* boundary = enclosingVisualBoundary(startNode);
     // FIXME: PositionIterator should respect Before and After positions.
-    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? Position(m_anchorNode, caretMaxOffset(m_anchorNode.get())) : *this;
+    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? createLegacyEditingPosition(m_anchorNode.get(), caretMaxOffset(m_anchorNode.get())) : *this;
     PositionIterator currentPos = lastVisible;
     bool startEditable = startNode->rendererIsEditable();
     Node* lastNode = startNode;
@@ -704,7 +704,7 @@
         // Return position before tables and nodes which have content that can be ignored.
         if (editingIgnoresContent(currentNode) || isTableElement(currentNode)) {
             if (currentPos.offsetInLeafNode() <= renderer->caretMinOffset())
-                return Position(currentNode, renderer->caretMinOffset());
+                return createLegacyEditingPosition(currentNode, renderer->caretMinOffset());
             continue;
         }
 
@@ -712,7 +712,7 @@
         if (renderer->isText() && toRenderText(renderer)->firstTextBox()) {
             if (currentNode != startNode) {
                 ASSERT(currentPos.atStartOfNode());
-                return Position(currentNode, renderer->caretMinOffset());
+                return createLegacyEditingPosition(currentNode, renderer->caretMinOffset());
             }
 
             unsigned textOffset = currentPos.offsetInLeafNode();

Modified: trunk/Source/WebCore/dom/Position.h (89439 => 89440)


--- trunk/Source/WebCore/dom/Position.h	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/dom/Position.h	2011-06-22 16:45:47 UTC (rev 89440)
@@ -65,8 +65,19 @@
     }
 
     // For creating legacy editing positions: (Anchor type will be determined from editingIgnoresContent(node))
-    Position(PassRefPtr<Node> anchorNode, int offset);
+    class LegacyEditingOffset {
+    public:
+        int value() const { return m_offset; }
 
+    private:
+        explicit LegacyEditingOffset(int offset) : m_offset(offset) { }
+
+        friend Position createLegacyEditingPosition(PassRefPtr<Node>, int offset);
+
+        int m_offset;
+    };
+    Position(PassRefPtr<Node> anchorNode, LegacyEditingOffset);
+
     // For creating before/after positions:
     Position(PassRefPtr<Node> anchorNode, AnchorType);
     // For creating offset positions:
@@ -193,6 +204,11 @@
     bool m_isLegacyEditingPosition : 1;
 };
 
+inline Position createLegacyEditingPosition(PassRefPtr<Node> node, int offset)
+{
+    return Position(node, Position::LegacyEditingOffset(offset));
+}
+
 inline bool operator==(const Position& a, const Position& b)
 {
     // FIXME: In <div><img></div> [div, 0] != [img, 0] even though most of the

Modified: trunk/Source/WebCore/dom/PositionIterator.cpp (89439 => 89440)


--- trunk/Source/WebCore/dom/PositionIterator.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/dom/PositionIterator.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -46,7 +46,7 @@
     }
     if (m_anchorNode->hasChildNodes())
         return lastPositionInOrAfterNode(m_anchorNode);
-    return Position(m_anchorNode, m_offsetInAnchor);
+    return createLegacyEditingPosition(m_anchorNode, m_offsetInAnchor);
 }
 
 void PositionIterator::increment()

Modified: trunk/Source/WebCore/dom/RangeBoundaryPoint.h (89439 => 89440)


--- trunk/Source/WebCore/dom/RangeBoundaryPoint.h	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/dom/RangeBoundaryPoint.h	2011-06-22 16:45:47 UTC (rev 89440)
@@ -92,7 +92,7 @@
 inline const Position RangeBoundaryPoint::toPosition() const
 {
     ensureOffsetIsValid();
-    return Position(m_containerNode.get(), m_offsetInContainer);
+    return createLegacyEditingPosition(m_containerNode.get(), m_offsetInContainer);
 }
 
 inline int RangeBoundaryPoint::offset() const

Modified: trunk/Source/WebCore/editing/InsertTextCommand.cpp (89439 => 89440)


--- trunk/Source/WebCore/editing/InsertTextCommand.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/editing/InsertTextCommand.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -87,7 +87,7 @@
 
     replaceTextInNode(static_cast<Text*>(start.containerNode()), start.offsetInContainerNode(), end.offsetInContainerNode() - start.offsetInContainerNode(), text);
 
-    Position endPosition(start.containerNode(), start.offsetInContainerNode() + text.length());
+    Position endPosition(start.containerNode(), start.offsetInContainerNode() + text.length(), Position::PositionIsOffsetInAnchor);
 
     // We could have inserted a part of composed character sequence,
     // so we are basically treating ending selection as a range to avoid validation.

Modified: trunk/Source/WebCore/editing/VisiblePosition.cpp (89439 => 89440)


--- trunk/Source/WebCore/editing/VisiblePosition.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/editing/VisiblePosition.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -230,7 +230,7 @@
             break;
         }
 
-        p = Position(renderer->node(), offset);
+        p = createLegacyEditingPosition(renderer->node(), offset);
 
         if ((p.isCandidate() && p.downstream() != downstreamStart) || p.atStartOfTree() || p.atEndOfTree())
             return p;
@@ -382,7 +382,7 @@
             break;
         }
 
-        p = Position(renderer->node(), offset);
+        p = createLegacyEditingPosition(renderer->node(), offset);
 
         if ((p.isCandidate() && p.downstream() != downstreamStart) || p.atStartOfTree() || p.atEndOfTree())
             return p;

Modified: trunk/Source/WebCore/editing/markup.cpp (89439 => 89440)


--- trunk/Source/WebCore/editing/markup.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/editing/markup.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -219,8 +219,8 @@
     if (range && node == range->endContainer(ec))
         endOffset = range->endOffset(ec);
 
-    Position start(const_cast<Node*>(node), startOffset);
-    Position end(const_cast<Node*>(node), endOffset);
+    Position start = createLegacyEditingPosition(const_cast<Node*>(node), startOffset);
+    Position end = createLegacyEditingPosition(const_cast<Node*>(node), endOffset);
     return plainText(Range::create(node->document(), start, end).get());
 }
 

Modified: trunk/Source/WebCore/editing/visible_units.cpp (89439 => 89440)


--- trunk/Source/WebCore/editing/visible_units.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/editing/visible_units.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -59,7 +59,7 @@
         return VisiblePosition();
 
     Document* d = boundary->document();
-    Position start = Position(boundary, 0).parentAnchoredEquivalent();
+    Position start = createLegacyEditingPosition(boundary, 0).parentAnchoredEquivalent();
     Position end = pos.parentAnchoredEquivalent();
     RefPtr<Range> searchRange = Range::create(d);
     
@@ -123,7 +123,7 @@
     Node* node = it.range()->startContainer(ec);
     if ((node->isTextNode() && static_cast<int>(next) <= node->maxCharacterOffset()) || (node->renderer() && node->renderer()->isBR() && !next))
         // The next variable contains a usable index into a text node
-        return VisiblePosition(Position(node, next), DOWNSTREAM);
+        return VisiblePosition(createLegacyEditingPosition(node, next), DOWNSTREAM);
 
     // Use the character iterator to translate the next value into a DOM position.
     BackwardsCharacterIterator charIt(searchRange.get());
@@ -555,12 +555,12 @@
         while (n) {
             if (highestEditableRoot(firstPositionInOrBeforeNode(n)) != highestRoot)
                 break;
-            Position pos(n, caretMinOffset(n));
+            Position pos = createLegacyEditingPosition(n, caretMinOffset(n));
             if (pos.isCandidate()) {
                 RenderObject* o = n->renderer();
                 ASSERT(o);
                 if (canHaveCursor(o)) {
-                    Position maxPos(n, caretMaxOffset(n));
+                    Position maxPos = createLegacyEditingPosition(n, caretMaxOffset(n));
                     maxPos.getInlineBoxAndOffset(DOWNSTREAM, box, ignoredCaretOffset);
                     if (box) {
                         // previous root line box found
@@ -660,7 +660,7 @@
         while (n) {
             if (highestEditableRoot(firstPositionInOrBeforeNode(n)) != highestRoot)
                 break;
-            Position pos(n, caretMinOffset(n));
+            Position pos = createLegacyEditingPosition(n, caretMinOffset(n));
             if (pos.isCandidate()) {
                 ASSERT(n->renderer());
                 pos.getInlineBoxAndOffset(DOWNSTREAM, box, ignoredCaretOffset);

Modified: trunk/Source/WebCore/page/DOMSelection.cpp (89439 => 89440)


--- trunk/Source/WebCore/page/DOMSelection.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/page/DOMSelection.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -213,7 +213,7 @@
         return;
 
     // FIXME: Eliminate legacy editing positions
-    m_frame->selection()->moveTo(VisiblePosition(Position(node, offset), DOWNSTREAM));
+    m_frame->selection()->moveTo(VisiblePosition(createLegacyEditingPosition(node, offset), DOWNSTREAM));
 }
 
 void DOMSelection::collapseToEnd(ExceptionCode& ec)
@@ -267,8 +267,8 @@
         return;
 
     // FIXME: Eliminate legacy editing positions
-    VisiblePosition visibleBase = VisiblePosition(Position(baseNode, baseOffset), DOWNSTREAM);
-    VisiblePosition visibleExtent = VisiblePosition(Position(extentNode, extentOffset), DOWNSTREAM);
+    VisiblePosition visibleBase = VisiblePosition(createLegacyEditingPosition(baseNode, baseOffset), DOWNSTREAM);
+    VisiblePosition visibleExtent = VisiblePosition(createLegacyEditingPosition(extentNode, extentOffset), DOWNSTREAM);
 
     m_frame->selection()->moveTo(visibleBase, visibleExtent);
 }
@@ -286,7 +286,7 @@
         return;
 
     // FIXME: Eliminate legacy editing positions
-    m_frame->selection()->moveTo(VisiblePosition(Position(node, offset), DOWNSTREAM));
+    m_frame->selection()->moveTo(VisiblePosition(createLegacyEditingPosition(node, offset), DOWNSTREAM));
 }
 
 void DOMSelection::modify(const String& alterString, const String& directionString, const String& granularityString)
@@ -360,7 +360,7 @@
         return;
 
     // FIXME: Eliminate legacy editing positions
-    m_frame->selection()->setExtent(VisiblePosition(Position(node, offset), DOWNSTREAM));
+    m_frame->selection()->setExtent(VisiblePosition(createLegacyEditingPosition(node, offset), DOWNSTREAM));
 }
 
 PassRefPtr<Range> DOMSelection::getRangeAt(int index, ExceptionCode& ec)

Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (89439 => 89440)


--- trunk/Source/WebCore/rendering/RenderBlock.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -4090,13 +4090,13 @@
         return Position();
 
     if (!box->renderer()->node())
-        return Position(node(), start ? caretMinOffset() : caretMaxOffset());
+        return createLegacyEditingPosition(node(), start ? caretMinOffset() : caretMaxOffset());
 
     if (!box->isInlineTextBox())
-        return Position(box->renderer()->node(), start ? box->renderer()->caretMinOffset() : box->renderer()->caretMaxOffset());
+        return createLegacyEditingPosition(box->renderer()->node(), start ? box->renderer()->caretMinOffset() : box->renderer()->caretMaxOffset());
 
     InlineTextBox *textBox = static_cast<InlineTextBox *>(box);
-    return Position(box->renderer()->node(), start ? textBox->start() : textBox->start() + textBox->len());
+    return createLegacyEditingPosition(box->renderer()->node(), start ? textBox->start() : textBox->start() + textBox->len());
 }
 
 // FIXME: This function should go on RenderObject as an instance method. Then

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (89439 => 89440)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -3097,7 +3097,7 @@
 {
     // no children...return this render object's element, if there is one, and offset 0
     if (!firstChild())
-        return createVisiblePosition(node() ? firstPositionInOrBeforeNode(node()) : Position(0, 0));
+        return createVisiblePosition(node() ? firstPositionInOrBeforeNode(node()) : Position());
 
     int xPos = point.x();
     int yPos = point.y();

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (89439 => 89440)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2011-06-22 16:45:47 UTC (rev 89440)
@@ -2520,7 +2520,7 @@
     if (Node* node = this->node()) {
         if (!node->rendererIsEditable()) {
             // If it can be found, we prefer a visually equivalent position that is editable. 
-            Position position(node, offset);
+            Position position = createLegacyEditingPosition(node, offset);
             Position candidate = position.downstream(CanCrossEditingBoundary);
             if (candidate.deprecatedNode()->rendererIsEditable())
                 return VisiblePosition(candidate, affinity);
@@ -2529,7 +2529,7 @@
                 return VisiblePosition(candidate, affinity);
         }
         // FIXME: Eliminate legacy editing positions
-        return VisiblePosition(Position(node, offset), affinity);
+        return VisiblePosition(createLegacyEditingPosition(node, offset), affinity);
     }
 
     // We don't want to cross the boundary between editable and non-editable

Modified: trunk/Source/WebKit/mac/ChangeLog (89439 => 89440)


--- trunk/Source/WebKit/mac/ChangeLog	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebKit/mac/ChangeLog	2011-06-22 16:45:47 UTC (rev 89440)
@@ -1,3 +1,16 @@
+2011-06-22  Ryosuke Niwa  <[email protected]>
+
+        Reviewed by Darin Adler.
+
+        Make instantiation of legacy editing position more explicit
+        https://bugs.webkit.org/show_bug.cgi?id=63037
+
+        Create new positions since we can't create a legacy editing position outside of WebCore anymore.
+
+        * WebView/WebFrame.mm:
+        (-[WebFrame _smartDeleteRangeForProposedRange:]): Calls createLegacyEditingPosition.
+        (-[WebFrame _smartInsertForString:replacingRange:beforeString:afterString:]): Ditto.
+
 2011-06-20  Dimitri Glazkov  <[email protected]>
 
         Reviewed by Kent Tamura.

Modified: trunk/Source/WebKit/mac/WebView/WebFrame.mm (89439 => 89440)


--- trunk/Source/WebKit/mac/WebView/WebFrame.mm	2011-06-22 16:24:52 UTC (rev 89439)
+++ trunk/Source/WebKit/mac/WebView/WebFrame.mm	2011-06-22 16:45:47 UTC (rev 89440)
@@ -740,8 +740,8 @@
     
     _private->coreFrame->document()->updateLayoutIgnorePendingStylesheets();
 
-    Position start(startContainer, [proposedRange startOffset]);
-    Position end(endContainer, [proposedRange endOffset]);
+    Position start = Position(startContainer, [proposedRange startOffset], Position::PositionIsOffsetInAnchor);
+    Position end = Position(endContainer, [proposedRange endOffset], Position::PositionIsOffsetInAnchor);
     Position newStart = start.upstream().leadingWhitespacePosition(DOWNSTREAM, true);
     if (newStart.isNull())
         newStart = start;
@@ -1104,8 +1104,8 @@
     Node *startContainer = core([rangeToReplace startContainer]);
     Node *endContainer = core([rangeToReplace endContainer]);
 
-    Position startPos(startContainer, [rangeToReplace startOffset]);
-    Position endPos(endContainer, [rangeToReplace endOffset]);
+    Position startPos(startContainer, [rangeToReplace startOffset], Position::PositionIsOffsetInAnchor);
+    Position endPos(endContainer, [rangeToReplace endOffset], Position::PositionIsOffsetInAnchor);
 
     VisiblePosition startVisiblePos = VisiblePosition(startPos, VP_DEFAULT_AFFINITY);
     VisiblePosition endVisiblePos = VisiblePosition(endPos, VP_DEFAULT_AFFINITY);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to