Page MenuHomePhabricator

VisualEditor: Undo keyboard shortcuts clear undo / redo history if pressed too often (And other fun)
Closed, ResolvedPublic

Description

Tested on Firefox 22 (Monobook) and Chrome 28 (Vector)

Steps to reproduce:

  • Open any random page in the visual editor. Personally i used [[Botnet]].
  • Add the word "Test" to the page.
  • Press Ctrl + Z to undo the edit. Keep pressing till the edit is gone, then press it once more.

Once you have done this, the Redo button and the Redo shortcut (Ctrl+Shift+Z) no longer seem to restore the previous edits. Any subsequent edit seems to reset the undo / redo buttons to an "There were no previous edits" state.

Inconsistent results:

Besides the above result that i can always reproduce using these steps, i have seen various other results. I have seen each of these at least twice but no matter what i try, i cannot seem to find any method of reproducing these reliably.

  • An entry in the console log stating "Error: Cannot roll back a transaction that has not been committed "
  • An entry in the console log stating "Error: Range error: Range is no longer valid after DOM mutation ([WrappedRange("Zz":1, "Zz":1)]) "
  • The redo button suddenly inserting "♙" once in Chrome.
  • The undo button suddenly inserting an endless steam "♙" in Firefox.

Version: unspecified
Severity: normal
See Also:
https://bugzilla.wikimedia.org/show_bug.cgi?id=51532
https://bugzilla.wikimedia.org/show_bug.cgi?id=52185

Details

Reference
bz52113

Event Timeline

bzimport raised the priority of this task from to High.Nov 22 2014, 1:53 AM
bzimport set Reference to bz52113.

I've reproduced a few of these permutations.

It's obviusly inviting you to play chess :)

Change 79049 had a related patch set uploaded by Esanders:
Check for past/future state in undo/redo before setting breakpoint

https://gerrit.wikimedia.org/r/79049

Change 79049 merged by jenkins-bot:
Check for past/future state in undo/redo before setting breakpoint

https://gerrit.wikimedia.org/r/79049

Now merged into master; will be deployed in the next push.