| 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_
|
|
|