diff --git a/content/events/src/nsDOMEvent.cpp b/content/events/src/nsDOMEvent.cpp index 622cb6a35ab9..4bb42baaece7 100644 --- a/content/events/src/nsDOMEvent.cpp +++ b/content/events/src/nsDOMEvent.cpp @@ -586,8 +586,7 @@ nsDOMEvent::DuplicatePrivateData() new nsCompositionEvent(false, msg, nullptr); nsCompositionEvent* oldCompositionEvent = static_cast(mEvent); - compositionEvent->AssignGUIEventData(*oldCompositionEvent, true); - compositionEvent->data = oldCompositionEvent->data; + compositionEvent->AssignCompositionEventData(*oldCompositionEvent, true); newEvent = compositionEvent; break; } diff --git a/widget/nsGUIEvent.h b/widget/nsGUIEvent.h index fc61cd8aeb29..e77ee97ca070 100644 --- a/widget/nsGUIEvent.h +++ b/widget/nsGUIEvent.h @@ -1395,6 +1395,14 @@ public: } nsString data; + + void AssignCompositionEventData(const nsCompositionEvent& aEvent, + bool aCopyTargets) + { + AssignGUIEventData(aEvent, aCopyTargets); + + data = aEvent.data; + } }; /** diff --git a/widget/tests/test_assign_event_data.html b/widget/tests/test_assign_event_data.html index f79a18b3b160..f263c1646f74 100644 --- a/widget/tests/test_assign_event_data.html +++ b/widget/tests/test_assign_event_data.html @@ -241,6 +241,29 @@ const kTests = [ }, todoMismatch: [ ], }, + { description: "nsCompositionEvent (compositionupdate)", + targetID: "input-text", eventType: "compositionupdate", + dispatchEvent: function () { + document.getElementById(this.targetID).value = ""; + document.getElementById(this.targetID).focus(); + synthesizeComposition({ type: "compositionstart" }); + synthesizeComposition({ type: "compositionupdate", data: "\u30E9\u30FC\u30E1\u30F3" }); + synthesizeText({ "composition": + { "string": "\u30E9\u30FC\u30E1\u30F3", + "clauses": + [ + { "length": 0, "attr": 0 } + ] + }, + "caret": { "start": 4, "length": 0 } + }); + synthesizeComposition({ type: "compositionend", data: "\u30E9\u30FC\u30E1\u30F3" }); + }, + canRun: function () { + return true; + }, + todoMismatch: [ ], + }, ]; function doTest(aTest)