Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008 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 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1060 bool end_was_br = | 1060 bool end_was_br = |
| 1061 isHTMLBRElement(*visible_paragraph_end.DeepEquivalent().AnchorNode()); | 1061 isHTMLBRElement(*visible_paragraph_end.DeepEquivalent().AnchorNode()); |
| 1062 | 1062 |
| 1063 // Inserting default paragraph element can change visible position. We | 1063 // Inserting default paragraph element can change visible position. We |
| 1064 // should update visible positions before use them. | 1064 // should update visible positions before use them. |
| 1065 GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets(); | 1065 GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets(); |
| 1066 visible_pos = CreateVisiblePosition(pos, VP_DEFAULT_AFFINITY); | 1066 visible_pos = CreateVisiblePosition(pos, VP_DEFAULT_AFFINITY); |
| 1067 visible_paragraph_start = StartOfParagraph(visible_pos); | 1067 visible_paragraph_start = StartOfParagraph(visible_pos); |
| 1068 visible_paragraph_end = EndOfParagraph(visible_pos); | 1068 visible_paragraph_end = EndOfParagraph(visible_pos); |
| 1069 MoveParagraphs(visible_paragraph_start, visible_paragraph_end, | 1069 MoveParagraphs(visible_paragraph_start, visible_paragraph_end, |
| 1070 VisiblePosition::FirstPositionInNode(new_block), | 1070 VisiblePosition::FirstPositionInNode(*new_block), |
|
tkent
2017/06/26 08:08:22
Is new_block always non-null?
yosin_UTC9
2017/06/26 08:53:52
Yes, |new_block| holds return value of InsertNewDe
| |
| 1071 editing_state); | 1071 editing_state); |
| 1072 if (editing_state->IsAborted()) | 1072 if (editing_state->IsAborted()) |
| 1073 return nullptr; | 1073 return nullptr; |
| 1074 | 1074 |
| 1075 if (new_block->lastChild() && isHTMLBRElement(*new_block->lastChild()) && | 1075 if (new_block->lastChild() && isHTMLBRElement(*new_block->lastChild()) && |
| 1076 !end_was_br) { | 1076 !end_was_br) { |
| 1077 RemoveNode(new_block->lastChild(), editing_state); | 1077 RemoveNode(new_block->lastChild(), editing_state); |
| 1078 if (editing_state->IsAborted()) | 1078 if (editing_state->IsAborted()) |
| 1079 return nullptr; | 1079 return nullptr; |
| 1080 } | 1080 } |
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1791 Element* enclosing_anchor = EnclosingAnchorElement(original); | 1791 Element* enclosing_anchor = EnclosingAnchorElement(original); |
| 1792 Position result = original; | 1792 Position result = original; |
| 1793 | 1793 |
| 1794 if (!enclosing_anchor) | 1794 if (!enclosing_anchor) |
| 1795 return result; | 1795 return result; |
| 1796 | 1796 |
| 1797 // Don't avoid block level anchors, because that would insert content into the | 1797 // Don't avoid block level anchors, because that would insert content into the |
| 1798 // wrong paragraph. | 1798 // wrong paragraph. |
| 1799 if (enclosing_anchor && !IsEnclosingBlock(enclosing_anchor)) { | 1799 if (enclosing_anchor && !IsEnclosingBlock(enclosing_anchor)) { |
| 1800 VisiblePosition first_in_anchor = | 1800 VisiblePosition first_in_anchor = |
| 1801 VisiblePosition::FirstPositionInNode(enclosing_anchor); | 1801 VisiblePosition::FirstPositionInNode(*enclosing_anchor); |
| 1802 VisiblePosition last_in_anchor = | 1802 VisiblePosition last_in_anchor = |
| 1803 VisiblePosition::LastPositionInNode(enclosing_anchor); | 1803 VisiblePosition::LastPositionInNode(enclosing_anchor); |
| 1804 // If visually just after the anchor, insert *inside* the anchor unless it's | 1804 // If visually just after the anchor, insert *inside* the anchor unless it's |
| 1805 // the last VisiblePosition in the document, to match NSTextView. | 1805 // the last VisiblePosition in the document, to match NSTextView. |
| 1806 if (visible_pos.DeepEquivalent() == last_in_anchor.DeepEquivalent()) { | 1806 if (visible_pos.DeepEquivalent() == last_in_anchor.DeepEquivalent()) { |
| 1807 // Make sure anchors are pushed down before avoiding them so that we don't | 1807 // Make sure anchors are pushed down before avoiding them so that we don't |
| 1808 // also avoid structural elements like lists and blocks (5142012). | 1808 // also avoid structural elements like lists and blocks (5142012). |
| 1809 if (original.AnchorNode() != enclosing_anchor && | 1809 if (original.AnchorNode() != enclosing_anchor && |
| 1810 original.AnchorNode()->parentNode() != enclosing_anchor) { | 1810 original.AnchorNode()->parentNode() != enclosing_anchor) { |
| 1811 PushAnchorElementDown(enclosing_anchor, editing_state); | 1811 PushAnchorElementDown(enclosing_anchor, editing_state); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1875 for (node = start; node->parentNode() != end_node; | 1875 for (node = start; node->parentNode() != end_node; |
| 1876 node = node->parentNode()) { | 1876 node = node->parentNode()) { |
| 1877 Element* parent_element = node->parentElement(); | 1877 Element* parent_element = node->parentElement(); |
| 1878 if (!parent_element) | 1878 if (!parent_element) |
| 1879 break; | 1879 break; |
| 1880 | 1880 |
| 1881 GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets(); | 1881 GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets(); |
| 1882 | 1882 |
| 1883 // Do not split a node when doing so introduces an empty node. | 1883 // Do not split a node when doing so introduces an empty node. |
| 1884 VisiblePosition position_in_parent = | 1884 VisiblePosition position_in_parent = |
| 1885 VisiblePosition::FirstPositionInNode(parent_element); | 1885 VisiblePosition::FirstPositionInNode(*parent_element); |
| 1886 VisiblePosition position_in_node = | 1886 VisiblePosition position_in_node = |
| 1887 CreateVisiblePosition(FirstPositionInOrBeforeNode(node)); | 1887 CreateVisiblePosition(FirstPositionInOrBeforeNode(node)); |
| 1888 if (position_in_parent.DeepEquivalent() != | 1888 if (position_in_parent.DeepEquivalent() != |
| 1889 position_in_node.DeepEquivalent()) | 1889 position_in_node.DeepEquivalent()) |
| 1890 SplitElement(parent_element, node); | 1890 SplitElement(parent_element, node); |
| 1891 } | 1891 } |
| 1892 | 1892 |
| 1893 return node; | 1893 return node; |
| 1894 } | 1894 } |
| 1895 | 1895 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1974 | 1974 |
| 1975 DEFINE_TRACE(CompositeEditCommand) { | 1975 DEFINE_TRACE(CompositeEditCommand) { |
| 1976 visitor->Trace(commands_); | 1976 visitor->Trace(commands_); |
| 1977 visitor->Trace(starting_selection_); | 1977 visitor->Trace(starting_selection_); |
| 1978 visitor->Trace(ending_selection_); | 1978 visitor->Trace(ending_selection_); |
| 1979 visitor->Trace(undo_step_); | 1979 visitor->Trace(undo_step_); |
| 1980 EditCommand::Trace(visitor); | 1980 EditCommand::Trace(visitor); |
| 1981 } | 1981 } |
| 1982 | 1982 |
| 1983 } // namespace blink | 1983 } // namespace blink |
| OLD | NEW |