Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java

Issue 1246823003: Provide an accessibility tree snapshot (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix gn Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index 929e494039c791499ebb359716cf9526ab8b12d8..6286f50ceb5d63761929083dea31fc4deee7fc04 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -34,6 +34,7 @@ import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewStructure;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
import android.view.accessibility.AccessibilityNodeProvider;
@@ -71,6 +72,8 @@ import org.chromium.content.browser.input.SelectPopupDialog;
import org.chromium.content.browser.input.SelectPopupDropdown;
import org.chromium.content.browser.input.SelectPopupItem;
import org.chromium.content.common.ContentSwitches;
+import org.chromium.content_public.browser.AccessibilitySnapshotCallback;
+import org.chromium.content_public.browser.AccessibilitySnapshotNode;
import org.chromium.content_public.browser.GestureStateListener;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.WebContentsObserver;
@@ -111,6 +114,14 @@ public class ContentViewCore implements
private static final int IS_LONG_PRESS = 1;
private static final int IS_LONG_TAP = 2;
+ /**
+ * TODO(sgurun) remove these and use public API. crbug/512264
+ */
+ private static final int TEXT_STYLE_BOLD = 1 << 0;
+ private static final int TEXT_STYLE_ITALIC = 1 << 1;
+ private static final int TEXT_STYLE_UNDERLINE = 1 << 2;
+ private static final int TEXT_STYLE_STRIKE_THRU = 1 << 3;
+
private static final ZoomControlsDelegate NO_OP_ZOOM_CONTROLS_DELEGATE =
new ZoomControlsDelegate() {
@Override
@@ -2933,6 +2944,51 @@ public class ContentViewCore implements
return null;
}
+ // @TargetApi(Build.VERSION_CODES.M) TODO(sgurun) add method document once API is public
+ // crbug/512264
+ public void onProvideVirtualStructure(final ViewStructure structure) {
+ structure.setChildCount(1);
+ final ViewStructure viewRoot = structure.asyncNewChild(0);
+ getWebContents().requestAccessibilitySnapshot(
+ new AccessibilitySnapshotCallback() {
+ @Override
+ public void onAccessibilitySnapshot(AccessibilitySnapshotNode root) {
+ viewRoot.setClassName("");
+ if (root == null) {
+ viewRoot.asyncCommit();
+ return;
+ }
+ createVirtualStructure(viewRoot, root, 0, 0);
+ }
+ },
+ mRenderCoordinates.getContentOffsetYPix(),
+ mRenderCoordinates.getScrollXPix());
+ }
+
+ // When creating the View structure, the left and top are relative to the parent node.
+ // The X scroll is not used, rather compensated through X-position, while the Y scroll
+ // is provided.
+ private void createVirtualStructure(ViewStructure viewNode, AccessibilitySnapshotNode node,
+ int parentX, int parentY) {
+ viewNode.setClassName(node.className);
+ viewNode.setText(node.text);
+ viewNode.setDimens(node.x - parentX - node.scrollX, node.y - parentY, 0, node.scrollY,
+ node.width, node.height);
+ viewNode.setChildCount(node.children.size());
+ if (node.hasStyle) {
+ int style = (node.bold ? TEXT_STYLE_BOLD : 0)
+ | (node.italic ? TEXT_STYLE_ITALIC : 0)
+ | (node.underline ? TEXT_STYLE_UNDERLINE : 0)
+ | (node.lineThrough ? TEXT_STYLE_STRIKE_THRU : 0);
+ viewNode.setTextStyle(node.textSize, node.color, node.bgcolor, style);
+ }
+ for (int i = 0; i < node.children.size(); i++) {
+ createVirtualStructure(viewNode.asyncNewChild(i), node.children.get(i), node.x,
+ node.y);
+ }
+ viewNode.asyncCommit();
+ }
+
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onSystemCaptioningChanged(TextTrackSettings settings) {

Powered by Google App Engine
This is Rietveld 408576698