#include "ui/accessibility/ax_tree.h"
#include "ui/accessibility/ax_tree_observer.h"
class EmptyAXTreeObserver : public ui::AXTreeObserver {
public:
EmptyAXTreeObserver() {}
~EmptyAXTreeObserver() override {}
};
extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size) {
ui::AXTreeUpdate initial_state;
size_t i = 0;
while (i < size) {
ui::AXNodeData node;
node.id = data[i++];
if (i < size) {
size_t child_count = data[i++];
for (size_t j = 0; j < child_count && i < size; j++)
node.child_ids.push_back(data[i++]);
}
initial_state.nodes.push_back(node);
}
#if defined(NDEBUG)
constexpr size_t kMaxNodes = 500000;
#else
constexpr size_t kMaxNodes = 50000;
#endif
if (initial_state.nodes.size() > kMaxNodes) {
LOG(WARNING) << "Skipping input because it's too large";
return 0;
}
VLOG(1) << "Input accessibility tree:\n" << initial_state.ToString();
EmptyAXTreeObserver observer;
ui::AXTree tree;
tree.DisallowFailFastForFuzzing();
tree.AddObserver(&observer);
tree.Unserialize(initial_state);
tree.RemoveObserver(&observer);
return 0;
}