mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 22:01:30 +00:00
Bug 782991 - tab document should be a document load events target unconditionally (states/test_link.html intermittent failure), r=tbsaunde
This commit is contained in:
parent
bb0c8edd9b
commit
8a22c1504d
@ -196,7 +196,7 @@ LogDocParent(nsIDocument* aDocumentNode)
|
||||
static void
|
||||
LogDocInfo(nsIDocument* aDocumentNode, DocAccessible* aDocument)
|
||||
{
|
||||
printf(" DOM id: %p, acc id: %p\n ",
|
||||
printf(" DOM document: %p, acc document: %p\n ",
|
||||
static_cast<void*>(aDocumentNode), static_cast<void*>(aDocument));
|
||||
|
||||
// log document info
|
||||
@ -322,6 +322,20 @@ LogRequest(nsIRequest* aRequest)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
LogDocAccState(DocAccessible* aDocument)
|
||||
{
|
||||
printf("document acc state: ");
|
||||
if (aDocument->HasLoadState(DocAccessible::eCompletelyLoaded))
|
||||
printf("completely loaded;");
|
||||
else if (aDocument->HasLoadState(DocAccessible::eReady))
|
||||
printf("ready;");
|
||||
else if (aDocument->HasLoadState(DocAccessible::eDOMLoaded))
|
||||
printf("DOM loaded;");
|
||||
else if (aDocument->HasLoadState(DocAccessible::eTreeConstructed))
|
||||
printf("tree constructed;");
|
||||
}
|
||||
|
||||
static void
|
||||
GetDocLoadEventType(AccEvent* aEvent, nsACString& aEventType)
|
||||
{
|
||||
@ -406,6 +420,30 @@ logging::DocLoad(const char* aMsg, nsIDocument* aDocumentNode)
|
||||
MsgEnd();
|
||||
}
|
||||
|
||||
void
|
||||
logging::DocCompleteLoad(DocAccessible* aDocument, bool aIsLoadEventTarget)
|
||||
{
|
||||
MsgBegin(sDocLoadTitle, "document loaded *completely*");
|
||||
|
||||
nsIDocument* docNode = aDocument->GetDocumentNode();
|
||||
printf(" DOM document: %p, acc document: %p\n",
|
||||
static_cast<void*>(aDocument->GetDocumentNode()),
|
||||
static_cast<void*>(aDocument));
|
||||
|
||||
printf(" ");
|
||||
LogDocURI(aDocument->GetDocumentNode());
|
||||
printf("\n");
|
||||
|
||||
printf(" ");
|
||||
LogDocAccState(aDocument);
|
||||
printf("\n");
|
||||
|
||||
printf(" document is load event target: %s\n",
|
||||
(aIsLoadEventTarget ? "true" : "false"));
|
||||
|
||||
MsgEnd();
|
||||
}
|
||||
|
||||
void
|
||||
logging::DocLoadEventFired(AccEvent* aEvent)
|
||||
{
|
||||
|
@ -56,6 +56,7 @@ bool IsEnabled(uint32_t aModules);
|
||||
void DocLoad(const char* aMsg, nsIWebProgress* aWebProgress,
|
||||
nsIRequest* aRequest, uint32_t aStateFlags);
|
||||
void DocLoad(const char* aMsg, nsIDocument* aDocumentNode);
|
||||
void DocCompleteLoad(DocAccessible* aDocument, bool aIsLoadEventTarget);
|
||||
|
||||
/**
|
||||
* Log that document load event was fired.
|
||||
|
@ -1587,6 +1587,11 @@ DocAccessible::ProcessLoad()
|
||||
{
|
||||
mLoadState |= eCompletelyLoaded;
|
||||
|
||||
#ifdef A11Y_LOG
|
||||
if (logging::IsEnabled(logging::eDocLoad))
|
||||
logging::DocCompleteLoad(this, IsLoadEventTarget());
|
||||
#endif
|
||||
|
||||
// Do not fire document complete/stop events for root chrome document
|
||||
// accessibles and for frame/iframe documents because
|
||||
// a) screen readers start working on focus event in the case of root chrome
|
||||
@ -2072,25 +2077,31 @@ bool
|
||||
DocAccessible::IsLoadEventTarget() const
|
||||
{
|
||||
nsCOMPtr<nsISupports> container = mDocument->GetContainer();
|
||||
nsCOMPtr<nsIDocShellTreeItem> docShellTreeItem =
|
||||
do_QueryInterface(container);
|
||||
NS_ASSERTION(docShellTreeItem, "No document shell for document!");
|
||||
nsCOMPtr<nsIDocShellTreeItem> treeItem = do_QueryInterface(container);
|
||||
NS_ASSERTION(treeItem, "No document shell for document!");
|
||||
|
||||
nsCOMPtr<nsIDocShellTreeItem> parentTreeItem;
|
||||
docShellTreeItem->GetParent(getter_AddRefs(parentTreeItem));
|
||||
treeItem->GetParent(getter_AddRefs(parentTreeItem));
|
||||
|
||||
// Return true if it's not a root document (either tab document or
|
||||
// frame/iframe document) and its parent document is not in loading state.
|
||||
// Note: we can get notifications while document is loading (and thus
|
||||
// while there's no parent document yet).
|
||||
// Not a root document.
|
||||
if (parentTreeItem) {
|
||||
// Return true if it's either:
|
||||
// a) tab document;
|
||||
nsCOMPtr<nsIDocShellTreeItem> rootTreeItem;
|
||||
treeItem->GetRootTreeItem(getter_AddRefs(rootTreeItem));
|
||||
if (parentTreeItem == rootTreeItem)
|
||||
return true;
|
||||
|
||||
// b) frame/iframe document and its parent document is not in loading state
|
||||
// Note: we can get notifications while document is loading (and thus
|
||||
// while there's no parent document yet).
|
||||
DocAccessible* parentDoc = ParentDocument();
|
||||
return parentDoc && parentDoc->HasLoadState(eCompletelyLoaded);
|
||||
}
|
||||
|
||||
// It's content (not chrome) root document.
|
||||
int32_t contentType;
|
||||
docShellTreeItem->GetItemType(&contentType);
|
||||
treeItem->GetItemType(&contentType);
|
||||
return (contentType == nsIDocShellTreeItem::typeContent);
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
src="../events.js"></script>
|
||||
|
||||
<script type="application/javascript">
|
||||
gA11yEventDumpToConsole = true; // debug stuff
|
||||
//gA11yEventDumpToConsole = true; // debug stuff
|
||||
|
||||
function doTest()
|
||||
{
|
||||
@ -50,7 +50,7 @@
|
||||
// a: traversal state
|
||||
testStates("link_traversed", 0, 0, STATE_TRAVERSED);
|
||||
|
||||
enableLogging("docload");
|
||||
//enableLogging("docload"); // debug stuff
|
||||
registerA11yEventListener(EVENT_DOCUMENT_LOAD_COMPLETE,
|
||||
traversedLinkTester);
|
||||
|
||||
@ -64,7 +64,7 @@
|
||||
aEvent.accessible.rootDocument.window.close();
|
||||
|
||||
testStates("link_traversed", STATE_TRAVERSED);
|
||||
disableLogging();
|
||||
//disableLogging();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
};
|
||||
|
@ -20,8 +20,6 @@
|
||||
<![CDATA[
|
||||
function doTest()
|
||||
{
|
||||
disableLogging(); // a hack from failing test_link.html to stop logging.
|
||||
|
||||
// label with popup
|
||||
testStates("labelWithPopup", STATE_HASPOPUP);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user