Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 703 // Only register a new undo command if the command passed in is | 703 // Only register a new undo command if the command passed in is |
| 704 // different from the last command | 704 // different from the last command |
| 705 m_lastEditCommand = cmd; | 705 m_lastEditCommand = cmd; |
| 706 if (UndoStack* undoStack = this->undoStack()) | 706 if (UndoStack* undoStack = this->undoStack()) |
| 707 undoStack->registerUndoStep(m_lastEditCommand->ensureComposition()); | 707 undoStack->registerUndoStep(m_lastEditCommand->ensureComposition()); |
| 708 } | 708 } |
| 709 | 709 |
| 710 respondToChangedContents(newSelection); | 710 respondToChangedContents(newSelection); |
| 711 } | 711 } |
| 712 | 712 |
| 713 static bool isValidPosition(const Position& position) | |
| 714 { | |
| 715 if (!position.inDocument()) | |
| 716 return false; | |
| 717 | |
| 718 if (position.anchorType() != Position::PositionIsOffsetInAnchor) | |
| 719 return true; | |
| 720 | |
| 721 if (position.offsetInContainerNode() < 0) | |
| 722 return false; | |
| 723 | |
| 724 const unsigned offset = static_cast<unsigned>(position.offsetInContainerNode ()); | |
| 725 const unsigned nodeLength = Range::lengthOfContentsInNode(position.anchorNod e()); | |
| 726 return offset <= nodeLength; | |
| 727 } | |
| 728 | |
| 713 void Editor::unappliedEditing(PassRefPtrWillBeRawPtr<EditCommandComposition> cmd ) | 729 void Editor::unappliedEditing(PassRefPtrWillBeRawPtr<EditCommandComposition> cmd ) |
| 714 { | 730 { |
| 715 EventQueueScope scope; | 731 EventQueueScope scope; |
| 716 m_frame.document()->updateLayout(); | 732 m_frame.document()->updateLayout(); |
| 717 | 733 |
| 718 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd ->endingRootEditableElement()); | 734 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd ->endingRootEditableElement()); |
| 719 | 735 |
| 720 VisibleSelection newSelection(cmd->startingSelection()); | 736 VisibleSelection newSelection(cmd->startingSelection()); |
| 737 if (!isValidPosition(newSelection.base()) || !isValidPosition(newSelection.e xtent()) || !isValidPosition(newSelection.start()) || !isValidPosition(newSelect ion.end())) | |
| 738 newSelection = VisibleSelection(newSelection.base(), newSelection.extent (), newSelection.affinity(), newSelection.isDirectional()); | |
|
yosin_UTC9
2014/06/04 01:17:30
Q: Why do we create |VisibleSelection| from invali
yoichio
2014/06/04 02:01:46
It's OK to create null VisibleSelection if there a
yosin_UTC9
2014/06/04 02:20:57
I think it is better to reset rather than set unex
Yuta Kitamura
2014/06/05 08:37:55
First of all, in my view this line is very hard to
yoichio
2014/06/06 04:49:21
VisibleSelection is a DISALLOW_ALLOCATION class. I
| |
| 721 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram eSelection::ClearTypingStyle); | 739 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram eSelection::ClearTypingStyle); |
| 722 | 740 |
| 723 m_lastEditCommand = nullptr; | 741 m_lastEditCommand = nullptr; |
| 724 if (UndoStack* undoStack = this->undoStack()) | 742 if (UndoStack* undoStack = this->undoStack()) |
| 725 undoStack->registerRedoStep(cmd); | 743 undoStack->registerRedoStep(cmd); |
| 726 respondToChangedContents(newSelection); | 744 respondToChangedContents(newSelection); |
| 727 } | 745 } |
| 728 | 746 |
| 729 void Editor::reappliedEditing(PassRefPtrWillBeRawPtr<EditCommandComposition> cmd ) | 747 void Editor::reappliedEditing(PassRefPtrWillBeRawPtr<EditCommandComposition> cmd ) |
| 730 { | 748 { |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1235 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled); | 1253 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled); |
| 1236 } | 1254 } |
| 1237 | 1255 |
| 1238 void Editor::trace(Visitor* visitor) | 1256 void Editor::trace(Visitor* visitor) |
| 1239 { | 1257 { |
| 1240 visitor->trace(m_lastEditCommand); | 1258 visitor->trace(m_lastEditCommand); |
| 1241 visitor->trace(m_mark); | 1259 visitor->trace(m_mark); |
| 1242 } | 1260 } |
| 1243 | 1261 |
| 1244 } // namespace WebCore | 1262 } // namespace WebCore |
| OLD | NEW |