diff --git a/dom/base/Text.h b/dom/base/Text.h index 25d62316e985..1fddc0286b14 100644 --- a/dom/base/Text.h +++ b/dom/base/Text.h @@ -30,7 +30,7 @@ public: already_AddRefed SplitText(uint32_t aOffset, ErrorResult& rv); void GetWholeText(nsAString& aWholeText, ErrorResult& rv) { - rv = GetWholeText(aWholeText); + nsGenericDOMDataNode::GetWholeText(aWholeText, rv); } static already_AddRefed diff --git a/dom/base/nsGenericDOMDataNode.cpp b/dom/base/nsGenericDOMDataNode.cpp index 76036d02d99e..f14ff6fa1a8e 100644 --- a/dom/base/nsGenericDOMDataNode.cpp +++ b/dom/base/nsGenericDOMDataNode.cpp @@ -720,52 +720,49 @@ nsGenericDOMDataNode::IsLink(nsIURI** aURI) const static nsIContent* FirstLogicallyAdjacentTextNode(nsIContent* aNode) { - nsCOMPtr parent = aNode->GetParent(); - - while (aNode) { + do { nsIContent* sibling = aNode->GetPreviousSibling(); - if (!sibling || !sibling->IsNodeOfType(nsINode::eTEXT)) { + if (!sibling || !sibling->IsText()) { return aNode; } aNode = sibling; - } - - return parent->GetFirstChild(); + } while (1); // Must run out of previous siblings eventually! } static nsIContent* LastLogicallyAdjacentTextNode(nsIContent* aNode) { - nsCOMPtr parent = aNode->GetParent(); - - while (aNode) { + do { nsIContent* sibling = aNode->GetNextSibling(); - if (!sibling) break; - - if (!sibling->IsNodeOfType(nsINode::eTEXT)) { + if (!sibling || !sibling->IsText()) { return aNode; } aNode = sibling; - } - - return parent->GetLastChild(); + } while (1); // Must run out of next siblings eventually! } -nsresult -nsGenericDOMDataNode::GetWholeText(nsAString& aWholeText) +void +nsGenericDOMDataNode::GetWholeText(nsAString& aWholeText, + ErrorResult& aRv) { nsIContent* parent = GetParent(); // Handle parent-less nodes - if (!parent) - return GetData(aWholeText); + if (!parent) { + GetData(aWholeText); + return; + } int32_t index = parent->ComputeIndexOf(this); NS_WARNING_ASSERTION(index >= 0, "Trying to use .wholeText with an anonymous" "text node child of a binding parent?"); - NS_ENSURE_TRUE(index >= 0, NS_ERROR_DOM_NOT_SUPPORTED_ERR); + if (NS_WARN_IF(index < 0)) { + aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR); + return; + } + nsCOMPtr first = FirstLogicallyAdjacentTextNode(this); nsCOMPtr last = LastLogicallyAdjacentTextNode(this); @@ -785,8 +782,6 @@ nsGenericDOMDataNode::GetWholeText(nsAString& aWholeText) first = first->GetNextSibling(); } - - return NS_OK; } //---------------------------------------------------------------------- diff --git a/dom/base/nsGenericDOMDataNode.h b/dom/base/nsGenericDOMDataNode.h index c561c0f8a592..df3241d43d41 100644 --- a/dom/base/nsGenericDOMDataNode.h +++ b/dom/base/nsGenericDOMDataNode.h @@ -229,7 +229,8 @@ protected: return parent && parent->IsElement() ? parent->AsElement() : nullptr; } - nsresult GetWholeText(nsAString& aWholeText); + void GetWholeText(nsAString& aWholeText, + mozilla::ErrorResult& aRv); nsresult SetTextInternal(uint32_t aOffset, uint32_t aCount, const char16_t* aBuffer, uint32_t aLength,