Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(575)

Unified Diff: Source/core/dom/Range.cpp

Issue 983923002: Revert of Add [TypeChecking=Interface] to Range interface (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/fast/text/first-letter-bad-line-boxes-crash-expected.txt ('k') | Source/core/dom/Range.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/dom/Range.cpp
diff --git a/Source/core/dom/Range.cpp b/Source/core/dom/Range.cpp
index 0e1cbdc839fc2df1e6ae88b18ab99f648920f910..667caf6034b6ee254d7c57530f09995b3af638fa 100644
--- a/Source/core/dom/Range.cpp
+++ b/Source/core/dom/Range.cpp
@@ -156,6 +156,11 @@
void Range::setStart(PassRefPtrWillBeRawPtr<Node> refNode, int offset, ExceptionState& exceptionState)
{
+ if (!refNode) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided was null.");
+ return;
+ }
+
bool didMoveDocument = false;
if (refNode->document() != m_ownerDocument) {
setDocument(refNode->document());
@@ -174,6 +179,11 @@
void Range::setEnd(PassRefPtrWillBeRawPtr<Node> refNode, int offset, ExceptionState& exceptionState)
{
+ if (!refNode) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided was null.");
+ return;
+ }
+
bool didMoveDocument = false;
if (refNode->document() != m_ownerDocument) {
setDocument(refNode->document());
@@ -212,6 +222,11 @@
bool Range::isPointInRange(Node* refNode, int offset, ExceptionState& exceptionState)
{
+ if (!refNode) {
+ exceptionState.throwDOMException(HierarchyRequestError, "The node provided was null.");
+ return false;
+ }
+
if (!refNode->inActiveDocument() || refNode->document() != m_ownerDocument) {
return false;
}
@@ -264,6 +279,11 @@
// http://developer.mozilla.org/en/docs/DOM:range.compareNode
// This method returns 0, 1, 2, or 3 based on if the node is before, after,
// before and after(surrounds), or inside the range, respectively
+
+ if (!refNode) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided was null.");
+ return NODE_BEFORE;
+ }
if (!refNode->inActiveDocument()) {
// Firefox doesn't throw an exception for this case; it returns 0.
@@ -450,8 +470,13 @@
}
}
-static bool nodeValidForIntersects(Node* refNode, Document* expectedDocument)
-{
+static bool nodeValidForIntersects(Node* refNode, Document* expectedDocument, ExceptionState& exceptionState)
+{
+ if (!refNode) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided is null.");
+ return false;
+ }
+
if (!refNode->inActiveDocument() || refNode->document() != expectedDocument) {
// Firefox doesn't throw an exception for these cases; it returns false.
return false;
@@ -464,7 +489,7 @@
{
// http://developer.mozilla.org/en/docs/DOM:range.intersectsNode
// Returns a bool if the node intersects the range.
- if (!nodeValidForIntersects(refNode, m_ownerDocument.get()))
+ if (!nodeValidForIntersects(refNode, m_ownerDocument.get(), exceptionState))
return false;
ContainerNode* parentNode = refNode->parentNode();
@@ -494,7 +519,7 @@
{
// http://developer.mozilla.org/en/docs/DOM:range.intersectsNode
// Returns a bool if the node intersects the range.
- if (!nodeValidForIntersects(refNode, start.document()))
+ if (!nodeValidForIntersects(refNode, start.document(), exceptionState))
return false;
ContainerNode* parentNode = refNode->parentNode();
@@ -833,6 +858,11 @@
void Range::insertNode(PassRefPtrWillBeRawPtr<Node> prpNewNode, ExceptionState& exceptionState)
{
RefPtrWillBeRawPtr<Node> newNode = prpNewNode;
+
+ if (!newNode) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided is null.");
+ return;
+ }
// HierarchyRequestError: Raised if the container of the start of the Range is of a type that
// does not allow children of the type of newNode or if newNode is an ancestor of the container.
@@ -1048,6 +1078,11 @@
void Range::checkNodeBA(Node* n, ExceptionState& exceptionState) const
{
+ if (!n) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided is null.");
+ return;
+ }
+
// InvalidNodeTypeError: Raised if the root container of refNode is not an
// Attr, Document, DocumentFragment or ShadowRoot node, or part of a SVG shadow DOM tree,
// or if refNode is a Document, DocumentFragment, ShadowRoot, Attr, Entity, or Notation node.
@@ -1126,6 +1161,11 @@
void Range::selectNode(Node* refNode, ExceptionState& exceptionState)
{
+ if (!refNode) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided is null.");
+ return;
+ }
+
if (!refNode->parentNode()) {
exceptionState.throwDOMException(InvalidNodeTypeError, "the given Node has no parent.");
return;
@@ -1175,6 +1215,11 @@
void Range::selectNodeContents(Node* refNode, ExceptionState& exceptionState)
{
+ if (!refNode) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided is null.");
+ return;
+ }
+
// InvalidNodeTypeError: Raised if refNode or an ancestor of refNode is an Entity, Notation
// or DocumentType node.
for (Node* n = refNode; n; n = n->parentNode()) {
@@ -1235,6 +1280,10 @@
void Range::surroundContents(PassRefPtrWillBeRawPtr<Node> passNewParent, ExceptionState& exceptionState)
{
RefPtrWillBeRawPtr<Node> newParent = passNewParent;
+ if (!newParent) {
+ exceptionState.throwDOMException(NotFoundError, "The node provided is null.");
+ return;
+ }
// InvalidStateError: Raised if the Range partially selects a non-Text node.
Node* startNonTextContainer = m_start.container();
« no previous file with comments | « LayoutTests/fast/text/first-letter-bad-line-boxes-crash-expected.txt ('k') | Source/core/dom/Range.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698