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

Unified Diff: content/browser/web_contents/web_contents_android.cc

Issue 1923613002: Fix a nasty scroll bug for Chrome Now-on-tap feature. Also combine the code paths for Android Webvi… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 8 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
« no previous file with comments | « content/browser/web_contents/web_contents_android.h ('k') | content/public/android/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 abd22a5cdb007da88a9375b18e16d3599442ae83..7a5e1f62d7a1bf8fa83111a793144a48941308fb 100644
--- a/content/browser/web_contents/web_contents_android.cc
+++ b/content/browser/web_contents/web_contents_android.cc
@@ -69,18 +69,9 @@ void JavaScriptResultCallback(const ScopedJavaGlobalRef<jobject>& callback,
}
struct AccessibilitySnapshotParams {
- AccessibilitySnapshotParams(float scale,
- float vertical_offset,
- float horizontal_scroll)
- : scale_factor(scale),
- y_offset(vertical_offset),
- x_scroll(horizontal_scroll),
- has_tree_data(false),
- should_select_leaf_nodes(false) {}
-
- float scale_factor;
- float y_offset;
- float x_scroll;
+ 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
@@ -96,12 +87,12 @@ struct AccessibilitySnapshotParams {
ScopedJavaLocalRef<jobject> WalkAXTreeDepthFirst(
JNIEnv* env,
BrowserAccessibilityAndroid* node,
+ const gfx::Rect& parent_rect,
AccessibilitySnapshotParams* params) {
ScopedJavaLocalRef<jstring> j_text =
ConvertUTF16ToJavaString(env, node->GetText());
ScopedJavaLocalRef<jstring> j_class =
ConvertUTF8ToJavaString(env, node->GetClassName());
- const gfx::Rect& location = node->GetLocalBoundsRect();
// 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.
@@ -116,15 +107,18 @@ ScopedJavaLocalRef<jobject> WalkAXTreeDepthFirst(
size = node->GetFloatAttribute(ui::AX_ATTR_FONT_SIZE);
text_style = node->GetIntAttribute(ui::AX_ATTR_TEXT_STYLE);
}
- float scale_factor = params->scale_factor;
+
+ const gfx::Rect& absolute_rect = node->GetLocalBoundsRect();
+ gfx::Rect parent_relative_rect = absolute_rect;
+ bool is_root = node->GetParent() == nullptr;
+ if (!is_root) {
+ parent_relative_rect.Offset(-parent_rect.OffsetFromOrigin());
+ }
ScopedJavaLocalRef<jobject> j_node =
Java_WebContentsImpl_createAccessibilitySnapshotNode(
- env, scale_factor * location.x() - params->x_scroll,
- scale_factor * location.y() + params->y_offset,
- scale_factor * node->GetScrollX(), scale_factor * node->GetScrollY(),
- scale_factor * location.width(), scale_factor * location.height(),
- j_text.obj(), color, bgcolor, scale_factor * size, text_style,
- j_class.obj());
+ env, parent_relative_rect.x(), parent_relative_rect.y(),
+ absolute_rect.width(), absolute_rect.height(), is_root, j_text.obj(),
+ color, bgcolor, size, text_style, j_class.obj());
if (params->has_tree_data && node->PlatformIsLeaf()) {
int start_selection = 0;
@@ -150,14 +144,14 @@ ScopedJavaLocalRef<jobject> WalkAXTreeDepthFirst(
static_cast<BrowserAccessibilityAndroid*>(
node->PlatformGetChild(i));
Java_WebContentsImpl_addAccessibilityNodeAsChild(
- env, j_node.obj(), WalkAXTreeDepthFirst(env, child, params).obj());
+ env, j_node.obj(),
+ WalkAXTreeDepthFirst(env, child, absolute_rect, params).obj());
}
return j_node;
}
// Walks over the AXTreeUpdate and creates a light weight snapshot.
void AXTreeSnapshotCallback(const ScopedJavaGlobalRef<jobject>& callback,
- AccessibilitySnapshotParams* params,
const ui::AXTreeUpdate& result) {
JNIEnv* env = base::android::AttachCurrentThread();
if (result.nodes.empty()) {
@@ -170,14 +164,17 @@ void AXTreeSnapshotCallback(const ScopedJavaGlobalRef<jobject>& callback,
manager->set_prune_tree_for_screen_reader(false);
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;
+ 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;
}
- ScopedJavaLocalRef<jobject> j_root = WalkAXTreeDepthFirst(env, root, params);
+ gfx::Rect parent_rect;
+ ScopedJavaLocalRef<jobject> j_root =
+ WalkAXTreeDepthFirst(env, root, parent_rect, &params);
Java_WebContentsImpl_onAccessibilitySnapshot(
env, j_root.obj(), callback.obj());
}
@@ -599,21 +596,15 @@ jint WebContentsAndroid::GetThemeColor(JNIEnv* env,
void WebContentsAndroid::RequestAccessibilitySnapshot(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
- const JavaParamRef<jobject>& callback,
- jfloat y_offset,
- jfloat x_scroll) {
+ const JavaParamRef<jobject>& callback) {
// Secure the Java callback in a scoped object and give ownership of it to the
// base::Callback.
ScopedJavaGlobalRef<jobject> j_callback;
j_callback.Reset(env, callback);
gfx::DeviceDisplayInfo device_info;
- ContentViewCoreImpl* contentViewCore =
- ContentViewCoreImpl::FromWebContents(web_contents_);
- AccessibilitySnapshotParams* params = new AccessibilitySnapshotParams(
- contentViewCore->GetScaleFactor(), y_offset, x_scroll);
WebContentsImpl::AXTreeSnapshotCallback snapshot_callback =
- base::Bind(&AXTreeSnapshotCallback, j_callback, base::Owned(params));
+ base::Bind(&AXTreeSnapshotCallback, j_callback);
static_cast<WebContentsImpl*>(web_contents_)->RequestAXTreeSnapshot(
snapshot_callback);
}
« no previous file with comments | « content/browser/web_contents/web_contents_android.h ('k') | content/public/android/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698