[go: nahoru, domu]

blob: 5fb3860a1f1b46f8f72ca76989e7391342a3331a [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_CALL_STATEMENT_INVOKER_MAC_H_
#define UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_CALL_STATEMENT_INVOKER_MAC_H_
#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
#include "ui/accessibility/platform/inspect/ax_tree_indexer_mac.h"
namespace ui {
class AXElementWrapper;
class AXPropertyNode;
// Invokes a script instruction describing a call unit which represents
// a sequence of calls.
class COMPONENT_EXPORT(AX_PLATFORM) AXCallStatementInvoker final {
public:
// Generic version, all calls are executed in the context of property nodes.
// Note: both |indexer| and |storage| must outlive this object.
AXCallStatementInvoker(const AXTreeIndexerMac* indexer,
std::map<std::string, id>* storage);
// Single target version, all calls are executed in the context of the given
// target node.
// Note: |indexer| must outlive this object.
AXCallStatementInvoker(const id node, const AXTreeIndexerMac* indexer);
// Invokes an attribute matching a property filter.
AXOptionalNSObject Invoke(const AXPropertyNode& property_node,
bool no_object_parse = false) const;
private:
// Returns true if the invoker is instantiated to invoke an ax_script
// instruction, in contrast to processing ax_dump_tree filters.
bool IsDumpingTree() const { return !!node; }
// Invokes a property node for a given target.
AXOptionalNSObject InvokeFor(const id target,
const AXPropertyNode& property_node) const;
// Invoke a property node for a given AXCustomContent.
AXOptionalNSObject InvokeForAXCustomContent(
const id target,
const AXPropertyNode& property_node) const;
// Invokes a property node for a given AXElement.
AXOptionalNSObject InvokeForAXElement(
const AXElementWrapper& ax_element,
const AXPropertyNode& property_node) const;
// Invokes a property node for a given AXTextMarkerRange.
AXOptionalNSObject InvokeForAXTextMarkerRange(
const id target,
const AXPropertyNode& property_node) const;
// Invokes a property node for a given array.
AXOptionalNSObject InvokeForArray(const id target,
const AXPropertyNode& property_node) const;
// Invokes a property node for a given dictionary.
AXOptionalNSObject InvokeForDictionary(
const id target,
const AXPropertyNode& property_node) const;
// Invokes setAccessibilityFocused method.
AXOptionalNSObject InvokeSetAccessibilityFocused(
const AXElementWrapper& ax_element,
const AXPropertyNode& property_node) const;
// Returns a parameterized attribute parameter by a property node representing
// an attribute call.
AXOptionalNSObject ParamFrom(const AXPropertyNode&) const;
// Returns a parameterized attribute parameter by an attribute and a property
// node representing an argument.
AXOptionalNSObject ParamFrom(const std::string& attribute,
const AXPropertyNode& argument) const;
// Converts a given property node to NSObject. If not convertible, returns
// nil.
id PropertyNodeToNSObject(const AXPropertyNode& property_node) const;
NSNumber* PropertyNodeToInt(const AXPropertyNode&,
bool log_failure = true) const;
NSString* PropertyNodeToString(const AXPropertyNode&,
bool log_failure = true) const;
NSArray* PropertyNodeToIntArray(const AXPropertyNode&,
bool log_failure = true) const;
NSArray* PropertyNodeToTextMarkerArray(const AXPropertyNode&,
bool log_failure = true) const;
NSValue* PropertyNodeToRange(const AXPropertyNode&,
bool log_failure = true) const;
gfx::NativeViewAccessible PropertyNodeToUIElement(
const AXPropertyNode&,
bool log_failure = true) const;
id DictionaryNodeToTextMarker(const AXPropertyNode&,
bool log_failure = true) const;
id PropertyNodeToTextMarker(const AXPropertyNode&,
bool log_failure = true) const;
id PropertyNodeToTextMarkerRange(const AXPropertyNode&,
bool log_failure = true) const;
gfx::NativeViewAccessible LineIndexToNode(
const std::u16string line_index) const;
const id node;
// Map between AXUIElement objects and their DOMIds/accessible tree
// line numbers. Owned by the caller and outlives this object.
const base::raw_ptr<const AXTreeIndexerMac> indexer_;
// Variables storage. Owned by the caller and outlives this object.
const base::raw_ptr<std::map<std::string, id>> storage_;
};
} // namespace ui
#endif // UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_CALL_STATEMENT_INVOKER_MAC_H_