| Index: Source/core/editing/TypingCommand.cpp
 | 
| diff --git a/Source/core/editing/TypingCommand.cpp b/Source/core/editing/TypingCommand.cpp
 | 
| index fcca6cea1e23c7f813328760cde070fac3b37646..8bb5c24c210c823db74ca8b82bc3474ddc40f518 100644
 | 
| --- a/Source/core/editing/TypingCommand.cpp
 | 
| +++ b/Source/core/editing/TypingCommand.cpp
 | 
| @@ -100,7 +100,7 @@ void TypingCommand::deleteSelection(Document& document, Options options)
 | 
|      if (!frame->selection().isRange())
 | 
|          return;
 | 
|  
 | 
| -    if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame)) {
 | 
| +    if (RefPtrWillBeRawPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame)) {
 | 
|          lastTypingCommand->setShouldPreventSpellChecking(options & PreventSpellChecking);
 | 
|          lastTypingCommand->deleteSelection(options & SmartDelete);
 | 
|          return;
 | 
| @@ -113,7 +113,7 @@ void TypingCommand::deleteKeyPressed(Document& document, Options options, TextGr
 | 
|  {
 | 
|      if (granularity == CharacterGranularity) {
 | 
|          LocalFrame* frame = document.frame();
 | 
| -        if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame)) {
 | 
| +        if (RefPtrWillBeRawPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame)) {
 | 
|              // If the last typing command is not Delete, open a new typing command.
 | 
|              // We need to group continuous delete commands alone in a single typing command.
 | 
|              if (lastTypingCommand->commandTypeOfOpenCommand() == DeleteKey) {
 | 
| @@ -133,7 +133,7 @@ void TypingCommand::forwardDeleteKeyPressed(Document& document, Options options,
 | 
|      // FIXME: Forward delete in TextEdit appears to open and close a new typing command.
 | 
|      if (granularity == CharacterGranularity) {
 | 
|          LocalFrame* frame = document.frame();
 | 
| -        if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame)) {
 | 
| +        if (RefPtrWillBeRawPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame)) {
 | 
|              updateSelectionIfDifferentFromCurrentSelection(lastTypingCommand.get(), frame);
 | 
|              lastTypingCommand->setShouldPreventSpellChecking(options & PreventSpellChecking);
 | 
|              lastTypingCommand->forwardDeleteKeyPressed(granularity, options & KillRing);
 | 
| @@ -179,7 +179,7 @@ void TypingCommand::insertText(Document& document, const String& text, const Vis
 | 
|      // Set the starting and ending selection appropriately if we are using a selection
 | 
|      // that is different from the current selection.  In the future, we should change EditCommand
 | 
|      // to deal with custom selections in a general way that can be used by all of the commands.
 | 
| -    if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame.get())) {
 | 
| +    if (RefPtrWillBeRawPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame.get())) {
 | 
|          if (lastTypingCommand->endingSelection() != selectionForInsertion) {
 | 
|              lastTypingCommand->setStartingSelection(selectionForInsertion);
 | 
|              lastTypingCommand->setEndingSelection(selectionForInsertion);
 | 
| @@ -192,13 +192,13 @@ void TypingCommand::insertText(Document& document, const String& text, const Vis
 | 
|          return;
 | 
|      }
 | 
|  
 | 
| -    RefPtr<TypingCommand> cmd = TypingCommand::create(document, InsertText, newText, options, compositionType);
 | 
| +    RefPtrWillBeRawPtr<TypingCommand> cmd = TypingCommand::create(document, InsertText, newText, options, compositionType);
 | 
|      applyTextInsertionCommand(frame.get(), cmd, selectionForInsertion, currentSelection);
 | 
|  }
 | 
|  
 | 
|  void TypingCommand::insertLineBreak(Document& document, Options options)
 | 
|  {
 | 
| -    if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(document.frame())) {
 | 
| +    if (RefPtrWillBeRawPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(document.frame())) {
 | 
|          lastTypingCommand->setShouldRetainAutocorrectionIndicator(options & RetainAutocorrectionIndicator);
 | 
|          lastTypingCommand->insertLineBreak();
 | 
|          return;
 | 
| @@ -209,7 +209,7 @@ void TypingCommand::insertLineBreak(Document& document, Options options)
 | 
|  
 | 
|  void TypingCommand::insertParagraphSeparatorInQuotedContent(Document& document)
 | 
|  {
 | 
| -    if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(document.frame())) {
 | 
| +    if (RefPtrWillBeRawPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(document.frame())) {
 | 
|          lastTypingCommand->insertParagraphSeparatorInQuotedContent();
 | 
|          return;
 | 
|      }
 | 
| @@ -219,7 +219,7 @@ void TypingCommand::insertParagraphSeparatorInQuotedContent(Document& document)
 | 
|  
 | 
|  void TypingCommand::insertParagraphSeparator(Document& document, Options options)
 | 
|  {
 | 
| -    if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(document.frame())) {
 | 
| +    if (RefPtrWillBeRawPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(document.frame())) {
 | 
|          lastTypingCommand->setShouldRetainAutocorrectionIndicator(options & RetainAutocorrectionIndicator);
 | 
|          lastTypingCommand->insertParagraphSeparator();
 | 
|          return;
 | 
| @@ -228,11 +228,11 @@ void TypingCommand::insertParagraphSeparator(Document& document, Options options
 | 
|      TypingCommand::create(document, InsertParagraphSeparator, "", options)->apply();
 | 
|  }
 | 
|  
 | 
| -PassRefPtr<TypingCommand> TypingCommand::lastTypingCommandIfStillOpenForTyping(LocalFrame* frame)
 | 
| +PassRefPtrWillBeRawPtr<TypingCommand> TypingCommand::lastTypingCommandIfStillOpenForTyping(LocalFrame* frame)
 | 
|  {
 | 
|      ASSERT(frame);
 | 
|  
 | 
| -    RefPtr<CompositeEditCommand> lastEditCommand = frame->editor().lastEditCommand();
 | 
| +    RefPtrWillBeRawPtr<CompositeEditCommand> lastEditCommand = frame->editor().lastEditCommand();
 | 
|      if (!lastEditCommand || !lastEditCommand->isTypingCommand() || !static_cast<TypingCommand*>(lastEditCommand.get())->isOpenForMoreTyping())
 | 
|          return nullptr;
 | 
|  
 | 
| @@ -241,7 +241,7 @@ PassRefPtr<TypingCommand> TypingCommand::lastTypingCommandIfStillOpenForTyping(L
 | 
|  
 | 
|  void TypingCommand::closeTyping(LocalFrame* frame)
 | 
|  {
 | 
| -    if (RefPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame))
 | 
| +    if (RefPtrWillBeRawPtr<TypingCommand> lastTypingCommand = lastTypingCommandIfStillOpenForTyping(frame))
 | 
|          lastTypingCommand->closeTyping();
 | 
|  }
 | 
|  
 | 
| @@ -338,7 +338,7 @@ void TypingCommand::insertText(const String &text, bool selectInsertedText)
 | 
|  
 | 
|  void TypingCommand::insertTextRunWithoutNewlines(const String &text, bool selectInsertedText)
 | 
|  {
 | 
| -    RefPtr<InsertTextCommand> command = InsertTextCommand::create(document(), text, selectInsertedText,
 | 
| +    RefPtrWillBeRawPtr<InsertTextCommand> command = InsertTextCommand::create(document(), text, selectInsertedText,
 | 
|          m_compositionType == TextCompositionNone ? InsertTextCommand::RebalanceLeadingAndTrailingWhitespaces : InsertTextCommand::RebalanceAllWhitespaces);
 | 
|  
 | 
|      applyCommandToComposite(command, endingSelection());
 | 
| @@ -425,11 +425,11 @@ void TypingCommand::deleteKeyPressed(TextGranularity granularity, bool killRing)
 | 
|  
 | 
|          m_smartDelete = false;
 | 
|  
 | 
| -        FrameSelection selection;
 | 
| -        selection.setSelection(endingSelection());
 | 
| -        selection.modify(FrameSelection::AlterationExtend, DirectionBackward, granularity);
 | 
| -        if (killRing && selection.isCaret() && granularity != CharacterGranularity)
 | 
| -            selection.modify(FrameSelection::AlterationExtend, DirectionBackward, CharacterGranularity);
 | 
| +        OwnPtrWillBeRawPtr<FrameSelection> selection = FrameSelection::create();
 | 
| +        selection->setSelection(endingSelection());
 | 
| +        selection->modify(FrameSelection::AlterationExtend, DirectionBackward, granularity);
 | 
| +        if (killRing && selection->isCaret() && granularity != CharacterGranularity)
 | 
| +            selection->modify(FrameSelection::AlterationExtend, DirectionBackward, CharacterGranularity);
 | 
|  
 | 
|          VisiblePosition visibleStart(endingSelection().visibleStart());
 | 
|          if (visibleStart.previous(CannotCrossEditingBoundary).isNull()) {
 | 
| @@ -456,7 +456,7 @@ void TypingCommand::deleteKeyPressed(TextGranularity granularity, bool killRing)
 | 
|              if (isLastPositionBeforeTable(visibleStart))
 | 
|                  return;
 | 
|              // Extend the selection backward into the last cell, then deletion will handle the move.
 | 
| -            selection.modify(FrameSelection::AlterationExtend, DirectionBackward, granularity);
 | 
| +            selection->modify(FrameSelection::AlterationExtend, DirectionBackward, granularity);
 | 
|          // If the caret is just after a table, select the table and don't delete anything.
 | 
|          } else if (Node* table = isFirstPositionAfterTable(visibleStart)) {
 | 
|              setEndingSelection(VisibleSelection(positionBeforeNode(table), endingSelection().start(), DOWNSTREAM, endingSelection().isDirectional()));
 | 
| @@ -464,7 +464,7 @@ void TypingCommand::deleteKeyPressed(TextGranularity granularity, bool killRing)
 | 
|              return;
 | 
|          }
 | 
|  
 | 
| -        selectionToDelete = selection.selection();
 | 
| +        selectionToDelete = selection->selection();
 | 
|  
 | 
|          if (granularity == CharacterGranularity && selectionToDelete.end().containerNode() == selectionToDelete.start().containerNode()
 | 
|              && selectionToDelete.end().computeOffsetInContainerNode() - selectionToDelete.start().computeOffsetInContainerNode() > 1) {
 | 
| @@ -527,11 +527,11 @@ void TypingCommand::forwardDeleteKeyPressed(TextGranularity granularity, bool ki
 | 
|          // Handle delete at beginning-of-block case.
 | 
|          // Do nothing in the case that the caret is at the start of a
 | 
|          // root editable element or at the start of a document.
 | 
| -        FrameSelection selection;
 | 
| -        selection.setSelection(endingSelection());
 | 
| -        selection.modify(FrameSelection::AlterationExtend, DirectionForward, granularity);
 | 
| -        if (killRing && selection.isCaret() && granularity != CharacterGranularity)
 | 
| -            selection.modify(FrameSelection::AlterationExtend, DirectionForward, CharacterGranularity);
 | 
| +        OwnPtrWillBeRawPtr<FrameSelection> selection = FrameSelection::create();
 | 
| +        selection->setSelection(endingSelection());
 | 
| +        selection->modify(FrameSelection::AlterationExtend, DirectionForward, granularity);
 | 
| +        if (killRing && selection->isCaret() && granularity != CharacterGranularity)
 | 
| +            selection->modify(FrameSelection::AlterationExtend, DirectionForward, CharacterGranularity);
 | 
|  
 | 
|          Position downstreamEnd = endingSelection().end().downstream();
 | 
|          VisiblePosition visibleEnd = endingSelection().visibleEnd();
 | 
| @@ -548,10 +548,10 @@ void TypingCommand::forwardDeleteKeyPressed(TextGranularity granularity, bool ki
 | 
|          }
 | 
|  
 | 
|          // deleting to end of paragraph when at end of paragraph needs to merge the next paragraph (if any)
 | 
| -        if (granularity == ParagraphBoundary && selection.selection().isCaret() && isEndOfParagraph(selection.selection().visibleEnd()))
 | 
| -            selection.modify(FrameSelection::AlterationExtend, DirectionForward, CharacterGranularity);
 | 
| +        if (granularity == ParagraphBoundary && selection->selection().isCaret() && isEndOfParagraph(selection->selection().visibleEnd()))
 | 
| +            selection->modify(FrameSelection::AlterationExtend, DirectionForward, CharacterGranularity);
 | 
|  
 | 
| -        selectionToDelete = selection.selection();
 | 
| +        selectionToDelete = selection->selection();
 | 
|          if (!startingSelection().isRange() || selectionToDelete.base() != startingSelection().start())
 | 
|              selectionAfterUndo = selectionToDelete;
 | 
|          else {
 | 
| 
 |