gecko-dev/accessible/android/ProxyAccessibleWrap.h
Noemi Erli ecdbbb2a1f Backed out 8 changesets (bug 1564549) for causing failures in browser_all_files_referenced.js CLOSED TREE
Backed out changeset a6b83802832c (bug 1564549)
Backed out changeset 7f38c6ddd009 (bug 1564549)
Backed out changeset 15a754fb192e (bug 1564549)
Backed out changeset 34441585469f (bug 1564549)
Backed out changeset aada27f6ad6e (bug 1564549)
Backed out changeset 103dbf465704 (bug 1564549)
Backed out changeset c38e72058869 (bug 1564549)
Backed out changeset aca91e9add16 (bug 1564549)
2019-09-24 02:38:39 +03:00

140 lines
3.9 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* 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_ProxyAccessibleWrap_h
#define MOZILLA_A11Y_ProxyAccessibleWrap_h
#include "AccessibleWrap.h"
#include "DocAccessibleParent.h"
namespace mozilla {
namespace a11y {
/**
* A wrapper for Accessible proxies. The public methods here should be overriden
* from AccessibleWrap or its super classes.
* This gives us an abstraction layer so SessionAccessibility doesn't have
* to distinguish between a local or remote accessibles.
* NOTE: This shouldn't be regarded as a full Accessible implementation.
*/
class ProxyAccessibleWrap : public AccessibleWrap {
public:
explicit ProxyAccessibleWrap(ProxyAccessible* aProxy);
virtual void Shutdown() override;
// Accessible
virtual already_AddRefed<nsIPersistentProperties> Attributes() override;
virtual uint32_t ChildCount() const override;
virtual Accessible* GetChildAt(uint32_t aIndex) const override;
virtual ENameValueFlag Name(nsString& aName) const override;
virtual void Value(nsString& aValue) const override;
virtual uint64_t State() override;
virtual nsIntRect Bounds() const override;
MOZ_CAN_RUN_SCRIPT
virtual void ScrollTo(uint32_t aHow) const override;
virtual uint8_t ActionCount() const override;
virtual bool DoAction(uint8_t aIndex) const override;
// AccessibleWrap
virtual void SetTextContents(const nsAString& aText) override;
virtual void GetTextContents(nsAString& aText) override;
virtual bool GetSelectionBounds(int32_t* aStartOffset,
int32_t* aEndOffset) override;
virtual void WrapperDOMNodeID(nsString& aDOMNodeID) override;
private:
virtual role WrapperRole() override;
virtual AccessibleWrap* WrapperParent() override;
virtual bool WrapperRangeInfo(double* aCurVal, double* aMinVal,
double* aMaxVal, double* aStep) override;
};
class DocProxyAccessibleWrap : public ProxyAccessibleWrap {
public:
explicit DocProxyAccessibleWrap(DocAccessibleParent* aProxy)
: ProxyAccessibleWrap(aProxy) {
mGenericTypes |= eDocument;
if (auto parent = ParentDocument()) {
mID = AcquireID();
parent->AddID(mID, this);
} else {
// top level
mID = kNoID;
}
}
virtual void Shutdown() override {
if (mID) {
auto parent = ParentDocument();
if (parent) {
MOZ_ASSERT(mID != kNoID, "A non root accessible always has a parent");
parent->RemoveID(mID);
ReleaseID(mID);
}
}
mID = 0;
mBits.proxy = nullptr;
mStateFlags |= eIsDefunct;
}
DocProxyAccessibleWrap* ParentDocument() {
DocAccessibleParent* proxy = static_cast<DocAccessibleParent*>(Proxy());
MOZ_ASSERT(proxy);
if (DocAccessibleParent* parent = proxy->ParentDoc()) {
return reinterpret_cast<DocProxyAccessibleWrap*>(parent->GetWrapper());
}
return nullptr;
}
DocProxyAccessibleWrap* GetChildDocumentAt(uint32_t aIndex) {
auto doc = Proxy()->AsDoc();
if (doc && doc->ChildDocCount() > aIndex) {
return reinterpret_cast<DocProxyAccessibleWrap*>(
doc->ChildDocAt(aIndex)->GetWrapper());
}
return nullptr;
}
void AddID(uint32_t aID, AccessibleWrap* aAcc) {
mIDToAccessibleMap.Put(aID, aAcc);
}
void RemoveID(uint32_t aID) { mIDToAccessibleMap.Remove(aID); }
AccessibleWrap* GetAccessibleByID(uint32_t aID) const {
return mIDToAccessibleMap.Get(aID);
}
private:
/*
* This provides a mapping from 32 bit id to accessible objects.
*/
nsDataHashtable<nsUint32HashKey, AccessibleWrap*> mIDToAccessibleMap;
};
} // namespace a11y
} // namespace mozilla
#endif