1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_ACCESSIBILITY_CONTROLLER_H_
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define CONTENT_SHELL_RENDERER_TEST_RUNNER_ACCESSIBILITY_CONTROLLER_H_
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <vector>
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/weak_ptr.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/shell/renderer/test_runner/web_ax_object_proxy.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/WebKit/public/web/WebAXObject.h"
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "v8/include/v8.h"
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace blink {
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WebFrame;
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WebString;
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WebView;
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace content {
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class WebTestDelegate;
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class AccessibilityController :
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      public base::SupportsWeakPtr<AccessibilityController> {
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AccessibilityController();
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ~AccessibilityController();
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void Reset();
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void Install(blink::WebFrame* frame);
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void SetFocusedElement(const blink::WebAXObject&);
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool ShouldLogAccessibilityEvents();
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotificationReceived(const blink::WebAXObject& target,
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            const std::string& notification_name);
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void SetDelegate(WebTestDelegate* delegate);
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void SetWebView(blink::WebView* web_view);
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  friend class AccessibilityControllerBindings;
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Bound methods and properties
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void LogAccessibilityEvents();
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void SetNotificationListener(v8::Handle<v8::Function> callback);
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void UnsetNotificationListener();
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  v8::Handle<v8::Object> FocusedElement();
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  v8::Handle<v8::Object> RootElement();
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  v8::Handle<v8::Object> AccessibleElementById(const std::string& id);
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  v8::Handle<v8::Object> FindAccessibleElementByIdRecursive(
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const blink::WebAXObject&, const blink::WebString& id);
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // If true, will log all accessibility notifications.
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool log_accessibility_events_;
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  blink::WebAXObject focused_element_;
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  blink::WebAXObject root_element_;
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  WebAXObjectProxyList elements_;
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  v8::Persistent<v8::Function> notification_callback_;
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  WebTestDelegate* delegate_;
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  blink::WebView* web_view_;
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::WeakPtrFactory<AccessibilityController> weak_factory_;
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AccessibilityController);
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace content
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif  // CONTENT_SHELL_RENDERER_TEST_RUNNER_ACCESSIBILITY_CONTROLLER_H_
76