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

Unified Diff: Source/core/editing/VisibleSelection.cpp

Issue 565613002: Remove usages of temporary Range objects that end up registered on the (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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 | « Source/core/editing/VisibleSelection.h ('k') | Source/core/editing/VisibleUnits.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/VisibleSelection.cpp
diff --git a/Source/core/editing/VisibleSelection.cpp b/Source/core/editing/VisibleSelection.cpp
index e9fa94cca02efdb656f07edda814c6026f469a1f..d8c63bbee4e6432a364a08ce385e8522bf7fee20 100644
--- a/Source/core/editing/VisibleSelection.cpp
+++ b/Source/core/editing/VisibleSelection.cpp
@@ -204,8 +204,16 @@ bool VisibleSelection::intersectsNode(Node* node) const
PassRefPtrWillBeRawPtr<Range> VisibleSelection::toNormalizedRange() const
{
+ Position start, end;
+ if (toNormalizedPositions(start, end))
+ return Range::create(*start.document(), start, end);
+ return nullptr;
+}
+
+bool VisibleSelection::toNormalizedPositions(Position& start, Position& end) const
+{
if (isNone())
- return nullptr;
+ return false;
// Make sure we have an updated layout since this function is called
// in the course of running edit commands which modify the DOM.
@@ -215,15 +223,14 @@ PassRefPtrWillBeRawPtr<Range> VisibleSelection::toNormalizedRange() const
// Check again, because updating layout can clear the selection.
if (isNone())
- return nullptr;
+ return false;
- Position s, e;
if (isCaret()) {
// If the selection is a caret, move the range start upstream. This helps us match
// the conventions of text editors tested, which make style determinations based
// on the character before the caret, if any.
- s = m_start.upstream().parentAnchoredEquivalent();
- e = s;
+ start = m_start.upstream().parentAnchoredEquivalent();
+ end = start;
} else {
// If the selection is a range, select the minimum range that encompasses the selection.
// Again, this is to match the conventions of text editors tested, which make style
@@ -237,25 +244,23 @@ PassRefPtrWillBeRawPtr<Range> VisibleSelection::toNormalizedRange() const
// ^ selected
//
ASSERT(isRange());
- s = m_start.downstream();
- e = m_end.upstream();
- if (comparePositions(s, e) > 0) {
+ start = m_start.downstream();
+ end = m_end.upstream();
+ if (comparePositions(start, end) > 0) {
// Make sure the start is before the end.
// The end can wind up before the start if collapsed whitespace is the only thing selected.
- Position tmp = s;
- s = e;
- e = tmp;
+ Position tmp = start;
+ start = end;
+ end = tmp;
}
- s = s.parentAnchoredEquivalent();
- e = e.parentAnchoredEquivalent();
+ start = start.parentAnchoredEquivalent();
+ end = end.parentAnchoredEquivalent();
}
- if (!s.containerNode() || !e.containerNode())
- return nullptr;
+ if (!start.containerNode() || !end.containerNode())
+ return false;
- // VisibleSelections are supposed to always be valid. This constructor will ASSERT
- // if a valid range could not be created, which is fine for this callsite.
- return Range::create(*s.document(), s, e);
+ return true;
}
bool VisibleSelection::expandUsingGranularity(TextGranularity granularity)
« no previous file with comments | « Source/core/editing/VisibleSelection.h ('k') | Source/core/editing/VisibleUnits.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698