extension_accessibility_api.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_ACCESSIBILITY_API_H_ 6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_ACCESSIBILITY_API_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/callback.h" 12#include "base/singleton.h" 13#include "chrome/browser/accessibility_events.h" 14#include "chrome/browser/extensions/extension_function.h" 15#include "chrome/common/notification_service.h" 16#include "chrome/common/notification_registrar.h" 17 18// Observes the profile and routes accessibility notifications as events 19// to the extension system. 20class ExtensionAccessibilityEventRouter : public NotificationObserver { 21 public: 22 // Single instance of the event router. 23 static ExtensionAccessibilityEventRouter* GetInstance(); 24 25 // Safe to call multiple times. 26 void ObserveProfile(Profile* profile); 27 28 // Get the dict representing the last control that received an 29 // OnControlFocus event. 30 DictionaryValue* last_focused_control_dict() { 31 return &last_focused_control_dict_; 32 } 33 34 // Accessibility support is disabled until an extension expicitly enables 35 // it, so that this extension api has no impact on Chrome's performance 36 // otherwise. These methods handle enabling, disabling, querying the 37 // status, and installing callbacks to execute when accessibility support 38 // is enabled or disabled. 39 void SetAccessibilityEnabled(bool enabled); 40 bool IsAccessibilityEnabled() const; 41 typedef Callback0::Type Callback; 42 void AddOnEnabledListener(Callback* callback); 43 void AddOnDisabledListener(Callback* callback); 44 45 private: 46 friend struct DefaultSingletonTraits<ExtensionAccessibilityEventRouter>; 47 48 ExtensionAccessibilityEventRouter() 49 : enabled_(false) {} 50 virtual ~ExtensionAccessibilityEventRouter(); 51 52 // NotificationObserver::Observe. 53 virtual void Observe(NotificationType type, 54 const NotificationSource& source, 55 const NotificationDetails& details); 56 57 void OnWindowOpened(const AccessibilityWindowInfo* details); 58 void OnWindowClosed(const AccessibilityWindowInfo* details); 59 void OnControlFocused(const AccessibilityControlInfo* details); 60 void OnControlAction(const AccessibilityControlInfo* details); 61 void OnTextChanged(const AccessibilityControlInfo* details); 62 void OnMenuOpened(const AccessibilityMenuInfo* details); 63 void OnMenuClosed(const AccessibilityMenuInfo* details); 64 65 void DispatchEvent(Profile* profile, 66 const char* event_name, 67 const std::string& json_args); 68 69 // Used for tracking registrations to history service notifications. 70 NotificationRegistrar registrar_; 71 72 DictionaryValue last_focused_control_dict_; 73 74 bool enabled_; 75 std::vector<Callback*> on_enabled_listeners_; 76 std::vector<Callback*> on_disabled_listeners_; 77 78 DISALLOW_COPY_AND_ASSIGN(ExtensionAccessibilityEventRouter); 79}; 80 81// API function that enables or disables accessibility support. Event 82// listeners are only installed when accessibility support is enabled, to 83// minimize the impact. 84class SetAccessibilityEnabledFunction : public SyncExtensionFunction { 85 virtual ~SetAccessibilityEnabledFunction() {} 86 virtual bool RunImpl(); 87 DECLARE_EXTENSION_FUNCTION_NAME( 88 "experimental.accessibility.setAccessibilityEnabled") 89}; 90 91// API function that returns the most recent focused control. 92class GetFocusedControlFunction : public SyncExtensionFunction { 93 virtual ~GetFocusedControlFunction() {} 94 virtual bool RunImpl(); 95 DECLARE_EXTENSION_FUNCTION_NAME( 96 "experimental.accessibility.getFocusedControl") 97}; 98 99#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_ACCESSIBILITY_API_H_ 100