tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

xpcAccessibleGeneric.h (2714B)


      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_xpcAccessibleGeneric_h_
      8 #define mozilla_a11y_xpcAccessibleGeneric_h_
      9 
     10 #include "xpcAccessible.h"
     11 #include "xpcAccessibleHyperLink.h"
     12 #include "xpcAccessibleSelectable.h"
     13 #include "xpcAccessibleValue.h"
     14 
     15 #include "LocalAccessible.h"
     16 #include "mozilla/a11y/Accessible.h"
     17 #include "mozilla/a11y/RemoteAccessible.h"
     18 
     19 namespace mozilla {
     20 namespace a11y {
     21 
     22 /**
     23 * XPCOM wrapper around Accessible class.
     24 */
     25 class xpcAccessibleGeneric : public xpcAccessible,
     26                             public xpcAccessibleHyperLink,
     27                             public xpcAccessibleSelectable,
     28                             public xpcAccessibleValue {
     29 public:
     30  explicit xpcAccessibleGeneric(Accessible* aInternal)
     31      : mIntl(aInternal), mSupportedIfaces(0) {
     32    if (aInternal->IsSelect()) mSupportedIfaces |= eSelectable;
     33    if (aInternal->HasNumericValue()) mSupportedIfaces |= eValue;
     34    if (aInternal->IsLink()) mSupportedIfaces |= eHyperLink;
     35  }
     36 
     37  NS_DECL_ISUPPORTS
     38 
     39  // nsIAccessible
     40  LocalAccessible* ToInternalAccessible() final;
     41  Accessible* ToInternalGeneric() final { return mIntl; }
     42 
     43  // xpcAccessibleGeneric
     44  virtual void Shutdown();
     45 
     46 protected:
     47  virtual ~xpcAccessibleGeneric();
     48 
     49  Accessible* mIntl;
     50 
     51  enum {
     52    eSelectable = 1 << 0,
     53    eValue = 1 << 1,
     54    eHyperLink = 1 << 2,
     55    eText = 1 << 3
     56  };
     57  uint8_t mSupportedIfaces;
     58 
     59 private:
     60  friend class LocalAccessible;
     61  friend class xpcAccessible;
     62  friend class xpcAccessibleHyperLink;
     63  friend class xpcAccessibleSelectable;
     64  friend class xpcAccessibleValue;
     65 
     66  xpcAccessibleGeneric(const xpcAccessibleGeneric&) = delete;
     67  xpcAccessibleGeneric& operator=(const xpcAccessibleGeneric&) = delete;
     68 };
     69 
     70 inline LocalAccessible* xpcAccessible::Intl() {
     71  if (!static_cast<xpcAccessibleGeneric*>(this)->mIntl) {
     72    return nullptr;
     73  }
     74  return static_cast<xpcAccessibleGeneric*>(this)->mIntl->AsLocal();
     75 }
     76 
     77 inline Accessible* xpcAccessible::IntlGeneric() {
     78  return static_cast<xpcAccessibleGeneric*>(this)->mIntl;
     79 }
     80 
     81 inline Accessible* xpcAccessibleHyperLink::Intl() {
     82  return static_cast<xpcAccessibleGeneric*>(this)->mIntl;
     83 }
     84 
     85 inline Accessible* xpcAccessibleSelectable::Intl() {
     86  return static_cast<xpcAccessibleGeneric*>(this)->mIntl;
     87 }
     88 
     89 inline Accessible* xpcAccessibleValue::Intl() {
     90  return static_cast<xpcAccessibleGeneric*>(this)->mIntl;
     91 }
     92 
     93 }  // namespace a11y
     94 }  // namespace mozilla
     95 
     96 #endif