mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 00:35:44 +00:00
ecdbbb2a1f
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)
140 lines
3.9 KiB
C++
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
|