Home | History | Annotate | Download | only in accessibility
      1 // Copyright (c) 2012 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_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_
      6 #define CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_
      7 
      8 #include <string>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "base/memory/singleton.h"
     12 #include "base/values.h"
     13 #include "chrome/browser/accessibility/accessibility_events.h"
     14 #include "chrome/browser/extensions/extension_function.h"
     15 #include "content/public/browser/notification_observer.h"
     16 #include "content/public/browser/notification_registrar.h"
     17 
     18 // Observes the profile and routes accessibility notifications as events
     19 // to the extension system.
     20 class ExtensionAccessibilityEventRouter : public content::NotificationObserver {
     21  public:
     22   // Single instance of the event router.
     23   static ExtensionAccessibilityEventRouter* GetInstance();
     24 
     25   // Get the dict representing the last control that received an
     26   // OnControlFocus event.
     27   DictionaryValue* last_focused_control_dict() {
     28     return &last_focused_control_dict_;
     29   }
     30 
     31   // Accessibility support is disabled until an extension expicitly enables
     32   // it, so that this extension api has no impact on Chrome's performance
     33   // otherwise.  These methods handle enabling, disabling, and querying the
     34   // status.
     35   void SetAccessibilityEnabled(bool enabled);
     36   bool IsAccessibilityEnabled() const;
     37 
     38  private:
     39   friend struct DefaultSingletonTraits<ExtensionAccessibilityEventRouter>;
     40 
     41   ExtensionAccessibilityEventRouter();
     42   virtual ~ExtensionAccessibilityEventRouter();
     43 
     44   // content::NotificationObserver::Observe.
     45   virtual void Observe(int type,
     46                        const content::NotificationSource& source,
     47                        const content::NotificationDetails& details) OVERRIDE;
     48 
     49   void OnWindowOpened(const AccessibilityWindowInfo* details);
     50   void OnWindowClosed(const AccessibilityWindowInfo* details);
     51   void OnControlFocused(const AccessibilityControlInfo* details);
     52   void OnControlAction(const AccessibilityControlInfo* details);
     53   void OnTextChanged(const AccessibilityControlInfo* details);
     54   void OnMenuOpened(const AccessibilityMenuInfo* details);
     55   void OnMenuClosed(const AccessibilityMenuInfo* details);
     56 
     57   void DispatchEvent(Profile* profile,
     58                      const char* event_name,
     59                      scoped_ptr<base::ListValue> event_args);
     60 
     61   // Used for tracking registrations to history service notifications.
     62   content::NotificationRegistrar registrar_;
     63 
     64   DictionaryValue last_focused_control_dict_;
     65 
     66   bool enabled_;
     67 
     68   DISALLOW_COPY_AND_ASSIGN(ExtensionAccessibilityEventRouter);
     69 };
     70 
     71 // API function that enables or disables accessibility support.  Event
     72 // listeners are only installed when accessibility support is enabled, to
     73 // minimize the impact.
     74 class AccessibilitySetAccessibilityEnabledFunction
     75     : public SyncExtensionFunction {
     76   virtual ~AccessibilitySetAccessibilityEnabledFunction() {}
     77   virtual bool RunImpl() OVERRIDE;
     78   DECLARE_EXTENSION_FUNCTION(
     79       "experimental.accessibility.setAccessibilityEnabled",
     80       EXPERIMENTAL_ACCESSIBILITY_SETACCESSIBILITYENABLED)
     81 };
     82 
     83 // API function that enables or disables web content accessibility support.
     84 class AccessibilitySetNativeAccessibilityEnabledFunction
     85     : public SyncExtensionFunction {
     86   virtual ~AccessibilitySetNativeAccessibilityEnabledFunction() {}
     87   virtual bool RunImpl() OVERRIDE;
     88   DECLARE_EXTENSION_FUNCTION(
     89       "experimental.accessibility.setNativeAccessibilityEnabled",
     90       EXPERIMENTAL_ACCESSIBILITY_SETNATIVEACCESSIBILITYENABLED)
     91 };
     92 
     93 // API function that returns the most recent focused control.
     94 class AccessibilityGetFocusedControlFunction : public SyncExtensionFunction {
     95   virtual ~AccessibilityGetFocusedControlFunction() {}
     96   virtual bool RunImpl() OVERRIDE;
     97   DECLARE_EXTENSION_FUNCTION(
     98       "experimental.accessibility.getFocusedControl",
     99       EXPERIMENTAL_ACCESSIBILITY_GETFOCUSEDCONTROL)
    100 };
    101 
    102 // API function that returns alerts being shown on the give tab.
    103 class AccessibilityGetAlertsForTabFunction : public SyncExtensionFunction {
    104   virtual ~AccessibilityGetAlertsForTabFunction() {}
    105   virtual bool RunImpl() OVERRIDE;
    106   DECLARE_EXTENSION_FUNCTION(
    107       "experimental.accessibility.getAlertsForTab",
    108       EXPERIMENTAL_ACCESSIBILITY_GETALERTSFORTAB)
    109 };
    110 
    111 #endif  // CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_
    112