Index: content/browser/web_contents/web_contents_android.cc |
diff --git a/content/browser/web_contents/web_contents_android.cc b/content/browser/web_contents/web_contents_android.cc |
index 033dcee5d2183e3567339f0af22c3d73d4cc43da..99ab35b20ed82b6d3583316c2d1d1f445bd77f51 100644 |
--- a/content/browser/web_contents/web_contents_android.cc |
+++ b/content/browser/web_contents/web_contents_android.cc |
@@ -38,6 +38,7 @@ |
#include "jni/WebContentsImpl_jni.h" |
#include "net/android/network_library.h" |
#include "ui/accessibility/ax_node_data.h" |
+#include "ui/accessibility/platform/ax_android_snapshot.h" |
#include "ui/android/overscroll_refresh_handler.h" |
#include "ui/android/window_android.h" |
#include "ui/gfx/android/java_bitmap.h" |
@@ -82,90 +83,29 @@ void SmartClipCallback(const ScopedJavaGlobalRef<jobject>& callback, |
Java_WebContentsImpl_onSmartClipDataExtracted(env, jtext, jhtml, callback); |
} |
-struct AccessibilitySnapshotParams { |
- AccessibilitySnapshotParams() |
- : has_tree_data(false), should_select_leaf_nodes(false) {} |
- |
- bool has_tree_data; |
- // The current text selection within this tree, if any, expressed as the |
- // node ID and character offset of the anchor (selection start) and focus |
- // (selection end). |
- int32_t sel_anchor_object_id; |
- int32_t sel_anchor_offset; |
- int32_t sel_focus_object_id; |
- int32_t sel_focus_offset; |
- // if the flag is true, mark the leaf node as selected. |
- bool should_select_leaf_nodes; |
-}; |
- |
-ScopedJavaLocalRef<jobject> WalkAXTreeDepthFirst( |
+ScopedJavaLocalRef<jobject> CreateJavaAXSnapshot( |
JNIEnv* env, |
- BrowserAccessibilityAndroid* node, |
- const gfx::Rect& parent_rect, |
- AccessibilitySnapshotParams* params) { |
+ const ui::AXSnapshotNodeAndroid* node, |
+ bool is_root) { |
ScopedJavaLocalRef<jstring> j_text = |
- ConvertUTF16ToJavaString(env, node->GetText()); |
+ ConvertUTF16ToJavaString(env, node->text); |
ScopedJavaLocalRef<jstring> j_class = |
- ConvertUTF8ToJavaString(env, node->GetClassName()); |
- // The style attributes exists and valid if size attribute exists. Otherwise, |
- // they are not. Use a negative size information to indicate the existence |
- // of style information. |
- float size = -1.0; |
- int color = 0; |
- int bgcolor = 0; |
- int text_style = 0; |
- |
- if (node->HasFloatAttribute(ui::AX_ATTR_FONT_SIZE)) { |
- color = node->GetIntAttribute(ui::AX_ATTR_COLOR); |
- bgcolor = node->GetIntAttribute(ui::AX_ATTR_BACKGROUND_COLOR); |
- text_style = node->GetIntAttribute(ui::AX_ATTR_TEXT_STYLE); |
- |
- // The font size is just the computed style for that element; apply |
- // transformations to get the actual pixel size. |
- gfx::RectF text_size_rect( |
- 0, 0, 1, node->GetFloatAttribute(ui::AX_ATTR_FONT_SIZE)); |
- gfx::Rect scaled_text_size_rect = node->RelativeToAbsoluteBounds( |
- text_size_rect, false); |
- size = scaled_text_size_rect.height(); |
- } |
- |
- const gfx::Rect& absolute_rect = node->GetPageBoundsRect(); |
- gfx::Rect parent_relative_rect = absolute_rect; |
- bool is_root = node->PlatformGetParent() == nullptr; |
- if (!is_root) { |
- parent_relative_rect.Offset(-parent_rect.OffsetFromOrigin()); |
- } |
+ ConvertUTF8ToJavaString(env, node->class_name); |
ScopedJavaLocalRef<jobject> j_node = |
Java_WebContentsImpl_createAccessibilitySnapshotNode( |
- env, parent_relative_rect.x(), parent_relative_rect.y(), |
- absolute_rect.width(), absolute_rect.height(), is_root, j_text, color, |
- bgcolor, size, text_style, j_class); |
- |
- if (params->has_tree_data && node->PlatformIsLeaf()) { |
- int start_selection = 0; |
- int end_selection = 0; |
- if (params->sel_anchor_object_id == node->GetId()) { |
- start_selection = params->sel_anchor_offset; |
- params->should_select_leaf_nodes = true; |
- } |
- if (params->should_select_leaf_nodes) |
- end_selection = node->GetText().length(); |
- |
- if (params->sel_focus_object_id == node->GetId()) { |
- end_selection = params->sel_focus_offset; |
- params->should_select_leaf_nodes = false; |
- } |
- if (end_selection > 0) |
- Java_WebContentsImpl_setAccessibilitySnapshotSelection( |
- env, j_node, start_selection, end_selection); |
+ env, node->rect.x(), node->rect.y(), node->rect.width(), |
+ node->rect.height(), is_root, j_text, node->color, node->bgcolor, |
+ node->text_size, node->bold, node->italic, node->underline, |
+ node->line_through, j_class); |
+ |
+ if (node->has_selection) { |
+ Java_WebContentsImpl_setAccessibilitySnapshotSelection( |
+ env, j_node, node->start_selection, node->end_selection); |
} |
- for (uint32_t i = 0; i < node->PlatformChildCount(); i++) { |
- BrowserAccessibilityAndroid* child = |
- static_cast<BrowserAccessibilityAndroid*>( |
- node->PlatformGetChild(i)); |
+ for (auto& child : node->children) { |
Java_WebContentsImpl_addAccessibilityNodeAsChild( |
- env, j_node, WalkAXTreeDepthFirst(env, child, absolute_rect, params)); |
+ env, j_node, CreateJavaAXSnapshot(env, child.get(), false)); |
} |
return j_node; |
} |
@@ -178,23 +118,9 @@ void AXTreeSnapshotCallback(const ScopedJavaGlobalRef<jobject>& callback, |
Java_WebContentsImpl_onAccessibilitySnapshot(env, nullptr, callback); |
return; |
} |
- std::unique_ptr<BrowserAccessibilityManagerAndroid> manager( |
- static_cast<BrowserAccessibilityManagerAndroid*>( |
- BrowserAccessibilityManager::Create(result, nullptr))); |
- manager->set_prune_tree_for_screen_reader(false); |
sgurun-gerrit only
2017/04/20 23:25:01
where is this code now?
Muyuan
2017/04/21 18:45:11
The code logic is consistent with this path taken.
sgurun-gerrit only
2017/04/21 21:48:22
I don't know this part of the code well so leaving
|
- BrowserAccessibilityAndroid* root = |
- static_cast<BrowserAccessibilityAndroid*>(manager->GetRoot()); |
- AccessibilitySnapshotParams params; |
- if (result.has_tree_data) { |
- params.has_tree_data = true; |
- params.sel_anchor_object_id = result.tree_data.sel_anchor_object_id; |
- params.sel_anchor_offset = result.tree_data.sel_anchor_offset; |
- params.sel_focus_object_id = result.tree_data.sel_focus_object_id; |
- params.sel_focus_offset = result.tree_data.sel_focus_offset; |
- } |
- gfx::Rect parent_rect; |
+ auto snapshot = ui::AXSnapshotNodeAndroid::Create(result); |
ScopedJavaLocalRef<jobject> j_root = |
- WalkAXTreeDepthFirst(env, root, parent_rect, ¶ms); |
+ CreateJavaAXSnapshot(env, snapshot.get(), true); |
Java_WebContentsImpl_onAccessibilitySnapshot(env, j_root, callback); |
} |