LCOV - code coverage report
Current view: top level - accessible/xpcom - xpcAccessibleDocument.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 45 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 11 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=2 et sw=2 tw=80: */
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
       5             :  * You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #ifndef mozilla_a11y_xpcAccessibleDocument_h_
       8             : #define mozilla_a11y_xpcAccessibleDocument_h_
       9             : 
      10             : #include "nsIAccessibleDocument.h"
      11             : 
      12             : #include "DocAccessible.h"
      13             : #include "nsAccessibilityService.h"
      14             : #include "xpcAccessibleApplication.h"
      15             : #include "xpcAccessibleHyperText.h"
      16             : 
      17             : namespace mozilla {
      18             : namespace a11y {
      19             : 
      20             : /**
      21             :  * XPCOM wrapper around DocAccessible class.
      22             :  */
      23             : class xpcAccessibleDocument : public xpcAccessibleHyperText,
      24             :                               public nsIAccessibleDocument
      25             : {
      26             : public:
      27           0 :   explicit xpcAccessibleDocument(DocAccessible* aIntl) :
      28           0 :     xpcAccessibleHyperText(aIntl), mCache(kDefaultCacheLength), mRemote(false) { }
      29             : 
      30           0 :   xpcAccessibleDocument(ProxyAccessible* aProxy, uint32_t aInterfaces) :
      31             :     xpcAccessibleHyperText(aProxy, aInterfaces), mCache(kDefaultCacheLength),
      32           0 :     mRemote(true) {}
      33             : 
      34             :   NS_DECL_ISUPPORTS_INHERITED
      35             : 
      36             :   // nsIAccessibleDocument
      37             :   NS_IMETHOD GetURL(nsAString& aURL) final override;
      38             :   NS_IMETHOD GetTitle(nsAString& aTitle) final override;
      39             :   NS_IMETHOD GetMimeType(nsAString& aType) final override;
      40             :   NS_IMETHOD GetDocType(nsAString& aType) final override;
      41             :   NS_IMETHOD GetDOMDocument(nsIDOMDocument** aDOMDocument) final override;
      42             :   NS_IMETHOD GetWindow(mozIDOMWindowProxy** aDOMWindow) final override;
      43             :   NS_IMETHOD GetParentDocument(nsIAccessibleDocument** aDocument)
      44             :     final override;
      45             :   NS_IMETHOD GetChildDocumentCount(uint32_t* aCount) final override;
      46             :   NS_IMETHOD GetChildDocumentAt(uint32_t aIndex,
      47             :                                 nsIAccessibleDocument** aDocument)
      48             :     final override;
      49             :   NS_IMETHOD GetVirtualCursor(nsIAccessiblePivot** aVirtualCursor)
      50             :     final override;
      51             : 
      52             :   /**
      53             :    * Return XPCOM wrapper for the internal accessible.
      54             :    */
      55             :   xpcAccessibleGeneric* GetAccessible(Accessible* aAccessible);
      56             :   xpcAccessibleGeneric* GetXPCAccessible(ProxyAccessible* aProxy);
      57             : 
      58             :   virtual void Shutdown() override;
      59             : 
      60             : protected:
      61           0 :   virtual ~xpcAccessibleDocument() {}
      62             : 
      63             : private:
      64           0 :   DocAccessible* Intl()
      65             :   {
      66           0 :     if (Accessible* acc = mIntl.AsAccessible()) {
      67           0 :       return acc->AsDoc();
      68             :     }
      69             : 
      70           0 :     return nullptr;
      71             :   }
      72             : 
      73           0 :   void NotifyOfShutdown(Accessible* aAccessible)
      74             :   {
      75           0 :     MOZ_ASSERT(!mRemote);
      76           0 :     xpcAccessibleGeneric* xpcAcc = mCache.Get(aAccessible);
      77           0 :     if (xpcAcc) {
      78           0 :       xpcAcc->Shutdown();
      79             :     }
      80             : 
      81           0 :     mCache.Remove(aAccessible);
      82           0 :     if (mCache.Count() == 0 && mRefCnt == 1) {
      83           0 :       GetAccService()->RemoveFromXPCDocumentCache(
      84           0 :         mIntl.AsAccessible()->AsDoc());
      85             :     }
      86           0 :   }
      87             : 
      88           0 :   void NotifyOfShutdown(ProxyAccessible* aProxy)
      89             :   {
      90           0 :     MOZ_ASSERT(mRemote);
      91           0 :     xpcAccessibleGeneric* xpcAcc = mCache.Get(aProxy);
      92           0 :     if (xpcAcc) {
      93           0 :       xpcAcc->Shutdown();
      94             :     }
      95             : 
      96           0 :     mCache.Remove(aProxy);
      97           0 :     if (mCache.Count() == 0 && mRefCnt == 1) {
      98           0 :       GetAccService()->RemoveFromRemoteXPCDocumentCache(
      99           0 :         mIntl.AsProxy()->AsDoc());
     100             :     }
     101           0 :   }
     102             : 
     103             :   friend class DocManager;
     104             :   friend class DocAccessible;
     105             :   friend class ProxyAccessible;
     106             :   friend class ProxyAccessibleBase<ProxyAccessible>;
     107             :   friend class xpcAccessibleGeneric;
     108             : 
     109             :   xpcAccessibleDocument(const xpcAccessibleDocument&) = delete;
     110             :   xpcAccessibleDocument& operator =(const xpcAccessibleDocument&) = delete;
     111             : 
     112             :   nsDataHashtable<nsPtrHashKey<const void>, xpcAccessibleGeneric*> mCache;
     113             :   bool mRemote;
     114             : };
     115             : 
     116             : inline xpcAccessibleGeneric*
     117           0 : ToXPC(Accessible* aAccessible)
     118             : {
     119           0 :   if (!aAccessible)
     120           0 :     return nullptr;
     121             : 
     122           0 :   if (aAccessible->IsApplication())
     123           0 :     return XPCApplicationAcc();
     124             : 
     125             :   xpcAccessibleDocument* xpcDoc =
     126           0 :     GetAccService()->GetXPCDocument(aAccessible->Document());
     127           0 :   return xpcDoc ? xpcDoc->GetAccessible(aAccessible) : nullptr;
     128             : }
     129             : 
     130             : xpcAccessibleGeneric* ToXPC(AccessibleOrProxy aAcc);
     131             : 
     132             : inline xpcAccessibleHyperText*
     133           0 : ToXPCText(HyperTextAccessible* aAccessible)
     134             : {
     135           0 :   if (!aAccessible)
     136           0 :     return nullptr;
     137             : 
     138             :   xpcAccessibleDocument* xpcDoc =
     139           0 :     GetAccService()->GetXPCDocument(aAccessible->Document());
     140           0 :   return static_cast<xpcAccessibleHyperText*>(xpcDoc->GetAccessible(aAccessible));
     141             : }
     142             : 
     143             : inline xpcAccessibleDocument*
     144           0 : ToXPCDocument(DocAccessible* aAccessible)
     145             : {
     146           0 :   return GetAccService()->GetXPCDocument(aAccessible);
     147             : }
     148             : 
     149             : inline xpcAccessibleDocument*
     150           0 : ToXPCDocument(DocAccessibleParent* aAccessible)
     151             : {
     152           0 :   return GetAccService()->GetXPCDocument(aAccessible);
     153             : }
     154             : 
     155             : } // namespace a11y
     156             : } // namespace mozilla
     157             : 
     158             : #endif

Generated by: LCOV version 1.13