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

Unified Diff: third_party/WebKit/Source/core/editing/DOMSelection.cpp

Issue 2778963002: Return EphemeralRange instead of Range in DOMSelection::createRangeFromSelectionEditor (Closed)
Patch Set: Created 3 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 | « third_party/WebKit/Source/core/editing/DOMSelection.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/editing/DOMSelection.cpp
diff --git a/third_party/WebKit/Source/core/editing/DOMSelection.cpp b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
index fd59dced6fe22cd8f6fb1b08cf23cbcbe70d51bb..d473161afba0f1e496fda0842d1b9f6079b6c2fb 100644
--- a/third_party/WebKit/Source/core/editing/DOMSelection.cpp
+++ b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
@@ -224,7 +224,9 @@ unsigned DOMSelection::rangeCount() const {
if (isSelectionOfDocument())
return 1;
// In ShadowRoot, we need to try adjustment.
- return createRangeFromSelectionEditor() ? 1 : 0;
+ if (createRangeFromSelectionEditor().isNotNull())
yosin_UTC9 2017/03/28 07:04:31 nit: I prefer using "?:" as original return creat
yoichio 2017/03/28 09:32:51 New early-return follows above early returns of 1
+ return 1;
+ return 0;
}
// https://www.w3.org/TR/selection-api/#dom-selection-collapse
@@ -530,7 +532,7 @@ Range* DOMSelection::getRangeAt(unsigned index,
if (Range* cachedRange = documentCachedRange())
return cachedRange;
- Range* range = createRangeFromSelectionEditor();
+ Range* range = createRange(createRangeFromSelectionEditor());
cacheRangeIfSelectionOfDocument(range);
return range;
}
@@ -539,23 +541,24 @@ Range* DOMSelection::primaryRangeOrNull() const {
return rangeCount() > 0 ? getRangeAt(0, ASSERT_NO_EXCEPTION) : nullptr;
}
-Range* DOMSelection::createRangeFromSelectionEditor() const {
+EphemeralRange DOMSelection::createRangeFromSelectionEditor() const {
const VisibleSelection& selection = visibleSelection();
const Position& anchor = blink::anchorPosition(selection);
if (isSelectionOfDocument() && !anchor.anchorNode()->isInShadowTree())
- return createRange(firstEphemeralRangeOf(selection));
+ return firstEphemeralRangeOf(selection);
+
+ Node* const anchorNode = shadowAdjustedNode(anchor);
+ if (!anchorNode) // crbug.com/595100
+ return EphemeralRange();
- Node* const node = shadowAdjustedNode(anchor);
- if (!node) // crbug.com/595100
- return nullptr;
const Position& focus = focusPosition(selection);
- if (!selection.isBaseFirst()) {
- return Range::create(*anchor.document(), shadowAdjustedNode(focus),
- shadowAdjustedOffset(focus), node,
- shadowAdjustedOffset(anchor));
- }
- return Range::create(*anchor.document(), node, shadowAdjustedOffset(anchor),
- shadowAdjustedNode(focus), shadowAdjustedOffset(focus));
+ const Position shadowAdjustedFocus =
+ Position(shadowAdjustedNode(focus), shadowAdjustedOffset(focus));
+ const Position shadowAdjustedAnchor =
+ Position(anchorNode, shadowAdjustedOffset(anchor));
+ if (selection.isBaseFirst())
+ return EphemeralRange(shadowAdjustedAnchor, shadowAdjustedFocus);
+ return EphemeralRange(shadowAdjustedFocus, shadowAdjustedAnchor);
}
bool DOMSelection::isSelectionOfDocument() const {
« no previous file with comments | « third_party/WebKit/Source/core/editing/DOMSelection.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698