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 |