Changeset 199817 in webkit
- Timestamp:
- Apr 21, 2016 9:07:18 AM (8 years ago)
- Location:
- trunk/Source
- Files:
-
- 42 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r199816 r199817 1 2016-04-21 Chris Dumez <cdumez@apple.com> 2 3 Drop [UsePointersEvenForNonNullableObjectArguments] from Range 4 https://bugs.webkit.org/show_bug.cgi?id=156805 5 6 Reviewed by Youenn Fablet. 7 8 No new tests, no web-exposed behavior change. 9 10 * accessibility/AXObjectCache.cpp: 11 (WebCore::AXObjectCache::rangeForNodeContents): 12 (WebCore::characterOffsetsInOrder): 13 (WebCore::setRangeStartOrEndWithCharacterOffset): 14 (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): 15 (WebCore::AXObjectCache::previousBoundary): 16 * accessibility/AccessibilityObject.cpp: 17 (WebCore::AccessibilityObject::selectText): 18 * accessibility/AccessibilityRenderObject.cpp: 19 (WebCore::AccessibilityRenderObject::documentBasedSelectedTextRange): 20 * dom/Node.cpp: 21 (WebCore::Node::textRects): 22 * dom/Range.cpp: 23 (WebCore::Range::Range): 24 (WebCore::Range::setDocument): 25 (WebCore::Range::setStart): 26 (WebCore::Range::setEnd): 27 (WebCore::Range::isPointInRange): 28 (WebCore::Range::comparePoint): 29 (WebCore::Range::compareNode): 30 (WebCore::Range::compareBoundaryPoints): 31 (WebCore::Range::compareBoundaryPointsForBindings): 32 (WebCore::Range::intersectsNode): 33 (WebCore::Range::processContents): 34 (WebCore::Range::insertNode): 35 (WebCore::Range::checkNodeWOffset): 36 (WebCore::Range::setStartAfter): 37 (WebCore::Range::setEndBefore): 38 (WebCore::Range::setEndAfter): 39 (WebCore::Range::selectNode): 40 (WebCore::Range::selectNodeContents): 41 (WebCore::Range::surroundContents): 42 (WebCore::Range::setStartBefore): 43 (WebCore::Range::contains): 44 (WebCore::rangesOverlap): 45 (WebCore::rangeOfContents): 46 (WebCore::boundaryNodeChildrenWillBeRemoved): 47 (WebCore::boundaryTextNodesMerged): 48 (WebCore::boundaryTextNodesSplit): 49 (WebCore::Range::expand): 50 (WebCore::checkForDifferentRootContainer): Deleted. 51 (WebCore::highestAncestorUnderCommonRoot): Deleted. 52 (WebCore::childOfCommonRootBeforeOffset): Deleted. 53 (WebCore::deleteCharacterData): Deleted. 54 (WebCore::Range::toString): Deleted. 55 (WebCore::Range::toHTML): Deleted. 56 (WebCore::Range::text): Deleted. 57 (WebCore::Range::cloneRange): Deleted. 58 (WebCore::Range::absoluteTextRects): Deleted. 59 (WebCore::Range::absoluteTextQuads): Deleted. 60 (WebCore::boundaryNodeChildrenChanged): Deleted. 61 (WebCore::boundaryNodeWillBeRemoved): Deleted. 62 (WebCore::Range::nodeWillBeRemoved): Deleted. 63 (WebCore::boundaryTextRemoved): Deleted. 64 (WebCore::Range::getBoundingClientRect): Deleted. 65 (WebCore::Range::getBorderAndTextQuads): Deleted. 66 * dom/Range.h: 67 * dom/Range.idl: 68 * dom/RangeBoundaryPoint.h: 69 (WebCore::RangeBoundaryPoint::set): 70 (WebCore::RangeBoundaryPoint::setToStartOfNode): 71 (WebCore::RangeBoundaryPoint::setToEndOfNode): 72 * editing/AlternativeTextController.cpp: 73 (WebCore::AlternativeTextController::applyAlternativeTextToRange): 74 * editing/ApplyStyleCommand.cpp: 75 (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle): 76 * editing/Editor.cpp: 77 (WebCore::Editor::advanceToNextMisspelling): 78 (WebCore::Editor::rangeOfString): 79 (WebCore::isFrameInRange): 80 (WebCore::Editor::countMatchesForText): 81 * editing/EditorCommand.cpp: 82 (WebCore::unionDOMRanges): 83 (WebCore::executeDeleteToMark): 84 (WebCore::executeSelectToMark): 85 * editing/FormatBlockCommand.cpp: 86 (WebCore::FormatBlockCommand::formatRange): 87 * editing/FrameSelection.cpp: 88 (WebCore::FrameSelection::respondToNodeModification): 89 * editing/InsertListCommand.cpp: 90 (WebCore::InsertListCommand::doApplyForSingleParagraph): 91 * editing/TextCheckingHelper.cpp: 92 (WebCore::TextCheckingParagraph::offsetTo): 93 * editing/TextIterator.cpp: 94 (WebCore::CharacterIterator::range): 95 (WebCore::BackwardsCharacterIterator::range): 96 (WebCore::TextIterator::rangeFromLocationAndLength): 97 (WebCore::TextIterator::getLocationAndLengthFromRange): 98 (WebCore::findPlainText): 99 * editing/VisiblePosition.cpp: 100 (WebCore::setStart): 101 (WebCore::setEnd): 102 * editing/VisibleSelection.cpp: 103 (WebCore::makeSearchRange): 104 * editing/VisibleUnits.cpp: 105 (WebCore::previousBoundary): 106 (WebCore::nextBoundary): 107 * editing/htmlediting.cpp: 108 (WebCore::visiblePositionForIndexUsingCharacterIterator): 109 (WebCore::isNodeVisiblyContainedWithin): 110 * editing/htmlediting.h: 111 * editing/mac/EditorMac.mm: 112 (WebCore::Editor::adjustedSelectionRange): 113 * page/ContextMenuController.cpp: 114 (WebCore::ContextMenuController::contextMenuItemSelected): 115 * page/DOMSelection.cpp: 116 (WebCore::DOMSelection::addRange): 117 * page/DragController.cpp: 118 (WebCore::selectElement): 119 * page/EventHandler.cpp: 120 (WebCore::EventHandler::dispatchMouseEvent): 121 * page/Page.cpp: 122 (WebCore::Page::findStringMatchingRanges): 123 * page/TextIndicator.cpp: 124 (WebCore::hasNonInlineOrReplacedElements): 125 * rendering/RenderNamedFlowThread.cpp: 126 (WebCore::RenderNamedFlowThread::getRanges): 127 1 128 2016-04-21 Chris Dumez <cdumez@apple.com> 2 129 -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r199809 r199817 1607 1607 RefPtr<Range> range = Range::create(*document); 1608 1608 ExceptionCode ec = 0; 1609 range->selectNodeContents( node, ec);1609 range->selectNodeContents(*node, ec); 1610 1610 return ec ? nullptr : range; 1611 1611 } … … 1636 1636 RefPtr<Range> range1 = AXObjectCache::rangeForNodeContents(node1); 1637 1637 RefPtr<Range> range2 = AXObjectCache::rangeForNodeContents(node2); 1638 return range1->compareBoundaryPoints(Range::START_TO_START, range2.get(), IGNORE_EXCEPTION) <= 0; 1638 1639 return !range2 || range1->compareBoundaryPoints(Range::START_TO_START, *range2, IGNORE_EXCEPTION) <= 0; 1639 1640 } 1640 1641 … … 1664 1665 int offset = characterOffset.startIndex + characterOffset.offset; 1665 1666 Node* node = characterOffset.node; 1667 ASSERT(node); 1666 1668 1667 1669 bool replacedNodeOrBR = isReplacedNodeOrBR(node); … … 1674 1676 node = resetNodeAndOffsetForReplacedNode(node, offset, characterCount); 1675 1677 1678 if (!node) { 1679 ec = TypeError; 1680 return; 1681 } 1682 1676 1683 if (isStart) 1677 range->setStart( node, offset, ec);1684 range->setStart(*node, offset, ec); 1678 1685 else 1679 range->setEnd( node, offset, ec);1686 range->setEnd(*node, offset, ec); 1680 1687 } 1681 1688 … … 1744 1751 bool stayWithinRange = !isStart; 1745 1752 1746 Ref Ptr<Range> copyRange =range;1753 Ref<Range> copyRange = *range; 1747 1754 // Change the start of the range, so the character offset starts from node beginning. 1748 1755 int offset = 0; 1749 Node * node = ©Range->startContainer();1750 if (node ->offsetInCharacters()) {1756 Node& node = copyRange->startContainer(); 1757 if (node.offsetInCharacters()) { 1751 1758 copyRange = Range::create(range->ownerDocument(), &range->startContainer(), range->startOffset(), &range->endContainer(), range->endOffset()); 1752 CharacterOffset nodeStartOffset = traverseToOffsetInRange(rangeForNodeContents( node), 0);1759 CharacterOffset nodeStartOffset = traverseToOffsetInRange(rangeForNodeContents(&node), 0); 1753 1760 offset = std::max(copyRange->startOffset() - nodeStartOffset.startIndex, 0); 1754 1761 copyRange->setStart(node, nodeStartOffset.startIndex); 1755 1762 } 1756 1763 1757 return traverseToOffsetInRange( copyRange, offset, isStart ? TraverseOptionDefault : TraverseOptionToNodeEnd, stayWithinRange);1764 return traverseToOffsetInRange(WTFMove(copyRange), offset, isStart ? TraverseOptionDefault : TraverseOptionToNodeEnd, stayWithinRange); 1758 1765 } 1759 1766 … … 2214 2221 if (requiresContextForWordBoundary(characterBefore(characterOffset))) { 2215 2222 RefPtr<Range> forwardsScanRange(boundary->document().createRange()); 2216 forwardsScanRange->setEndAfter( boundary, ec);2223 forwardsScanRange->setEndAfter(*boundary, ec); 2217 2224 setRangeStartOrEndWithCharacterOffset(forwardsScanRange, characterOffset, true, ec); 2218 2225 suffixLength = suffixLengthForRange(forwardsScanRange, string); -
trunk/Source/WebCore/accessibility/AccessibilityObject.cpp
r199260 r199817 738 738 RefPtr<Range> selectedStringRange = selectionRange(); 739 739 // When starting our search again, make this a zero length range so that search forwards will find this selected range if its appropriate. 740 selectedStringRange->setEnd( &selectedStringRange->startContainer(), selectedStringRange->startOffset());740 selectedStringRange->setEnd(selectedStringRange->startContainer(), selectedStringRange->startOffset()); 741 741 742 742 RefPtr<Range> closestAfterStringRange = nullptr; -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
r199295 r199817 1435 1435 VisibleSelection visibleSelection = selection(); 1436 1436 RefPtr<Range> currentSelectionRange = visibleSelection.toNormalizedRange(); 1437 if (!currentSelectionRange || !currentSelectionRange->intersectsNode( node, IGNORE_EXCEPTION))1437 if (!currentSelectionRange || !currentSelectionRange->intersectsNode(*node, IGNORE_EXCEPTION)) 1438 1438 return PlainTextRange(); 1439 1439 … … 1514 1514 textControl.setSelectionRange(range.start, range.start + range.length); 1515 1515 } else { 1516 VisiblePosition start = visiblePositionForIndexUsingCharacterIterator(node(), range.start); 1517 VisiblePosition end = visiblePositionForIndexUsingCharacterIterator(node(), range.start + range.length); 1516 ASSERT(node()); 1517 VisiblePosition start = visiblePositionForIndexUsingCharacterIterator(*node(), range.start); 1518 VisiblePosition end = visiblePositionForIndexUsingCharacterIterator(*node(), range.start + range.length); 1518 1519 m_renderer->frame().selection().setSelection(VisibleSelection(start, end), FrameSelection::defaultSetSelectionOptions(UserTriggered)); 1519 1520 } … … 1877 1878 return VisiblePosition(); 1878 1879 1879 return visiblePositionForIndexUsingCharacterIterator( node, index);1880 return visiblePositionForIndexUsingCharacterIterator(*node, index); 1880 1881 } 1881 1882 -
trunk/Source/WebCore/accessibility/atk/WebKitAccessibleUtil.cpp
r189182 r199817 162 162 Node* node = coreObject->node(); 163 163 Node* lastDescendant = node->lastDescendant(); 164 return (range->intersectsNode( node, IGNORE_EXCEPTION)164 return (range->intersectsNode(*node, IGNORE_EXCEPTION) 165 165 && (&range->endContainer() != node || range->endOffset()) 166 166 && (&range->startContainer() != lastDescendant || range->startOffset() != lastOffsetInNode(lastDescendant))); -
trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
r199260 r199817 2132 2132 2133 2133 ExceptionCode ec; 2134 testRange->setEnd( &range->endContainer(), range->endOffset(), ec);2134 testRange->setEnd(range->endContainer(), range->endOffset(), ec); 2135 2135 ASSERT(&testRange->startContainer() == scope); 2136 2136 int endPosition = TextIterator::rangeLength(testRange.get()); -
trunk/Source/WebCore/bindings/objc/DOMUIKitExtensions.mm
r188187 r199817 114 114 Position start = frameSelection.selection().start().parentAnchoredEquivalent(); 115 115 Position end = frameSelection.selection().end().parentAnchoredEquivalent(); 116 range->setStart(start.containerNode(), start.offsetInContainerNode(), ignored); 117 range->setEnd(end.containerNode(), end.offsetInContainerNode(), ignored); 116 if (start.containerNode()) 117 range->setStart(*start.containerNode(), start.offsetInContainerNode(), ignored); 118 if (end.containerNode()) 119 range->setEnd(*end.containerNode(), end.offsetInContainerNode(), ignored); 118 120 } 119 121 … … 130 132 Position start = frameSelection.selection().start().parentAnchoredEquivalent(); 131 133 Position end = frameSelection.selection().end().parentAnchoredEquivalent(); 132 range->setStart(start.containerNode(), start.offsetInContainerNode(), ignored); 133 range->setEnd(end.containerNode(), end.offsetInContainerNode(), ignored); 134 if (start.containerNode()) 135 range->setStart(*start.containerNode(), start.offsetInContainerNode(), ignored); 136 if (end.containerNode()) 137 range->setEnd(*end.containerNode(), end.offsetInContainerNode(), ignored); 134 138 } 135 139 -
trunk/Source/WebCore/dom/Node.cpp
r199003 r199817 2315 2315 { 2316 2316 RefPtr<Range> range = Range::create(document()); 2317 range->selectNodeContents(const_cast<Node *>(this), IGNORE_EXCEPTION);2317 range->selectNodeContents(const_cast<Node&>(*this), IGNORE_EXCEPTION); 2318 2318 range->absoluteTextRects(rects); 2319 2319 } -
trunk/Source/WebCore/dom/Range.cpp
r198583 r199817 81 81 } 82 82 83 // FIXME: startContainer and endContainer should probably be Ref<Node>&&. 83 84 inline Range::Range(Document& ownerDocument, PassRefPtr<Node> startContainer, int startOffset, PassRefPtr<Node> endContainer, int endOffset) 84 85 : m_ownerDocument(ownerDocument) … … 94 95 // Simply setting the containers and offsets directly would not do any of the checking 95 96 // that setStart and setEnd do, so we call those functions. 96 setStart(startContainer, startOffset); 97 setEnd(endContainer, endOffset); 97 if (startContainer) 98 setStart(*startContainer, startOffset); 99 if (endContainer) 100 setEnd(*endContainer, endOffset); 98 101 } 99 102 … … 130 133 m_ownerDocument->detachRange(this); 131 134 m_ownerDocument = document; 132 m_start.setToStartOfNode( &document);133 m_end.setToStartOfNode( &document);135 m_start.setToStartOfNode(document); 136 m_end.setToStartOfNode(document); 134 137 m_ownerDocument->attachRange(this); 135 138 } … … 158 161 } 159 162 160 void Range::setStart(PassRefPtr<Node> refNode, int offset, ExceptionCode& ec) 161 { 162 if (!refNode) { 163 ec = TypeError; 164 return; 165 } 166 163 void Range::setStart(Ref<Node>&& refNode, int offset, ExceptionCode& ec) 164 { 167 165 bool didMoveDocument = false; 168 166 if (&refNode->document() != &ownerDocument()) { … … 172 170 173 171 ec = 0; 174 Node* childNode = checkNodeWOffset(refNode .get(), offset, ec);172 Node* childNode = checkNodeWOffset(refNode, offset, ec); 175 173 if (ec) 176 174 return; 177 175 178 m_start.set( refNode, offset, childNode);176 m_start.set(WTFMove(refNode), offset, childNode); 179 177 180 178 if (didMoveDocument || checkForDifferentRootContainer(m_start, m_end)) … … 182 180 } 183 181 184 void Range::setEnd(PassRefPtr<Node> refNode, int offset, ExceptionCode& ec) 185 { 186 if (!refNode) { 187 ec = TypeError; 188 return; 189 } 190 182 void Range::setEnd(Ref<Node>&& refNode, int offset, ExceptionCode& ec) 183 { 191 184 bool didMoveDocument = false; 192 185 if (&refNode->document() != &ownerDocument()) { … … 196 189 197 190 ec = 0; 198 Node* childNode = checkNodeWOffset(refNode .get(), offset, ec);191 Node* childNode = checkNodeWOffset(refNode, offset, ec); 199 192 if (ec) 200 193 return; 201 194 202 m_end.set( refNode, offset, childNode);195 m_end.set(WTFMove(refNode), offset, childNode); 203 196 204 197 if (didMoveDocument || checkForDifferentRootContainer(m_start, m_end)) … … 209 202 { 210 203 Position parentAnchored = start.parentAnchoredEquivalent(); 211 setStart(parentAnchored.containerNode(), parentAnchored.offsetInContainerNode(), ec); 204 if (!parentAnchored.containerNode()) { 205 ec = TypeError; 206 return; 207 } 208 setStart(*parentAnchored.containerNode(), parentAnchored.offsetInContainerNode(), ec); 212 209 } 213 210 … … 215 212 { 216 213 Position parentAnchored = end.parentAnchoredEquivalent(); 217 setEnd(parentAnchored.containerNode(), parentAnchored.offsetInContainerNode(), ec); 214 if (!parentAnchored.containerNode()) { 215 ec = TypeError; 216 return; 217 } 218 setEnd(*parentAnchored.containerNode(), parentAnchored.offsetInContainerNode(), ec); 218 219 } 219 220 … … 226 227 } 227 228 228 bool Range::isPointInRange(Node* refNode, int offset, ExceptionCode& ec) 229 { 230 if (!refNode) { 231 ec = TypeError; 232 return false; 233 } 234 235 if (&refNode->document() != &ownerDocument()) { 229 bool Range::isPointInRange(Node& refNode, int offset, ExceptionCode& ec) 230 { 231 if (&refNode.document() != &ownerDocument()) { 236 232 return false; 237 233 } … … 242 238 // DOM4 spec requires us to check whether refNode and start container have the same root first 243 239 // but we do it in the reverse order to avoid O(n) operation here in common case. 244 if (!commonAncestorContainer( refNode, &startContainer()))240 if (!commonAncestorContainer(&refNode, &startContainer())) 245 241 ec = 0; 246 242 return false; 247 243 } 248 244 249 bool result = compareBoundaryPoints( refNode, offset, &startContainer(), m_start.offset(), ec) >= 0 && !ec250 && compareBoundaryPoints( refNode, offset, &endContainer(), m_end.offset(), ec) <= 0 && !ec;245 bool result = compareBoundaryPoints(&refNode, offset, &startContainer(), m_start.offset(), ec) >= 0 && !ec 246 && compareBoundaryPoints(&refNode, offset, &endContainer(), m_end.offset(), ec) <= 0 && !ec; 251 247 ASSERT(!ec || ec == WRONG_DOCUMENT_ERR); 252 248 ec = 0; … … 254 250 } 255 251 256 short Range::comparePoint(Node *refNode, int offset, ExceptionCode& ec) const252 short Range::comparePoint(Node& refNode, int offset, ExceptionCode& ec) const 257 253 { 258 254 // http://developer.mozilla.org/en/docs/DOM:range.comparePoint 259 255 // This method returns -1, 0 or 1 depending on if the point described by the 260 256 // refNode node and an offset within the node is before, same as, or after the range respectively. 261 262 if (!refNode) { 263 ec = TypeError; 264 return 0; 265 } 266 267 if (&refNode->document() != &ownerDocument()) { 257 if (&refNode.document() != &ownerDocument()) { 268 258 ec = WRONG_DOCUMENT_ERR; 269 259 return 0; … … 275 265 // DOM4 spec requires us to check whether refNode and start container have the same root first 276 266 // but we do it in the reverse order to avoid O(n) operation here in common case. 277 if (!refNode ->inDocument() && !commonAncestorContainer(refNode, &startContainer()))267 if (!refNode.inDocument() && !commonAncestorContainer(&refNode, &startContainer())) 278 268 ec = WRONG_DOCUMENT_ERR; 279 269 return 0; … … 281 271 282 272 // compare to start, and point comes before 283 if (compareBoundaryPoints( refNode, offset, &startContainer(), m_start.offset(), ec) < 0)273 if (compareBoundaryPoints(&refNode, offset, &startContainer(), m_start.offset(), ec) < 0) 284 274 return -1; 285 275 … … 288 278 289 279 // compare to end, and point comes after 290 if (compareBoundaryPoints( refNode, offset, &endContainer(), m_end.offset(), ec) > 0 && !ec)280 if (compareBoundaryPoints(&refNode, offset, &endContainer(), m_end.offset(), ec) > 0 && !ec) 291 281 return 1; 292 282 … … 295 285 } 296 286 297 Range::CompareResults Range::compareNode(Node *refNode, ExceptionCode& ec) const287 Range::CompareResults Range::compareNode(Node& refNode, ExceptionCode& ec) const 298 288 { 299 289 // http://developer.mozilla.org/en/docs/DOM:range.compareNode … … 301 291 // before and after(surrounds), or inside the range, respectively 302 292 303 if (!refNode) { 304 ec = TypeError; 305 return NODE_BEFORE; 306 } 307 308 if (!refNode->inDocument()) { 293 if (!refNode.inDocument()) { 309 294 // Firefox doesn't throw an exception for this case; it returns 0. 310 295 return NODE_BEFORE; 311 296 } 312 297 313 if (&refNode ->document() != &ownerDocument()) {298 if (&refNode.document() != &ownerDocument()) { 314 299 // Firefox doesn't throw an exception for this case; it returns 0. 315 300 return NODE_BEFORE; 316 301 } 317 302 318 ContainerNode* parentNode = refNode ->parentNode();319 unsigned nodeIndex = refNode ->computeNodeIndex();303 ContainerNode* parentNode = refNode.parentNode(); 304 unsigned nodeIndex = refNode.computeNodeIndex(); 320 305 321 306 if (!parentNode) { … … 326 311 } 327 312 328 if (comparePoint(parentNode, nodeIndex, ec) < 0) { // starts before 329 if (comparePoint(parentNode, nodeIndex + 1, ec) > 0) // ends after the range 313 // starts before 314 if (comparePoint(*parentNode, nodeIndex, ec) < 0) { 315 if (comparePoint(*parentNode, nodeIndex + 1, ec) > 0) // ends after the range 330 316 return NODE_BEFORE_AND_AFTER; 331 317 return NODE_BEFORE; // ends before or in the range 332 } else { // starts at or after the range start 333 if (comparePoint(parentNode, nodeIndex + 1, ec) > 0) // ends after the range 334 return NODE_AFTER; 335 return NODE_INSIDE; // ends inside the range 336 } 337 } 338 339 short Range::compareBoundaryPoints(CompareHow how, const Range* sourceRange, ExceptionCode& ec) const 340 { 341 if (!sourceRange) { 342 ec = TypeError; 343 return 0; 344 } 345 318 } 319 // starts at or after the range start 320 if (comparePoint(*parentNode, nodeIndex + 1, ec) > 0) // ends after the range 321 return NODE_AFTER; 322 return NODE_INSIDE; // ends inside the range 323 } 324 325 short Range::compareBoundaryPoints(CompareHow how, const Range& sourceRange, ExceptionCode& ec) const 326 { 346 327 Node* thisCont = commonAncestorContainer(); 347 Node* sourceCont = sourceRange ->commonAncestorContainer();328 Node* sourceCont = sourceRange.commonAncestorContainer(); 348 329 349 330 if (&thisCont->document() != &sourceCont->document()) { … … 365 346 switch (how) { 366 347 case START_TO_START: 367 return compareBoundaryPoints(m_start, sourceRange ->m_start, ec);348 return compareBoundaryPoints(m_start, sourceRange.m_start, ec); 368 349 case START_TO_END: 369 return compareBoundaryPoints(m_end, sourceRange ->m_start, ec);350 return compareBoundaryPoints(m_end, sourceRange.m_start, ec); 370 351 case END_TO_END: 371 return compareBoundaryPoints(m_end, sourceRange ->m_end, ec);352 return compareBoundaryPoints(m_end, sourceRange.m_end, ec); 372 353 case END_TO_START: 373 return compareBoundaryPoints(m_start, sourceRange ->m_end, ec);354 return compareBoundaryPoints(m_start, sourceRange.m_end, ec); 374 355 } 375 356 … … 378 359 } 379 360 380 short Range::compareBoundaryPointsForBindings(unsigned short compareHow, const Range *sourceRange, ExceptionCode& ec) const361 short Range::compareBoundaryPointsForBindings(unsigned short compareHow, const Range& sourceRange, ExceptionCode& ec) const 381 362 { 382 363 if (compareHow > END_TO_START) { … … 496 477 } 497 478 498 bool Range::intersectsNode(Node* refNode, ExceptionCode& ec) const 499 { 500 if (!refNode) { 501 ec = TypeError; 479 bool Range::intersectsNode(Node& refNode, ExceptionCode& ec) const 480 { 481 if (!refNode.inDocument() || &refNode.document() != &ownerDocument()) 502 482 return false; 503 } 504 505 if (!refNode->inDocument() || &refNode->document() != &ownerDocument()) 506 return false; 507 508 ContainerNode* parentNode = refNode->parentNode(); 483 484 ContainerNode* parentNode = refNode.parentNode(); 509 485 if (!parentNode) 510 486 return true; 511 487 512 unsigned nodeIndex = refNode ->computeNodeIndex();488 unsigned nodeIndex = refNode.computeNodeIndex(); 513 489 514 490 // If (parent, offset) is before end and (parent, offset + 1) is after start, return true. 515 491 // Otherwise, return false. 516 short compareFirst = comparePoint( parentNode, nodeIndex, ec);517 short compareSecond = comparePoint( parentNode, nodeIndex + 1, ec);492 short compareFirst = comparePoint(*parentNode, nodeIndex, ec); 493 short compareSecond = comparePoint(*parentNode, nodeIndex + 1, ec); 518 494 519 495 bool isFirstBeforeEnd = m_start == m_end ? compareFirst < 0 : compareFirst <= 0; … … 646 622 if (action == Extract || action == Delete) { 647 623 if (partialStart && commonRoot->contains(partialStart.get())) 648 setStart( partialStart->parentNode(), partialStart->computeNodeIndex() + 1, ec);624 setStart(*partialStart->parentNode(), partialStart->computeNodeIndex() + 1, ec); 649 625 else if (partialEnd && commonRoot->contains(partialEnd.get())) 650 setStart( partialEnd->parentNode(), partialEnd->computeNodeIndex(), ec);626 setStart(*partialEnd->parentNode(), partialEnd->computeNodeIndex(), ec); 651 627 if (ec) 652 628 return nullptr; … … 837 813 } 838 814 839 void Range::insertNode(RefPtr<Node>&& node, ExceptionCode& ec) 840 { 841 if (!node) { 842 ec = TypeError; 843 return; 844 } 845 815 void Range::insertNode(Ref<Node>&& node, ExceptionCode& ec) 816 { 846 817 bool startIsCharacterData = is<CharacterData>(startContainer()); 847 818 if (startIsCharacterData && !startContainer().parentNode()) { … … 860 831 861 832 ec = 0; 862 if (!parent->ensurePreInsertionValidity( *node, referenceNode.get(), ec))833 if (!parent->ensurePreInsertionValidity(node, referenceNode.get(), ec)) 863 834 return; 864 835 … … 870 841 } 871 842 872 if (referenceNode == node )843 if (referenceNode == node.ptr()) 873 844 referenceNode = referenceNode->nextSibling(); 874 845 … … 878 849 879 850 unsigned newOffset = referenceNode ? referenceNode->computeNodeIndex() : parent->countChildNodes(); 880 if (is<DocumentFragment>( *node))881 newOffset += downcast<DocumentFragment>( *node).countChildNodes();851 if (is<DocumentFragment>(node.get())) 852 newOffset += downcast<DocumentFragment>(node.get()).countChildNodes(); 882 853 else 883 854 ++newOffset; 884 855 885 parent->insertBefore( node.releaseNonNull(), referenceNode.get(), ec);856 parent->insertBefore(WTFMove(node), referenceNode.get(), ec); 886 857 if (ec) 887 858 return; 888 859 889 860 if (collapsed()) 890 setEnd( parent.ptr(), newOffset, ec);861 setEnd(WTFMove(parent), newOffset, ec); 891 862 } 892 863 … … 951 922 } 952 923 953 Node* Range::checkNodeWOffset(Node * n, int offset, ExceptionCode& ec) const954 { 955 switch (n ->nodeType()) {924 Node* Range::checkNodeWOffset(Node& node, int offset, ExceptionCode& ec) const 925 { 926 switch (node.nodeType()) { 956 927 case Node::DOCUMENT_TYPE_NODE: 957 928 ec = INVALID_NODE_TYPE_ERR; … … 961 932 case Node::TEXT_NODE: 962 933 case Node::PROCESSING_INSTRUCTION_NODE: 963 if (static_cast<unsigned>(offset) > downcast<CharacterData>( *n).length())934 if (static_cast<unsigned>(offset) > downcast<CharacterData>(node).length()) 964 935 ec = INDEX_SIZE_ERR; 965 936 return nullptr; … … 970 941 if (!offset) 971 942 return nullptr; 972 Node* childBefore = n ->traverseToChildAt(offset - 1);943 Node* childBefore = node.traverseToChildAt(offset - 1); 973 944 if (!childBefore) 974 945 ec = INDEX_SIZE_ERR; … … 985 956 } 986 957 987 void Range::setStartAfter(Node* refNode, ExceptionCode& ec) 988 { 989 if (!refNode) { 990 ec = TypeError; 991 return; 992 } 993 994 if (!refNode->parentNode()) { 958 void Range::setStartAfter(Node& refNode, ExceptionCode& ec) 959 { 960 if (!refNode.parentNode()) { 995 961 ec = INVALID_NODE_TYPE_ERR; 996 962 return; 997 963 } 998 964 999 setStart(refNode->parentNode(), refNode->computeNodeIndex() + 1, ec); 1000 } 1001 1002 void Range::setEndBefore(Node* refNode, ExceptionCode& ec) 1003 { 1004 if (!refNode) { 1005 ec = TypeError; 1006 return; 1007 } 1008 1009 if (!refNode->parentNode()) { 965 setStart(*refNode.parentNode(), refNode.computeNodeIndex() + 1, ec); 966 } 967 968 void Range::setEndBefore(Node& refNode, ExceptionCode& ec) 969 { 970 if (!refNode.parentNode()) { 1010 971 ec = INVALID_NODE_TYPE_ERR; 1011 972 return; 1012 973 } 1013 974 1014 setEnd(refNode->parentNode(), refNode->computeNodeIndex(), ec); 1015 } 1016 1017 void Range::setEndAfter(Node* refNode, ExceptionCode& ec) 1018 { 1019 if (!refNode) { 1020 ec = TypeError; 1021 return; 1022 } 1023 1024 if (!refNode->parentNode()) { 975 setEnd(*refNode.parentNode(), refNode.computeNodeIndex(), ec); 976 } 977 978 void Range::setEndAfter(Node& refNode, ExceptionCode& ec) 979 { 980 if (!refNode.parentNode()) { 1025 981 ec = INVALID_NODE_TYPE_ERR; 1026 982 return; 1027 983 } 1028 984 1029 setEnd(refNode->parentNode(), refNode->computeNodeIndex() + 1, ec); 1030 } 1031 1032 void Range::selectNode(Node* refNode, ExceptionCode& ec) 1033 { 1034 if (!refNode) { 1035 ec = TypeError; 1036 return; 1037 } 1038 1039 if (!refNode->parentNode()) { 985 setEnd(*refNode.parentNode(), refNode.computeNodeIndex() + 1, ec); 986 } 987 988 void Range::selectNode(Node& refNode, ExceptionCode& ec) 989 { 990 if (!refNode.parentNode()) { 1040 991 ec = INVALID_NODE_TYPE_ERR; 1041 992 return; 1042 993 } 1043 994 1044 if (&ownerDocument() != &refNode ->document())1045 setDocument(refNode ->document());1046 1047 unsigned index = refNode ->computeNodeIndex();995 if (&ownerDocument() != &refNode.document()) 996 setDocument(refNode.document()); 997 998 unsigned index = refNode.computeNodeIndex(); 1048 999 ec = 0; 1049 setStart( refNode->parentNode(), index, ec);1000 setStart(*refNode.parentNode(), index, ec); 1050 1001 if (ec) 1051 1002 return; 1052 setEnd(refNode->parentNode(), index + 1, ec); 1053 } 1054 1055 void Range::selectNodeContents(Node* refNode, ExceptionCode& ec) 1056 { 1057 if (!refNode) { 1058 ec = TypeError; 1059 return; 1060 } 1061 1062 if (refNode->isDocumentTypeNode()) { 1003 setEnd(*refNode.parentNode(), index + 1, ec); 1004 } 1005 1006 void Range::selectNodeContents(Node& refNode, ExceptionCode& ec) 1007 { 1008 if (refNode.isDocumentTypeNode()) { 1063 1009 ec = INVALID_NODE_TYPE_ERR; 1064 1010 return; 1065 1011 } 1066 1012 1067 if (&ownerDocument() != &refNode ->document())1068 setDocument(refNode ->document());1013 if (&ownerDocument() != &refNode.document()) 1014 setDocument(refNode.document()); 1069 1015 1070 1016 m_start.setToStartOfNode(refNode); … … 1072 1018 } 1073 1019 1074 void Range::surroundContents(PassRefPtr<Node> passNewParent, ExceptionCode& ec) 1075 { 1076 RefPtr<Node> newParent = passNewParent; 1077 1078 if (!newParent) { 1079 ec = TypeError; 1080 return; 1081 } 1020 void Range::surroundContents(Node& passNewParent, ExceptionCode& ec) 1021 { 1022 Ref<Node> newParent = passNewParent; 1082 1023 1083 1024 // INVALID_STATE_ERR: Raised if the Range partially selects a non-Text node. … … 1134 1075 ec = 0; 1135 1076 while (Node* n = newParent->firstChild()) { 1136 downcast<ContainerNode>( *newParent).removeChild(*n, ec);1077 downcast<ContainerNode>(newParent.get()).removeChild(*n, ec); 1137 1078 if (ec) 1138 1079 return; … … 1147 1088 if (ec) 1148 1089 return; 1149 selectNode(newParent.get(), ec); 1150 } 1151 1152 void Range::setStartBefore(Node* refNode, ExceptionCode& ec) 1153 { 1154 if (!refNode) { 1155 ec = TypeError; 1156 return; 1157 } 1158 1159 if (!refNode->parentNode()) { 1090 selectNode(newParent, ec); 1091 } 1092 1093 void Range::setStartBefore(Node& refNode, ExceptionCode& ec) 1094 { 1095 if (!refNode.parentNode()) { 1160 1096 ec = INVALID_NODE_TYPE_ERR; 1161 1097 return; 1162 1098 } 1163 1099 1164 setStart( refNode->parentNode(), refNode->computeNodeIndex(), ec);1100 setStart(*refNode.parentNode(), refNode.computeNodeIndex(), ec); 1165 1101 } 1166 1102 … … 1540 1476 return false; 1541 1477 1542 short startToStart = compareBoundaryPoints(Range::START_TO_START, &other, ASSERT_NO_EXCEPTION);1478 short startToStart = compareBoundaryPoints(Range::START_TO_START, other, ASSERT_NO_EXCEPTION); 1543 1479 if (startToStart > 0) 1544 1480 return false; 1545 1481 1546 short endToEnd = compareBoundaryPoints(Range::END_TO_END, &other, ASSERT_NO_EXCEPTION);1482 short endToEnd = compareBoundaryPoints(Range::END_TO_END, other, ASSERT_NO_EXCEPTION); 1547 1483 return endToEnd >= 0; 1548 1484 } … … 1576 1512 return false; 1577 1513 1578 short startToStart = a->compareBoundaryPoints(Range::START_TO_START, b, ASSERT_NO_EXCEPTION);1579 short endToEnd = a->compareBoundaryPoints(Range::END_TO_END, b, ASSERT_NO_EXCEPTION);1514 short startToStart = a->compareBoundaryPoints(Range::START_TO_START, *b, ASSERT_NO_EXCEPTION); 1515 short endToEnd = a->compareBoundaryPoints(Range::END_TO_END, *b, ASSERT_NO_EXCEPTION); 1580 1516 1581 1517 // First range contains the second range. … … 1584 1520 1585 1521 // End of first range is inside second range. 1586 if (a->compareBoundaryPoints(Range::START_TO_END, b, ASSERT_NO_EXCEPTION) >= 0 && endToEnd <= 0)1522 if (a->compareBoundaryPoints(Range::START_TO_END, *b, ASSERT_NO_EXCEPTION) >= 0 && endToEnd <= 0) 1587 1523 return true; 1588 1524 1589 1525 // Start of first range is inside second range. 1590 if (startToStart >= 0 && a->compareBoundaryPoints(Range::END_TO_START, b, ASSERT_NO_EXCEPTION) <= 0)1526 if (startToStart >= 0 && a->compareBoundaryPoints(Range::END_TO_START, *b, ASSERT_NO_EXCEPTION) <= 0) 1591 1527 return true; 1592 1528 … … 1598 1534 Ref<Range> range = Range::create(node.document()); 1599 1535 int exception = 0; 1600 range->selectNodeContents( &node, exception);1536 range->selectNodeContents(node, exception); 1601 1537 return range; 1602 1538 } … … 1622 1558 for (Node* nodeToBeRemoved = container.firstChild(); nodeToBeRemoved; nodeToBeRemoved = nodeToBeRemoved->nextSibling()) { 1623 1559 if (boundary.childBefore() == nodeToBeRemoved) { 1624 boundary.setToStartOfNode( &container);1560 boundary.setToStartOfNode(container); 1625 1561 return; 1626 1562 } … … 1628 1564 for (Node* n = boundary.container(); n; n = n->parentNode()) { 1629 1565 if (n == nodeToBeRemoved) { 1630 boundary.setToStartOfNode( &container);1566 boundary.setToStartOfNode(container); 1631 1567 return; 1632 1568 } … … 1708 1644 { 1709 1645 if (boundary.container() == oldNode.node()) 1710 boundary.set( oldNode.node()->previousSibling(), boundary.offset() + offset, 0);1646 boundary.set(*oldNode.node()->previousSibling(), boundary.offset() + offset, 0); 1711 1647 else if (boundary.container() == oldNode.node()->parentNode() && boundary.offset() == oldNode.index()) 1712 boundary.set( oldNode.node()->previousSibling(), offset, 0);1648 boundary.set(*oldNode.node()->previousSibling(), offset, 0); 1713 1649 } 1714 1650 … … 1731 1667 unsigned boundaryOffset = boundary.offset(); 1732 1668 if (boundaryOffset > splitOffset) 1733 boundary.set( oldNode->nextSibling(), boundaryOffset - splitOffset, 0);1669 boundary.set(*oldNode->nextSibling(), boundaryOffset - splitOffset, 0); 1734 1670 return; 1735 1671 } … … 1772 1708 } else 1773 1709 return; 1774 setStart(start.deepEquivalent().containerNode(), start.deepEquivalent().computeOffsetInContainerNode(), ec); 1775 setEnd(end.deepEquivalent().containerNode(), end.deepEquivalent().computeOffsetInContainerNode(), ec); 1710 1711 if (!start.deepEquivalent().containerNode()) { 1712 ec = TypeError; 1713 return; 1714 } 1715 setStart(*start.deepEquivalent().containerNode(), start.deepEquivalent().computeOffsetInContainerNode(), ec); 1716 if (!end.deepEquivalent().containerNode()) { 1717 ec = TypeError; 1718 return; 1719 } 1720 setEnd(*end.deepEquivalent().containerNode(), end.deepEquivalent().computeOffsetInContainerNode(), ec); 1776 1721 } 1777 1722 -
trunk/Source/WebCore/dom/Range.h
r198997 r199817 67 67 Node* commonAncestorContainer() const { return commonAncestorContainer(&startContainer(), &endContainer()); } 68 68 WEBCORE_EXPORT static Node* commonAncestorContainer(Node* containerA, Node* containerB); 69 WEBCORE_EXPORT void setStart( PassRefPtr<Node>container, int offset, ExceptionCode& = ASSERT_NO_EXCEPTION);70 WEBCORE_EXPORT void setEnd( PassRefPtr<Node>container, int offset, ExceptionCode& = ASSERT_NO_EXCEPTION);69 WEBCORE_EXPORT void setStart(Ref<Node>&& container, int offset, ExceptionCode& = ASSERT_NO_EXCEPTION); 70 WEBCORE_EXPORT void setEnd(Ref<Node>&& container, int offset, ExceptionCode& = ASSERT_NO_EXCEPTION); 71 71 WEBCORE_EXPORT void collapse(bool toStart); 72 WEBCORE_EXPORT bool isPointInRange(Node *refNode, int offset, ExceptionCode&);73 short comparePoint(Node *refNode, int offset, ExceptionCode&) const;72 WEBCORE_EXPORT bool isPointInRange(Node& refNode, int offset, ExceptionCode&); 73 short comparePoint(Node& refNode, int offset, ExceptionCode&) const; 74 74 enum CompareResults { NODE_BEFORE, NODE_AFTER, NODE_BEFORE_AND_AFTER, NODE_INSIDE }; 75 CompareResults compareNode(Node *refNode, ExceptionCode&) const;75 CompareResults compareNode(Node& refNode, ExceptionCode&) const; 76 76 enum CompareHow { START_TO_START, START_TO_END, END_TO_END, END_TO_START }; 77 WEBCORE_EXPORT short compareBoundaryPoints(CompareHow, const Range *sourceRange, ExceptionCode&) const;78 short compareBoundaryPointsForBindings(unsigned short compareHow, const Range *sourceRange, ExceptionCode&) const;77 WEBCORE_EXPORT short compareBoundaryPoints(CompareHow, const Range& sourceRange, ExceptionCode&) const; 78 short compareBoundaryPointsForBindings(unsigned short compareHow, const Range& sourceRange, ExceptionCode&) const; 79 79 static short compareBoundaryPoints(Node* containerA, int offsetA, Node* containerB, int offsetB, ExceptionCode&); 80 80 static short compareBoundaryPoints(const RangeBoundaryPoint& boundaryA, const RangeBoundaryPoint& boundaryB, ExceptionCode&); 81 81 WEBCORE_EXPORT bool boundaryPointsValid() const; 82 bool intersectsNode(Node *refNode, ExceptionCode&) const;82 bool intersectsNode(Node& refNode, ExceptionCode&) const; 83 83 void deleteContents(ExceptionCode&); 84 84 RefPtr<DocumentFragment> extractContents(ExceptionCode&); 85 85 RefPtr<DocumentFragment> cloneContents(ExceptionCode&); 86 void insertNode(Ref Ptr<Node>&&, ExceptionCode&);86 void insertNode(Ref<Node>&&, ExceptionCode&); 87 87 String toString() const; 88 88 … … 95 95 WEBCORE_EXPORT Ref<Range> cloneRange() const; 96 96 97 WEBCORE_EXPORT void setStartAfter(Node *, ExceptionCode& = ASSERT_NO_EXCEPTION);98 WEBCORE_EXPORT void setEndBefore(Node *, ExceptionCode& = ASSERT_NO_EXCEPTION);99 WEBCORE_EXPORT void setEndAfter(Node *, ExceptionCode& = ASSERT_NO_EXCEPTION);100 WEBCORE_EXPORT void selectNode(Node *, ExceptionCode& = ASSERT_NO_EXCEPTION);101 WEBCORE_EXPORT void selectNodeContents(Node *, ExceptionCode&);102 void surroundContents( PassRefPtr<Node>, ExceptionCode&);103 WEBCORE_EXPORT void setStartBefore(Node *, ExceptionCode&);97 WEBCORE_EXPORT void setStartAfter(Node&, ExceptionCode& = ASSERT_NO_EXCEPTION); 98 WEBCORE_EXPORT void setEndBefore(Node&, ExceptionCode& = ASSERT_NO_EXCEPTION); 99 WEBCORE_EXPORT void setEndAfter(Node&, ExceptionCode& = ASSERT_NO_EXCEPTION); 100 WEBCORE_EXPORT void selectNode(Node&, ExceptionCode& = ASSERT_NO_EXCEPTION); 101 WEBCORE_EXPORT void selectNodeContents(Node&, ExceptionCode&); 102 void surroundContents(Node&, ExceptionCode&); 103 WEBCORE_EXPORT void setStartBefore(Node&, ExceptionCode&); 104 104 105 105 const Position startPosition() const { return m_start.toPosition(); } … … 160 160 void setDocument(Document&); 161 161 162 Node* checkNodeWOffset(Node *, int offset, ExceptionCode&) const;162 Node* checkNodeWOffset(Node&, int offset, ExceptionCode&) const; 163 163 164 164 enum ActionType { Delete, Extract, Clone }; -
trunk/Source/WebCore/dom/Range.idl
r199264 r199817 23 23 Constructor, 24 24 ConstructorCallWith=Document, 25 UsePointersEvenForNonNullableObjectArguments,26 25 ImplementationLacksVTable, 27 26 ExportMacro=WEBCORE_EXPORT, -
trunk/Source/WebCore/dom/RangeBoundaryPoint.h
r195927 r199817 46 46 void clear(); 47 47 48 void set( PassRefPtr<Node>container, int offset, Node* childBefore);48 void set(Ref<Node>&& container, int offset, Node* childBefore); 49 49 void setOffset(int offset); 50 50 51 51 void setToBeforeChild(Node&); 52 52 void setToAfterChild(Node&); 53 void setToStartOfNode( PassRefPtr<Node>);54 void setToEndOfNode( PassRefPtr<Node>);53 void setToStartOfNode(Ref<Node>&&); 54 void setToEndOfNode(Ref<Node>&&); 55 55 56 56 void childBeforeWillBeRemoved(); … … 117 117 } 118 118 119 inline void RangeBoundaryPoint::set(PassRefPtr<Node> container, int offset, Node* childBefore) 120 { 121 ASSERT(container); 119 inline void RangeBoundaryPoint::set(Ref<Node>&& container, int offset, Node* childBefore) 120 { 122 121 ASSERT(offset >= 0); 123 122 ASSERT(childBefore == (offset ? container->traverseToChildAt(offset - 1) : 0)); 124 m_containerNode = container;123 m_containerNode = WTFMove(container); 125 124 m_offsetInContainer = offset; 126 125 m_childBeforeBoundary = childBefore; … … 152 151 } 153 152 154 inline void RangeBoundaryPoint::setToStartOfNode(PassRefPtr<Node> container) 155 { 156 ASSERT(container); 157 m_containerNode = container; 153 inline void RangeBoundaryPoint::setToStartOfNode(Ref<Node>&& container) 154 { 155 m_containerNode = WTFMove(container); 158 156 m_offsetInContainer = 0; 159 157 m_childBeforeBoundary = nullptr; 160 158 } 161 159 162 inline void RangeBoundaryPoint::setToEndOfNode(PassRefPtr<Node> container) 163 { 164 ASSERT(container); 165 m_containerNode = container; 160 inline void RangeBoundaryPoint::setToEndOfNode(Ref<Node>&& container) 161 { 162 m_containerNode = WTFMove(container); 166 163 if (m_containerNode->offsetInCharacters()) { 167 164 m_offsetInContainer = m_containerNode->maxCharacterOffset(); -
trunk/Source/WebCore/editing/AlternativeTextController.cpp
r199807 r199817 259 259 Position startPositionOfRangeWithAlternative = range->startPosition(); 260 260 ExceptionCode ec = 0; 261 correctionStartOffsetInParagraphAsRange->setEnd(startPositionOfRangeWithAlternative.containerNode(), startPositionOfRangeWithAlternative.computeOffsetInContainerNode(), ec); 261 if (!startPositionOfRangeWithAlternative.containerNode()) 262 return; 263 correctionStartOffsetInParagraphAsRange->setEnd(*startPositionOfRangeWithAlternative.containerNode(), startPositionOfRangeWithAlternative.computeOffsetInContainerNode(), ec); 262 264 if (ec) 263 265 return; -
trunk/Source/WebCore/editing/ApplyStyleCommand.cpp
r194819 r199817 723 723 Element* editableRoot = startNode->rootEditableElement(); 724 724 if (startNode != editableRoot) { 725 while (editableRoot && startNode->parentNode() != editableRoot && isNodeVisiblyContainedWithin( startNode->parentNode(), range.get()))725 while (editableRoot && startNode->parentNode() != editableRoot && isNodeVisiblyContainedWithin(*startNode->parentNode(), range.get())) 726 726 startNode = startNode->parentNode(); 727 727 } -
trunk/Source/WebCore/editing/Editor.cpp
r199030 r199817 420 420 ExceptionCode ec; 421 421 RefPtr<Range> context = document().createRange(); 422 context->selectNodeContents( &element, ec);422 context->selectNodeContents(element, ec); 423 423 424 424 StringBuilder dictationPhrasesBuilder; … … 628 628 629 629 RefPtr<Range> context = document().createRange(); 630 context->selectNodeContents( elem, ec);630 context->selectNodeContents(*elem, ec); 631 631 Ref<DocumentFragment> fragment = createFragmentFromText(*context.get(), text); 632 632 elem->appendChild(WTFMove(fragment), ec); … … 1951 1951 1952 1952 Position rangeCompliantPosition = position.parentAnchoredEquivalent(); 1953 spellingSearchRange->setStart(rangeCompliantPosition.deprecatedNode(), rangeCompliantPosition.deprecatedEditingOffset(), IGNORE_EXCEPTION); 1953 if (rangeCompliantPosition.deprecatedNode()) 1954 spellingSearchRange->setStart(*rangeCompliantPosition.deprecatedNode(), rangeCompliantPosition.deprecatedEditingOffset(), IGNORE_EXCEPTION); 1954 1955 startedWithSelection = false; // won't need to wrap 1955 1956 } … … 1958 1959 Node* topNode = highestEditableRoot(position); 1959 1960 // FIXME: lastOffsetForEditing() is wrong here if editingIgnoresContent(highestEditableRoot()) returns true (e.g. a <table>) 1960 spellingSearchRange->setEnd(topNode, lastOffsetForEditing(topNode), IGNORE_EXCEPTION); 1961 if (topNode) 1962 spellingSearchRange->setEnd(*topNode, lastOffsetForEditing(topNode), IGNORE_EXCEPTION); 1961 1963 1962 1964 // If spellingSearchRange starts in the middle of a word, advance to the next word so we start checking … … 2012 2014 CharacterIterator chars(*grammarSearchRange); 2013 2015 chars.advance(misspellingOffset); 2014 grammarSearchRange->setEnd( &chars.range()->startContainer(), chars.range()->startOffset(), IGNORE_EXCEPTION);2016 grammarSearchRange->setEnd(chars.range()->startContainer(), chars.range()->startOffset(), IGNORE_EXCEPTION); 2015 2017 } 2016 2018 … … 2023 2025 // block rather than at a selection). 2024 2026 if (startedWithSelection && !misspelledWord && !badGrammarPhrase) { 2025 spellingSearchRange->setStart(topNode, 0, IGNORE_EXCEPTION); 2027 if (topNode) 2028 spellingSearchRange->setStart(*topNode, 0, IGNORE_EXCEPTION); 2026 2029 // going until the end of the very first chunk we tested is far enough 2027 spellingSearchRange->setEnd( &searchEndNodeAfterWrap, searchEndOffsetAfterWrap, IGNORE_EXCEPTION);2030 spellingSearchRange->setEnd(searchEndNodeAfterWrap, searchEndOffsetAfterWrap, IGNORE_EXCEPTION); 2028 2031 2029 2032 if (unifiedTextCheckerEnabled()) { … … 2046 2049 CharacterIterator chars(*grammarSearchRange); 2047 2050 chars.advance(misspellingOffset); 2048 grammarSearchRange->setEnd( &chars.range()->startContainer(), chars.range()->startOffset(), IGNORE_EXCEPTION);2051 grammarSearchRange->setEnd(chars.range()->startContainer(), chars.range()->startOffset(), IGNORE_EXCEPTION); 2049 2052 } 2050 2053 … … 3169 3172 if (shadowTreeRoot) { 3170 3173 if (forward) 3171 searchRange->setEnd( shadowTreeRoot.get(), shadowTreeRoot->countChildNodes());3174 searchRange->setEnd(*shadowTreeRoot, shadowTreeRoot->countChildNodes()); 3172 3175 else 3173 searchRange->setStart( shadowTreeRoot.get(), 0);3176 searchRange->setStart(*shadowTreeRoot, 0); 3174 3177 } 3175 3178 … … 3187 3190 if (shadowTreeRoot) { 3188 3191 if (forward) 3189 searchRange->setEnd( shadowTreeRoot.get(), shadowTreeRoot->countChildNodes());3192 searchRange->setEnd(*shadowTreeRoot, shadowTreeRoot->countChildNodes()); 3190 3193 else 3191 searchRange->setStart( shadowTreeRoot.get(), 0);3194 searchRange->setStart(*shadowTreeRoot, 0); 3192 3195 } 3193 3196 … … 3198 3201 if (resultRange->collapsed() && shadowTreeRoot) { 3199 3202 searchRange = rangeOfContents(document()); 3200 if (forward) 3201 searchRange->setStartAfter(shadowTreeRoot->shadowHost()); 3202 else 3203 searchRange->setEndBefore(shadowTreeRoot->shadowHost()); 3203 if (shadowTreeRoot->shadowHost()) { 3204 if (forward) 3205 searchRange->setStartAfter(*shadowTreeRoot->shadowHost()); 3206 else 3207 searchRange->setEndBefore(*shadowTreeRoot->shadowHost()); 3208 } 3204 3209 3205 3210 resultRange = findPlainText(*searchRange, target, options); … … 3224 3229 for (HTMLFrameOwnerElement* ownerElement = frame->ownerElement(); ownerElement; ownerElement = ownerElement->document().ownerElement()) { 3225 3230 if (&ownerElement->document() == &range->ownerDocument()) { 3226 inRange = range->intersectsNode( ownerElement, IGNORE_EXCEPTION);3231 inRange = range->intersectsNode(*ownerElement, IGNORE_EXCEPTION); 3227 3232 break; 3228 3233 } … … 3256 3261 break; 3257 3262 3258 searchRange->setStartAfter( resultRange->startContainer().shadowHost(), IGNORE_EXCEPTION);3259 searchRange->setEnd( &originalEndContainer, originalEndOffset, IGNORE_EXCEPTION);3263 searchRange->setStartAfter(*resultRange->startContainer().shadowHost(), IGNORE_EXCEPTION); 3264 searchRange->setEnd(originalEndContainer, originalEndOffset, IGNORE_EXCEPTION); 3260 3265 continue; 3261 3266 } … … 3276 3281 // since findPlainText will use a TextIterator to go over the visible 3277 3282 // text nodes. 3278 searchRange->setStart( &resultRange->endContainer(), resultRange->endOffset(), IGNORE_EXCEPTION);3283 searchRange->setStart(resultRange->endContainer(), resultRange->endOffset(), IGNORE_EXCEPTION); 3279 3284 3280 3285 Node* shadowTreeRoot = searchRange->shadowRoot(); 3281 3286 if (searchRange->collapsed() && shadowTreeRoot) 3282 searchRange->setEnd( shadowTreeRoot, shadowTreeRoot->countChildNodes(), IGNORE_EXCEPTION);3287 searchRange->setEnd(*shadowTreeRoot, shadowTreeRoot->countChildNodes(), IGNORE_EXCEPTION); 3283 3288 } while (true); 3284 3289 -
trunk/Source/WebCore/editing/EditorCommand.cpp
r198354 r199817 229 229 } 230 230 231 static RefPtr<Range> unionDOMRanges(Range* a, Range* b) 232 { 233 Range* start = a->compareBoundaryPoints(Range::START_TO_START, b, ASSERT_NO_EXCEPTION) <= 0 ? a : b; 234 Range* end = a->compareBoundaryPoints(Range::END_TO_END, b, ASSERT_NO_EXCEPTION) <= 0 ? b : a; 235 236 return Range::create(a->ownerDocument(), &start->startContainer(), start->startOffset(), &end->endContainer(), end->endOffset()); 231 static RefPtr<Range> unionDOMRanges(Range& a, Range& b) 232 { 233 Range& start = a.compareBoundaryPoints(Range::START_TO_START, b, ASSERT_NO_EXCEPTION) <= 0 ? a : b; 234 Range& end = a.compareBoundaryPoints(Range::END_TO_END, b, ASSERT_NO_EXCEPTION) <= 0 ? b : a; 235 return Range::create(a.ownerDocument(), &start.startContainer(), start.startOffset(), &end.endContainer(), end.endOffset()); 237 236 } 238 237 … … 357 356 RefPtr<Range> mark = frame.editor().mark().toNormalizedRange(); 358 357 FrameSelection& selection = frame.selection(); 359 if (mark ) {360 bool selected = selection.setSelectedRange(unionDOMRanges( mark.get(), frame.editor().selectedRange().get()).get(), DOWNSTREAM, true);358 if (mark && frame.editor().selectedRange()) { 359 bool selected = selection.setSelectedRange(unionDOMRanges(*mark, *frame.editor().selectedRange()).get(), DOWNSTREAM, true); 361 360 ASSERT(selected); 362 361 if (!selected) … … 1011 1010 return false; 1012 1011 } 1013 frame.selection().setSelectedRange(unionDOMRanges( mark.get(), selection.get()).get(), DOWNSTREAM, true);1012 frame.selection().setSelectedRange(unionDOMRanges(*mark, *selection).get(), DOWNSTREAM, true); 1014 1013 return true; 1015 1014 } -
trunk/Source/WebCore/editing/FormatBlockCommand.cpp
r189182 r199817 74 74 return; 75 75 if (isElementForFormatBlock(refNode->tagQName()) && start == startOfBlock(start) 76 && (end == endOfBlock(end) || isNodeVisiblyContainedWithin( refNode, range.get()))76 && (end == endOfBlock(end) || isNodeVisiblyContainedWithin(*refNode, range.get())) 77 77 && refNode != root && !root->isDescendantOf(refNode)) { 78 78 // Already in a block element that only contains the current paragraph -
trunk/Source/WebCore/editing/FrameSelection.cpp
r199334 r199817 475 475 } else if (RefPtr<Range> range = m_selection.firstRange()) { 476 476 ExceptionCode ec = 0; 477 Range::CompareResults compareResult = range->compareNode( &node, ec);477 Range::CompareResults compareResult = range->compareNode(node, ec); 478 478 if (!ec && (compareResult == Range::NODE_BEFORE_AND_AFTER || compareResult == Range::NODE_INSIDE)) { 479 479 // If we did nothing here, when this node's renderer was destroyed, the rect that it … … 2606 2606 } 2607 2607 2608 void FrameSelection::selectRangeOnElement(unsigned location, unsigned length, Node *node)2608 void FrameSelection::selectRangeOnElement(unsigned location, unsigned length, Node& node) 2609 2609 { 2610 2610 RefPtr<Range> resultRange = m_frame->document()->createRange(); -
trunk/Source/WebCore/editing/FrameSelection.h
r198177 r199817 231 231 WEBCORE_EXPORT PassRefPtr<Range> rangeByMovingCurrentSelection(int amount) const; 232 232 WEBCORE_EXPORT PassRefPtr<Range> rangeByExtendingCurrentSelection(int amount) const; 233 WEBCORE_EXPORT void selectRangeOnElement(unsigned location, unsigned length, Node *);233 WEBCORE_EXPORT void selectRangeOnElement(unsigned location, unsigned length, Node&); 234 234 WEBCORE_EXPORT void clearCurrentSelection(); 235 235 void setCaretBlinks(bool caretBlinks = true); -
trunk/Source/WebCore/editing/InsertListCommand.cpp
r191605 r199817 221 221 222 222 // If the entire list is selected, then convert the whole list. 223 if (switchListType && isNodeVisiblyContainedWithin( listNode.get(), currentSelection)) {223 if (switchListType && isNodeVisiblyContainedWithin(*listNode, currentSelection)) { 224 224 bool rangeStartIsInList = visiblePositionBeforeNode(listNode.get()) == currentSelection->startPosition(); 225 225 bool rangeEndIsInList = visiblePositionAfterNode(listNode.get()) == currentSelection->endPosition(); … … 244 244 // because moveParagraphWithClones could have removed them. 245 245 if (rangeStartIsInList && newList) 246 currentSelection->setStart( newList, 0, IGNORE_EXCEPTION);246 currentSelection->setStart(*newList, 0, IGNORE_EXCEPTION); 247 247 if (rangeEndIsInList && newList) 248 currentSelection->setEnd( newList, lastOffsetInNode(newList.get()), IGNORE_EXCEPTION);248 currentSelection->setEnd(*newList, lastOffsetInNode(newList.get()), IGNORE_EXCEPTION); 249 249 250 250 setEndingSelection(VisiblePosition(firstPositionInNode(newList.get()))); -
trunk/Source/WebCore/editing/TextCheckingHelper.cpp
r198306 r199817 175 175 { 176 176 ASSERT(m_checkingRange); 177 if (!position.containerNode()) { 178 ec = TypeError; 179 return 0; 180 } 181 177 182 Ref<Range> range = offsetAsRange()->cloneRange(); 178 range->setEnd( position.containerNode(), position.computeOffsetInContainerNode(), ec);183 range->setEnd(*position.containerNode(), position.computeOffsetInContainerNode(), ec); 179 184 if (ec) 180 185 return 0; -
trunk/Source/WebCore/editing/TextIterator.cpp
r195452 r199817 1480 1480 ASSERT(&node == &range->endContainer()); 1481 1481 int offset = range->startOffset() + m_runOffset; 1482 range->setStart( &node, offset);1483 range->setEnd( &node, offset + 1);1482 range->setStart(node, offset); 1483 range->setEnd(node, offset + 1); 1484 1484 } 1485 1485 } … … 1570 1570 ASSERT(&node == &r->endContainer()); 1571 1571 int offset = r->endOffset() - m_runOffset; 1572 r->setStart( &node, offset - 1);1573 r->setEnd( &node, offset);1572 r->setStart(node, offset - 1); 1573 r->setEnd(node, offset); 1574 1574 } 1575 1575 } … … 2480 2480 // FIXME: the atEnd() check shouldn't be necessary, workaround for <http://bugs.webkit.org/show_bug.cgi?id=6289>. 2481 2481 if (!rangeLocation && !rangeLength && it.atEnd()) { 2482 resultRange->setStart( &textRunRange->startContainer(), 0);2483 resultRange->setEnd( &textRunRange->startContainer(), 0);2482 resultRange->setStart(textRunRange->startContainer(), 0); 2483 resultRange->setEnd(textRunRange->startContainer(), 0); 2484 2484 return WTFMove(resultRange); 2485 2485 } … … 2499 2499 if (!it.atEnd()) { 2500 2500 Ref<Range> range = it.range(); 2501 textRunRange->setEnd( &range->startContainer(), range->startOffset());2501 textRunRange->setEnd(range->startContainer(), range->startOffset()); 2502 2502 } else { 2503 2503 Position runStart = textRunRange->startPosition(); 2504 2504 Position runEnd = VisiblePosition(runStart).next().deepEquivalent(); 2505 2505 if (runEnd.isNotNull()) 2506 textRunRange->setEnd( runEnd.containerNode(), runEnd.computeOffsetInContainerNode());2506 textRunRange->setEnd(*runEnd.containerNode(), runEnd.computeOffsetInContainerNode()); 2507 2507 } 2508 2508 } … … 2513 2513 if (textRunRange->startContainer().isTextNode()) { 2514 2514 int offset = rangeLocation - docTextPosition; 2515 resultRange->setStart( &textRunRange->startContainer(), offset + textRunRange->startOffset());2515 resultRange->setStart(textRunRange->startContainer(), offset + textRunRange->startOffset()); 2516 2516 } else { 2517 2517 if (rangeLocation == docTextPosition) 2518 resultRange->setStart( &textRunRange->startContainer(), textRunRange->startOffset());2518 resultRange->setStart(textRunRange->startContainer(), textRunRange->startOffset()); 2519 2519 else 2520 resultRange->setStart( &textRunRange->endContainer(), textRunRange->endOffset());2520 resultRange->setStart(textRunRange->endContainer(), textRunRange->endOffset()); 2521 2521 } 2522 2522 } … … 2525 2525 if (textRunRange->startContainer().isTextNode()) { 2526 2526 int offset = rangeEnd - docTextPosition; 2527 resultRange->setEnd( &textRunRange->startContainer(), offset + textRunRange->startOffset());2527 resultRange->setEnd(textRunRange->startContainer(), offset + textRunRange->startOffset()); 2528 2528 } else { 2529 2529 if (rangeEnd == docTextPosition) 2530 resultRange->setEnd( &textRunRange->startContainer(), textRunRange->startOffset());2530 resultRange->setEnd(textRunRange->startContainer(), textRunRange->startOffset()); 2531 2531 else 2532 resultRange->setEnd( &textRunRange->endContainer(), textRunRange->endOffset());2532 resultRange->setEnd(textRunRange->endContainer(), textRunRange->endOffset()); 2533 2533 } 2534 2534 docTextPosition += length; … … 2543 2543 2544 2544 if (rangeLength && rangeEnd > docTextPosition) // rangeEnd is out of bounds 2545 resultRange->setEnd( &textRunRange->endContainer(), textRunRange->endOffset());2545 resultRange->setEnd(textRunRange->endContainer(), textRunRange->endOffset()); 2546 2546 2547 2547 return WTFMove(resultRange); … … 2567 2567 location = TextIterator::rangeLength(testRange.ptr()); 2568 2568 2569 testRange->setEnd( &range->endContainer(), range->endOffset(), IGNORE_EXCEPTION);2569 testRange->setEnd(range->endContainer(), range->endOffset(), IGNORE_EXCEPTION); 2570 2570 ASSERT(&testRange->startContainer() == scope); 2571 2571 length = TextIterator::rangeLength(testRange.ptr()) - location; … … 2624 2624 if (buffer.needsMoreContext()) { 2625 2625 Ref<Range> beforeStartRange = range.ownerDocument().createRange(); 2626 beforeStartRange->setEnd( &range.startContainer(), range.startOffset());2626 beforeStartRange->setEnd(range.startContainer(), range.startOffset()); 2627 2627 for (SimplifiedBackwardsTextIterator backwardsIterator(beforeStartRange.get()); !backwardsIterator.atEnd(); backwardsIterator.advance()) { 2628 2628 buffer.prependContext(backwardsIterator.text()); -
trunk/Source/WebCore/editing/VisiblePosition.cpp
r198177 r199817 731 731 } 732 732 733 bool setStart(Range *r, const VisiblePosition &visiblePosition)734 { 735 if (!r )733 bool setStart(Range* range, const VisiblePosition& visiblePosition) 734 { 735 if (!range) 736 736 return false; 737 737 738 Position p = visiblePosition.deepEquivalent().parentAnchoredEquivalent(); 738 int code = 0; 739 r->setStart(p.containerNode(), p.offsetInContainerNode(), code); 740 return code == 0; 741 } 742 743 bool setEnd(Range *r, const VisiblePosition &visiblePosition) 744 { 745 if (!r) 739 if (!p.containerNode()) 746 740 return false; 741 742 int ec = 0; 743 range->setStart(*p.containerNode(), p.offsetInContainerNode(), ec); 744 return !ec; 745 } 746 747 bool setEnd(Range* range, const VisiblePosition& visiblePosition) 748 { 749 if (!range) 750 return false; 751 747 752 Position p = visiblePosition.deepEquivalent().parentAnchoredEquivalent(); 748 int code = 0; 749 r->setEnd(p.containerNode(), p.offsetInContainerNode(), code); 750 return code == 0; 753 if (!p.containerNode()) 754 return false; 755 756 int ec = 0; 757 range->setEnd(*p.containerNode(), p.offsetInContainerNode(), ec); 758 return !ec; 751 759 } 752 760 -
trunk/Source/WebCore/editing/VisibleSelection.cpp
r198587 r199817 214 214 215 215 Position start(pos.parentAnchoredEquivalent()); 216 searchRange->selectNodeContents( boundary, ec);217 searchRange->setStart( start.containerNode(), start.offsetInContainerNode(), ec);216 searchRange->selectNodeContents(*boundary, ec); 217 searchRange->setStart(*start.containerNode(), start.offsetInContainerNode(), ec); 218 218 219 219 ASSERT(!ec); -
trunk/Source/WebCore/editing/VisibleUnits.cpp
r198177 r199817 570 570 Position start = createLegacyEditingPosition(boundary, 0).parentAnchoredEquivalent(); 571 571 Position end = pos.parentAnchoredEquivalent(); 572 RefPtr<Range> searchRange = Range::create(boundaryDocument); 572 573 if (start.isNull() || end.isNull()) 574 return VisiblePosition(); 575 576 Ref<Range> searchRange = Range::create(boundaryDocument); 573 577 574 578 Vector<UChar, 1024> string; … … 578 582 if (requiresContextForWordBoundary(c.characterBefore())) { 579 583 RefPtr<Range> forwardsScanRange(boundaryDocument.createRange()); 580 forwardsScanRange->setEndAfter( boundary, ec);581 forwardsScanRange->setStart( end.deprecatedNode(), end.deprecatedEditingOffset(), ec);584 forwardsScanRange->setEndAfter(*boundary, ec); 585 forwardsScanRange->setStart(*end.deprecatedNode(), end.deprecatedEditingOffset(), ec); 582 586 suffixLength = suffixLengthForRange(forwardsScanRange, string); 583 587 } 584 588 585 searchRange->setStart( start.deprecatedNode(), start.deprecatedEditingOffset(), ec);586 searchRange->setEnd( end.deprecatedNode(), end.deprecatedEditingOffset(), ec);589 searchRange->setStart(*start.deprecatedNode(), start.deprecatedEditingOffset(), ec); 590 searchRange->setEnd(*end.deprecatedNode(), end.deprecatedEditingOffset(), ec); 587 591 588 592 ASSERT(!ec); … … 590 594 return VisiblePosition(); 591 595 592 SimplifiedBackwardsTextIterator it( *searchRange);596 SimplifiedBackwardsTextIterator it(searchRange); 593 597 unsigned next = backwardSearchForBoundaryWithTextIterator(it, string, suffixLength, searchFunction); 594 598 … … 603 607 604 608 // Use the character iterator to translate the next value into a DOM position. 605 BackwardsCharacterIterator charIt( *searchRange);609 BackwardsCharacterIterator charIt(searchRange); 606 610 charIt.advance(string.size() - suffixLength - next); 607 611 // FIXME: charIt can get out of shadow host. … … 617 621 618 622 Document& boundaryDocument = boundary->document(); 619 Ref Ptr<Range> searchRange(boundaryDocument.createRange());623 Ref<Range> searchRange = boundaryDocument.createRange(); 620 624 Position start(pos.parentAnchoredEquivalent()); 621 625 … … 625 629 if (requiresContextForWordBoundary(c.characterAfter())) { 626 630 RefPtr<Range> backwardsScanRange(boundaryDocument.createRange()); 627 backwardsScanRange->setEnd(start.deprecatedNode(), start.deprecatedEditingOffset(), IGNORE_EXCEPTION); 631 if (start.deprecatedNode()) 632 backwardsScanRange->setEnd(*start.deprecatedNode(), start.deprecatedEditingOffset(), IGNORE_EXCEPTION); 628 633 prefixLength = prefixLengthForRange(backwardsScanRange, string); 629 634 } 630 635 631 searchRange->selectNodeContents(boundary, IGNORE_EXCEPTION); 632 searchRange->setStart(start.deprecatedNode(), start.deprecatedEditingOffset(), IGNORE_EXCEPTION); 633 TextIterator it(searchRange.get(), TextIteratorEmitsCharactersBetweenAllVisiblePositions); 636 searchRange->selectNodeContents(*boundary, IGNORE_EXCEPTION); 637 if (start.deprecatedNode()) 638 searchRange->setStart(*start.deprecatedNode(), start.deprecatedEditingOffset(), IGNORE_EXCEPTION); 639 TextIterator it(searchRange.ptr(), TextIteratorEmitsCharactersBetweenAllVisiblePositions); 634 640 unsigned next = forwardSearchForBoundaryWithTextIterator(it, string, prefixLength, searchFunction); 635 641 … … 638 644 else if (next > prefixLength) { 639 645 // Use the character iterator to translate the next value into a DOM position. 640 CharacterIterator charIt( *searchRange, TextIteratorEmitsCharactersBetweenAllVisiblePositions);646 CharacterIterator charIt(searchRange, TextIteratorEmitsCharactersBetweenAllVisiblePositions); 641 647 charIt.advance(next - prefixLength - 1); 642 648 RefPtr<Range> characterRange = charIt.range(); -
trunk/Source/WebCore/editing/htmlediting.cpp
r198583 r199817 1165 1165 } 1166 1166 1167 VisiblePosition visiblePositionForIndexUsingCharacterIterator(Node* node, int index) 1168 { 1169 ASSERT(node); 1167 VisiblePosition visiblePositionForIndexUsingCharacterIterator(Node& node, int index) 1168 { 1170 1169 if (index <= 0) 1171 return VisiblePosition(firstPositionInOrBeforeNode( node), DOWNSTREAM);1172 1173 RefPtr<Range> range = Range::create(node ->document());1170 return VisiblePosition(firstPositionInOrBeforeNode(&node), DOWNSTREAM); 1171 1172 RefPtr<Range> range = Range::create(node.document()); 1174 1173 range->selectNodeContents(node, IGNORE_EXCEPTION); 1175 1174 CharacterIterator it(*range); … … 1187 1186 // Determines whether a node is inside a range or visibly starts and ends at the boundaries of the range. 1188 1187 // Call this function to determine whether a node is visibly fit inside selectedRange 1189 bool isNodeVisiblyContainedWithin(Node* node, const Range* selectedRange) 1190 { 1191 ASSERT(node); 1188 bool isNodeVisiblyContainedWithin(Node& node, const Range* selectedRange) 1189 { 1192 1190 ASSERT(selectedRange); 1193 1191 // If the node is inside the range, then it surely is contained within … … 1195 1193 return true; 1196 1194 1197 bool startIsVisuallySame = visiblePositionBeforeNode( node) == selectedRange->startPosition();1198 if (startIsVisuallySame && comparePositions(positionInParentAfterNode( node), selectedRange->endPosition()) < 0)1195 bool startIsVisuallySame = visiblePositionBeforeNode(&node) == selectedRange->startPosition(); 1196 if (startIsVisuallySame && comparePositions(positionInParentAfterNode(&node), selectedRange->endPosition()) < 0) 1199 1197 return true; 1200 1198 1201 bool endIsVisuallySame = visiblePositionAfterNode( node) == selectedRange->endPosition();1202 if (endIsVisuallySame && comparePositions(selectedRange->startPosition(), positionInParentBeforeNode( node)) < 0)1199 bool endIsVisuallySame = visiblePositionAfterNode(&node) == selectedRange->endPosition(); 1200 if (endIsVisuallySame && comparePositions(selectedRange->startPosition(), positionInParentBeforeNode(&node)) < 0) 1203 1201 return true; 1204 1202 -
trunk/Source/WebCore/editing/htmlediting.h
r198583 r199817 118 118 bool isListItem(const Node*); 119 119 bool isNodeRendered(const Node*); 120 bool isNodeVisiblyContainedWithin(Node *, const Range*);120 bool isNodeVisiblyContainedWithin(Node&, const Range*); 121 121 bool isRenderedAsNonInlineTableImageOrHR(const Node*); 122 122 bool areIdenticalElements(const Node*, const Node*); … … 199 199 int indexForVisiblePosition(Node*, const VisiblePosition&, bool forSelectionPreservation); 200 200 VisiblePosition visiblePositionForIndex(int index, ContainerNode* scope); 201 VisiblePosition visiblePositionForIndexUsingCharacterIterator(Node *, int index); // FIXME: Why do we need this version?201 VisiblePosition visiblePositionForIndexUsingCharacterIterator(Node&, int index); // FIXME: Why do we need this version? 202 202 203 203 // ------------------------------------------------------------------------- -
trunk/Source/WebCore/editing/mac/EditorMac.mm
r198177 r199817 319 319 auto* enclosingAnchor = enclosingElementWithTag(firstPositionInNode(commonAncestor), HTMLNames::aTag); 320 320 if (enclosingAnchor && comparePositions(firstPositionInOrBeforeNode(range->startPosition().anchorNode()), range->startPosition()) >= 0) 321 range->setStart( enclosingAnchor, 0, IGNORE_EXCEPTION);321 range->setStart(*enclosingAnchor, 0, IGNORE_EXCEPTION); 322 322 return range; 323 323 } -
trunk/Source/WebCore/page/ContextMenuController.cpp
r198900 r199817 414 414 Document& document = m_context.hitTestResult().innerNonSharedNode()->document(); 415 415 selectedRange = document.createRange(); 416 selectedRange->selectNode(document.documentElement(), IGNORE_EXCEPTION); 416 if (document.documentElement()) 417 selectedRange->selectNode(*document.documentElement(), IGNORE_EXCEPTION); 417 418 } 418 419 m_client.speak(plainText(selectedRange.get())); -
trunk/Source/WebCore/page/DOMSelection.cpp
r199585 r199817 394 394 395 395 RefPtr<Range> range = selection.selection().toNormalizedRange(); 396 if (r->compareBoundaryPoints(Range::START_TO_START, range.get(), IGNORE_EXCEPTION) == -1) { 396 if (!range) 397 return; 398 399 if (r->compareBoundaryPoints(Range::START_TO_START, *range, IGNORE_EXCEPTION) == -1) { 397 400 // We don't support discontiguous selection. We don't do anything if r and range don't intersect. 398 if (r->compareBoundaryPoints(Range::START_TO_END, range.get(), IGNORE_EXCEPTION) > -1) {399 if (r->compareBoundaryPoints(Range::END_TO_END, range.get(), IGNORE_EXCEPTION) == -1) {401 if (r->compareBoundaryPoints(Range::START_TO_END, *range, IGNORE_EXCEPTION) > -1) { 402 if (r->compareBoundaryPoints(Range::END_TO_END, *range, IGNORE_EXCEPTION) == -1) { 400 403 // The original range and r intersect. 401 404 selection.moveTo(r->startPosition(), range->endPosition(), DOWNSTREAM); … … 408 411 // We don't support discontiguous selection. We don't do anything if r and range don't intersect. 409 412 ExceptionCode ec = 0; 410 if (r->compareBoundaryPoints(Range::END_TO_START, range.get(), ec) < 1 && !ec) {411 if (r->compareBoundaryPoints(Range::END_TO_END, range.get(), IGNORE_EXCEPTION) == -1) {413 if (r->compareBoundaryPoints(Range::END_TO_START, *range, ec) < 1 && !ec) { 414 if (r->compareBoundaryPoints(Range::END_TO_END, *range, IGNORE_EXCEPTION) == -1) { 412 415 // The original range contains r. 413 416 selection.moveTo(range.get()); -
trunk/Source/WebCore/page/DragController.cpp
r198243 r199817 713 713 { 714 714 RefPtr<Range> range = element.document().createRange(); 715 range->selectNode( &element);715 range->selectNode(element); 716 716 element.document().frame()->selection().setSelection(VisibleSelection(*range, DOWNSTREAM)); 717 717 } -
trunk/Source/WebCore/page/EventHandler.cpp
r199331 r199817 2508 2508 // will set a selection inside it, which will call setFocuseNodeIfNeeded. 2509 2509 if (m_frame.selection().isRange() 2510 && m_frame.selection().toNormalizedRange()->compareNode( element, IGNORE_EXCEPTION) == Range::NODE_INSIDE2510 && m_frame.selection().toNormalizedRange()->compareNode(*element, IGNORE_EXCEPTION) == Range::NODE_INSIDE 2511 2511 && element->isDescendantOf(m_frame.document()->focusedElement())) 2512 2512 return true; -
trunk/Source/WebCore/page/Page.cpp
r199286 r199817 633 633 if (options & Backwards) { 634 634 for (size_t i = matchRanges.size(); i > 0; --i) { 635 if (selectedRange->compareBoundaryPoints(Range::END_TO_START, matchRanges[i - 1].get(), IGNORE_EXCEPTION) > 0) {635 if (selectedRange->compareBoundaryPoints(Range::END_TO_START, *matchRanges[i - 1], IGNORE_EXCEPTION) > 0) { 636 636 indexForSelection = i - 1; 637 637 break; … … 640 640 } else { 641 641 for (size_t i = 0, size = matchRanges.size(); i < size; ++i) { 642 if (selectedRange->compareBoundaryPoints(Range::START_TO_END, matchRanges[i].get(), IGNORE_EXCEPTION) < 0) {642 if (selectedRange->compareBoundaryPoints(Range::START_TO_END, *matchRanges[i], IGNORE_EXCEPTION) < 0) { 643 643 indexForSelection = i; 644 644 break; -
trunk/Source/WebCore/page/TextIndicator.cpp
r198578 r199817 126 126 if (!renderer) 127 127 continue; 128 if ((!renderer->isInline() || renderer->isReplaced()) && range.intersectsNode( node, ASSERT_NO_EXCEPTION))128 if ((!renderer->isInline() || renderer->isReplaced()) && range.intersectsNode(*node, ASSERT_NO_EXCEPTION)) 129 129 return true; 130 130 } -
trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp
r198992 r199817 695 695 if (foundStartPosition) { 696 696 if (!startsAboveRegion) { 697 if (range->intersectsNode( node, IGNORE_EXCEPTION))698 range->setEndBefore( node, IGNORE_EXCEPTION);697 if (range->intersectsNode(*node, IGNORE_EXCEPTION)) 698 range->setEndBefore(*node, IGNORE_EXCEPTION); 699 699 rangeObjects.append(range->cloneRange()); 700 700 range = Range::create(contentElement->document()); … … 704 704 } 705 705 if (skipOverOutsideNodes) 706 range->setStartAfter( node, IGNORE_EXCEPTION);706 range->setStartAfter(*node, IGNORE_EXCEPTION); 707 707 foundStartPosition = false; 708 708 continue; … … 734 734 if (startsAboveRegion) { 735 735 startsAboveRegion = false; 736 range->setStartBefore( node, IGNORE_EXCEPTION);736 range->setStartBefore(*node, IGNORE_EXCEPTION); 737 737 } 738 738 } … … 771 771 // allow this end position to be changed only by other elements that are not descendants of the current end node 772 772 if (endsBelowRegion || (!endsBelowRegion && !node->isDescendantOf(lastEndNode))) { 773 range->setEndAfter( node, IGNORE_EXCEPTION);773 range->setEndAfter(*node, IGNORE_EXCEPTION); 774 774 endsBelowRegion = false; 775 775 lastEndNode = node; -
trunk/Source/WebKit/mac/ChangeLog
r199779 r199817 1 2016-04-21 Chris Dumez <cdumez@apple.com> 2 3 Drop [UsePointersEvenForNonNullableObjectArguments] from Range 4 https://bugs.webkit.org/show_bug.cgi?id=156805 5 6 Reviewed by Youenn Fablet. 7 8 * WebView/WebFrame.mm: 9 (-[WebFrame _smartDeleteRangeForProposedRange:]): 10 1 11 2016-04-20 Brady Eidson <beidson@apple.com> 2 12 -
trunk/Source/WebKit/mac/WebView/WebFrame.mm
r199619 r199817 874 874 newEnd = newEnd.parentAnchoredEquivalent(); 875 875 876 RefPtr<Range> range = _private->coreFrame->document()->createRange(); 877 int exception = 0; 878 range->setStart(newStart.containerNode(), newStart.offsetInContainerNode(), exception); 879 range->setEnd(newStart.containerNode(), newStart.offsetInContainerNode(), exception); 880 return kit(range.get()); 876 Ref<Range> range = _private->coreFrame->document()->createRange(); 877 if (newStart.containerNode()) { 878 int exception = 0; 879 range->setStart(*newStart.containerNode(), newStart.offsetInContainerNode(), exception); 880 range->setEnd(*newStart.containerNode(), newStart.offsetInContainerNode(), exception); 881 } 882 return kit(range.ptr()); 881 883 } 882 884 … … 1629 1631 return; 1630 1632 1631 Node *node = core(element);1633 Node* node = core(element); 1632 1634 if (!node->inDocument()) 1633 1635 return; 1634 1636 1635 frame->selection().selectRangeOnElement(range.location, range.length, node);1637 frame->selection().selectRangeOnElement(range.location, range.length, *node); 1636 1638 } 1637 1639 -
trunk/Source/WebKit/win/WebView.cpp
r199619 r199817 6115 6115 ExceptionCode ec = 0; 6116 6116 RefPtr<Range> tempRange = range->cloneRange(); 6117 tempRange->setStart( &tempRange->startContainer(), tempRange->startOffset() + charPos->dwCharPos, ec);6117 tempRange->setStart(tempRange->startContainer(), tempRange->startOffset() + charPos->dwCharPos, ec); 6118 6118 caret = targetFrame->editor().firstRectForRange(tempRange.get()); 6119 6119 } -
trunk/Source/WebKit2/ChangeLog
r199811 r199817 1 2016-04-21 Chris Dumez <cdumez@apple.com> 2 3 Drop [UsePointersEvenForNonNullableObjectArguments] from Range 4 https://bugs.webkit.org/show_bug.cgi?id=156805 5 6 Reviewed by Youenn Fablet. 7 8 * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm: 9 (-[WKDOMRange setStart:offset:]): 10 (-[WKDOMRange setEnd:offset:]): 11 (-[WKDOMRange selectNode:]): 12 (-[WKDOMRange selectNodeContents:]): 13 * WebProcess/WebPage/WebFrame.cpp: 14 (WebKit::WebFrame::contentsAsString): 15 1 16 2016-04-21 Carlos Garcia Campos <cgarcia@igalia.com> 2 17 -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKDOMRange.mm
r189182 r199817 66 66 - (void)setStart:(WKDOMNode *)node offset:(int)offset 67 67 { 68 if (!node) 69 return; 68 70 // FIXME: Do something about the exception. 69 71 WebCore::ExceptionCode ec = 0; 70 _impl->setStart( WebKit::toWebCoreNode(node), offset, ec);72 _impl->setStart(*WebKit::toWebCoreNode(node), offset, ec); 71 73 } 72 74 73 75 - (void)setEnd:(WKDOMNode *)node offset:(int)offset 74 76 { 77 if (!node) 78 return; 75 79 // FIXME: Do something about the exception. 76 80 WebCore::ExceptionCode ec = 0; 77 _impl->setEnd( WebKit::toWebCoreNode(node), offset, ec);81 _impl->setEnd(*WebKit::toWebCoreNode(node), offset, ec); 78 82 } 79 83 … … 85 89 - (void)selectNode:(WKDOMNode *)node 86 90 { 91 if (!node) 92 return; 87 93 // FIXME: Do something about the exception. 88 94 WebCore::ExceptionCode ec = 0; 89 _impl->selectNode( WebKit::toWebCoreNode(node), ec);95 _impl->selectNode(*WebKit::toWebCoreNode(node), ec); 90 96 } 91 97 92 98 - (void)selectNodeContents:(WKDOMNode *)node 93 99 { 100 if (!node) 101 return; 94 102 // FIXME: Do something about the exception. 95 103 WebCore::ExceptionCode ec = 0; 96 _impl->selectNodeContents( WebKit::toWebCoreNode(node), ec);104 _impl->selectNodeContents(*WebKit::toWebCoreNode(node), ec); 97 105 } 98 106 -
trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp
r198893 r199817 331 331 332 332 ExceptionCode ec = 0; 333 range->selectNode( documentElement.get(), ec);333 range->selectNode(*documentElement, ec); 334 334 if (ec) 335 335 return String(); -
trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm
r199399 r199817 941 941 flags = IsBlockSelection; 942 942 range = Range::create(bestChoice->document()); 943 range->selectNodeContents( bestChoice, ASSERT_NO_EXCEPTION);943 range->selectNodeContents(*bestChoice, ASSERT_NO_EXCEPTION); 944 944 return range->collapsed() ? nullptr : range; 945 945 } … … 965 965 966 966 range = Range::create(currentNode->document()); 967 range->selectNodeContents( currentNode, ASSERT_NO_EXCEPTION);967 range->selectNodeContents(*currentNode, ASSERT_NO_EXCEPTION); 968 968 return range; 969 969 } … … 1221 1221 return false; 1222 1222 return (first->commonAncestorContainer()->ownerDocument() == second->commonAncestorContainer()->ownerDocument() 1223 && first->compareBoundaryPoints(Range::START_TO_START, second, ASSERT_NO_EXCEPTION) <= 01224 && first->compareBoundaryPoints(Range::END_TO_END, second, ASSERT_NO_EXCEPTION) >= 0);1223 && first->compareBoundaryPoints(Range::START_TO_START, *second, ASSERT_NO_EXCEPTION) <= 0 1224 && first->compareBoundaryPoints(Range::END_TO_END, *second, ASSERT_NO_EXCEPTION) >= 0); 1225 1225 } 1226 1226 … … 1232 1232 return rangeB; 1233 1233 1234 Range* start = rangeA->compareBoundaryPoints(Range::START_TO_START, rangeB, ASSERT_NO_EXCEPTION) <= 0 ? rangeA : rangeB;1235 Range* end = rangeA->compareBoundaryPoints(Range::END_TO_END, rangeB, ASSERT_NO_EXCEPTION) <= 0 ? rangeB : rangeA;1234 Range* start = rangeA->compareBoundaryPoints(Range::START_TO_START, *rangeB, ASSERT_NO_EXCEPTION) <= 0 ? rangeA : rangeB; 1235 Range* end = rangeA->compareBoundaryPoints(Range::END_TO_END, *rangeB, ASSERT_NO_EXCEPTION) <= 0 ? rangeB : rangeA; 1236 1236 1237 1237 return Range::create(rangeA->ownerDocument(), &start->startContainer(), start->startOffset(), &end->endContainer(), end->endOffset()); … … 2233 2233 if (DataDetection::requiresExtendedContext(*element)) { 2234 2234 RefPtr<Range> linkRange = Range::create(element->document()); 2235 linkRange->selectNodeContents( element, ASSERT_NO_EXCEPTION);2235 linkRange->selectNodeContents(*element, ASSERT_NO_EXCEPTION); 2236 2236 info.textBefore = plainTextReplacingNoBreakSpace(rangeExpandedByCharactersInDirectionAtWordBoundary(linkRange->startPosition(), dataDetectionExtendedContextLength, DirectionBackward).get(), TextIteratorDefaultBehavior, true); 2237 2237 info.textAfter = plainTextReplacingNoBreakSpace(rangeExpandedByCharactersInDirectionAtWordBoundary(linkRange->endPosition(), dataDetectionExtendedContextLength, DirectionForward).get(), TextIteratorDefaultBehavior, true);
Note: See TracChangeset
for help on using the changeset viewer.