| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 } | 151 } |
| 152 | 152 |
| 153 const VisibleSelectionInFlatTree& FrameSelection::selectionInFlatTree() const { | 153 const VisibleSelectionInFlatTree& FrameSelection::selectionInFlatTree() const { |
| 154 return visibleSelection<EditingInFlatTreeStrategy>(); | 154 return visibleSelection<EditingInFlatTreeStrategy>(); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void FrameSelection::moveTo(const VisiblePosition& pos, | 157 void FrameSelection::moveTo(const VisiblePosition& pos, |
| 158 EUserTriggered userTriggered, | 158 EUserTriggered userTriggered, |
| 159 CursorAlignOnScroll align) { | 159 CursorAlignOnScroll align) { |
| 160 SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered; | 160 SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered; |
| 161 setSelection( | 161 setSelection(createVisibleSelection(pos, pos, selection().isDirectional()), |
| 162 createVisibleSelectionDeprecated(pos, pos, selection().isDirectional()), | 162 options, align); |
| 163 options, align); | |
| 164 } | 163 } |
| 165 | 164 |
| 166 void FrameSelection::moveTo(const Position& pos, TextAffinity affinity) { | 165 void FrameSelection::moveTo(const Position& pos, TextAffinity affinity) { |
| 167 SetSelectionOptions options = CloseTyping | ClearTypingStyle; | 166 SetSelectionOptions options = CloseTyping | ClearTypingStyle; |
| 168 setSelection(createVisibleSelectionDeprecated(pos, affinity, | 167 setSelection( |
| 169 selection().isDirectional()), | 168 createVisibleSelection(pos, affinity, selection().isDirectional()), |
| 170 options); | 169 options); |
| 171 } | 170 } |
| 172 | 171 |
| 173 // TODO(xiaochengh): We should not use reference to return value. | 172 // TODO(xiaochengh): We should not use reference to return value. |
| 174 template <typename Strategy> | 173 template <typename Strategy> |
| 175 static void adjustEndpointsAtBidiBoundary( | 174 static void adjustEndpointsAtBidiBoundary( |
| 176 VisiblePositionTemplate<Strategy>& visibleBase, | 175 VisiblePositionTemplate<Strategy>& visibleBase, |
| 177 VisiblePositionTemplate<Strategy>& visibleExtent) { | 176 VisiblePositionTemplate<Strategy>& visibleExtent) { |
| 178 DCHECK(visibleBase.isValid()); | 177 DCHECK(visibleBase.isValid()); |
| 179 DCHECK(visibleExtent.isValid()); | 178 DCHECK(visibleExtent.isValid()); |
| 180 | 179 |
| (...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 899 // Create compute positions before and after the element. | 898 // Create compute positions before and after the element. |
| 900 unsigned ownerElementNodeIndex = ownerElement->nodeIndex(); | 899 unsigned ownerElementNodeIndex = ownerElement->nodeIndex(); |
| 901 VisiblePosition beforeOwnerElement = createVisiblePosition( | 900 VisiblePosition beforeOwnerElement = createVisiblePosition( |
| 902 Position(ownerElementParent, ownerElementNodeIndex)); | 901 Position(ownerElementParent, ownerElementNodeIndex)); |
| 903 VisiblePosition afterOwnerElement = createVisiblePosition( | 902 VisiblePosition afterOwnerElement = createVisiblePosition( |
| 904 Position(ownerElementParent, ownerElementNodeIndex + 1), | 903 Position(ownerElementParent, ownerElementNodeIndex + 1), |
| 905 VP_UPSTREAM_IF_POSSIBLE); | 904 VP_UPSTREAM_IF_POSSIBLE); |
| 906 | 905 |
| 907 // Focus on the parent frame, and then select from before this element to afte
r. | 906 // Focus on the parent frame, and then select from before this element to afte
r. |
| 908 VisibleSelection newSelection = | 907 VisibleSelection newSelection = |
| 909 createVisibleSelectionDeprecated(beforeOwnerElement, afterOwnerElement); | 908 createVisibleSelection(beforeOwnerElement, afterOwnerElement); |
| 910 page->focusController().setFocusedFrame(parent); | 909 page->focusController().setFocusedFrame(parent); |
| 911 // setFocusedFrame can dispatch synchronous focus/blur events. The document | 910 // setFocusedFrame can dispatch synchronous focus/blur events. The document |
| 912 // tree might be modified. | 911 // tree might be modified. |
| 913 if (newSelection.isNonOrphanedCaretOrRange()) | 912 if (newSelection.isNonOrphanedCaretOrRange()) |
| 914 toLocalFrame(parent)->selection().setSelection(newSelection); | 913 toLocalFrame(parent)->selection().setSelection(newSelection); |
| 915 } | 914 } |
| 916 | 915 |
| 917 // Returns a shadow tree node for legacy shadow trees, a child of the | 916 // Returns a shadow tree node for legacy shadow trees, a child of the |
| 918 // ShadowRoot node for new shadow trees, or 0 for non-shadow trees. | 917 // ShadowRoot node for new shadow trees, or 0 for non-shadow trees. |
| 919 static Node* nonBoundaryShadowTreeRootNode(const Position& position) { | 918 static Node* nonBoundaryShadowTreeRootNode(const Position& position) { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 985 TextAffinity affinity, | 984 TextAffinity affinity, |
| 986 SelectionDirectionalMode directional, | 985 SelectionDirectionalMode directional, |
| 987 SetSelectionOptions options) { | 986 SetSelectionOptions options) { |
| 988 if (range.isNull()) | 987 if (range.isNull()) |
| 989 return false; | 988 return false; |
| 990 m_selectionEditor->resetLogicalRange(); | 989 m_selectionEditor->resetLogicalRange(); |
| 991 // Since |FrameSeleciton::setSelection()| dispatches events and DOM tree | 990 // Since |FrameSeleciton::setSelection()| dispatches events and DOM tree |
| 992 // can be modified by event handlers, we should create |Range| object before | 991 // can be modified by event handlers, we should create |Range| object before |
| 993 // calling it. | 992 // calling it. |
| 994 Range* logicalRange = createRange(range); | 993 Range* logicalRange = createRange(range); |
| 995 VisibleSelection newSelection = createVisibleSelectionDeprecated( | 994 VisibleSelection newSelection = createVisibleSelection( |
| 996 range.startPosition(), range.endPosition(), affinity, | 995 range.startPosition(), range.endPosition(), affinity, |
| 997 directional == SelectionDirectionalMode::Directional); | 996 directional == SelectionDirectionalMode::Directional); |
| 998 setSelection(newSelection, options); | 997 setSelection(newSelection, options); |
| 999 m_selectionEditor->setLogicalRange(logicalRange); | 998 m_selectionEditor->setLogicalRange(logicalRange); |
| 1000 return true; | 999 return true; |
| 1001 } | 1000 } |
| 1002 | 1001 |
| 1003 Range* FrameSelection::firstRange() const { | 1002 Range* FrameSelection::firstRange() const { |
| 1004 return m_selectionEditor->firstRange(); | 1003 return m_selectionEditor->firstRange(); |
| 1005 } | 1004 } |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1298 Document* document = m_frame->document(); | 1297 Document* document = m_frame->document(); |
| 1299 bool caretBrowsing = | 1298 bool caretBrowsing = |
| 1300 m_frame->settings() && m_frame->settings()->caretBrowsingEnabled(); | 1299 m_frame->settings() && m_frame->settings()->caretBrowsingEnabled(); |
| 1301 if (!isNone() || !(blink::hasEditableStyle(*document) || caretBrowsing)) | 1300 if (!isNone() || !(blink::hasEditableStyle(*document) || caretBrowsing)) |
| 1302 return; | 1301 return; |
| 1303 | 1302 |
| 1304 Element* documentElement = document->documentElement(); | 1303 Element* documentElement = document->documentElement(); |
| 1305 if (!documentElement) | 1304 if (!documentElement) |
| 1306 return; | 1305 return; |
| 1307 if (HTMLBodyElement* body = | 1306 if (HTMLBodyElement* body = |
| 1308 Traversal<HTMLBodyElement>::firstChild(*documentElement)) | 1307 Traversal<HTMLBodyElement>::firstChild(*documentElement)) { |
| 1309 setSelection(createVisibleSelectionDeprecated( | 1308 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 1310 firstPositionInOrBeforeNode(body), TextAffinity::Downstream)); | 1309 // needs to be audited. See http://crbug.com/590369 for more details. |
| 1310 document->updateStyleAndLayoutIgnorePendingStylesheets(); |
| 1311 |
| 1312 setSelection(createVisibleSelection(firstPositionInOrBeforeNode(body), |
| 1313 TextAffinity::Downstream)); |
| 1314 } |
| 1311 } | 1315 } |
| 1312 | 1316 |
| 1313 // TODO(yoichio): We should have LocalFrame having FrameCaret, | 1317 // TODO(yoichio): We should have LocalFrame having FrameCaret, |
| 1314 // Editor and PendingSelection using FrameCaret directly | 1318 // Editor and PendingSelection using FrameCaret directly |
| 1315 // and get rid of this. | 1319 // and get rid of this. |
| 1316 bool FrameSelection::shouldShowBlockCursor() const { | 1320 bool FrameSelection::shouldShowBlockCursor() const { |
| 1317 return m_frameCaret->shouldShowBlockCursor(); | 1321 return m_frameCaret->shouldShowBlockCursor(); |
| 1318 } | 1322 } |
| 1319 | 1323 |
| 1320 // TODO(yoichio): We should have LocalFrame having FrameCaret, | 1324 // TODO(yoichio): We should have LocalFrame having FrameCaret, |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 | 1380 |
| 1377 bool FrameSelection::selectWordAroundPosition(const VisiblePosition& position) { | 1381 bool FrameSelection::selectWordAroundPosition(const VisiblePosition& position) { |
| 1378 static const EWordSide wordSideList[2] = {RightWordIfOnBoundary, | 1382 static const EWordSide wordSideList[2] = {RightWordIfOnBoundary, |
| 1379 LeftWordIfOnBoundary}; | 1383 LeftWordIfOnBoundary}; |
| 1380 for (EWordSide wordSide : wordSideList) { | 1384 for (EWordSide wordSide : wordSideList) { |
| 1381 VisiblePosition start = startOfWord(position, wordSide); | 1385 VisiblePosition start = startOfWord(position, wordSide); |
| 1382 VisiblePosition end = endOfWord(position, wordSide); | 1386 VisiblePosition end = endOfWord(position, wordSide); |
| 1383 String text = | 1387 String text = |
| 1384 plainText(EphemeralRange(start.deepEquivalent(), end.deepEquivalent())); | 1388 plainText(EphemeralRange(start.deepEquivalent(), end.deepEquivalent())); |
| 1385 if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) { | 1389 if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) { |
| 1386 setSelection(createVisibleSelectionDeprecated(start, end), | 1390 setSelection(createVisibleSelection(start, end), WordGranularity); |
| 1387 WordGranularity); | |
| 1388 return true; | 1391 return true; |
| 1389 } | 1392 } |
| 1390 } | 1393 } |
| 1391 | 1394 |
| 1392 return false; | 1395 return false; |
| 1393 } | 1396 } |
| 1394 | 1397 |
| 1395 GranularityStrategy* FrameSelection::granularityStrategy() { | 1398 GranularityStrategy* FrameSelection::granularityStrategy() { |
| 1396 // We do lazy initalization for m_granularityStrategy, because if we | 1399 // We do lazy initalization for m_granularityStrategy, because if we |
| 1397 // initialize it right in the constructor - the correct settings may not be | 1400 // initialize it right in the constructor - the correct settings may not be |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1420 setSelection(newSelection, | 1423 setSelection(newSelection, |
| 1421 FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle | | 1424 FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle | |
| 1422 FrameSelection::DoNotClearStrategy | UserTriggered, | 1425 FrameSelection::DoNotClearStrategy | UserTriggered, |
| 1423 CursorAlignOnScroll::IfNeeded, CharacterGranularity); | 1426 CursorAlignOnScroll::IfNeeded, CharacterGranularity); |
| 1424 } | 1427 } |
| 1425 | 1428 |
| 1426 void FrameSelection::moveRangeSelection(const VisiblePosition& basePosition, | 1429 void FrameSelection::moveRangeSelection(const VisiblePosition& basePosition, |
| 1427 const VisiblePosition& extentPosition, | 1430 const VisiblePosition& extentPosition, |
| 1428 TextGranularity granularity) { | 1431 TextGranularity granularity) { |
| 1429 VisibleSelection newSelection = | 1432 VisibleSelection newSelection = |
| 1430 createVisibleSelectionDeprecated(basePosition, extentPosition); | 1433 createVisibleSelection(basePosition, extentPosition); |
| 1431 newSelection.expandUsingGranularity(granularity); | 1434 newSelection.expandUsingGranularity(granularity); |
| 1432 | 1435 |
| 1433 if (newSelection.isNone()) | 1436 if (newSelection.isNone()) |
| 1434 return; | 1437 return; |
| 1435 | 1438 |
| 1436 setSelection(newSelection, granularity); | 1439 setSelection(newSelection, granularity); |
| 1437 } | 1440 } |
| 1438 | 1441 |
| 1439 void FrameSelection::updateIfNeeded() { | 1442 void FrameSelection::updateIfNeeded() { |
| 1440 m_selectionEditor->updateIfNeeded(); | 1443 m_selectionEditor->updateIfNeeded(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1478 } | 1481 } |
| 1479 | 1482 |
| 1480 void showTree(const blink::FrameSelection* sel) { | 1483 void showTree(const blink::FrameSelection* sel) { |
| 1481 if (sel) | 1484 if (sel) |
| 1482 sel->showTreeForThis(); | 1485 sel->showTreeForThis(); |
| 1483 else | 1486 else |
| 1484 LOG(INFO) << "Cannot showTree for <null> FrameSelection."; | 1487 LOG(INFO) << "Cannot showTree for <null> FrameSelection."; |
| 1485 } | 1488 } |
| 1486 | 1489 |
| 1487 #endif | 1490 #endif |
| OLD | NEW |