Chromium Code Reviews| Index: Source/core/editing/DOMSelection.cpp |
| diff --git a/Source/core/editing/DOMSelection.cpp b/Source/core/editing/DOMSelection.cpp |
| index 9b86b6fa4dccbec1bd0dfd3b5914847dedda6451..7faf447c5dd93f807fd73cf480b161978dbc6ced 100644 |
| --- a/Source/core/editing/DOMSelection.cpp |
| +++ b/Source/core/editing/DOMSelection.cpp |
| @@ -107,7 +107,7 @@ Node* DOMSelection::anchorNode() const |
| return shadowAdjustedNode(anchorPosition(visibleSelection())); |
| } |
| -int DOMSelection::anchorOffset() const |
| +unsigned DOMSelection::anchorOffset() const |
| { |
| if (!m_frame) |
| return 0; |
| @@ -123,7 +123,7 @@ Node* DOMSelection::focusNode() const |
| return shadowAdjustedNode(focusPosition(visibleSelection())); |
| } |
| -int DOMSelection::focusOffset() const |
| +unsigned DOMSelection::focusOffset() const |
| { |
| if (!m_frame) |
| return 0; |
| @@ -139,7 +139,7 @@ Node* DOMSelection::baseNode() const |
| return shadowAdjustedNode(basePosition(visibleSelection())); |
| } |
| -int DOMSelection::baseOffset() const |
| +unsigned DOMSelection::baseOffset() const |
| { |
| if (!m_frame) |
| return 0; |
| @@ -155,7 +155,7 @@ Node* DOMSelection::extentNode() const |
| return shadowAdjustedNode(extentPosition(visibleSelection())); |
| } |
| -int DOMSelection::extentOffset() const |
| +unsigned DOMSelection::extentOffset() const |
| { |
| if (!m_frame) |
| return 0; |
| @@ -187,14 +187,14 @@ String DOMSelection::type() const |
| return "Range"; |
| } |
| -int DOMSelection::rangeCount() const |
| +unsigned DOMSelection::rangeCount() const |
| { |
| if (!m_frame) |
| return 0; |
| return m_frame->selection().isNone() ? 0 : 1; |
| } |
| -void DOMSelection::collapse(Node* node, int offset, ExceptionState& exceptionState) |
| +void DOMSelection::collapse(Node* node, unsigned offset, ExceptionState& exceptionState) |
| { |
| if (!m_frame) |
| return; |
| @@ -204,8 +204,8 @@ void DOMSelection::collapse(Node* node, int offset, ExceptionState& exceptionSta |
| return; |
| } |
| - if (offset < 0) { |
| - exceptionState.throwDOMException(IndexSizeError, String::number(offset) + " is not a valid offset."); |
| + if (offset > node->lengthOfContents()) { |
| + exceptionState.throwDOMException(IndexSizeError, String::number(offset) + " is larger than the given node's length."); |
| return; |
| } |
| @@ -258,18 +258,18 @@ void DOMSelection::empty() |
| m_frame->selection().clear(); |
| } |
| -void DOMSelection::setBaseAndExtent(Node* baseNode, int baseOffset, Node* extentNode, int extentOffset, ExceptionState& exceptionState) |
| +void DOMSelection::setBaseAndExtent(Node* baseNode, unsigned baseOffset, Node* extentNode, unsigned extentOffset, ExceptionState& exceptionState) |
| { |
| if (!m_frame) |
| return; |
| - if (baseOffset < 0) { |
| - exceptionState.throwDOMException(IndexSizeError, String::number(baseOffset) + " is not a valid base offset."); |
| + if (baseNode && baseOffset > baseNode->lengthOfContents()) { |
| + exceptionState.throwDOMException(IndexSizeError, String::number(baseOffset) + " is larger than the base node's length."); |
|
yoichio
2015/07/13 02:29:45
Raising exception when offset is over content leng
philipj_slow
2015/07/13 07:13:49
The spec has different variable names, but it actu
Habib Virji
2015/08/05 09:33:44
@philipj: As far as I can see no error. If it exce
Habib Virji
2015/08/05 09:33:44
Actually spec says to throw an error for both the
|
| return; |
| } |
| - if (extentOffset < 0) { |
| - exceptionState.throwDOMException(IndexSizeError, String::number(extentOffset) + " is not a valid extent offset."); |
| + if (extentNode && baseNode && extentOffset > (baseNode->lengthOfContents() + extentNode->lengthOfContents())) { |
| + exceptionState.throwDOMException(IndexSizeError, String::number(extentOffset) + " is larger than the extent node's length."); |
| return; |
| } |
| @@ -333,18 +333,14 @@ void DOMSelection::modify(const String& alterString, const String& directionStri |
| m_frame->selection().modify(alter, direction, granularity); |
| } |
| -void DOMSelection::extend(Node* node, int offset, ExceptionState& exceptionState) |
| +void DOMSelection::extend(Node* node, unsigned offset, ExceptionState& exceptionState) |
| { |
| ASSERT(node); |
| if (!m_frame) |
| return; |
| - if (offset < 0) { |
| - exceptionState.throwDOMException(IndexSizeError, String::number(offset) + " is not a valid offset."); |
| - return; |
| - } |
| - if (static_cast<unsigned>(offset) > node->lengthOfContents()) { |
| + if (offset > node->lengthOfContents()) { |
| exceptionState.throwDOMException(IndexSizeError, String::number(offset) + " is larger than the given node's length."); |
| return; |
| } |
| @@ -356,12 +352,12 @@ void DOMSelection::extend(Node* node, int offset, ExceptionState& exceptionState |
| m_frame->selection().setExtent(VisiblePosition(createLegacyEditingPosition(node, offset), DOWNSTREAM)); |
| } |
| -PassRefPtrWillBeRawPtr<Range> DOMSelection::getRangeAt(int index, ExceptionState& exceptionState) |
| +PassRefPtrWillBeRawPtr<Range> DOMSelection::getRangeAt(unsigned index, ExceptionState& exceptionState) |
| { |
| if (!m_frame) |
| return nullptr; |
| - if (index < 0 || index >= rangeCount()) { |
| + if (index >= rangeCount()) { |
| exceptionState.throwDOMException(IndexSizeError, String::number(index) + " is not a valid index."); |
| return nullptr; |
| } |
| @@ -527,7 +523,7 @@ Node* DOMSelection::shadowAdjustedNode(const Position& position) const |
| return adjustedNode->parentOrShadowHostNode(); |
| } |
| -int DOMSelection::shadowAdjustedOffset(const Position& position) const |
| +unsigned DOMSelection::shadowAdjustedOffset(const Position& position) const |
| { |
| if (position.isNull()) |
| return 0; |