Bug 1501496 - Don't send accessible GeckoBundle in sendEvent, class names is enough. r=Jamie

Differential Revision: https://phabricator.services.mozilla.com/D9689

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Eitan Isaacson 2018-10-25 21:49:28 +00:00
Родитель 8e91e2c50c
Коммит 72450b73d0
6 изменённых файлов: 31 добавлений и 36 удалений

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

@ -118,7 +118,7 @@ AccessibleWrap::HandleAccEvent(AccEvent* aEvent)
AccStateChangeEvent* event = downcast_accEvent(aEvent);
auto state = event->GetState();
if (state & states::CHECKED) {
sessionAcc->SendClickedEvent(accessible);
sessionAcc->SendClickedEvent(accessible, event->IsStateEnabled());
}
if (state & states::SELECTED) {
@ -373,7 +373,7 @@ AccessibleWrap::WrapperRangeInfo(double* aCurVal, double* aMinVal,
}
mozilla::java::GeckoBundle::LocalRef
AccessibleWrap::ToBundle(bool aMinimal)
AccessibleWrap::ToBundle()
{
if (!IsProxy() && IsDefunct()) {
return nullptr;
@ -406,11 +406,6 @@ AccessibleWrap::ToBundle(bool aMinimal)
}
GECKOBUNDLE_PUT(nodeInfo, "text", jni::StringParam(text));
if (aMinimal) {
GECKOBUNDLE_FINISH(nodeInfo);
return nodeInfo;
}
nsAutoString geckoRole;
nsAutoString roleDescription;
if (VirtualViewID() != kNoID) {

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

@ -31,7 +31,7 @@ public:
virtual bool GetSelectionBounds(int32_t* aStartOffset, int32_t* aEndOffset);
mozilla::java::GeckoBundle::LocalRef ToBundle(bool aMinimal = false);
mozilla::java::GeckoBundle::LocalRef ToBundle();
int32_t AndroidClass()
{

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

@ -85,7 +85,7 @@ a11y::ProxyStateChangeEvent(ProxyAccessible* aTarget,
}
if (aState & states::CHECKED) {
sessionAcc->SendClickedEvent(WrapperFor(aTarget));
sessionAcc->SendClickedEvent(WrapperFor(aTarget), aEnabled);
}
if (aState & states::SELECTED) {

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

@ -151,7 +151,7 @@ SessionAccessibility::SendAccessibilityFocusedEvent(AccessibleWrap* aAccessible)
{
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_VIEW_ACCESSIBILITY_FOCUSED,
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
aAccessible->ScrollTo(nsIAccessibleScrollType::SCROLL_TYPE_ANYWHERE);
}
@ -160,7 +160,7 @@ SessionAccessibility::SendHoverEnterEvent(AccessibleWrap* aAccessible)
{
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_VIEW_HOVER_ENTER,
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
}
void
@ -174,7 +174,7 @@ SessionAccessibility::SendFocusEvent(AccessibleWrap* aAccessible)
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_VIEW_FOCUSED,
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
}
void
@ -199,8 +199,8 @@ SessionAccessibility::SendScrollingEvent(AccessibleWrap* aAccessible,
GECKOBUNDLE_FINISH(eventInfo);
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_VIEW_SCROLLED, virtualViewId, eventInfo,
aAccessible->ToBundle(true));
java::sdk::AccessibilityEvent::TYPE_VIEW_SCROLLED, virtualViewId,
aAccessible->AndroidClass(), eventInfo);
SendWindowContentChangedEvent(aAccessible);
}
@ -210,7 +210,7 @@ SessionAccessibility::SendWindowContentChangedEvent(AccessibleWrap* aAccessible)
{
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_WINDOW_CONTENT_CHANGED,
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
}
void
@ -224,7 +224,7 @@ SessionAccessibility::SendWindowStateChangedEvent(AccessibleWrap* aAccessible)
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_WINDOW_STATE_CHANGED,
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
}
void
@ -245,7 +245,7 @@ SessionAccessibility::SendTextSelectionChangedEvent(AccessibleWrap* aAccessible,
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_VIEW_TEXT_SELECTION_CHANGED,
aAccessible->VirtualViewID(), eventInfo, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), eventInfo);
}
void
@ -279,7 +279,7 @@ SessionAccessibility::SendTextChangedEvent(AccessibleWrap* aAccessible,
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_VIEW_TEXT_CHANGED,
aAccessible->VirtualViewID(), eventInfo, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), eventInfo);
}
void
@ -299,15 +299,20 @@ SessionAccessibility::SendTextTraversedEvent(AccessibleWrap* aAccessible,
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::
TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
aAccessible->VirtualViewID(), eventInfo, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), eventInfo);
}
void
SessionAccessibility::SendClickedEvent(AccessibleWrap* aAccessible)
SessionAccessibility::SendClickedEvent(AccessibleWrap* aAccessible, bool aChecked)
{
GECKOBUNDLE_START(eventInfo);
// Boolean::FALSE/TRUE gets clobbered by a macro, so ugh.
GECKOBUNDLE_PUT(eventInfo, "checked", java::sdk::Integer::ValueOf(aChecked ? 1 : 0));
GECKOBUNDLE_FINISH(eventInfo);
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_VIEW_CLICKED,
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), eventInfo);
}
void
@ -315,5 +320,5 @@ SessionAccessibility::SendSelectedEvent(AccessibleWrap* aAccessible)
{
mSessionAccessibility->SendEvent(
java::sdk::AccessibilityEvent::TYPE_VIEW_SELECTED,
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
}

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

@ -100,7 +100,7 @@ public:
bool aIsInsert,
bool aFromUser);
void SendSelectedEvent(AccessibleWrap* aAccessible);
void SendClickedEvent(AccessibleWrap* aAccessible);
void SendClickedEvent(AccessibleWrap* aAccessible, bool aChecked);
void SendWindowContentChangedEvent(AccessibleWrap* aAccessible);
void SendWindowStateChangedEvent(AccessibleWrap* aAccessible);

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

