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

Unified Diff: content/browser/accessibility/one_shot_accessibility_tree_search.h

Issue 1134653003: Implement UIElementsForSearchPredicate accessibility APIs for OS X. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address feedback Created 5 years, 7 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
Index: content/browser/accessibility/one_shot_accessibility_tree_search.h
diff --git a/content/browser/accessibility/one_shot_accessibility_tree_search.h b/content/browser/accessibility/one_shot_accessibility_tree_search.h
new file mode 100644
index 0000000000000000000000000000000000000000..f1c8012cefaadd3cfc9392a920ddc0221c1835eb
--- /dev/null
+++ b/content/browser/accessibility/one_shot_accessibility_tree_search.h
@@ -0,0 +1,105 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_TREE_SEARCH_H_
+#define CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_TREE_SEARCH_H_
+
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "content/common/content_export.h"
+
+namespace content {
+
+class BrowserAccessibility;
+class BrowserAccessibilityManager;
+
+// A function that returns whether or not a given node matches, given the
+// start element of the search as an optional comparator.
+typedef bool (*AccessibilityMatchPredicate)(
+ BrowserAccessibility* start_element,
+ BrowserAccessibility* this_element);
+
+// This class provides an interface for searching the accessibility tree from
+// a given starting node, with a few built-in options and allowing an arbitrary
+// number of predicates that can be used to restrict the search.
+//
+// This class is meant to perform one search. Initialize it, then iterate
+// over the matches, and then delete it.
+//
+// This class stores raw pointers to the matches in the tree! Don't keep this
+// object around if the tree is mutating.
+class CONTENT_EXPORT OneShotAccessibilityTreeSearch {
+ public:
+ enum Direction { FORWARDS, BACKWARDS };
+
+ const int UNLIMITED_RESULTS = -1;
+
+ OneShotAccessibilityTreeSearch(BrowserAccessibilityManager* tree);
+ virtual ~OneShotAccessibilityTreeSearch();
+
+ //
+ // Search parameters. All of these are optional.
+ //
+
+ // Sets the node where the search starts. The first potential match will
+ // be the one immediately following this one. This node will be used as
+ // the first arguement to any predicates.
+ void SetStartNode(BrowserAccessibility* start_node);
+
+ // Search forwards or backwards in an in-order traversal of the tree.
+ void SetDirection(Direction direction);
+
+ // Set the maximum number of results, or UNLIMITED_RESULTS
+ // for no limit (default).
+ void SetResultLimit(int result_limit);
+
+ // If true, only searches children of |start_node| and doesn't
+ // recurse.
+ void SetImmediateDescendantsOnly(bool immediate_descendants_only);
+
+ // If true, only considers nodes that aren't invisible or offscreen.
+ void SetVisibleOnly(bool visible_only);
+
+ // Restricts the matches to only nodes where |text| is found as a
+ // substring of any of that node's accessible text, including its
+ // name, description, or value. Case-insensitive.
+ void SetSearchText(const std::string& text);
+
+ // Restricts the matches to only those that satisfy all predicates.
+ void AddPredicate(AccessibilityMatchPredicate predicate);
+
+ //
+ // Calling either of these executes the search.
+ //
+
+ size_t CountMatches();
+ BrowserAccessibility* GetMatchAtIndex(size_t index);
+
+ private:
+ void Search();
+ void SearchByWalkingTree();
+ void SearchByIteratingOverChildren();
+ bool Matches(BrowserAccessibility* node);
+
+ BrowserAccessibilityManager* tree_;
+ BrowserAccessibility* start_node_;
+ Direction direction_;
+ int result_limit_;
+ bool immediate_descendants_only_;
+ bool visible_only_;
+ std::string search_text_;
+
+ std::vector<AccessibilityMatchPredicate> predicates_;
+ std::vector<BrowserAccessibility*> matches_;
+
+ bool did_search_;
+
+ DISALLOW_COPY_AND_ASSIGN(OneShotAccessibilityTreeSearch);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_TREE_SEARCH_H_

Powered by Google App Engine
This is Rietveld 408576698