Bug 1341137 part 1 - Make Selection::addRange silently reject ranges that have a different root. r=smaug
--- a/layout/generic/nsSelection.cpp
+++ b/layout/generic/nsSelection.cpp
@@ -4959,16 +4959,26 @@ Selection::AddRange(nsIDOMRange* aDOMRan
ErrorResult result;
AddRange(*range, result);
return result.StealNSResult();
}
void
Selection::AddRange(nsRange& aRange, ErrorResult& aRv)
{
+ nsINode* rangeRoot = aRange.GetRoot();
+ nsIDocument* doc = GetParentObject();
+ if (doc != rangeRoot && (!rangeRoot ||
+ doc != rangeRoot->GetComposedDoc())) {
+ // http://w3c.github.io/selection-api/#dom-selection-addrange
+ // "... if the root of the range's boundary points are the document
+ // associated with context object. Otherwise, this method must do nothing."
+ return;
+ }
+
// This inserts a table cell range in proper document order
// and returns NS_OK if range doesn't contain just one table cell
bool didAddRange;
int32_t rangeIndex;
nsresult result = addTableCellRange(&aRange, &didAddRange, &rangeIndex);
if (NS_FAILED(result)) {
aRv.Throw(result);
return;