Bug 1727643 - P3: Make numeric value methods abstract in Accessible and wire it thru. r=morgan

Differential Revision: https://phabricator.services.mozilla.com/D123697
This commit is contained in:
Eitan Isaacson 2021-08-26 19:40:05 +00:00
Родитель 17e9670742
Коммит 2c5a1217db
7 изменённых файлов: 96 добавлений и 16 удалений

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

@ -115,6 +115,11 @@ class Accessible {
*/ */
virtual ENameValueFlag Name(nsString& aName) const = 0; virtual ENameValueFlag Name(nsString& aName) const = 0;
virtual double CurValue() const = 0;
virtual double MinValue() const = 0;
virtual double MaxValue() const = 0;
virtual double Step() const = 0;
// Type "is" methods // Type "is" methods
bool IsDoc() const { return HasGenericType(eDocument); } bool IsDoc() const { return HasGenericType(eDocument); }

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

@ -702,10 +702,10 @@ class LocalAccessible : public nsISupports, public Accessible {
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// Value (numeric value interface) // Value (numeric value interface)
virtual double MaxValue() const; virtual double MaxValue() const override;
virtual double MinValue() const; virtual double MinValue() const override;
virtual double CurValue() const; virtual double CurValue() const override;
virtual double Step() const; virtual double Step() const override;
virtual bool SetCurValue(double aValue); virtual bool SetCurValue(double aValue);
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////

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

@ -175,6 +175,42 @@ ENameValueFlag RemoteAccessibleBase<Derived>::Name(nsString& aName) const {
return eNameOK; return eNameOK;
} }
template <class Derived>
double RemoteAccessibleBase<Derived>::CurValue() const {
if (auto value = mCachedFields->GetAttribute<double>(nsGkAtoms::value)) {
return *value;
}
return UnspecifiedNaN<double>();
}
template <class Derived>
double RemoteAccessibleBase<Derived>::MinValue() const {
if (auto min = mCachedFields->GetAttribute<double>(nsGkAtoms::min)) {
return *min;
}
return UnspecifiedNaN<double>();
}
template <class Derived>
double RemoteAccessibleBase<Derived>::MaxValue() const {
if (auto max = mCachedFields->GetAttribute<double>(nsGkAtoms::max)) {
return *max;
}
return UnspecifiedNaN<double>();
}
template <class Derived>
double RemoteAccessibleBase<Derived>::Step() const {
if (auto step = mCachedFields->GetAttribute<double>(nsGkAtoms::step)) {
return *step;
}
return UnspecifiedNaN<double>();
}
template class RemoteAccessibleBase<RemoteAccessible>; template class RemoteAccessibleBase<RemoteAccessible>;
} // namespace a11y } // namespace a11y

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

@ -164,8 +164,15 @@ class RemoteAccessibleBase : public Accessible {
return HasGenericType(eNumericValue); return HasGenericType(eNumericValue);
} }
// Methods that potentially access a cache.
virtual ENameValueFlag Name(nsString& aName) const override; virtual ENameValueFlag Name(nsString& aName) const override;
virtual double CurValue() const override;
virtual double MinValue() const override;
virtual double MaxValue() const override;
virtual double Step() const override;
/** /**
* Allow the platform to store a pointers worth of data on us. * Allow the platform to store a pointers worth of data on us.
*/ */

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

@ -239,11 +239,11 @@ KeyBinding AccessKey();
KeyBinding KeyboardShortcut(); KeyBinding KeyboardShortcut();
void AtkKeyBinding(nsString& aBinding); void AtkKeyBinding(nsString& aBinding);
double CurValue(); double CurValue() const override;
double MinValue() const override;
double MaxValue() const override;
double Step() const override;
bool SetCurValue(double aValue); bool SetCurValue(double aValue);
double MinValue();
double MaxValue();
double Step();
void TakeFocus(); void TakeFocus();
RemoteAccessible* FocusedChild(); RemoteAccessible* FocusedChild();

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

