From ae409c514736548d9a7d7e336f5d57c8a71c5b6b Mon Sep 17 00:00:00 2001 From: Jim Chen Date: Wed, 16 Mar 2016 14:20:30 -0400 Subject: [PATCH] Bug 1254629 - Let query events fail when content root is wrong; r=masayuki Make query events fail (including when caching selection) if the queried content root is different from what we expected. Also, introduce a fix-up to the selection fix in test_imestate.html. --- dom/events/IMEContentObserver.cpp | 12 +++++++----- widget/tests/test_imestate.html | 6 +++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/dom/events/IMEContentObserver.cpp b/dom/events/IMEContentObserver.cpp index 1b08766c36c3..a7b2be006932 100644 --- a/dom/events/IMEContentObserver.cpp +++ b/dom/events/IMEContentObserver.cpp @@ -740,10 +740,11 @@ IMEContentObserver::HandleQueryContentEvent(WidgetQueryContentEvent* aEvent) mIsHandlingQueryContentEvent = true; ContentEventHandler handler(GetPresContext()); nsresult rv = handler.HandleQueryContentEvent(aEvent); - if (aEvent->mSucceeded) { - // We need to guarantee that mRootContent should be always same value for - // the observing editor. - aEvent->mReply.mContentsRoot = mRootContent; + + if (!IsInitializedWithPlugin() && + NS_WARN_IF(aEvent->mReply.mContentsRoot != mRootContent)) { + // Focus has changed unexpectedly, so make the query fail. + aEvent->mSucceeded = false; } return rv; } @@ -1261,7 +1262,8 @@ IMEContentObserver::UpdateSelectionCache() WidgetQueryContentEvent selection(true, eQuerySelectedText, mWidget); ContentEventHandler handler(GetPresContext()); handler.OnQuerySelectedText(&selection); - if (NS_WARN_IF(!selection.mSucceeded)) { + if (NS_WARN_IF(!selection.mSucceeded) || + NS_WARN_IF(selection.mReply.mContentsRoot != mRootContent)) { return false; } diff --git a/widget/tests/test_imestate.html b/widget/tests/test_imestate.html index 077cf2da88da..b3fc5ce54a56 100644 --- a/widget/tests/test_imestate.html +++ b/widget/tests/test_imestate.html @@ -1232,6 +1232,9 @@ function runEditorFlagChangeTests() var container = document.getElementById("display"); + // Reset selection from previous tests. + window.getSelection().collapse(container, 0); + // the editor has focus directly. container.setAttribute("contenteditable", "true"); container.focus(); @@ -1252,9 +1255,6 @@ function runEditorFlagChangeTests() editor.QueryInterface(Components.interfaces.nsIEditorIMESupport); var flags = editor.flags; - // Reset selection from previous tests. - editor.selection.collapse(container, 0); - // input characters synthesizeCompositionChange( { "composition":