@ -129,14 +129,14 @@ public class SessionAccessibility {
switch (action) {
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS:
if (virtualViewId == View.NO_ID) {
sendEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, View.NO_ID, null, null);
sendEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, View.NO_ID, CLASSNAME_WEBVIEW, null);
} else {
final GeckoBundle nodeInfo = nativeProvider.getNodeInfo(virtualViewId);
final int flags = nodeInfo != null ? nodeInfo.getInt("flags") : 0;
if ((flags & FLAG_FOCUSED) != 0) {
mSession.getEventDispatcher().dispatch("GeckoView:AccessibilityCursorToFocused", null);
} else {
sendEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, virtualViewId, null, nodeInfo);
sendEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, virtualViewId, nodeInfo.getInt("className"), null);
}
}
return true;
@ -145,7 +145,7 @@ public class SessionAccessibility {
GeckoBundle nodeInfo = nativeProvider.getNodeInfo(virtualViewId);
final int flags = nodeInfo != null ? nodeInfo.getInt("flags") : 0;
if ((flags & (FLAG_SELECTABLE | FLAG_CHECKABLE)) == 0) {
sendEvent(AccessibilityEvent.TYPE_VIEW_CLICKED, virtualViewId, null, nodeInfo);
sendEvent(AccessibilityEvent.TYPE_VIEW_CLICKED, virtualViewId, nodeInfo.getInt("className"), null);
}
return true;
case AccessibilityNodeInfo.ACTION_LONG_CLICK:
@ -569,7 +569,7 @@ public class SessionAccessibility {
return true;
}
/* package */ void sendEvent(final int eventType, final int sourceId, final GeckoBundle eventData, final GeckoBundle sourceInfo) {
/* package */ void sendEvent(final int eventType, final int sourceId, final int className, final GeckoBundle eventData) {
ThreadUtils.assertOnUiThread();
if (mView == null) {
return;
@ -588,15 +588,9 @@ public class SessionAccessibility {
final AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
event.setPackageName(GeckoAppShell.getApplicationContext().getPackageName());
event.setSource(mView, sourceId);
event.setClassName(getClassName(className));
event.setEnabled(true);
if (sourceInfo != null) {
final int flags = sourceInfo.getInt("flags");
event.setClassName(getClassName(sourceInfo.getInt("className")));
event.setChecked((flags & FLAG_CHECKED) != 0);
event.getText().add(sourceInfo.getString("text", ""));
}
if (eventData != null) {
if (eventData.containsKey("text")) {
event.getText().add(eventData.getString("text"));
@ -613,6 +607,7 @@ public class SessionAccessibility {
event.setScrollY(eventData.getInt("scrollY", -1));
event.setMaxScrollX(eventData.getInt("maxScrollX", -1));
event.setMaxScrollY(eventData.getInt("maxScrollY", -1));
event.setChecked(eventData.getInt("checked") != 0);
}
((ViewParent) mView).requestSendAccessibilityEvent(mView, event);
@ -637,11 +632,11 @@ public class SessionAccessibility {
public native void setText(int id, String text);
@WrapForJNI(calledFrom = "gecko", stubName = "SendEvent")
private void sendEventNative(final int eventType, final int sourceId, final GeckoBundle eventData, final GeckoBundle sourceInfo) {
private void sendEventNative(final int eventType, final int sourceId, final int className, final GeckoBundle eventData) {
ThreadUtils.postToUiThread(new Runnable() {
@Override
public void run() {
sendEvent(eventType, sourceId, eventData, sourceInfo);
sendEvent(eventType, sourceId, className, eventData);
}
});
}