| Index: third_party/WebKit/Source/core/editing/commands/UndoStack.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/editing/commands/UndoStack.cpp b/third_party/WebKit/Source/core/editing/commands/UndoStack.cpp
 | 
| index 0839c553e07a4206087dbd898745e5002cad88fb..778e50f556ffbc4e5bc36735d705130aae9856a5 100644
 | 
| --- a/third_party/WebKit/Source/core/editing/commands/UndoStack.cpp
 | 
| +++ b/third_party/WebKit/Source/core/editing/commands/UndoStack.cpp
 | 
| @@ -28,6 +28,7 @@
 | 
|  
 | 
|  #include "core/dom/ContainerNode.h"
 | 
|  #include "core/editing/commands/UndoStep.h"
 | 
| +#include "platform/EventDispatchForbiddenScope.h"
 | 
|  #include "wtf/TemporaryChange.h"
 | 
|  
 | 
|  namespace blink {
 | 
| @@ -60,6 +61,25 @@
 | 
|  void UndoStack::registerRedoStep(UndoStep* step)
 | 
|  {
 | 
|      m_redoStack.append(step);
 | 
| +}
 | 
| +
 | 
| +void UndoStack::didUnloadFrame(const LocalFrame& frame)
 | 
| +{
 | 
| +    EventDispatchForbiddenScope assertNoEventDispatch;
 | 
| +    filterOutUndoSteps(m_undoStack, frame);
 | 
| +    filterOutUndoSteps(m_redoStack, frame);
 | 
| +}
 | 
| +
 | 
| +void UndoStack::filterOutUndoSteps(UndoStepStack& stack, const LocalFrame& frame)
 | 
| +{
 | 
| +    UndoStepStack newStack;
 | 
| +    while (!stack.isEmpty()) {
 | 
| +        UndoStep* step = stack.first().get();
 | 
| +        if (!step->belongsTo(frame))
 | 
| +            newStack.append(step);
 | 
| +        stack.removeFirst();
 | 
| +    }
 | 
| +    stack.swap(newStack);
 | 
|  }
 | 
|  
 | 
|  bool UndoStack::canUndo() const
 | 
| 
 |