Undo (Ctrl+z) in textarea adding a newline (\n) to the text

RESOLVED FIXED in mozilla14

Status

()

Core
Editor
RESOLVED FIXED
5 years ago
5 years ago

People

(Reporter: Drew Waddell, Assigned: graememcc)

Tracking

({regression, testcase})

Trunk
mozilla14
regression, testcase
Points:
---
Bug Flags:
in-testsuite +

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(2 attachments)

(Reporter)

Description

5 years ago
User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Build ID: 20120312181643

Steps to reproduce:

I have text in a textarea that is delete and then restored using Ctrl+z.  When the text is restored an mysterious \n is added to the end of the text.

Here is an example of the the bug:
http://jsfiddle.net/dwaddell/S9mAv/18/

I have tested this in IE and Chorme and it works properly.


Actual results:

If the text was "abc" it will end up being "abc\n".


Expected results:

The text should be restored as "abc".
Can you test this with a current Firefox Nightly build from nightly.mozilla.org and see if it still happens?

For me in Nightly, if I follow the steps in that jsfiddle, I see the following things logged to the console, and there is no \n in the textarea:
[23:52:45.290] 9 Delete Me @ http://fiddle.jshell.net/dwaddell/S9mAv/18/show/:33
--
[23:53:01.114] 0  @ http://fiddle.jshell.net/dwaddell/S9mAv/18/show/:41
--
[23:53:13.893] 11 Delete Me
 @ http://fiddle.jshell.net/dwaddell/S9mAv/18/show/:41

Comment 2

5 years ago
I can reproduce on a nightly, here's a jquery-less testcase: http://jsfiddle.net/S9mAv/20/

Note also bug 471319 and bug 523441.
Status: UNCONFIRMED → NEW
Component: Untriaged → Editor
Ever confirmed: true
Keywords: testcase
OS: Windows 7 → All
Product: Firefox → Core
QA Contact: untriaged → editor
Hardware: x86_64 → All
Summary: Ctrl+z in textarea adding a \n to the text → Undo (Ctrl+z) in textarea adding a newline (\n) to the text
Version: 11 Branch → Trunk

Comment 3

5 years ago
Created attachment 611231 [details]
testcase

Comment 4

5 years ago
Regression window(m-c)
Works:
http://hg.mozilla.org/mozilla-central/rev/145c98d55ae1
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0a1) Gecko/20110814 Firefox/8.0a1 ID:20110814030749
Fails:
http://hg.mozilla.org/mozilla-central/rev/2de3cff973b2
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0a1) Gecko/20110814 Firefox/8.0a1 ID:20110814044816
Pushlog:
http://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=145c98d55ae1&tochange=2de3cff973b2

Regression window(m-i)
Works:
http://hg.mozilla.org/integration/mozilla-inbound/rev/56eaf58dc5fb
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0a1) Gecko/20110812 Firefox/8.0a1 ID:20110812113455
Fails:
http://hg.mozilla.org/integration/mozilla-inbound/rev/437f3eb67c18
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0a1) Gecko/20110812 Firefox/8.0a1 ID:20110812125630
Pushlog:
http://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=56eaf58dc5fb&tochange=437f3eb67c18

Suspected:
437f3eb67c18	Graeme McCutcheon — Bug 483651 - Trailing <br> node not removed when it should be; r=ehsan
Blocks: 483651
Keywords: regression
The cause of this bug is that nsTextEditorState::mCachedValue contains the value with the trailing BR.  The value that the underlying editor has is actually correct.
(Assignee)

Comment 6

5 years ago
Created attachment 614715 [details] [diff] [review]
v1

Essentially the opposite of bug 483651. Post-undo, the trailing BR does not get the mozBR attribute re-instated, so it gets interpreted as a newline.

Green on try, and fixes another test that had been forced to rely on the broken behaviour.
Attachment #614715 - Flags: review?(ehsan)
Comment on attachment 614715 [details] [diff] [review]
v1

Review of attachment 614715 [details] [diff] [review]:
-----------------------------------------------------------------

r=me with the comments below addressed.  Thanks for your patch!

::: editor/libeditor/text/nsTextEditRules.cpp
@@ +1109,5 @@
> +    // Check to see if the trailing BR is a former bogus node - this will have stuck
> +    // around if we previously morphed a trailing node into a bogus node
> +    nsCOMPtr<nsIContent> lastBR = do_QueryInterface(lastChild);
> +    if (!mEditor->IsMozEditorBogusNode(lastBR))
> +      return NS_OK;

Nit: please use braces.

@@ +1112,5 @@
> +    if (!mEditor->IsMozEditorBogusNode(lastBR))
> +      return NS_OK;
> +
> +    // Morph it back to a mozBR
> +    dom::Element* elem = lastBR->AsElement();

Nit: Please add MOZ_ASSERT(lastBR->IsElement()) before this line as a sanity check.

::: editor/libeditor/text/tests/test_bug740784.html
@@ +14,5 @@
> +  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
> +  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
> +</head>
> +
> +<body onload="doTest();">

Please use waitForFocus as you're sending keyboard events.
Attachment #614715 - Flags: review?(ehsan) → review+
Comment on attachment 614715 [details] [diff] [review]
v1

Zero risk for mobile as the undo functionality does not exist there.
Attachment #614715 - Flags: approval-mozilla-central?
Comment on attachment 614715 [details] [diff] [review]
v1

[triage comment]
low/no risk to mobile.
Attachment #614715 - Flags: approval-mozilla-central? → approval-mozilla-central+
https://hg.mozilla.org/integration/mozilla-inbound/rev/a7d54fc7d18b
Flags: in-testsuite+
Target Milestone: --- → mozilla14
https://hg.mozilla.org/mozilla-central/rev/a7d54fc7d18b
Assignee: nobody → graememcc_firefox
Status: NEW → RESOLVED
Last Resolved: 5 years ago
Resolution: --- → FIXED
(Assignee)

Comment 12

5 years ago
I changed the test to waitForFocus, per comment 7:
https://hg.mozilla.org/integration/mozilla-inbound/rev/304cd5d5124b

The others should be taken care of Ms2ger's patch in bug 747346
https://hg.mozilla.org/mozilla-central/rev/304cd5d5124b
You need to log in before you can comment on or make changes to this bug.