diff options
Diffstat (limited to 'content/browser')
9 files changed, 52 insertions, 2 deletions
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index abc37d8..c57c40e 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc @@ -143,6 +143,12 @@ bool BrowserAccessibilityAndroid::IsDismissable() const { return false; // No concept of "dismissable" on the web currently. } +bool BrowserAccessibilityAndroid::IsEditableText() const { + return (GetRole() == ui::AX_ROLE_EDITABLE_TEXT || + GetRole() == ui::AX_ROLE_TEXT_AREA || + GetRole() == ui::AX_ROLE_TEXT_FIELD); +} + bool BrowserAccessibilityAndroid::IsEnabled() const { return HasState(ui::AX_STATE_ENABLED); } diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h index 17c7c46..2f6d1af 100644 --- a/content/browser/accessibility/browser_accessibility_android.h +++ b/content/browser/accessibility/browser_accessibility_android.h @@ -26,6 +26,7 @@ class BrowserAccessibilityAndroid : public BrowserAccessibility { bool IsCollectionItem() const; bool IsContentInvalid() const; bool IsDismissable() const; + bool IsEditableText() const; bool IsEnabled() const; bool IsFocusable() const; bool IsFocused() const; diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc index bd745cd..cb392cb 100644 --- a/content/browser/accessibility/browser_accessibility_manager.cc +++ b/content/browser/accessibility/browser_accessibility_manager.cc @@ -284,8 +284,17 @@ void BrowserAccessibilityManager::ScrollToPoint( } } +void BrowserAccessibilityManager::SetValue( + const BrowserAccessibility& node, + const base::string16& value) { + if (delegate_) + delegate_->AccessibilitySetValue(node.GetId(), value); +} + void BrowserAccessibilityManager::SetTextSelection( - const BrowserAccessibility& node, int start_offset, int end_offset) { + const BrowserAccessibility& node, + int start_offset, + int end_offset) { if (delegate_) { delegate_->AccessibilitySetTextSelection( node.GetId(), start_offset, end_offset); diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h index 3760141..4b637cd 100644 --- a/content/browser/accessibility/browser_accessibility_manager.h +++ b/content/browser/accessibility/browser_accessibility_manager.h @@ -61,6 +61,8 @@ class CONTENT_EXPORT BrowserAccessibilityDelegate { int acc_obj_id, const gfx::Point& point) = 0; virtual void AccessibilitySetTextSelection( int acc_obj_id, int start_offset, int end_offset) = 0; + virtual void AccessibilitySetValue( + int acc_obj_id, const base::string16& value) = 0; virtual bool AccessibilityViewHasFocus() const = 0; virtual gfx::Rect AccessibilityGetViewBounds() const = 0; virtual gfx::Point AccessibilityOriginInScreen( @@ -146,6 +148,10 @@ class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeDelegate { void ScrollToPoint( const BrowserAccessibility& node, gfx::Point point); + // Tell the renderer to set the value of an editable text node. + void SetValue( + const BrowserAccessibility& node, const base::string16& value); + // Tell the renderer to set the text selection on a node. void SetTextSelection( const BrowserAccessibility& node, int start_offset, int end_offset); diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc index 3a31ff7..ce27954 100644 --- a/content/browser/accessibility/browser_accessibility_manager_android.cc +++ b/content/browser/accessibility/browser_accessibility_manager_android.cc @@ -224,6 +224,7 @@ jboolean BrowserAccessibilityManagerAndroid::PopulateAccessibilityNodeInfo( node->IsCheckable(), node->IsChecked(), node->IsClickable(), + node->IsEditableText(), node->IsEnabled(), node->IsFocusable(), node->IsFocused(), @@ -406,6 +407,22 @@ void BrowserAccessibilityManagerAndroid::ScrollToMakeNodeVisible( ScrollToMakeVisible(*node, gfx::Rect(node->GetLocation().size())); } +void BrowserAccessibilityManagerAndroid::SetTextFieldValue( + JNIEnv* env, jobject obj, jint id, jstring value) { + BrowserAccessibility* node = GetFromID(id); + if (node) { + BrowserAccessibilityManager::SetValue( + *node, base::android::ConvertJavaStringToUTF16(env, value)); + } +} + +void BrowserAccessibilityManagerAndroid::SetSelection( + JNIEnv* env, jobject obj, jint id, jint start, jint end) { + BrowserAccessibility* node = GetFromID(id); + if (node) + SetTextSelection(*node, start, end); +} + void BrowserAccessibilityManagerAndroid::HandleHoverEvent( BrowserAccessibility* node) { JNIEnv* env = AttachCurrentThread(); diff --git a/content/browser/accessibility/browser_accessibility_manager_android.h b/content/browser/accessibility/browser_accessibility_manager_android.h index 0946e5e..720f175 100644 --- a/content/browser/accessibility/browser_accessibility_manager_android.h +++ b/content/browser/accessibility/browser_accessibility_manager_android.h @@ -55,7 +55,9 @@ class CONTENT_EXPORT BrowserAccessibilityManagerAndroid void Click(JNIEnv* env, jobject obj, jint id); void Focus(JNIEnv* env, jobject obj, jint id); void Blur(JNIEnv* env, jobject obj); - void ScrollToMakeNodeVisible(JNIEnv* env, jobject obj, int id); + void ScrollToMakeNodeVisible(JNIEnv* env, jobject obj, jint id); + void SetTextFieldValue(JNIEnv* env, jobject obj, jint id, jstring value); + void SetSelection(JNIEnv* env, jobject obj, jint id, jint start, jint end); // Return the id of the next node in tree order in the direction given by // |forwards|, starting with |start_id|, that matches |element_type|, diff --git a/content/browser/accessibility/browser_accessibility_manager_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_unittest.cc index a104defa..b71187c 100644 --- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc +++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc @@ -73,6 +73,8 @@ class TestBrowserAccessibilityDelegate void AccessibilitySetTextSelection(int acc_obj_id, int start_offset, int end_offset) override {} + void AccessibilitySetValue(int acc_obj_id, const base::string16& value) + override {} bool AccessibilityViewHasFocus() const override { return false; } gfx::Rect AccessibilityGetViewBounds() const override { return gfx::Rect(); } gfx::Point AccessibilityOriginInScreen( diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 0baac98..fe9b110 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc @@ -434,6 +434,11 @@ void RenderFrameHostImpl::AccessibilitySetTextSelection( routing_id_, object_id, start_offset, end_offset)); } +void RenderFrameHostImpl::AccessibilitySetValue( + int object_id, const base::string16& value) { + Send(new AccessibilityMsg_SetValue(routing_id_, object_id, value)); +} + bool RenderFrameHostImpl::AccessibilityViewHasFocus() const { RenderWidgetHostView* view = render_view_host_->GetView(); if (view) diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index 0f5d57a..d406a85 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h @@ -134,6 +134,8 @@ class CONTENT_EXPORT RenderFrameHostImpl void AccessibilitySetTextSelection(int acc_obj_id, int start_offset, int end_offset) override; + void AccessibilitySetValue(int acc_obj_id, const base::string16& value) + override; bool AccessibilityViewHasFocus() const override; gfx::Rect AccessibilityGetViewBounds() const override; gfx::Point AccessibilityOriginInScreen( |