From 4ef13b907625b4fea63032a03c095fda0709c75a Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Tue, 29 May 2018 22:58:47 -0400 Subject: [PATCH] Bug 1455676 part 2. Remove nsIDOMNode usage from accessible/. r=surkov --- accessible/base/AccEvent.cpp | 15 +++++----- accessible/base/nsAccessibilityService.cpp | 9 +++--- accessible/base/nsAccessibilityService.h | 2 +- .../interfaces/nsIAccessibilityService.idl | 7 +++-- accessible/interfaces/nsIAccessible.idl | 5 ++-- accessible/interfaces/nsIAccessibleEvent.idl | 7 +++-- accessible/ipc/DocAccessibleParent.cpp | 14 ++++----- accessible/tests/mochitest/.eslintrc.js | 2 -- accessible/tests/mochitest/common.js | 29 +++++++++++++++---- accessible/tests/mochitest/events.js | 2 +- .../mochitest/events/test_focus_name.html | 4 +-- accessible/xpcom/xpcAccessibilityService.cpp | 22 ++++---------- accessible/xpcom/xpcAccessible.cpp | 7 ++--- accessible/xpcom/xpcAccessible.h | 2 +- accessible/xul/XULListboxAccessible.cpp | 8 ++--- accessible/xul/XULTabAccessible.cpp | 20 +++++-------- accessible/xul/XULTreeAccessible.cpp | 10 ++----- dom/base/nsFocusManager.cpp | 9 ++---- .../xul/nsIDOMXULMenuListElement.idl | 5 ++-- .../xul/nsIDOMXULRelatedElement.idl | 5 +++- 20 files changed, 88 insertions(+), 96 deletions(-) diff --git a/accessible/base/AccEvent.cpp b/accessible/base/AccEvent.cpp index 2fc4c13f44a4..3749b34de7dc 100644 --- a/accessible/base/AccEvent.cpp +++ b/accessible/base/AccEvent.cpp @@ -199,7 +199,6 @@ a11y::MakeXPCEvent(AccEvent* aEvent) DocAccessible* doc = aEvent->Document(); Accessible* acc = aEvent->GetAccessible(); nsINode* node = acc->GetNode(); - nsIDOMNode* domNode = node ? node->AsDOMNode() : nullptr; bool fromUser = aEvent->IsFromUserInput(); uint32_t type = aEvent->GetEventType(); uint32_t eventGroup = aEvent->GetEventGroups(); @@ -210,7 +209,7 @@ a11y::MakeXPCEvent(AccEvent* aEvent) bool extra = false; uint32_t state = nsAccUtils::To32States(sc->GetState(), &extra); xpEvent = new xpcAccStateChangeEvent(type, ToXPC(acc), ToXPCDocument(doc), - domNode, fromUser, + node, fromUser, state, extra, sc->IsStateEnabled()); return xpEvent.forget(); } @@ -220,7 +219,7 @@ a11y::MakeXPCEvent(AccEvent* aEvent) nsString text; tc->GetModifiedText(text); xpEvent = new xpcAccTextChangeEvent(type, ToXPC(acc), ToXPCDocument(doc), - domNode, fromUser, + node, fromUser, tc->GetStartOffset(), tc->GetLength(), tc->IsTextInserted(), text); return xpEvent.forget(); @@ -229,7 +228,7 @@ a11y::MakeXPCEvent(AccEvent* aEvent) if (eventGroup & (1 << AccEvent::eHideEvent)) { AccHideEvent* hideEvent = downcast_accEvent(aEvent); xpEvent = new xpcAccHideEvent(type, ToXPC(acc), ToXPCDocument(doc), - domNode, fromUser, + node, fromUser, ToXPC(hideEvent->TargetParent()), ToXPC(hideEvent->TargetNextSibling()), ToXPC(hideEvent->TargetPrevSibling())); @@ -239,7 +238,7 @@ a11y::MakeXPCEvent(AccEvent* aEvent) if (eventGroup & (1 << AccEvent::eCaretMoveEvent)) { AccCaretMoveEvent* cm = downcast_accEvent(aEvent); xpEvent = new xpcAccCaretMoveEvent(type, ToXPC(acc), ToXPCDocument(doc), - domNode, fromUser, + node, fromUser, cm->GetCaretOffset()); return xpEvent.forget(); } @@ -248,7 +247,7 @@ a11y::MakeXPCEvent(AccEvent* aEvent) AccVCChangeEvent* vcc = downcast_accEvent(aEvent); xpEvent = new xpcAccVirtualCursorChangeEvent(type, ToXPC(acc), ToXPCDocument(doc), - domNode, fromUser, + node, fromUser, ToXPC(vcc->OldAccessible()), vcc->OldStartOffset(), vcc->OldEndOffset(), @@ -262,12 +261,12 @@ a11y::MakeXPCEvent(AccEvent* aEvent) oac->GetAttribute()->ToString(attribute); xpEvent = new xpcAccObjectAttributeChangedEvent(type, ToXPC(acc), - ToXPCDocument(doc), domNode, + ToXPCDocument(doc), node, fromUser, attribute); return xpEvent.forget(); } - xpEvent = new xpcAccEvent(type, ToXPC(acc), ToXPCDocument(doc), domNode, fromUser); + xpEvent = new xpcAccEvent(type, ToXPC(acc), ToXPCDocument(doc), node, fromUser); return xpEvent.forget(); } diff --git a/accessible/base/nsAccessibilityService.cpp b/accessible/base/nsAccessibilityService.cpp index cbbfe7f5d20d..2c3a78fa6098 100644 --- a/accessible/base/nsAccessibilityService.cpp +++ b/accessible/base/nsAccessibilityService.cpp @@ -1661,17 +1661,16 @@ nsAccessibilityService::RemoveNativeRootAccessible(Accessible* aAccessible) } bool -nsAccessibilityService::HasAccessible(nsIDOMNode* aDOMNode) +nsAccessibilityService::HasAccessible(nsINode* aDOMNode) { - nsCOMPtr node(do_QueryInterface(aDOMNode)); - if (!node) + if (!aDOMNode) return false; - DocAccessible* document = GetDocAccessible(node->OwnerDoc()); + DocAccessible* document = GetDocAccessible(aDOMNode->OwnerDoc()); if (!document) return false; - return document->HasAccessible(node); + return document->HasAccessible(aDOMNode); } //////////////////////////////////////////////////////////////////////////////// diff --git a/accessible/base/nsAccessibilityService.h b/accessible/base/nsAccessibilityService.h index a802fe4d9140..0288abf9519d 100644 --- a/accessible/base/nsAccessibilityService.h +++ b/accessible/base/nsAccessibilityService.h @@ -121,7 +121,7 @@ public: Accessible* AddNativeRootAccessible(void* aAtkAccessible); void RemoveNativeRootAccessible(Accessible* aRootAccessible); - bool HasAccessible(nsIDOMNode* aDOMNode); + bool HasAccessible(nsINode* aDOMNode); /** * Get a string equivalent for an accessible role value. diff --git a/accessible/interfaces/nsIAccessibilityService.idl b/accessible/interfaces/nsIAccessibilityService.idl index 510dbc17ad80..21255935ecb6 100644 --- a/accessible/interfaces/nsIAccessibilityService.idl +++ b/accessible/interfaces/nsIAccessibilityService.idl @@ -5,12 +5,13 @@ #include "nsISupports.idl" -interface nsIDOMNode; interface nsIAccessible; interface nsIWeakReference; interface nsIPresShell; interface nsIAccessiblePivot; +webidl Node; + /** * An interface for in-process accessibility clients wishing to get an * nsIAccessible for a given DOM node. More documentation at: @@ -31,7 +32,7 @@ interface nsIAccessibilityService : nsISupports * @param aNode The DOM node to get an accessible for. * @return The nsIAccessible for the given DOM node. */ - nsIAccessible getAccessibleFor(in nsIDOMNode aNode); + nsIAccessible getAccessibleFor(in Node aNode); /** * Returns accessible role as a string. @@ -73,7 +74,7 @@ interface nsIAccessibilityService : nsISupports * * @return cached accessible for the given DOM node if any */ - nsIAccessible getAccessibleFromCache(in nsIDOMNode aNode); + nsIAccessible getAccessibleFromCache(in Node aNode); /** * Create a new pivot for tracking a position and traversing a subtree. diff --git a/accessible/interfaces/nsIAccessible.idl b/accessible/interfaces/nsIAccessible.idl index c25b1dedfeee..a7040569dba6 100644 --- a/accessible/interfaces/nsIAccessible.idl +++ b/accessible/interfaces/nsIAccessible.idl @@ -7,10 +7,11 @@ #include "nsIArray.idl" interface nsIPersistentProperties; -interface nsIDOMNode; interface nsIAccessibleDocument; interface nsIAccessibleRelation; +webidl Node; + %{C++ namespace mozilla { namespace a11y { @@ -76,7 +77,7 @@ interface nsIAccessible : nsISupports /** * The DOM node this nsIAccessible is associated with. */ - readonly attribute nsIDOMNode DOMNode; + readonly attribute Node DOMNode; /** * For remote accessibles the id of the related DOM node. diff --git a/accessible/interfaces/nsIAccessibleEvent.idl b/accessible/interfaces/nsIAccessibleEvent.idl index c4ab81e40fce..538d1d558b75 100644 --- a/accessible/interfaces/nsIAccessibleEvent.idl +++ b/accessible/interfaces/nsIAccessibleEvent.idl @@ -7,7 +7,8 @@ interface nsIAccessible; interface nsIAccessibleDocument; -interface nsIDOMNode; + +webidl Node; %{C++ #define NS_ACCESSIBLE_EVENT_TOPIC "accessible-event" @@ -442,10 +443,10 @@ interface nsIAccessibleEvent : nsISupports readonly attribute nsIAccessibleDocument accessibleDocument; /** - * The nsIDOMNode associated with the event + * The Node associated with the event * May return null if accessible for event has been shut down */ - readonly attribute nsIDOMNode DOMNode; + readonly attribute Node DOMNode; /** * Returns true if the event was caused by explicit user input, diff --git a/accessible/ipc/DocAccessibleParent.cpp b/accessible/ipc/DocAccessibleParent.cpp index 251534efbe59..49f5b7d58265 100644 --- a/accessible/ipc/DocAccessibleParent.cpp +++ b/accessible/ipc/DocAccessibleParent.cpp @@ -94,7 +94,7 @@ DocAccessibleParent::RecvShowEvent(const ShowEventData& aData, uint32_t type = nsIAccessibleEvent::EVENT_SHOW; xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(target); xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this); - nsIDOMNode* node = nullptr; + nsINode* node = nullptr; RefPtr event = new xpcAccEvent(type, xpcAcc, doc, node, aFromUser); nsCoreUtils::DispatchAccEvent(Move(event)); @@ -185,7 +185,7 @@ DocAccessibleParent::RecvHideEvent(const uint64_t& aRootID, ProxyAccessible* prev = root->PrevSibling(); xpcAccessibleGeneric* xpcPrev = prev ? GetXPCAccessible(prev) : nullptr; xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this); - nsIDOMNode* node = nullptr; + nsINode* node = nullptr; event = new xpcAccHideEvent(type, xpcAcc, doc, node, aFromUser, xpcParent, xpcNext, xpcPrev); } @@ -223,7 +223,7 @@ DocAccessibleParent::RecvEvent(const uint64_t& aID, const uint32_t& aEventType) xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(proxy); xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this); - nsIDOMNode* node = nullptr; + nsINode* node = nullptr; bool fromUser = true; // XXX fix me RefPtr event = new xpcAccEvent(aEventType, xpcAcc, doc, node, fromUser); @@ -259,7 +259,7 @@ DocAccessibleParent::RecvStateChangeEvent(const uint64_t& aID, bool extra; uint32_t state = nsAccUtils::To32States(aState, &extra); bool fromUser = true; // XXX fix this - nsIDOMNode* node = nullptr; // XXX can we do better? + nsINode* node = nullptr; // XXX can we do better? RefPtr event = new xpcAccStateChangeEvent(type, xpcAcc, doc, node, fromUser, state, extra, aEnabled); @@ -297,7 +297,7 @@ DocAccessibleParent::RecvCaretMoveEvent(const uint64_t& aID, xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(proxy); xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this); - nsIDOMNode* node = nullptr; + nsINode* node = nullptr; bool fromUser = true; // XXX fix me uint32_t type = nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED; RefPtr event = @@ -335,7 +335,7 @@ DocAccessibleParent::RecvTextChangeEvent(const uint64_t& aID, xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this); uint32_t type = aIsInsert ? nsIAccessibleEvent::EVENT_TEXT_INSERTED : nsIAccessibleEvent::EVENT_TEXT_REMOVED; - nsIDOMNode* node = nullptr; + nsINode* node = nullptr; RefPtr event = new xpcAccTextChangeEvent(type, xpcAcc, doc, node, aFromUser, aStart, aLen, aIsInsert, aStr); @@ -745,7 +745,7 @@ DocAccessibleParent::RecvFocusEvent(const uint64_t& aID, xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(proxy); xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this); - nsIDOMNode* node = nullptr; + nsINode* node = nullptr; bool fromUser = true; // XXX fix me RefPtr event = new xpcAccEvent(nsIAccessibleEvent::EVENT_FOCUS, xpcAcc, doc, node, fromUser); diff --git a/accessible/tests/mochitest/.eslintrc.js b/accessible/tests/mochitest/.eslintrc.js index 06db7f7d4cc6..895c500daaa7 100644 --- a/accessible/tests/mochitest/.eslintrc.js +++ b/accessible/tests/mochitest/.eslintrc.js @@ -5,8 +5,6 @@ module.exports = { "plugin:mozilla/mochitest-test" ], "rules": { - "mozilla/reject-importGlobalProperties": "error", - // XXX These are rules that are enabled in the recommended configuration, but // disabled here due to failures when initially implemented. They should be // removed (and hence enabled) at some stage. diff --git a/accessible/tests/mochitest/common.js b/accessible/tests/mochitest/common.js index 2714cf82c5c5..bebff0b0a4d9 100644 --- a/accessible/tests/mochitest/common.js +++ b/accessible/tests/mochitest/common.js @@ -44,11 +44,28 @@ const nsIAccessibleValue = Ci.nsIAccessibleValue; const nsIObserverService = Ci.nsIObserverService; -const nsIDOMNode = Ci.nsIDOMNode; const nsIDOMWindow = Ci.nsIDOMWindow; const nsIPropertyElement = Ci.nsIPropertyElement; +// Testing "'Node' in this" doesn't do the right thing because there are cases +// when our "this" is not the global even though we're at toplevel. In those +// cases, the import could fail because our global is a Window and we in fact +// have a Node all along. +// +// We could get the global via the (function() { return this; })() trick, but +// that might break any time if people switch us to strict mode. So let's just +// test the thing we care about directly: does bareword Node exist? +let needToImportNode = false; +try { + Node; +} catch (e) { + needToImportNode = true; +} +if (needToImportNode) { + Cu.importGlobalProperties(["Node"]); +} + // ////////////////////////////////////////////////////////////////////////////// // OS detect @@ -208,7 +225,7 @@ function getNode(aAccOrNodeOrID, aDocument) { if (!aAccOrNodeOrID) return null; - if (aAccOrNodeOrID instanceof nsIDOMNode) + if (Node.isInstance(aAccOrNodeOrID)) return aAccOrNodeOrID; if (aAccOrNodeOrID instanceof nsIAccessible) @@ -256,7 +273,7 @@ function getAccessible(aAccOrElmOrID, aInterfaces, aElmObj, aDoNotFailIf) { if (aAccOrElmOrID instanceof nsIAccessible) { try { elm = aAccOrElmOrID.DOMNode; } catch (e) { } - } else if (aAccOrElmOrID instanceof nsIDOMNode) { + } else if (Node.isInstance(aAccOrElmOrID)) { elm = aAccOrElmOrID; } else { @@ -791,7 +808,7 @@ function prettyName(aIdentifier) { return msg; } - if (aIdentifier instanceof nsIDOMNode) + if (Node.isInstance(aIdentifier)) return "[ " + getNodePrettyName(aIdentifier) + " ]"; if (aIdentifier && typeof aIdentifier === "object" ) { @@ -873,11 +890,11 @@ function setTestPluginEnabledState(aNewEnabledState, aPluginName) { function getNodePrettyName(aNode) { try { var tag = ""; - if (aNode.nodeType == nsIDOMNode.DOCUMENT_NODE) { + if (aNode.nodeType == Node.DOCUMENT_NODE) { tag = "document"; } else { tag = aNode.localName; - if (aNode.nodeType == nsIDOMNode.ELEMENT_NODE && aNode.hasAttribute("id")) + if (aNode.nodeType == Node.ELEMENT_NODE && aNode.hasAttribute("id")) tag += "@id=\"" + aNode.getAttribute("id") + "\""; } diff --git a/accessible/tests/mochitest/events.js b/accessible/tests/mochitest/events.js index 83d4fd166bf5..8b1f13894c0f 100644 --- a/accessible/tests/mochitest/events.js +++ b/accessible/tests/mochitest/events.js @@ -94,7 +94,7 @@ function waitForEvent(aEventType, aTargetOrFunc, aFunc, aContext, aArg1, aArg2) target != aEvent.accessible) return; - if (target instanceof nsIDOMNode && + if (Node.isInstance(target) && target != aEvent.DOMNode) return; } diff --git a/accessible/tests/mochitest/events/test_focus_name.html b/accessible/tests/mochitest/events/test_focus_name.html index a445c28212e6..192f596b6772 100644 --- a/accessible/tests/mochitest/events/test_focus_name.html +++ b/accessible/tests/mochitest/events/test_focus_name.html @@ -33,7 +33,7 @@ var gFocusHandler = { handleEvent: function gFocusHandler_handleEvent(aEvent) { var elm = aEvent.target; - if (elm.nodeType != nsIDOMNode.ELEMENT_NODE) + if (elm.nodeType != Node.ELEMENT_NODE) return; gTooltipElm.style.display = "block"; @@ -47,7 +47,7 @@ gTooltipElm.style.display = "none"; var elm = aEvent.target; - if (elm.nodeType == nsIDOMNode.ELEMENT_NODE) + if (elm.nodeType == Node.ELEMENT_NODE) elm.removeAttribute("aria-describedby"); } }; diff --git a/accessible/xpcom/xpcAccessibilityService.cpp b/accessible/xpcom/xpcAccessibilityService.cpp index 17b8d1174188..9ea9081c91db 100644 --- a/accessible/xpcom/xpcAccessibilityService.cpp +++ b/accessible/xpcom/xpcAccessibilityService.cpp @@ -108,7 +108,7 @@ xpcAccessibilityService::GetApplicationAccessible(nsIAccessible** aAccessibleApp } NS_IMETHODIMP -xpcAccessibilityService::GetAccessibleFor(nsIDOMNode *aNode, +xpcAccessibilityService::GetAccessibleFor(nsINode *aNode, nsIAccessible **aAccessible) { NS_ENSURE_ARG_POINTER(aAccessible); @@ -117,19 +117,14 @@ xpcAccessibilityService::GetAccessibleFor(nsIDOMNode *aNode, return NS_OK; } - nsCOMPtr node(do_QueryInterface(aNode)); - if (!node) { - return NS_ERROR_INVALID_ARG; - } - nsAccessibilityService* accService = GetAccService(); if (!accService) { return NS_ERROR_SERVICE_NOT_AVAILABLE; } - DocAccessible* document = accService->GetDocAccessible(node->OwnerDoc()); + DocAccessible* document = accService->GetDocAccessible(aNode->OwnerDoc()); if (document) { - NS_IF_ADDREF(*aAccessible = ToXPC(document->GetAccessible(node))); + NS_IF_ADDREF(*aAccessible = ToXPC(document->GetAccessible(aNode))); } return NS_OK; @@ -187,7 +182,7 @@ xpcAccessibilityService::GetStringRelationType(uint32_t aRelationType, } NS_IMETHODIMP -xpcAccessibilityService::GetAccessibleFromCache(nsIDOMNode* aNode, +xpcAccessibilityService::GetAccessibleFromCache(nsINode* aNode, nsIAccessible** aAccessible) { NS_ENSURE_ARG_POINTER(aAccessible); @@ -196,11 +191,6 @@ xpcAccessibilityService::GetAccessibleFromCache(nsIDOMNode* aNode, return NS_OK; } - nsCOMPtr node(do_QueryInterface(aNode)); - if (!node) { - return NS_ERROR_INVALID_ARG; - } - nsAccessibilityService* accService = GetAccService(); if (!accService) { return NS_ERROR_SERVICE_NOT_AVAILABLE; @@ -212,9 +202,9 @@ xpcAccessibilityService::GetAccessibleFromCache(nsIDOMNode* aNode, // document accessibles are not stored in the document cache, however an // "unofficially" shutdown document (i.e. not from DocManager) can still // exist in the document cache. - Accessible* accessible = accService->FindAccessibleInCache(node); + Accessible* accessible = accService->FindAccessibleInCache(aNode); if (!accessible) { - nsCOMPtr document(do_QueryInterface(node)); + nsCOMPtr document(do_QueryInterface(aNode)); if (document) { accessible = mozilla::a11y::GetExistingDocAccessible(document); } diff --git a/accessible/xpcom/xpcAccessible.cpp b/accessible/xpcom/xpcAccessible.cpp index 6d271e781f4e..595c8462000c 100644 --- a/accessible/xpcom/xpcAccessible.cpp +++ b/accessible/xpcom/xpcAccessible.cpp @@ -177,7 +177,7 @@ xpcAccessible::GetIndexInParent(int32_t* aIndexInParent) } NS_IMETHODIMP -xpcAccessible::GetDOMNode(nsIDOMNode** aDOMNode) +xpcAccessible::GetDOMNode(nsINode** aDOMNode) { NS_ENSURE_ARG_POINTER(aDOMNode); *aDOMNode = nullptr; @@ -185,9 +185,8 @@ xpcAccessible::GetDOMNode(nsIDOMNode** aDOMNode) if (!Intl()) return NS_ERROR_FAILURE; - nsINode* node = Intl()->GetNode(); - if (node) - CallQueryInterface(node, aDOMNode); + nsCOMPtr node = Intl()->GetNode(); + node.forget(aDOMNode); return NS_OK; } diff --git a/accessible/xpcom/xpcAccessible.h b/accessible/xpcom/xpcAccessible.h index a1ec9090607f..174219897bca 100644 --- a/accessible/xpcom/xpcAccessible.h +++ b/accessible/xpcom/xpcAccessible.h @@ -37,7 +37,7 @@ public: NS_IMETHOD GetChildren(nsIArray** aChildren) final; NS_IMETHOD GetIndexInParent(int32_t* aIndexInParent) final; - NS_IMETHOD GetDOMNode(nsIDOMNode** aDOMNode) final; + NS_IMETHOD GetDOMNode(nsINode** aDOMNode) final; NS_IMETHOD GetId(nsAString& aID) final; NS_IMETHOD GetDocument(nsIAccessibleDocument** aDocument) final; NS_IMETHOD GetRootDocument(nsIAccessibleDocument** aRootDocument) diff --git a/accessible/xul/XULListboxAccessible.cpp b/accessible/xul/XULListboxAccessible.cpp index a4871855a0d3..b57e4a0eaac7 100644 --- a/accessible/xul/XULListboxAccessible.cpp +++ b/accessible/xul/XULListboxAccessible.cpp @@ -501,15 +501,11 @@ XULListboxAccessible::ContainerWidget() const nsCOMPtr menuListElm = do_QueryInterface(mContent->GetParent()); if (menuListElm) { - nsCOMPtr inputElm; + RefPtr inputElm; menuListElm->GetInputField(getter_AddRefs(inputElm)); if (inputElm) { - nsCOMPtr inputNode = do_QueryInterface(inputElm); - if (inputNode) { - Accessible* input = - mDoc->GetAccessible(inputNode); + Accessible* input = mDoc->GetAccessible(inputElm); return input ? input->ContainerWidget() : nullptr; - } } } } diff --git a/accessible/xul/XULTabAccessible.cpp b/accessible/xul/XULTabAccessible.cpp index 2f83ad51c29c..5c2b099f939e 100644 --- a/accessible/xul/XULTabAccessible.cpp +++ b/accessible/xul/XULTabAccessible.cpp @@ -114,14 +114,12 @@ XULTabAccessible::RelationByType(RelationType aType) const if (!tabsElm) return rel; - nsCOMPtr domNode(do_QueryInterface(GetNode())); - nsCOMPtr tabpanelNode; - tabsElm->GetRelatedElement(domNode, getter_AddRefs(tabpanelNode)); - if (!tabpanelNode) + RefPtr tabpanelElement; + tabsElm->GetRelatedElement(GetNode(), getter_AddRefs(tabpanelElement)); + if (!tabpanelElement) return rel; - nsCOMPtr tabpanelContent(do_QueryInterface(tabpanelNode)); - rel.AppendTarget(mDoc, tabpanelContent); + rel.AppendTarget(mDoc, tabpanelElement); return rel; } @@ -201,13 +199,11 @@ XULTabpanelAccessible::RelationByType(RelationType aType) const if (!tabpanelsElm) return rel; - nsCOMPtr domNode(do_QueryInterface(GetNode())); - nsCOMPtr tabNode; - tabpanelsElm->GetRelatedElement(domNode, getter_AddRefs(tabNode)); - if (!tabNode) + RefPtr tabElement; + tabpanelsElm->GetRelatedElement(GetNode(), getter_AddRefs(tabElement)); + if (!tabElement) return rel; - nsCOMPtr tabContent(do_QueryInterface(tabNode)); - rel.AppendTarget(mDoc, tabContent); + rel.AppendTarget(mDoc, tabElement); return rel; } diff --git a/accessible/xul/XULTreeAccessible.cpp b/accessible/xul/XULTreeAccessible.cpp index 50801763ee38..bed241aa3a89 100644 --- a/accessible/xul/XULTreeAccessible.cpp +++ b/accessible/xul/XULTreeAccessible.cpp @@ -497,15 +497,11 @@ XULTreeAccessible::ContainerWidget() const nsCOMPtr menuListElm = do_QueryInterface(mContent->GetParent()); if (menuListElm) { - nsCOMPtr inputElm; + RefPtr inputElm; menuListElm->GetInputField(getter_AddRefs(inputElm)); if (inputElm) { - nsCOMPtr inputNode = do_QueryInterface(inputElm); - if (inputNode) { - Accessible* input = - mDoc->GetAccessible(inputNode); - return input ? input->ContainerWidget() : nullptr; - } + Accessible* input = mDoc->GetAccessible(inputElm); + return input ? input->ContainerWidget() : nullptr; } } } diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp index a63e85248a08..b359aba61e61 100644 --- a/dom/base/nsFocusManager.cpp +++ b/dom/base/nsFocusManager.cpp @@ -368,8 +368,6 @@ nsFocusManager::GetRedirectedFocus(nsIContent* aContent) #ifdef MOZ_XUL if (aContent->IsXULElement()) { - nsCOMPtr inputField; - if (aContent->IsXULElement(nsGkAtoms::textbox)) { return aContent->OwnerDoc()-> GetAnonymousElementByAttribute(aContent, nsGkAtoms::anonid, NS_LITERAL_STRING("input")); @@ -377,7 +375,9 @@ nsFocusManager::GetRedirectedFocus(nsIContent* aContent) else { nsCOMPtr menulist = do_QueryInterface(aContent); if (menulist) { + RefPtr inputField; menulist->GetInputField(getter_AddRefs(inputField)); + return inputField; } else if (aContent->IsXULElement(nsGkAtoms::scale)) { nsCOMPtr doc = aContent->GetComposedDoc(); @@ -392,11 +392,6 @@ nsFocusManager::GetRedirectedFocus(nsIContent* aContent) } } } - - if (inputField) { - nsCOMPtr retval = do_QueryInterface(inputField); - return retval; - } } #endif diff --git a/dom/interfaces/xul/nsIDOMXULMenuListElement.idl b/dom/interfaces/xul/nsIDOMXULMenuListElement.idl index 9114a929fcc4..f5fb0dd6b626 100644 --- a/dom/interfaces/xul/nsIDOMXULMenuListElement.idl +++ b/dom/interfaces/xul/nsIDOMXULMenuListElement.idl @@ -4,7 +4,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsIDOMXULSelectCntrlEl.idl" -interface nsIDOMNode; + +webidl Element; [scriptable, uuid(36c16a17-c0e9-4b35-951b-81a147314ef1)] interface nsIDOMXULMenuListElement : nsIDOMXULSelectControlElement { @@ -18,6 +19,6 @@ interface nsIDOMXULMenuListElement : nsIDOMXULSelectControlElement { attribute DOMString image; // For editable menu lists only. - readonly attribute nsIDOMNode inputField; + readonly attribute Element inputField; }; diff --git a/dom/interfaces/xul/nsIDOMXULRelatedElement.idl b/dom/interfaces/xul/nsIDOMXULRelatedElement.idl index 33bc3d3c7786..428db2ba5d72 100644 --- a/dom/interfaces/xul/nsIDOMXULRelatedElement.idl +++ b/dom/interfaces/xul/nsIDOMXULRelatedElement.idl @@ -5,6 +5,9 @@ #include "domstubs.idl" +webidl Element; +webidl Node; + [scriptable, uuid(9fbac05a-fb27-470d-8e5f-028b2dc54ad0)] interface nsIDOMXULRelatedElement : nsISupports { @@ -14,5 +17,5 @@ interface nsIDOMXULRelatedElement : nsISupports * this interface is implemented by XUL tabs and XUL tabpanels elements * and used to get XUL tab element by linked tab panel and vice versa. */ - nsIDOMNode getRelatedElement(in nsIDOMNode aElement); + Element getRelatedElement(in Node aElement); };