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

Side by Side Diff: Source/core/editing/SplitTextNodeCommand.cpp

Issue 23822003: Have EditCommand classes deal with Document references, not pointers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 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 18 matching lines...) Expand all
29 #include "bindings/v8/ExceptionState.h" 29 #include "bindings/v8/ExceptionState.h"
30 #include "bindings/v8/ExceptionStatePlaceholder.h" 30 #include "bindings/v8/ExceptionStatePlaceholder.h"
31 #include "core/dom/Document.h" 31 #include "core/dom/Document.h"
32 #include "core/dom/DocumentMarkerController.h" 32 #include "core/dom/DocumentMarkerController.h"
33 #include "core/dom/Text.h" 33 #include "core/dom/Text.h"
34 #include "wtf/Assertions.h" 34 #include "wtf/Assertions.h"
35 35
36 namespace WebCore { 36 namespace WebCore {
37 37
38 SplitTextNodeCommand::SplitTextNodeCommand(PassRefPtr<Text> text, int offset) 38 SplitTextNodeCommand::SplitTextNodeCommand(PassRefPtr<Text> text, int offset)
39 : SimpleEditCommand(&text->document()) 39 : SimpleEditCommand(text->document())
40 , m_text2(text) 40 , m_text2(text)
41 , m_offset(offset) 41 , m_offset(offset)
42 { 42 {
43 // NOTE: Various callers rely on the fact that the original node becomes 43 // NOTE: Various callers rely on the fact that the original node becomes
44 // the second node (i.e. the new node is inserted before the existing one). 44 // the second node (i.e. the new node is inserted before the existing one).
45 // That is not a fundamental dependency (i.e. it could be re-coded), but 45 // That is not a fundamental dependency (i.e. it could be re-coded), but
46 // rather is based on how this code happens to work. 46 // rather is based on how this code happens to work.
47 ASSERT(m_text2); 47 ASSERT(m_text2);
48 ASSERT(m_text2->length() > 0); 48 ASSERT(m_text2->length() > 0);
49 ASSERT(m_offset > 0); 49 ASSERT(m_offset > 0);
50 ASSERT(m_offset < m_text2->length()); 50 ASSERT(m_offset < m_text2->length());
51 } 51 }
52 52
53 void SplitTextNodeCommand::doApply() 53 void SplitTextNodeCommand::doApply()
54 { 54 {
55 ContainerNode* parent = m_text2->parentNode(); 55 ContainerNode* parent = m_text2->parentNode();
56 if (!parent || !parent->rendererIsEditable()) 56 if (!parent || !parent->rendererIsEditable())
57 return; 57 return;
58 58
59 String prefixText = m_text2->substringData(0, m_offset, IGNORE_EXCEPTION); 59 String prefixText = m_text2->substringData(0, m_offset, IGNORE_EXCEPTION);
60 if (prefixText.isEmpty()) 60 if (prefixText.isEmpty())
61 return; 61 return;
62 62
63 m_text1 = Text::create(document(), prefixText); 63 m_text1 = Text::create(&document(), prefixText);
64 ASSERT(m_text1); 64 ASSERT(m_text1);
65 document()->markers()->copyMarkers(m_text2.get(), 0, m_offset, m_text1.get() , 0); 65 document().markers()->copyMarkers(m_text2.get(), 0, m_offset, m_text1.get(), 0);
66 66
67 insertText1AndTrimText2(); 67 insertText1AndTrimText2();
68 } 68 }
69 69
70 void SplitTextNodeCommand::doUnapply() 70 void SplitTextNodeCommand::doUnapply()
71 { 71 {
72 if (!m_text1 || !m_text1->rendererIsEditable()) 72 if (!m_text1 || !m_text1->rendererIsEditable())
73 return; 73 return;
74 74
75 ASSERT(&m_text1->document() == document()); 75 ASSERT(&m_text1->document() == &document());
76 76
77 String prefixText = m_text1->data(); 77 String prefixText = m_text1->data();
78 78
79 m_text2->insertData(0, prefixText, ASSERT_NO_EXCEPTION, DeprecatedAttachNow) ; 79 m_text2->insertData(0, prefixText, ASSERT_NO_EXCEPTION, DeprecatedAttachNow) ;
80 80
81 document()->markers()->copyMarkers(m_text1.get(), 0, prefixText.length(), m_ text2.get(), 0); 81 document().markers()->copyMarkers(m_text1.get(), 0, prefixText.length(), m_t ext2.get(), 0);
82 m_text1->remove(ASSERT_NO_EXCEPTION); 82 m_text1->remove(ASSERT_NO_EXCEPTION);
83 } 83 }
84 84
85 void SplitTextNodeCommand::doReapply() 85 void SplitTextNodeCommand::doReapply()
86 { 86 {
87 if (!m_text1 || !m_text2) 87 if (!m_text1 || !m_text2)
88 return; 88 return;
89 89
90 ContainerNode* parent = m_text2->parentNode(); 90 ContainerNode* parent = m_text2->parentNode();
91 if (!parent || !parent->rendererIsEditable()) 91 if (!parent || !parent->rendererIsEditable())
(...skipping 13 matching lines...) Expand all
105 105
106 #ifndef NDEBUG 106 #ifndef NDEBUG
107 void SplitTextNodeCommand::getNodesInCommand(HashSet<Node*>& nodes) 107 void SplitTextNodeCommand::getNodesInCommand(HashSet<Node*>& nodes)
108 { 108 {
109 addNodeAndDescendants(m_text1.get(), nodes); 109 addNodeAndDescendants(m_text1.get(), nodes);
110 addNodeAndDescendants(m_text2.get(), nodes); 110 addNodeAndDescendants(m_text2.get(), nodes);
111 } 111 }
112 #endif 112 #endif
113 113
114 } // namespace WebCore 114 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/editing/SplitElementCommand.cpp ('k') | Source/core/editing/SplitTextNodeContainingElementCommand.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698