Bug 1730096 part 8: Move DefaultTextAttributes to HyperTextAccessibleBase and implement it for RemoteAccessible. r=eeejay

This patch includes ATK and XPCOM support.

Differential Revision: https://phabricator.services.mozilla.com/D129474
This commit is contained in:
James Teh 2021-11-01 23:27:39 +00:00
Родитель 6bd5ccff7d
Коммит 1563d99b94
11 изменённых файлов: 44 добавлений и 39 удалений

Просмотреть файл

@ -295,25 +295,18 @@ static AtkAttributeSet* getRunAttributesCB(AtkText* aText, gint aOffset,
}
static AtkAttributeSet* getDefaultAttributesCB(AtkText* aText) {
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aText));
if (accWrap) {
HyperTextAccessible* text = accWrap->AsHyperText();
if (!text || !text->IsTextRole()) {
return nullptr;
}
RefPtr<AccAttributes> attributes = text->DefaultTextAttributes();
return ConvertToAtkTextAttributeSet(attributes);
}
RemoteAccessible* proxy = GetProxy(ATK_OBJECT(aText));
if (!proxy) {
Accessible* acc = GetInternalObj(ATK_OBJECT(aText));
if (!acc) {
return nullptr;
}
RefPtr<AccAttributes> attrs;
proxy->DefaultTextAttributes(&attrs);
return ConvertToAtkTextAttributeSet(attrs);
HyperTextAccessibleBase* text = acc->AsHyperTextBase();
if (!text || !acc->IsTextRole()) {
return nullptr;
}
RefPtr<AccAttributes> attributes = text->DefaultTextAttributes();
return ConvertToAtkTextAttributeSet(attributes);
}
static void getCharacterExtentsCB(AtkText* aText, gint aOffset, gint* aX,

Просмотреть файл

@ -7,7 +7,6 @@
#include "AccAttributes.h"
#include "mozilla/a11y/Accessible.h"
#include "mozilla/a11y/HyperTextAccessible.h"
#include "mozilla/StaticPrefs_accessibility.h"
#include "nsAccUtils.h"
#include "TextLeafRange.h"
@ -311,10 +310,7 @@ already_AddRefed<AccAttributes> HyperTextAccessibleBase::TextAttributes(
// default attributes if they were requested, otherwise return empty set.
if (offset == 0) {
if (aIncludeDefAttrs) {
// XXX This will be adjusted when DefaultTextAttributes is unified.
if (LocalAccessible* acc = Acc()->AsLocal()) {
return acc->AsHyperText()->DefaultTextAttributes();
}
return DefaultTextAttributes();
}
}
return RefPtr{new AccAttributes()}.forget();

Просмотреть файл

@ -133,6 +133,11 @@ class HyperTextAccessibleBase {
int32_t* aStartOffset,
int32_t* aEndOffset);
/**
* Return text attributes applied to the accessible.
*/
virtual already_AddRefed<AccAttributes> DefaultTextAttributes() = 0;
protected:
virtual const Accessible* Acc() const = 0;
Accessible* Acc() {

Просмотреть файл

@ -181,10 +181,7 @@ class HyperTextAccessible : public AccessibleWrap,
bool aIncludeDefAttrs, int32_t aOffset, int32_t* aStartOffset,
int32_t* aEndOffset) override;
/**
* Return text attributes applied to the accessible.
*/
already_AddRefed<AccAttributes> DefaultTextAttributes();
virtual already_AddRefed<AccAttributes> DefaultTextAttributes() override;
// HyperTextAccessibleBase provides an overload which takes an Accessible.
using HyperTextAccessibleBase::GetChildOffset;

Просмотреть файл

@ -430,6 +430,17 @@ RemoteAccessibleBase<Derived>::GetCachedTextAttributes() {
return nullptr;
}
template <class Derived>
already_AddRefed<AccAttributes>
RemoteAccessibleBase<Derived>::DefaultTextAttributes() {
RefPtr<const AccAttributes> attrs = GetCachedTextAttributes();
RefPtr<AccAttributes> result = new AccAttributes();
if (attrs) {
attrs->CopyTo(result);
}
return result.forget();
}
template class RemoteAccessibleBase<RemoteAccessible>;
} // namespace a11y

Просмотреть файл

@ -234,6 +234,8 @@ class RemoteAccessibleBase : public Accessible, public HyperTextAccessibleBase {
// XXX Implement this once it's cached.
virtual int32_t CaretOffset() const override { return -1; }
virtual already_AddRefed<AccAttributes> DefaultTextAttributes() override;
protected:
RemoteAccessibleBase(uint64_t aID, Derived* aParent,
DocAccessibleParent* aDoc, role aRole, AccType aType,

Просмотреть файл

@ -94,8 +94,6 @@ void GetTextBeforeOffset(int32_t aOffset, AccessibleTextBoundary aBoundaryType,
char16_t CharAt(int32_t aOffset);
void DefaultTextAttributes(RefPtr<AccAttributes>* aAttrs);
nsIntRect TextBounds(
int32_t aStartOffset, int32_t aEndOffset,
uint32_t aCoordType =

Просмотреть файл

@ -239,8 +239,13 @@ already_AddRefed<AccAttributes> RemoteAccessible::TextAttributes(
return attrs.forget();
}
void RemoteAccessible::DefaultTextAttributes(RefPtr<AccAttributes>* aAttrs) {
Unused << mDoc->SendDefaultTextAttributes(mID, aAttrs);
already_AddRefed<AccAttributes> RemoteAccessible::DefaultTextAttributes() {
if (StaticPrefs::accessibility_cache_enabled_AtStartup()) {
return RemoteAccessibleBase<RemoteAccessible>::DefaultTextAttributes();
}
RefPtr<AccAttributes> attrs;
Unused << mDoc->SendDefaultTextAttributes(mID, &attrs);
return attrs.forget();
}
nsIntRect RemoteAccessible::TextBounds(int32_t aStartOffset, int32_t aEndOffset,

Просмотреть файл

@ -39,6 +39,8 @@ class RemoteAccessible : public RemoteAccessibleBase<RemoteAccessible> {
bool aIncludeDefAttrs, int32_t aOffset, int32_t* aStartOffset,
int32_t* aEndOffset) override;
virtual already_AddRefed<AccAttributes> DefaultTextAttributes() override;
protected:
explicit RemoteAccessible(DocAccessibleParent* aThisAsDoc)
: RemoteAccessibleBase(aThisAsDoc) {

Просмотреть файл

@ -77,14 +77,9 @@ inline NSString* ToNSString(id aValue) {
// grammar, or spelling. We query the attribute value here in order
// to find the correct string to return.
RefPtr<AccAttributes> attributes;
if (LocalAccessible* acc = mGeckoAccessible->AsLocal()) {
HyperTextAccessible* text = acc->AsHyperText();
if (text && text->IsTextRole()) {
attributes = text->DefaultTextAttributes();
}
} else {
RemoteAccessible* proxy = mGeckoAccessible->AsRemote();
proxy->DefaultTextAttributes(&attributes);
HyperTextAccessibleBase* text = mGeckoAccessible->AsHyperTextBase();
if (text && mGeckoAccessible->IsTextRole()) {
attributes = text->DefaultTextAttributes();
}
nsAutoString invalidStr;

Просмотреть файл

@ -195,11 +195,12 @@ xpcAccessibleHyperText::GetDefaultTextAttributes(
if (!mIntl) return NS_ERROR_FAILURE;
if (mIntl->IsRemote()) {
if (mIntl->IsRemote() &&
!StaticPrefs::accessibility_cache_enabled_AtStartup()) {
return NS_ERROR_NOT_IMPLEMENTED;
}
RefPtr<AccAttributes> attributes = IntlLocal()->DefaultTextAttributes();
RefPtr<AccAttributes> attributes = Intl()->DefaultTextAttributes();
RefPtr<nsPersistentProperties> props = new nsPersistentProperties();
nsAutoString unused;
for (auto iter : *attributes) {