17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_ANDROID_H_ 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_ANDROID_H_ 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/android/scoped_java_ref.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/browser/accessibility/browser_accessibility_manager.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/browser/android/content_view_core_impl.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace content { 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace aria_strings { 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extern const char kAriaLivePolite[]; 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extern const char kAriaLiveAssertive[]; 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CONTENT_EXPORT BrowserAccessibilityManagerAndroid 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public BrowserAccessibilityManager { 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BrowserAccessibilityManagerAndroid( 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::android::ScopedJavaLocalRef<jobject> content_view_core, 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const AccessibilityNodeData& src, 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BrowserAccessibilityDelegate* delegate, 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory()); 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~BrowserAccessibilityManagerAndroid(); 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static AccessibilityNodeData GetEmptyDocument(); 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) void SetContentViewCore( 330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::android::ScopedJavaLocalRef<jobject> content_view_core); 340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Implementation of BrowserAccessibilityManager. 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void NotifyAccessibilityEvent( 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebAXEvent event_type, BrowserAccessibility* node) OVERRIDE; 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // -------------------------------------------------------------------------- 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Methods called from Java via JNI 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // -------------------------------------------------------------------------- 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Tree methods. 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jint GetRootId(JNIEnv* env, jobject obj); 45d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) jboolean IsNodeValid(JNIEnv* env, jobject obj, jint id); 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jint HitTest(JNIEnv* env, jobject obj, jint x, jint y); 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Populate Java accessibility data structures with info about a node. 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch jboolean PopulateAccessibilityNodeInfo( 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch JNIEnv* env, jobject obj, jobject info, jint id); 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch jboolean PopulateAccessibilityEvent( 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch JNIEnv* env, jobject obj, jobject event, jint id, jint event_type); 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Perform actions. 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void Click(JNIEnv* env, jobject obj, jint id); 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void Focus(JNIEnv* env, jobject obj, jint id); 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void Blur(JNIEnv* env, jobject obj); 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected: 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void NotifyRootChanged() OVERRIDE; 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual bool UseRootScrollOffsetsWhenComputingBounds() OVERRIDE; 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This gives BrowserAccessibilityManager::Create access to the class 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // constructor. 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) friend class BrowserAccessibilityManager; 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // A weak reference to the Java BrowserAccessibilityManager object. 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This avoids adding another reference to BrowserAccessibilityManager and 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // preventing garbage collection. 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Premature garbage collection is prevented by the long-lived reference in 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ContentViewCore. 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) JavaObjectWeakGlobalRef java_ref_; 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Searches through the children of start_node to find the nearest 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // accessibility focus candidate for a touch which has not landed directly on 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // an accessibility focus candidate. 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BrowserAccessibility* FuzzyHitTest( 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int x, int y, BrowserAccessibility* start_node); 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void FuzzyHitTestImpl(int x, int y, BrowserAccessibility* start_node, 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BrowserAccessibility** nearest_candidate, int* min_distance); 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Calculates the distance from the point (x, y) to the nearest point on the 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // edge of |node|. 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static int CalculateDistanceSquared(int x, int y, BrowserAccessibility* node); 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerAndroid); 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool RegisterBrowserAccessibilityManager(JNIEnv* env); 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_ANDROID_H_ 97