| Index: content/browser/accessibility/snapshot_ax_tree_browsertest.cc
|
| diff --git a/content/browser/accessibility/snapshot_ax_tree_browsertest.cc b/content/browser/accessibility/snapshot_ax_tree_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9a83084d55f194ff8ea85feaa6e77be4d7100491
|
| --- /dev/null
|
| +++ b/content/browser/accessibility/snapshot_ax_tree_browsertest.cc
|
| @@ -0,0 +1,74 @@
|
| +// 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.
|
| +
|
| +#include "base/callback.h"
|
| +#include "content/browser/web_contents/web_contents_impl.h"
|
| +#include "content/public/test/content_browser_test.h"
|
| +#include "content/public/test/content_browser_test_utils.h"
|
| +#include "content/public/test/test_utils.h"
|
| +#include "content/shell/browser/shell.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/accessibility/ax_node.h"
|
| +#include "ui/accessibility/ax_tree.h"
|
| +
|
| +namespace content {
|
| +
|
| +namespace {
|
| +
|
| +class AXTreeSnapshotWaiter {
|
| + public:
|
| + AXTreeSnapshotWaiter() : loop_runner_(new MessageLoopRunner()) {}
|
| +
|
| + void Wait() {
|
| + loop_runner_->Run();
|
| + }
|
| +
|
| + const ui::AXTreeUpdate& snapshot() const { return snapshot_; }
|
| +
|
| + void ReceiveSnapshot(const ui::AXTreeUpdate& snapshot) {
|
| + snapshot_ = snapshot;
|
| + loop_runner_->Quit();
|
| + }
|
| +
|
| + private:
|
| + ui::AXTreeUpdate snapshot_;
|
| + scoped_refptr<MessageLoopRunner> loop_runner_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(AXTreeSnapshotWaiter);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class SnapshotAXTreeBrowserTest : public ContentBrowserTest {
|
| + public:
|
| + SnapshotAXTreeBrowserTest() {}
|
| + ~SnapshotAXTreeBrowserTest() override {}
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(SnapshotAXTreeBrowserTest,
|
| + SnapshotAccessibilityTreeFromWebContents) {
|
| + GURL url("data:text/html,<button>Click</button>");
|
| + NavigateToURL(shell(), url);
|
| +
|
| + WebContentsImpl* web_contents =
|
| + static_cast<WebContentsImpl*>(shell()->web_contents());
|
| +
|
| + AXTreeSnapshotWaiter waiter;
|
| + web_contents->RequestAXTreeSnapshot(
|
| + base::Bind(&AXTreeSnapshotWaiter::ReceiveSnapshot,
|
| + base::Unretained(&waiter)));
|
| + waiter.Wait();
|
| +
|
| + LOG(INFO) << waiter.snapshot().ToString();
|
| +
|
| + ui::AXTree tree(waiter.snapshot());
|
| + ui::AXNode* root = tree.root();
|
| + ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, root->data().role);
|
| + ui::AXNode* group = root->ChildAtIndex(0);
|
| + ASSERT_EQ(ui::AX_ROLE_GROUP, group->data().role);
|
| + ui::AXNode* button = group->ChildAtIndex(0);
|
| + ASSERT_EQ(ui::AX_ROLE_BUTTON, button->data().role);
|
| +}
|
| +
|
| +} // namespace content
|
|
|