diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp index 5805fdb3efc..0779fe589a4 100644 --- a/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -5020,14 +5020,12 @@ nsDocument::GetAnonymousNodes(nsIDOMElement* aElement, NS_IMETHODIMP nsDocument::CreateRange(nsIDOMRange** aReturn) { - nsresult rv = NS_NewRange(aReturn); + nsRefPtr range = new nsRange(); + nsresult rv = range->Set(this, 0, this, 0); + NS_ENSURE_SUCCESS(rv, rv); - if (NS_SUCCEEDED(rv)) { - (*aReturn)->SetStart(this, 0); - (*aReturn)->SetEnd(this, 0); - } - - return rv; + range.forget(aReturn); + return NS_OK; } NS_IMETHODIMP diff --git a/content/base/src/nsRange.h b/content/base/src/nsRange.h index 4f7ad140eba..2c2eea34c54 100644 --- a/content/base/src/nsRange.h +++ b/content/base/src/nsRange.h @@ -98,6 +98,17 @@ public: virtual nsresult SetEnd(nsINode* aParent, PRInt32 aOffset); virtual nsresult CloneRange(nsIRange** aNewRange) const; + nsresult Set(nsINode* aStartParent, PRInt32 aStartOffset, + nsINode* aEndParent, PRInt32 aEndOffset) + { + // If this starts being hot, we may be able to optimize this a bit, + // but for now just set start and end separately. + nsresult rv = SetStart(aStartParent, aStartOffset); + NS_ENSURE_SUCCESS(rv, rv); + + return SetEnd(aEndParent, aEndOffset); + } + NS_IMETHOD GetUsedFontFaces(nsIDOMFontFaceList** aResult); // nsIMutationObserver methods