Index: third_party/WebKit/Source/core/editing/SelectionAdjuster.cpp |
diff --git a/third_party/WebKit/Source/core/editing/SelectionAdjuster.cpp b/third_party/WebKit/Source/core/editing/SelectionAdjuster.cpp |
deleted file mode 100644 |
index b31245be7e826d1264dd88e5979f50d4f26e96ac..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/core/editing/SelectionAdjuster.cpp |
+++ /dev/null |
@@ -1,206 +0,0 @@ |
-/* |
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights |
- * reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY |
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR |
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#include "core/editing/SelectionAdjuster.h" |
- |
-#include "core/editing/EditingUtilities.h" |
- |
-namespace blink { |
- |
-// TODO(xiaochengh): Move everything to VisibleSelection.cpp. |
- |
-namespace { |
- |
-Node* enclosingShadowHost(Node* node) { |
- for (Node* runner = node; runner; |
- runner = FlatTreeTraversal::parent(*runner)) { |
- if (isShadowHost(runner)) |
- return runner; |
- } |
- return nullptr; |
-} |
- |
-bool isEnclosedBy(const PositionInFlatTree& position, const Node& node) { |
- DCHECK(position.isNotNull()); |
- Node* anchorNode = position.anchorNode(); |
- if (anchorNode == node) |
- return !position.isAfterAnchor() && !position.isBeforeAnchor(); |
- |
- return FlatTreeTraversal::isDescendantOf(*anchorNode, node); |
-} |
- |
-bool isSelectionBoundary(const Node& node) { |
- return isHTMLTextAreaElement(node) || isHTMLInputElement(node) || |
- isHTMLSelectElement(node); |
-} |
- |
-Node* enclosingShadowHostForStart(const PositionInFlatTree& position) { |
- Node* node = position.nodeAsRangeFirstNode(); |
- if (!node) |
- return nullptr; |
- Node* shadowHost = enclosingShadowHost(node); |
- if (!shadowHost) |
- return nullptr; |
- if (!isEnclosedBy(position, *shadowHost)) |
- return nullptr; |
- return isSelectionBoundary(*shadowHost) ? shadowHost : nullptr; |
-} |
- |
-Node* enclosingShadowHostForEnd(const PositionInFlatTree& position) { |
- Node* node = position.nodeAsRangeLastNode(); |
- if (!node) |
- return nullptr; |
- Node* shadowHost = enclosingShadowHost(node); |
- if (!shadowHost) |
- return nullptr; |
- if (!isEnclosedBy(position, *shadowHost)) |
- return nullptr; |
- return isSelectionBoundary(*shadowHost) ? shadowHost : nullptr; |
-} |
- |
-PositionInFlatTree adjustPositionInFlatTreeForStart( |
- const PositionInFlatTree& position, |
- Node* shadowHost) { |
- if (isEnclosedBy(position, *shadowHost)) { |
- if (position.isBeforeChildren()) |
- return PositionInFlatTree::beforeNode(shadowHost); |
- return PositionInFlatTree::afterNode(shadowHost); |
- } |
- |
- // We use |firstChild|'s after instead of beforeAllChildren for backward |
- // compatibility. The positions are same but the anchors would be different, |
- // and selection painting uses anchor nodes. |
- if (Node* firstChild = FlatTreeTraversal::firstChild(*shadowHost)) |
- return PositionInFlatTree::beforeNode(firstChild); |
- return PositionInFlatTree(); |
-} |
- |
-Position adjustPositionForEnd(const Position& currentPosition, |
- Node* startContainerNode) { |
- TreeScope& treeScope = startContainerNode->treeScope(); |
- |
- DCHECK(currentPosition.computeContainerNode()->treeScope() != treeScope); |
- |
- if (Node* ancestor = treeScope.ancestorInThisScope( |
- currentPosition.computeContainerNode())) { |
- if (ancestor->contains(startContainerNode)) |
- return Position::afterNode(ancestor); |
- return Position::beforeNode(ancestor); |
- } |
- |
- if (Node* lastChild = treeScope.rootNode().lastChild()) |
- return Position::afterNode(lastChild); |
- |
- return Position(); |
-} |
- |
-PositionInFlatTree adjustPositionInFlatTreeForEnd( |
- const PositionInFlatTree& position, |
- Node* shadowHost) { |
- if (isEnclosedBy(position, *shadowHost)) { |
- if (position.isAfterChildren()) |
- return PositionInFlatTree::afterNode(shadowHost); |
- return PositionInFlatTree::beforeNode(shadowHost); |
- } |
- |
- // We use |lastChild|'s after instead of afterAllChildren for backward |
- // compatibility. The positions are same but the anchors would be different, |
- // and selection painting uses anchor nodes. |
- if (Node* lastChild = FlatTreeTraversal::lastChild(*shadowHost)) |
- return PositionInFlatTree::afterNode(lastChild); |
- return PositionInFlatTree(); |
-} |
- |
-Position adjustPositionForStart(const Position& currentPosition, |
- Node* endContainerNode) { |
- TreeScope& treeScope = endContainerNode->treeScope(); |
- |
- DCHECK(currentPosition.computeContainerNode()->treeScope() != treeScope); |
- |
- if (Node* ancestor = treeScope.ancestorInThisScope( |
- currentPosition.computeContainerNode())) { |
- if (ancestor->contains(endContainerNode)) |
- return Position::beforeNode(ancestor); |
- return Position::afterNode(ancestor); |
- } |
- |
- if (Node* firstChild = treeScope.rootNode().firstChild()) |
- return Position::beforeNode(firstChild); |
- |
- return Position(); |
-} |
- |
-} // namespace |
- |
-std::pair<AdjustDirection, Position> adjustmentToAvoidCrossingShadowBoundaries( |
- const VisibleSelection& selection) { |
- // Note: |m_selectionType| isn't computed yet. |
- DCHECK(selection.base().isNotNull()); |
- DCHECK(selection.extent().isNotNull()); |
- DCHECK(selection.start().isNotNull()); |
- DCHECK(selection.end().isNotNull()); |
- |
- // TODO(hajimehoshi): Checking treeScope is wrong when a node is |
- // distributed, but we leave it as it is for backward compatibility. |
- if (selection.start().anchorNode()->treeScope() == |
- selection.end().anchorNode()->treeScope()) |
- return std::make_pair(AdjustDirection::kAdjustNone, Position()); |
- |
- if (selection.isBaseFirst()) { |
- const Position& newEnd = adjustPositionForEnd( |
- selection.end(), selection.start().computeContainerNode()); |
- return std::make_pair(AdjustDirection::kAdjustEnd, newEnd); |
- } |
- |
- const Position& newStart = adjustPositionForStart( |
- selection.start(), selection.end().computeContainerNode()); |
- return std::make_pair(AdjustDirection::kAdjustStart, newStart); |
-} |
- |
-// This function is called twice. The first is called when |m_start| and |m_end| |
-// or |m_extent| are same, and the second when |m_start| and |m_end| are changed |
-// after downstream/upstream. |
-std::pair<AdjustDirection, PositionInFlatTree> |
-adjustmentToAvoidCrossingShadowBoundaries( |
- const VisibleSelectionInFlatTree& selection) { |
- Node* const shadowHostStart = enclosingShadowHostForStart(selection.start()); |
- Node* const shadowHostEnd = enclosingShadowHostForEnd(selection.end()); |
- if (shadowHostStart == shadowHostEnd) |
- return std::make_pair(AdjustDirection::kAdjustNone, PositionInFlatTree()); |
- |
- if (selection.isBaseFirst()) { |
- Node* const shadowHost = shadowHostStart ? shadowHostStart : shadowHostEnd; |
- const PositionInFlatTree& newEnd = |
- adjustPositionInFlatTreeForEnd(selection.end(), shadowHost); |
- return std::make_pair(AdjustDirection::kAdjustEnd, newEnd); |
- } |
- Node* const shadowHost = shadowHostEnd ? shadowHostEnd : shadowHostStart; |
- const PositionInFlatTree& newStart = |
- adjustPositionInFlatTreeForStart(selection.start(), shadowHost); |
- return std::make_pair(AdjustDirection::kAdjustStart, newStart); |
-} |
- |
-} // namespace blink |