@ -744,7 +744,11 @@ void RemoteAccessible::AtkKeyBinding(nsString& aBinding) {
Unused << mDoc->SendAtkKeyBinding(mID, &aBinding); Unused << mDoc->SendAtkKeyBinding(mID, &aBinding);
} }
double RemoteAccessible::CurValue() { double RemoteAccessible::CurValue() const {
if (mCachedFields) {
return RemoteAccessibleBase<RemoteAccessible>::CurValue();
}
double val = UnspecifiedNaN<double>(); double val = UnspecifiedNaN<double>();
Unused << mDoc->SendCurValue(mID, &val); Unused << mDoc->SendCurValue(mID, &val);
return val; return val;
@ -756,19 +760,31 @@ bool RemoteAccessible::SetCurValue(double aValue) {
return success; return success;
} }
double RemoteAccessible::MinValue() { double RemoteAccessible::MinValue() const {
if (mCachedFields) {
return RemoteAccessibleBase<RemoteAccessible>::MinValue();
}
double val = UnspecifiedNaN<double>(); double val = UnspecifiedNaN<double>();
Unused << mDoc->SendMinValue(mID, &val); Unused << mDoc->SendMinValue(mID, &val);
return val; return val;
} }
double RemoteAccessible::MaxValue() { double RemoteAccessible::MaxValue() const {
if (mCachedFields) {
return RemoteAccessibleBase<RemoteAccessible>::MaxValue();
}
double val = UnspecifiedNaN<double>(); double val = UnspecifiedNaN<double>();
Unused << mDoc->SendMaxValue(mID, &val); Unused << mDoc->SendMaxValue(mID, &val);
return val; return val;
} }
double RemoteAccessible::Step() { double RemoteAccessible::Step() const {
if (mCachedFields) {
return RemoteAccessibleBase<RemoteAccessible>::Step();
}
double step = UnspecifiedNaN<double>(); double step = UnspecifiedNaN<double>();
Unused << mDoc->SendStep(mID, &step); Unused << mDoc->SendStep(mID, &step);
return step; return step;

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

@ -160,7 +160,11 @@ void RemoteAccessible::Value(nsString& aValue) const {
aValue = (wchar_t*)resultWrap; aValue = (wchar_t*)resultWrap;
} }
double RemoteAccessible::Step() { double RemoteAccessible::Step() const {
if (mCachedFields) {
return RemoteAccessibleBase<RemoteAccessible>::Step();
}
RefPtr<IGeckoCustom> custom = QueryInterface<IGeckoCustom>(this); RefPtr<IGeckoCustom> custom = QueryInterface<IGeckoCustom>(this);
if (!custom) { if (!custom) {
return 0; return 0;
@ -394,7 +398,11 @@ nsTArray<RemoteAccessible*> RemoteAccessible::RelationByType(
return proxies; return proxies;
} }
double RemoteAccessible::CurValue() { double RemoteAccessible::CurValue() const {
if (mCachedFields) {
return RemoteAccessibleBase<RemoteAccessible>::CurValue();
}
RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this); RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this);
if (!acc) { if (!acc) {
return UnspecifiedNaN<double>(); return UnspecifiedNaN<double>();
@ -423,7 +431,11 @@ bool RemoteAccessible::SetCurValue(double aValue) {
return SUCCEEDED(hr); return SUCCEEDED(hr);
} }
double RemoteAccessible::MinValue() { double RemoteAccessible::MinValue() const {
if (mCachedFields) {
return RemoteAccessibleBase<RemoteAccessible>::MinValue();
}
RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this); RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this);
if (!acc) { if (!acc) {
return UnspecifiedNaN<double>(); return UnspecifiedNaN<double>();
@ -438,7 +450,11 @@ double RemoteAccessible::MinValue() {
return minimumValue.dblVal; return minimumValue.dblVal;
} }
double RemoteAccessible::MaxValue() { double RemoteAccessible::MaxValue() const {
if (mCachedFields) {
return RemoteAccessibleBase<RemoteAccessible>::MaxValue();
}
RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this); RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this);
if (!acc) { if (!acc) {
return UnspecifiedNaN<double>(); return UnspecifiedNaN<double>();