| // Copyright (c) 2012 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 CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_ |
| #define CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_ |
| |
| #include <string> |
| |
| #include "base/compiler_specific.h" |
| #include "base/memory/singleton.h" |
| #include "base/values.h" |
| #include "chrome/browser/accessibility/accessibility_events.h" |
| #include "chrome/browser/extensions/chrome_extension_function.h" |
| #include "ui/base/accessibility/accessibility_types.h" |
| |
| // Observes the profile and routes accessibility notifications as events |
| // to the extension system. |
| class ExtensionAccessibilityEventRouter { |
| public: |
| typedef base::Callback<void(ui::AccessibilityTypes::Event, |
| const AccessibilityControlInfo*)> |
| ControlEventCallback; |
| // Single instance of the event router. |
| static ExtensionAccessibilityEventRouter* GetInstance(); |
| |
| // Get the dict representing the last control that received an |
| // OnControlFocus event. |
| DictionaryValue* last_focused_control_dict() { |
| return &last_focused_control_dict_; |
| } |
| |
| // Accessibility support is disabled until an extension expicitly enables |
| // it, so that this extension api has no impact on Chrome's performance |
| // otherwise. These methods handle enabling, disabling, and querying the |
| // status. |
| void SetAccessibilityEnabled(bool enabled); |
| bool IsAccessibilityEnabled() const; |
| |
| // Set and remove callbacks (used for testing, to confirm that events are |
| // getting through). |
| void SetControlEventCallbackForTesting(ControlEventCallback callback); |
| void ClearControlEventCallback(); |
| |
| // Route a window-related accessibility event. |
| void HandleWindowEvent(ui::AccessibilityTypes::Event event, |
| const AccessibilityWindowInfo* info); |
| |
| // Route a menu-related accessibility event. |
| void HandleMenuEvent(ui::AccessibilityTypes::Event event, |
| const AccessibilityMenuInfo* info); |
| |
| // Route a control-related accessibility event. |
| void HandleControlEvent(ui::AccessibilityTypes::Event event, |
| const AccessibilityControlInfo* info); |
| |
| private: |
| friend struct DefaultSingletonTraits<ExtensionAccessibilityEventRouter>; |
| |
| ExtensionAccessibilityEventRouter(); |
| virtual ~ExtensionAccessibilityEventRouter(); |
| |
| void OnWindowOpened(const AccessibilityWindowInfo* details); |
| void OnControlFocused(const AccessibilityControlInfo* details); |
| void OnControlAction(const AccessibilityControlInfo* details); |
| void OnTextChanged(const AccessibilityControlInfo* details); |
| void OnMenuOpened(const AccessibilityMenuInfo* details); |
| void OnMenuClosed(const AccessibilityMenuInfo* details); |
| |
| void DispatchEvent(Profile* profile, |
| const char* event_name, |
| scoped_ptr<base::ListValue> event_args); |
| |
| DictionaryValue last_focused_control_dict_; |
| |
| bool enabled_; |
| |
| // For testing. |
| ControlEventCallback control_event_callback_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ExtensionAccessibilityEventRouter); |
| }; |
| |
| // API function that enables or disables accessibility support. Event |
| // listeners are only installed when accessibility support is enabled, to |
| // minimize the impact. |
| class AccessibilitySetAccessibilityEnabledFunction |
| : public ChromeSyncExtensionFunction { |
| virtual ~AccessibilitySetAccessibilityEnabledFunction() {} |
| virtual bool RunImpl() OVERRIDE; |
| DECLARE_EXTENSION_FUNCTION( |
| "experimental.accessibility.setAccessibilityEnabled", |
| EXPERIMENTAL_ACCESSIBILITY_SETACCESSIBILITYENABLED) |
| }; |
| |
| // API function that enables or disables web content accessibility support. |
| class AccessibilitySetNativeAccessibilityEnabledFunction |
| : public ChromeSyncExtensionFunction { |
| virtual ~AccessibilitySetNativeAccessibilityEnabledFunction() {} |
| virtual bool RunImpl() OVERRIDE; |
| DECLARE_EXTENSION_FUNCTION( |
| "experimental.accessibility.setNativeAccessibilityEnabled", |
| EXPERIMENTAL_ACCESSIBILITY_SETNATIVEACCESSIBILITYENABLED) |
| }; |
| |
| // API function that returns the most recent focused control. |
| class AccessibilityGetFocusedControlFunction |
| : public ChromeSyncExtensionFunction { |
| virtual ~AccessibilityGetFocusedControlFunction() {} |
| virtual bool RunImpl() OVERRIDE; |
| DECLARE_EXTENSION_FUNCTION( |
| "experimental.accessibility.getFocusedControl", |
| EXPERIMENTAL_ACCESSIBILITY_GETFOCUSEDCONTROL) |
| }; |
| |
| // API function that returns alerts being shown on the give tab. |
| class AccessibilityGetAlertsForTabFunction |
| : public ChromeSyncExtensionFunction { |
| virtual ~AccessibilityGetAlertsForTabFunction() {} |
| virtual bool RunImpl() OVERRIDE; |
| DECLARE_EXTENSION_FUNCTION( |
| "experimental.accessibility.getAlertsForTab", |
| EXPERIMENTAL_ACCESSIBILITY_GETALERTSFORTAB) |
| }; |
| |
| #endif // CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_ |