123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef mozilla_a11y_xpcAccessibleDocument_h_
- #define mozilla_a11y_xpcAccessibleDocument_h_
- #include "nsIAccessibleDocument.h"
- #include "DocAccessible.h"
- #include "nsAccessibilityService.h"
- #include "xpcAccessibleApplication.h"
- #include "xpcAccessibleHyperText.h"
- namespace mozilla {
- namespace a11y {
- /**
- * XPCOM wrapper around DocAccessible class.
- */
- class xpcAccessibleDocument : public xpcAccessibleHyperText,
- public nsIAccessibleDocument
- {
- public:
- explicit xpcAccessibleDocument(DocAccessible* aIntl) :
- xpcAccessibleHyperText(aIntl), mCache(kDefaultCacheLength), mRemote(false) { }
- xpcAccessibleDocument(ProxyAccessible* aProxy, uint32_t aInterfaces) :
- xpcAccessibleHyperText(aProxy, aInterfaces), mCache(kDefaultCacheLength),
- mRemote(true) {}
- NS_DECL_ISUPPORTS_INHERITED
- NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(xpcAccessibleDocument,
- xpcAccessibleGeneric)
- // nsIAccessibleDocument
- NS_IMETHOD GetURL(nsAString& aURL) final override;
- NS_IMETHOD GetTitle(nsAString& aTitle) final override;
- NS_IMETHOD GetMimeType(nsAString& aType) final override;
- NS_IMETHOD GetDocType(nsAString& aType) final override;
- NS_IMETHOD GetDOMDocument(nsIDOMDocument** aDOMDocument) final override;
- NS_IMETHOD GetWindow(mozIDOMWindowProxy** aDOMWindow) final override;
- NS_IMETHOD GetParentDocument(nsIAccessibleDocument** aDocument)
- final override;
- NS_IMETHOD GetChildDocumentCount(uint32_t* aCount) final override;
- NS_IMETHOD GetChildDocumentAt(uint32_t aIndex,
- nsIAccessibleDocument** aDocument)
- final override;
- NS_IMETHOD GetVirtualCursor(nsIAccessiblePivot** aVirtualCursor)
- final override;
- /**
- * Return XPCOM wrapper for the internal accessible.
- */
- xpcAccessibleGeneric* GetAccessible(Accessible* aAccessible);
- xpcAccessibleGeneric* GetXPCAccessible(ProxyAccessible* aProxy);
- virtual void Shutdown() override;
- protected:
- virtual ~xpcAccessibleDocument() {}
- private:
- DocAccessible* Intl()
- {
- if (Accessible* acc = mIntl.AsAccessible()) {
- return acc->AsDoc();
- }
- return nullptr;
- }
- void NotifyOfShutdown(Accessible* aAccessible)
- {
- MOZ_ASSERT(!mRemote);
- xpcAccessibleGeneric* xpcAcc = mCache.GetWeak(aAccessible);
- if (xpcAcc)
- xpcAcc->Shutdown();
- mCache.Remove(aAccessible);
- }
- void NotifyOfShutdown(ProxyAccessible* aProxy)
- {
- MOZ_ASSERT(mRemote);
- xpcAccessibleGeneric* acc = mCache.GetWeak(aProxy);
- if (acc) {
- acc->Shutdown();
- }
- mCache.Remove(aProxy);
- }
- friend class DocManager;
- friend class DocAccessible;
- friend class ProxyAccessible;
- friend class ProxyAccessibleBase<ProxyAccessible>;
- xpcAccessibleDocument(const xpcAccessibleDocument&) = delete;
- xpcAccessibleDocument& operator =(const xpcAccessibleDocument&) = delete;
- nsRefPtrHashtable<nsPtrHashKey<const void>, xpcAccessibleGeneric> mCache;
- bool mRemote;
- };
- inline xpcAccessibleGeneric*
- ToXPC(Accessible* aAccessible)
- {
- if (!aAccessible)
- return nullptr;
- if (aAccessible->IsApplication())
- return XPCApplicationAcc();
- xpcAccessibleDocument* xpcDoc =
- GetAccService()->GetXPCDocument(aAccessible->Document());
- return xpcDoc ? xpcDoc->GetAccessible(aAccessible) : nullptr;
- }
- xpcAccessibleGeneric* ToXPC(AccessibleOrProxy aAcc);
- inline xpcAccessibleHyperText*
- ToXPCText(HyperTextAccessible* aAccessible)
- {
- if (!aAccessible)
- return nullptr;
- xpcAccessibleDocument* xpcDoc =
- GetAccService()->GetXPCDocument(aAccessible->Document());
- return static_cast<xpcAccessibleHyperText*>(xpcDoc->GetAccessible(aAccessible));
- }
- inline xpcAccessibleDocument*
- ToXPCDocument(DocAccessible* aAccessible)
- {
- return GetAccService()->GetXPCDocument(aAccessible);
- }
- inline xpcAccessibleDocument*
- ToXPCDocument(DocAccessibleParent* aAccessible)
- {
- return GetAccService()->GetXPCDocument(aAccessible);
- }
- } // namespace a11y
- } // namespace mozilla
- #endif
|