tor-browser

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

MsaaAccessible.h (8428B)


      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
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_a11y_MsaaAccessible_h_
      8 #define mozilla_a11y_MsaaAccessible_h_
      9 
     10 #include "ia2Accessible.h"
     11 #include "ia2AccessibleComponent.h"
     12 #include "ia2AccessibleHyperlink.h"
     13 #include "ia2AccessibleValue.h"
     14 #include "IUnknownImpl.h"
     15 #include "MsaaIdGenerator.h"
     16 #include "nsXULAppAPI.h"
     17 #include "uiaRawElmProvider.h"
     18 
     19 namespace mozilla {
     20 namespace a11y {
     21 class Accessible;
     22 class AccessibleWrap;
     23 class LocalAccessible;
     24 
     25 class MsaaAccessible : public ia2Accessible,
     26                       public ia2AccessibleComponent,
     27                       public ia2AccessibleHyperlink,
     28                       public ia2AccessibleValue,
     29                       public uiaRawElmProvider {
     30 public:
     31  static MsaaAccessible* Create(Accessible* aAcc);
     32 
     33  Accessible* Acc() const { return mAcc; }
     34  AccessibleWrap* LocalAcc();
     35 
     36  uint32_t GetExistingID() const { return mID; }
     37  static const uint32_t kNoID = 0;
     38 
     39  static int32_t GetChildIDFor(Accessible* aAccessible);
     40  static HWND GetHWNDFor(Accessible* aAccessible);
     41  static void FireWinEvent(Accessible* aTarget, uint32_t aEventType);
     42 
     43  /**
     44   * Find an accessible by the given child ID in cached documents.
     45   */
     46  [[nodiscard]] already_AddRefed<IAccessible> GetIAccessibleFor(
     47      const VARIANT& aVarChild, bool* aIsDefunct);
     48 
     49  void MsaaShutdown();
     50 
     51  static IDispatch* NativeAccessible(Accessible* aAccessible);
     52 
     53  static MsaaAccessible* GetFrom(Accessible* aAcc);
     54 
     55  /**
     56   * Creates ITypeInfo for LIBID_Accessibility if it's needed and returns it.
     57   */
     58  static ITypeInfo* GetTI(LCID lcid);
     59 
     60  static Accessible* GetAccessibleFrom(IUnknown* aUnknown);
     61 
     62  DECL_IUNKNOWN
     63 
     64  // IAccessible
     65  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accParent(
     66      /* [retval][out] */ IDispatch __RPC_FAR* __RPC_FAR* ppdispParent)
     67      override;
     68  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accChildCount(
     69      /* [retval][out] */ long __RPC_FAR* pcountChildren) override;
     70  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accChild(
     71      /* [in] */ VARIANT varChild,
     72      /* [retval][out] */ IDispatch __RPC_FAR* __RPC_FAR* ppdispChild) override;
     73  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accName(
     74      /* [optional][in] */ VARIANT varChild,
     75      /* [retval][out] */ BSTR __RPC_FAR* pszName) override;
     76  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accValue(
     77      /* [optional][in] */ VARIANT varChild,
     78      /* [retval][out] */ BSTR __RPC_FAR* pszValue) override;
     79  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accDescription(
     80      /* [optional][in] */ VARIANT varChild,
     81      /* [retval][out] */ BSTR __RPC_FAR* pszDescription) override;
     82  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accRole(
     83      /* [optional][in] */ VARIANT varChild,
     84      /* [retval][out] */ VARIANT __RPC_FAR* pvarRole) override;
     85  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accState(
     86      /* [optional][in] */ VARIANT varChild,
     87      /* [retval][out] */ VARIANT __RPC_FAR* pvarState) override;
     88  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accHelp(
     89      /* [optional][in] */ VARIANT varChild,
     90      /* [retval][out] */ BSTR __RPC_FAR* pszHelp) override;
     91  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accHelpTopic(
     92      /* [out] */ BSTR __RPC_FAR* pszHelpFile,
     93      /* [optional][in] */ VARIANT varChild,
     94      /* [retval][out] */ long __RPC_FAR* pidTopic) override;
     95  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accKeyboardShortcut(
     96      /* [optional][in] */ VARIANT varChild,
     97      /* [retval][out] */ BSTR __RPC_FAR* pszKeyboardShortcut) override;
     98  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accFocus(
     99      /* [retval][out] */ VARIANT __RPC_FAR* pvarChild) override;
    100  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accSelection(
    101      /* [retval][out] */ VARIANT __RPC_FAR* pvarChildren) override;
    102  virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accDefaultAction(
    103      /* [optional][in] */ VARIANT varChild,
    104      /* [retval][out] */ BSTR __RPC_FAR* pszDefaultAction) override;
    105  virtual /* [id] */ HRESULT STDMETHODCALLTYPE accSelect(
    106      /* [in] */ long flagsSelect,
    107      /* [optional][in] */ VARIANT varChild) override;
    108  virtual /* [id] */ HRESULT STDMETHODCALLTYPE accLocation(
    109      /* [out] */ long __RPC_FAR* pxLeft,
    110      /* [out] */ long __RPC_FAR* pyTop,
    111      /* [out] */ long __RPC_FAR* pcxWidth,
    112      /* [out] */ long __RPC_FAR* pcyHeight,
    113      /* [optional][in] */ VARIANT varChild) override;
    114  virtual /* [id] */ HRESULT STDMETHODCALLTYPE accNavigate(
    115      /* [in] */ long navDir,
    116      /* [optional][in] */ VARIANT varStart,
    117      /* [retval][out] */ VARIANT __RPC_FAR* pvarEndUpAt) override;
    118  virtual /* [id] */ HRESULT STDMETHODCALLTYPE accHitTest(
    119      /* [in] */ long xLeft,
    120      /* [in] */ long yTop,
    121      /* [retval][out] */ VARIANT __RPC_FAR* pvarChild) override;
    122  virtual /* [id] */ HRESULT STDMETHODCALLTYPE accDoDefaultAction(
    123      /* [optional][in] */ VARIANT varChild) override;
    124  virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_accName(
    125      /* [optional][in] */ VARIANT varChild,
    126      /* [in] */ BSTR szName) override;
    127  virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_accValue(
    128      /* [optional][in] */ VARIANT varChild,
    129      /* [in] */ BSTR szValue) override;
    130 
    131  // IDispatch (support of scripting languages like VB)
    132  virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT* pctinfo) override;
    133  virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid,
    134                                                ITypeInfo** ppTInfo) override;
    135  virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid,
    136                                                  LPOLESTR* rgszNames,
    137                                                  UINT cNames, LCID lcid,
    138                                                  DISPID* rgDispId) override;
    139  virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid,
    140                                           LCID lcid, WORD wFlags,
    141                                           DISPPARAMS* pDispParams,
    142                                           VARIANT* pVarResult,
    143                                           EXCEPINFO* pExcepInfo,
    144                                           UINT* puArgErr) override;
    145 
    146  // UIA's IInvokeProvider has a method called Invoke too, but it's fine because
    147  // it accepts very different parameters.
    148  using uiaRawElmProvider::Invoke;
    149 
    150 protected:
    151  explicit MsaaAccessible(Accessible* aAcc);
    152  virtual ~MsaaAccessible();
    153 
    154  Accessible* mAcc;
    155 
    156  uint32_t mID;
    157  static MsaaIdGenerator sIDGen;
    158 
    159  HRESULT
    160  ResolveChild(const VARIANT& aVarChild, IAccessible** aOutInterface);
    161 
    162  enum navRelations {
    163    NAVRELATION_CONTROLLED_BY = 0x1000,
    164    NAVRELATION_CONTROLLER_FOR = 0x1001,
    165    NAVRELATION_LABEL_FOR = 0x1002,
    166    NAVRELATION_LABELLED_BY = 0x1003,
    167    NAVRELATION_MEMBER_OF = 0x1004,
    168    NAVRELATION_NODE_CHILD_OF = 0x1005,
    169    NAVRELATION_FLOWS_TO = 0x1006,
    170    NAVRELATION_FLOWS_FROM = 0x1007,
    171    NAVRELATION_SUBWINDOW_OF = 0x1008,
    172    NAVRELATION_EMBEDS = 0x1009,
    173    NAVRELATION_EMBEDDED_BY = 0x100a,
    174    NAVRELATION_POPUP_FOR = 0x100b,
    175    NAVRELATION_PARENT_WINDOW_OF = 0x100c,
    176    NAVRELATION_DEFAULT_BUTTON = 0x100d,
    177    NAVRELATION_DESCRIBED_BY = 0x100e,
    178    NAVRELATION_DESCRIPTION_FOR = 0x100f,
    179    NAVRELATION_NODE_PARENT_OF = 0x1010,
    180    NAVRELATION_CONTAINING_DOCUMENT = 0x1011,
    181    NAVRELATION_CONTAINING_TAB_PANE = 0x1012,
    182    NAVRELATION_CONTAINING_WINDOW = 0x1013,
    183    NAVRELATION_CONTAINING_APPLICATION = 0x1014,
    184    NAVRELATION_DETAILS = 0x1015,
    185    NAVRELATION_DETAILS_FOR = 0x1016,
    186    NAVRELATION_ERROR = 0x1017,
    187    NAVRELATION_ERROR_FOR = 0x1018,
    188    NAVRELATION_LINKS_TO = 0x1019,
    189    NAVRELATION_ACTION = 0x1020,
    190    NAVRELATION_ACTION_FOR = 0x1021
    191  };
    192 
    193 private:
    194  static ITypeInfo* gTypeInfo;
    195 };
    196 
    197 }  // namespace a11y
    198 }  // namespace mozilla
    199 
    200 #ifdef XP_WIN
    201 // Undo the windows.h damage
    202 #  undef GetMessage
    203 #  undef CreateEvent
    204 #  undef GetClassName
    205 #  undef GetBinaryType
    206 #  undef RemoveDirectory
    207 #endif
    208 
    209 #endif