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

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

Issue 299353004: Oilpan: move editing objects to the heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 7 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
OLDNEW
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 632 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 EditingStyle::styleAtSelectionStart(m_frame.selection().selection(), pro pertyID == CSSPropertyBackgroundColor).get()); 643 EditingStyle::styleAtSelectionStart(m_frame.selection().selection(), pro pertyID == CSSPropertyBackgroundColor).get());
644 } 644 }
645 645
646 TriState Editor::selectionHasStyle(CSSPropertyID propertyID, const String& value ) const 646 TriState Editor::selectionHasStyle(CSSPropertyID propertyID, const String& value ) const
647 { 647 {
648 return EditingStyle::create(propertyID, value)->triStateOfStyle(m_frame.sele ction().selection()); 648 return EditingStyle::create(propertyID, value)->triStateOfStyle(m_frame.sele ction().selection());
649 } 649 }
650 650
651 String Editor::selectionStartCSSPropertyValue(CSSPropertyID propertyID) 651 String Editor::selectionStartCSSPropertyValue(CSSPropertyID propertyID)
652 { 652 {
653 RefPtr<EditingStyle> selectionStyle = EditingStyle::styleAtSelectionStart(m_ frame.selection().selection(), 653 RefPtrWillBeRawPtr<EditingStyle> selectionStyle = EditingStyle::styleAtSelec tionStart(m_frame.selection().selection(),
654 propertyID == CSSPropertyBackgroundColor); 654 propertyID == CSSPropertyBackgroundColor);
655 if (!selectionStyle || !selectionStyle->style()) 655 if (!selectionStyle || !selectionStyle->style())
656 return String(); 656 return String();
657 657
658 if (propertyID == CSSPropertyFontSize) 658 if (propertyID == CSSPropertyFontSize)
659 return String::number(selectionStyle->legacyFontSize(m_frame.document()) ); 659 return String::number(selectionStyle->legacyFontSize(m_frame.document()) );
660 return selectionStyle->style()->getPropertyValue(propertyID); 660 return selectionStyle->style()->getPropertyValue(propertyID);
661 } 661 }
662 662
663 void Editor::indent() 663 void Editor::indent()
664 { 664 {
665 ASSERT(m_frame.document()); 665 ASSERT(m_frame.document());
666 IndentOutdentCommand::create(*m_frame.document(), IndentOutdentCommand::Inde nt)->apply(); 666 IndentOutdentCommand::create(*m_frame.document(), IndentOutdentCommand::Inde nt)->apply();
667 } 667 }
668 668
669 void Editor::outdent() 669 void Editor::outdent()
670 { 670 {
671 ASSERT(m_frame.document()); 671 ASSERT(m_frame.document());
672 IndentOutdentCommand::create(*m_frame.document(), IndentOutdentCommand::Outd ent)->apply(); 672 IndentOutdentCommand::create(*m_frame.document(), IndentOutdentCommand::Outd ent)->apply();
673 } 673 }
674 674
675 static void dispatchEditableContentChangedEvents(PassRefPtr<Element> startRoot, PassRefPtr<Element> endRoot) 675 static void dispatchEditableContentChangedEvents(PassRefPtrWillBeRawPtr<Element> startRoot, PassRefPtrWillBeRawPtr<Element> endRoot)
676 { 676 {
677 if (startRoot) 677 if (startRoot)
678 startRoot->dispatchEvent(Event::create(EventTypeNames::webkitEditableCon tentChanged), IGNORE_EXCEPTION); 678 startRoot->dispatchEvent(Event::create(EventTypeNames::webkitEditableCon tentChanged), IGNORE_EXCEPTION);
679 if (endRoot && endRoot != startRoot) 679 if (endRoot && endRoot != startRoot)
680 endRoot->dispatchEvent(Event::create(EventTypeNames::webkitEditableConte ntChanged), IGNORE_EXCEPTION); 680 endRoot->dispatchEvent(Event::create(EventTypeNames::webkitEditableConte ntChanged), IGNORE_EXCEPTION);
681 } 681 }
682 682
683 void Editor::appliedEditing(PassRefPtr<CompositeEditCommand> cmd) 683 void Editor::appliedEditing(PassRefPtrWillBeRawPtr<CompositeEditCommand> cmd)
684 { 684 {
685 EventQueueScope scope; 685 EventQueueScope scope;
686 m_frame.document()->updateLayout(); 686 m_frame.document()->updateLayout();
687 687
688 EditCommandComposition* composition = cmd->composition(); 688 EditCommandComposition* composition = cmd->composition();
689 ASSERT(composition); 689 ASSERT(composition);
690 dispatchEditableContentChangedEvents(composition->startingRootEditableElemen t(), composition->endingRootEditableElement()); 690 dispatchEditableContentChangedEvents(composition->startingRootEditableElemen t(), composition->endingRootEditableElement());
691 VisibleSelection newSelection(cmd->endingSelection()); 691 VisibleSelection newSelection(cmd->endingSelection());
692 692
693 // Don't clear the typing style with this selection change. We do those thin gs elsewhere if necessary. 693 // Don't clear the typing style with this selection change. We do those thin gs elsewhere if necessary.
694 changeSelectionAfterCommand(newSelection, 0); 694 changeSelectionAfterCommand(newSelection, 0);
695 695
696 if (!cmd->preservesTypingStyle()) 696 if (!cmd->preservesTypingStyle())
697 m_frame.selection().clearTypingStyle(); 697 m_frame.selection().clearTypingStyle();
698 698
699 // Command will be equal to last edit command only in the case of typing 699 // Command will be equal to last edit command only in the case of typing
700 if (m_lastEditCommand.get() == cmd) { 700 if (m_lastEditCommand.get() == cmd) {
701 ASSERT(cmd->isTypingCommand()); 701 ASSERT(cmd->isTypingCommand());
702 } else { 702 } else {
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 void Editor::unappliedEditing(PassRefPtr<EditCommandComposition> cmd) 713 void Editor::unappliedEditing(PassRefPtrWillBeRawPtr<EditCommandComposition> cmd )
714 { 714 {
715 EventQueueScope scope; 715 EventQueueScope scope;
716 m_frame.document()->updateLayout(); 716 m_frame.document()->updateLayout();
717 717
718 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd ->endingRootEditableElement()); 718 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd ->endingRootEditableElement());
719 719
720 VisibleSelection newSelection(cmd->startingSelection()); 720 VisibleSelection newSelection(cmd->startingSelection());
721 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram eSelection::ClearTypingStyle); 721 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram eSelection::ClearTypingStyle);
722 722
723 m_lastEditCommand = nullptr; 723 m_lastEditCommand = nullptr;
724 if (UndoStack* undoStack = this->undoStack()) 724 if (UndoStack* undoStack = this->undoStack())
725 undoStack->registerRedoStep(cmd); 725 undoStack->registerRedoStep(cmd);
726 respondToChangedContents(newSelection); 726 respondToChangedContents(newSelection);
727 } 727 }
728 728
729 void Editor::reappliedEditing(PassRefPtr<EditCommandComposition> cmd) 729 void Editor::reappliedEditing(PassRefPtrWillBeRawPtr<EditCommandComposition> cmd )
730 { 730 {
731 EventQueueScope scope; 731 EventQueueScope scope;
732 m_frame.document()->updateLayout(); 732 m_frame.document()->updateLayout();
733 733
734 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd ->endingRootEditableElement()); 734 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd ->endingRootEditableElement());
735 735
736 VisibleSelection newSelection(cmd->endingSelection()); 736 VisibleSelection newSelection(cmd->endingSelection());
737 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram eSelection::ClearTypingStyle); 737 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram eSelection::ClearTypingStyle);
738 738
739 m_lastEditCommand = nullptr; 739 m_lastEditCommand = nullptr;
740 if (UndoStack* undoStack = this->undoStack()) 740 if (UndoStack* undoStack = this->undoStack())
741 undoStack->registerUndoStep(cmd); 741 undoStack->registerUndoStep(cmd);
742 respondToChangedContents(newSelection); 742 respondToChangedContents(newSelection);
743 } 743 }
744 744
745 PassOwnPtr<Editor> Editor::create(LocalFrame& frame) 745 PassOwnPtrWillBeRawPtr<Editor> Editor::create(LocalFrame& frame)
746 { 746 {
747 return adoptPtr(new Editor(frame)); 747 return adoptPtrWillBeNoop(new Editor(frame));
748 } 748 }
749 749
750 Editor::Editor(LocalFrame& frame) 750 Editor::Editor(LocalFrame& frame)
751 : m_frame(frame) 751 : m_frame(frame)
752 , m_preventRevealSelection(0) 752 , m_preventRevealSelection(0)
753 , m_shouldStartNewKillRingSequence(false) 753 , m_shouldStartNewKillRingSequence(false)
754 // This is off by default, since most editors want this behavior (this match es IE but not FF). 754 // This is off by default, since most editors want this behavior (this match es IE but not FF).
755 , m_shouldStyleWithCSS(false) 755 , m_shouldStyleWithCSS(false)
756 , m_killRing(adoptPtr(new KillRing)) 756 , m_killRing(adoptPtr(new KillRing))
757 , m_areMarkedTextMatchesHighlighted(false) 757 , m_areMarkedTextMatchesHighlighted(false)
(...skipping 28 matching lines...) Expand all
786 return false; 786 return false;
787 787
788 spellChecker().updateMarkersForWordsAffectedByEditing(isSpaceOrNewline(text[ 0])); 788 spellChecker().updateMarkersForWordsAffectedByEditing(isSpaceOrNewline(text[ 0]));
789 789
790 // Get the selection to use for the event that triggered this insertText. 790 // Get the selection to use for the event that triggered this insertText.
791 // If the event handler changed the selection, we may want to use a differen t selection 791 // If the event handler changed the selection, we may want to use a differen t selection
792 // that is contained in the event target. 792 // that is contained in the event target.
793 selection = selectionForCommand(triggeringEvent); 793 selection = selectionForCommand(triggeringEvent);
794 if (selection.isContentEditable()) { 794 if (selection.isContentEditable()) {
795 if (Node* selectionStart = selection.start().deprecatedNode()) { 795 if (Node* selectionStart = selection.start().deprecatedNode()) {
796 RefPtr<Document> document(selectionStart->document()); 796 RefPtrWillBeRawPtr<Document> document(selectionStart->document());
797 797
798 // Insert the text 798 // Insert the text
799 TypingCommand::Options options = 0; 799 TypingCommand::Options options = 0;
800 if (selectInsertedText) 800 if (selectInsertedText)
801 options |= TypingCommand::SelectInsertedText; 801 options |= TypingCommand::SelectInsertedText;
802 TypingCommand::insertText(*document.get(), text, selection, options, triggeringEvent && triggeringEvent->isComposition() ? TypingCommand::TextCompos itionConfirm : TypingCommand::TextCompositionNone); 802 TypingCommand::insertText(*document.get(), text, selection, options, triggeringEvent && triggeringEvent->isComposition() ? TypingCommand::TextCompos itionConfirm : TypingCommand::TextCompositionNone);
803 803
804 // Reveal the current selection 804 // Reveal the current selection
805 if (LocalFrame* editedFrame = document->frame()) { 805 if (LocalFrame* editedFrame = document->frame()) {
806 if (Page* page = editedFrame->page()) 806 if (Page* page = editedFrame->page())
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 } 1076 }
1077 1077
1078 void Editor::computeAndSetTypingStyle(StylePropertySet* style, EditAction editin gAction) 1078 void Editor::computeAndSetTypingStyle(StylePropertySet* style, EditAction editin gAction)
1079 { 1079 {
1080 if (!style || style->isEmpty()) { 1080 if (!style || style->isEmpty()) {
1081 m_frame.selection().clearTypingStyle(); 1081 m_frame.selection().clearTypingStyle();
1082 return; 1082 return;
1083 } 1083 }
1084 1084
1085 // Calculate the current typing style. 1085 // Calculate the current typing style.
1086 RefPtr<EditingStyle> typingStyle; 1086 RefPtrWillBeRawPtr<EditingStyle> typingStyle;
haraken 2014/05/26 02:36:12 = nullptr;
sof 2014/05/28 08:31:35 Done.
1087 if (m_frame.selection().typingStyle()) { 1087 if (m_frame.selection().typingStyle()) {
1088 typingStyle = m_frame.selection().typingStyle()->copy(); 1088 typingStyle = m_frame.selection().typingStyle()->copy();
1089 typingStyle->overrideWithStyle(style); 1089 typingStyle->overrideWithStyle(style);
1090 } else { 1090 } else {
1091 typingStyle = EditingStyle::create(style); 1091 typingStyle = EditingStyle::create(style);
1092 } 1092 }
1093 1093
1094 typingStyle->prepareToApplyAt(m_frame.selection().selection().visibleStart() .deepEquivalent(), EditingStyle::PreserveWritingDirection); 1094 typingStyle->prepareToApplyAt(m_frame.selection().selection().visibleStart() .deepEquivalent(), EditingStyle::PreserveWritingDirection);
1095 1095
1096 // Handle block styles, substracting these from the typing style. 1096 // Handle block styles, substracting these from the typing style.
1097 RefPtr<EditingStyle> blockStyle = typingStyle->extractAndRemoveBlockProperti es(); 1097 RefPtrWillBeRawPtr<EditingStyle> blockStyle = typingStyle->extractAndRemoveB lockProperties();
1098 if (!blockStyle->isEmpty()) { 1098 if (!blockStyle->isEmpty()) {
1099 ASSERT(m_frame.document()); 1099 ASSERT(m_frame.document());
1100 ApplyStyleCommand::create(*m_frame.document(), blockStyle.get(), editing Action)->apply(); 1100 ApplyStyleCommand::create(*m_frame.document(), blockStyle.get(), editing Action)->apply();
1101 } 1101 }
1102 1102
1103 // Set the remaining style as the typing style. 1103 // Set the remaining style as the typing style.
1104 m_frame.selection().setTypingStyle(typingStyle); 1104 m_frame.selection().setTypingStyle(typingStyle);
1105 } 1105 }
1106 1106
1107 bool Editor::findString(const String& target, bool forward, bool caseFlag, bool wrapFlag, bool startInSelection) 1107 bool Editor::findString(const String& target, bool forward, bool caseFlag, bool wrapFlag, bool startInSelection)
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 { 1228 {
1229 return m_frame.spellChecker(); 1229 return m_frame.spellChecker();
1230 } 1230 }
1231 1231
1232 void Editor::toggleOverwriteModeEnabled() 1232 void Editor::toggleOverwriteModeEnabled()
1233 { 1233 {
1234 m_overwriteModeEnabled = !m_overwriteModeEnabled; 1234 m_overwriteModeEnabled = !m_overwriteModeEnabled;
1235 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled); 1235 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled);
1236 } 1236 }
1237 1237
1238 void Editor::trace(Visitor* visitor)
1239 {
1240 visitor->trace(m_lastEditCommand);
1241 }
1242
1238 } // namespace WebCore 1243 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698