bug 1056459 - fire caret move event when document is loaded r=surkov

This commit is contained in:
Trevor Saunders 2014-08-27 16:14:53 -04:00
parent d6a2aac876
commit 6ece72fae4
5 changed files with 166 additions and 4 deletions

View File

@ -154,6 +154,12 @@ SelectionManager::ProcessTextSelChangeEvent(AccEvent* aEvent)
return;
Selection* selection = caretCntr->DOMSelection();
// XXX Sometimes we can't get a selection for caretCntr, in that case assume
// event->mSel is correct.
if (!selection)
selection = event->mSel;
mCaretOffset = caretCntr->DOMPointToOffset(selection->GetFocusNode(),
selection->FocusOffset());
mAccWithCaret = caretCntr;
@ -179,8 +185,7 @@ SelectionManager::NotifySelectionChanged(nsIDOMDocument* aDOMDocument,
logging::SelChange(aSelection, document, aReason);
#endif
// Don't fire events until document is loaded.
if (document && document->IsContentLoaded()) {
if (document) {
// Selection manager has longer lifetime than any document accessible,
// so that we are guaranteed that the notification is processed before
// the selection manager is destroyed.

View File

@ -1743,10 +1743,11 @@ function textChangeChecker(aID, aStart, aEnd, aTextOrFunc, aIsInserted, aFromUse
/**
* Caret move events checker.
*/
function caretMoveChecker(aCaretOffset, aTargetOrFunc, aTargetFuncArg)
function caretMoveChecker(aCaretOffset, aTargetOrFunc, aTargetFuncArg,
aIsAsync)
{
this.__proto__ = new invokerChecker(EVENT_TEXT_CARET_MOVED,
aTargetOrFunc, aTargetFuncArg);
aTargetOrFunc, aTargetFuncArg, aIsAsync);
this.check = function caretMoveChecker_check(aEvent)
{
@ -1756,6 +1757,12 @@ function caretMoveChecker(aCaretOffset, aTargetOrFunc, aTargetFuncArg)
}
}
function asyncCaretMoveChecker(aCaretOffset, aTargetOrFunc, aTargetFuncArg)
{
this.__proto__ = new caretMoveChecker(aCaretOffset, aTargetOrFunc,
aTargetFuncArg, true);
}
/**
* Text selection change checker.
*/

View File

@ -46,6 +46,7 @@ skip-if = os == 'win' || os == 'linux'
[test_namechange.xul]
[test_namechange.html]
[test_scroll.xul]
[test_scroll_caret.xul]
[test_selection.html]
skip-if = buildapp == 'mulet'
[test_selection.xul]

View File

@ -119,5 +119,63 @@
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
</p>
<h1 id="heading_1">heading 1</h1>
<p style="color: blue">
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
text text text text text text text text text text text text text text <br>
</p>
</body>
<html>

View File

@ -0,0 +1,91 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
<script type="application/javascript"
src="chrome://mochikit/content/chrome-harness.js"/>
<script type="application/javascript"
src="../common.js" />
<script type="application/javascript"
src="../role.js" />
<script type="application/javascript"
src="../states.js" />
<script type="application/javascript"
src="../events.js" />
<script type="application/javascript"
src="../browser.js"></script>
<script type="application/javascript">
<![CDATA[
////////////////////////////////////////////////////////////////////////////
// Tests
function getAnchorJumpInTabDocument(aTabIdx)
{
var tabDoc = aTabIdx ? tabDocumentAt(aTabIdx) : currentTabDocument();
return tabDoc.querySelector("h1[id='heading_1']");
}
function loadTab(aURL)
{
this.eventSeq = [
new asyncInvokerChecker(EVENT_DOCUMENT_LOAD_COMPLETE, currentTabDocument),
new asyncCaretMoveChecker(0, getAnchorJumpInTabDocument)
];
this.invoke = function loadTab_invoke()
{
tabBrowser().loadURI(aURL);
}
this.getID = function loadTab_getID()
{
return "load tab: " + aURL;
}
}
//gA11yEventDumpToConsole = true; // debug stuff
var gQueue = null;
function doTest()
{
gQueue = new eventQueue();
var url = "http://mochi.test:8888/a11y/accessible/tests/mochitest/events/scroll.html#heading_1";
gQueue.push(new loadTab(url));
gQueue.onFinish = function() { closeBrowserWindow(); }
gQueue.invoke(); // Will call SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
openBrowserWindow(doTest);
]]>
</script>
<vbox flex="1" style="overflow: auto;">
<body xmlns="http://www.w3.org/1999/xhtml">
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1056459"
title="Make sure caret move event is fired when document receive focus">
Mozilla Bug 1056459
</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
</pre>
</body>
<vbox id="eventdump"></vbox>
</vbox>
</window>