| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/accessibility/browser_accessibility_manager_android.h" | 5 #include "content/browser/accessibility/browser_accessibility_manager_android.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 namespace content { | 36 namespace content { |
| 37 | 37 |
| 38 namespace aria_strings { | 38 namespace aria_strings { |
| 39 const char kAriaLivePolite[] = "polite"; | 39 const char kAriaLivePolite[] = "polite"; |
| 40 const char kAriaLiveAssertive[] = "assertive"; | 40 const char kAriaLiveAssertive[] = "assertive"; |
| 41 } | 41 } |
| 42 | 42 |
| 43 // static | 43 // static |
| 44 BrowserAccessibilityManager* BrowserAccessibilityManager::Create( | 44 BrowserAccessibilityManager* BrowserAccessibilityManager::Create( |
| 45 const AccessibilityNodeData& src, | 45 const ui::AXNodeData& src, |
| 46 BrowserAccessibilityDelegate* delegate, | 46 BrowserAccessibilityDelegate* delegate, |
| 47 BrowserAccessibilityFactory* factory) { | 47 BrowserAccessibilityFactory* factory) { |
| 48 return new BrowserAccessibilityManagerAndroid(ScopedJavaLocalRef<jobject>(), | 48 return new BrowserAccessibilityManagerAndroid(ScopedJavaLocalRef<jobject>(), |
| 49 src, delegate, factory); | 49 src, delegate, factory); |
| 50 } | 50 } |
| 51 | 51 |
| 52 BrowserAccessibilityManagerAndroid* | 52 BrowserAccessibilityManagerAndroid* |
| 53 BrowserAccessibilityManager::ToBrowserAccessibilityManagerAndroid() { | 53 BrowserAccessibilityManager::ToBrowserAccessibilityManagerAndroid() { |
| 54 return static_cast<BrowserAccessibilityManagerAndroid*>(this); | 54 return static_cast<BrowserAccessibilityManagerAndroid*>(this); |
| 55 } | 55 } |
| 56 | 56 |
| 57 BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid( | 57 BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid( |
| 58 ScopedJavaLocalRef<jobject> content_view_core, | 58 ScopedJavaLocalRef<jobject> content_view_core, |
| 59 const AccessibilityNodeData& src, | 59 const ui::AXNodeData& src, |
| 60 BrowserAccessibilityDelegate* delegate, | 60 BrowserAccessibilityDelegate* delegate, |
| 61 BrowserAccessibilityFactory* factory) | 61 BrowserAccessibilityFactory* factory) |
| 62 : BrowserAccessibilityManager(src, delegate, factory) { | 62 : BrowserAccessibilityManager(src, delegate, factory) { |
| 63 SetContentViewCore(content_view_core); | 63 SetContentViewCore(content_view_core); |
| 64 } | 64 } |
| 65 | 65 |
| 66 BrowserAccessibilityManagerAndroid::~BrowserAccessibilityManagerAndroid() { | 66 BrowserAccessibilityManagerAndroid::~BrowserAccessibilityManagerAndroid() { |
| 67 JNIEnv* env = AttachCurrentThread(); | 67 JNIEnv* env = AttachCurrentThread(); |
| 68 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 68 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 69 if (obj.is_null()) | 69 if (obj.is_null()) |
| 70 return; | 70 return; |
| 71 | 71 |
| 72 Java_BrowserAccessibilityManager_onNativeObjectDestroyed(env, obj.obj()); | 72 Java_BrowserAccessibilityManager_onNativeObjectDestroyed(env, obj.obj()); |
| 73 } | 73 } |
| 74 | 74 |
| 75 // static | 75 // static |
| 76 AccessibilityNodeData BrowserAccessibilityManagerAndroid::GetEmptyDocument() { | 76 ui::AXNodeData BrowserAccessibilityManagerAndroid::GetEmptyDocument() { |
| 77 AccessibilityNodeData empty_document; | 77 ui::AXNodeData empty_document; |
| 78 empty_document.id = 0; | 78 empty_document.id = 0; |
| 79 empty_document.role = blink::WebAXRoleRootWebArea; | 79 empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA; |
| 80 empty_document.state = 1 << blink::WebAXStateReadonly; | 80 empty_document.state = 1 << ui::AX_STATE_READONLY; |
| 81 return empty_document; | 81 return empty_document; |
| 82 } | 82 } |
| 83 | 83 |
| 84 void BrowserAccessibilityManagerAndroid::SetContentViewCore( | 84 void BrowserAccessibilityManagerAndroid::SetContentViewCore( |
| 85 ScopedJavaLocalRef<jobject> content_view_core) { | 85 ScopedJavaLocalRef<jobject> content_view_core) { |
| 86 if (content_view_core.is_null()) | 86 if (content_view_core.is_null()) |
| 87 return; | 87 return; |
| 88 | 88 |
| 89 JNIEnv* env = AttachCurrentThread(); | 89 JNIEnv* env = AttachCurrentThread(); |
| 90 java_ref_ = JavaObjectWeakGlobalRef( | 90 java_ref_ = JavaObjectWeakGlobalRef( |
| 91 env, Java_BrowserAccessibilityManager_create( | 91 env, Java_BrowserAccessibilityManager_create( |
| 92 env, reinterpret_cast<intptr_t>(this), | 92 env, reinterpret_cast<intptr_t>(this), |
| 93 content_view_core.obj()).obj()); | 93 content_view_core.obj()).obj()); |
| 94 } | 94 } |
| 95 | 95 |
| 96 void BrowserAccessibilityManagerAndroid::NotifyAccessibilityEvent( | 96 void BrowserAccessibilityManagerAndroid::NotifyAccessibilityEvent( |
| 97 blink::WebAXEvent event_type, | 97 ui::AXEvent event_type, |
| 98 BrowserAccessibility* node) { | 98 BrowserAccessibility* node) { |
| 99 JNIEnv* env = AttachCurrentThread(); | 99 JNIEnv* env = AttachCurrentThread(); |
| 100 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 100 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 101 if (obj.is_null()) | 101 if (obj.is_null()) |
| 102 return; | 102 return; |
| 103 | 103 |
| 104 if (event_type == blink::WebAXEventHide) | 104 if (event_type == ui::AX_EVENT_HIDE) |
| 105 return; | 105 return; |
| 106 | 106 |
| 107 // Always send AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED to notify | 107 // Always send AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED to notify |
| 108 // the Android system that the accessibility hierarchy rooted at this | 108 // the Android system that the accessibility hierarchy rooted at this |
| 109 // node has changed. | 109 // node has changed. |
| 110 Java_BrowserAccessibilityManager_handleContentChanged( | 110 Java_BrowserAccessibilityManager_handleContentChanged( |
| 111 env, obj.obj(), node->renderer_id()); | 111 env, obj.obj(), node->renderer_id()); |
| 112 | 112 |
| 113 switch (event_type) { | 113 switch (event_type) { |
| 114 case blink::WebAXEventLoadComplete: | 114 case ui::AX_EVENT_LOAD_COMPLETE: |
| 115 Java_BrowserAccessibilityManager_handlePageLoaded( | 115 Java_BrowserAccessibilityManager_handlePageLoaded( |
| 116 env, obj.obj(), focus_->renderer_id()); | 116 env, obj.obj(), focus_->renderer_id()); |
| 117 break; | 117 break; |
| 118 case blink::WebAXEventFocus: | 118 case ui::AX_EVENT_FOCUS: |
| 119 Java_BrowserAccessibilityManager_handleFocusChanged( | 119 Java_BrowserAccessibilityManager_handleFocusChanged( |
| 120 env, obj.obj(), node->renderer_id()); | 120 env, obj.obj(), node->renderer_id()); |
| 121 break; | 121 break; |
| 122 case blink::WebAXEventCheckedStateChanged: | 122 case ui::AX_EVENT_CHECKED_STATE_CHANGED: |
| 123 Java_BrowserAccessibilityManager_handleCheckStateChanged( | 123 Java_BrowserAccessibilityManager_handleCheckStateChanged( |
| 124 env, obj.obj(), node->renderer_id()); | 124 env, obj.obj(), node->renderer_id()); |
| 125 break; | 125 break; |
| 126 case blink::WebAXEventScrolledToAnchor: | 126 case ui::AX_EVENT_SCROLLED_TO_ANCHOR: |
| 127 Java_BrowserAccessibilityManager_handleScrolledToAnchor( | 127 Java_BrowserAccessibilityManager_handleScrolledToAnchor( |
| 128 env, obj.obj(), node->renderer_id()); | 128 env, obj.obj(), node->renderer_id()); |
| 129 break; | 129 break; |
| 130 case blink::WebAXEventAlert: | 130 case ui::AX_EVENT_ALERT: |
| 131 // An alert is a special case of live region. Fall through to the | 131 // An alert is a special case of live region. Fall through to the |
| 132 // next case to handle it. | 132 // next case to handle it. |
| 133 case blink::WebAXEventShow: { | 133 case ui::AX_EVENT_SHOW: { |
| 134 // This event is fired when an object appears in a live region. | 134 // This event is fired when an object appears in a live region. |
| 135 // Speak its text. | 135 // Speak its text. |
| 136 BrowserAccessibilityAndroid* android_node = | 136 BrowserAccessibilityAndroid* android_node = |
| 137 static_cast<BrowserAccessibilityAndroid*>(node); | 137 static_cast<BrowserAccessibilityAndroid*>(node); |
| 138 Java_BrowserAccessibilityManager_announceLiveRegionText( | 138 Java_BrowserAccessibilityManager_announceLiveRegionText( |
| 139 env, obj.obj(), | 139 env, obj.obj(), |
| 140 base::android::ConvertUTF16ToJavaString( | 140 base::android::ConvertUTF16ToJavaString( |
| 141 env, android_node->GetText()).obj()); | 141 env, android_node->GetText()).obj()); |
| 142 break; | 142 break; |
| 143 } | 143 } |
| 144 case blink::WebAXEventSelectedTextChanged: | 144 case ui::AX_EVENT_SELECTED_TEXT_CHANGED: |
| 145 Java_BrowserAccessibilityManager_handleTextSelectionChanged( | 145 Java_BrowserAccessibilityManager_handleTextSelectionChanged( |
| 146 env, obj.obj(), node->renderer_id()); | 146 env, obj.obj(), node->renderer_id()); |
| 147 break; | 147 break; |
| 148 case blink::WebAXEventChildrenChanged: | 148 case ui::AX_EVENT_CHILDREN_CHANGED: |
| 149 case blink::WebAXEventTextChanged: | 149 case ui::AX_EVENT_TEXT_CHANGED: |
| 150 case blink::WebAXEventValueChanged: | 150 case ui::AX_EVENT_VALUE_CHANGED: |
| 151 if (node->IsEditableText()) { | 151 if (node->IsEditableText()) { |
| 152 Java_BrowserAccessibilityManager_handleEditableTextChanged( | 152 Java_BrowserAccessibilityManager_handleEditableTextChanged( |
| 153 env, obj.obj(), node->renderer_id()); | 153 env, obj.obj(), node->renderer_id()); |
| 154 } | 154 } |
| 155 break; | 155 break; |
| 156 default: | 156 default: |
| 157 // There are some notifications that aren't meaningful on Android. | 157 // There are some notifications that aren't meaningful on Android. |
| 158 // It's okay to skip them. | 158 // It's okay to skip them. |
| 159 break; | 159 break; |
| 160 } | 160 } |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 BrowserAccessibilityManagerAndroid::UseRootScrollOffsetsWhenComputingBounds() { | 443 BrowserAccessibilityManagerAndroid::UseRootScrollOffsetsWhenComputingBounds() { |
| 444 // The Java layer handles the root scroll offset. | 444 // The Java layer handles the root scroll offset. |
| 445 return false; | 445 return false; |
| 446 } | 446 } |
| 447 | 447 |
| 448 bool RegisterBrowserAccessibilityManager(JNIEnv* env) { | 448 bool RegisterBrowserAccessibilityManager(JNIEnv* env) { |
| 449 return RegisterNativesImpl(env); | 449 return RegisterNativesImpl(env); |
| 450 } | 450 } |
| 451 | 451 |
| 452 } // namespace content | 452 } // namespace content |
| OLD | NEW |