• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_ACCESSIBILITY_BROWSER_ACCESSIBILITY_STATE_H_
6  #define CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_STATE_H_
7  #pragma once
8  
9  #include "base/basictypes.h"
10  
11  template <typename T> struct DefaultSingletonTraits;
12  
13  // The BrowserAccessibilityState class is used to determine if Chrome should be
14  // customized for users with assistive technology, such as screen readers. We
15  // modify the behavior of certain user interfaces to provide a better experience
16  // for screen reader users. The way we detect a screen reader program is
17  // different for each platform.
18  //
19  // Screen Reader Detection
20  // (1) On windows many screen reader detection mechinisms will give false
21  // positives like relying on the SPI_GETSCREENREADER system parameter. In Chrome
22  // we attempt to dynamically detect a MSAA client screen reader by calling
23  // NotifiyWinEvent in WidgetWin with a custom ID and wait to see if the ID
24  // is requested by a subsequent call to WM_GETOBJECT.
25  // (2) On mac we detect if VoiceOver is running. This is stored in a preference
26  // file for Universal Access with the key "voiceOverOnOffKey".
27  class BrowserAccessibilityState {
28   public:
29    // Returns the singleton instance.
30    static BrowserAccessibilityState* GetInstance();
31  
32    ~BrowserAccessibilityState();
33  
34    // Called when screen reader client is detected.
35    void OnScreenReaderDetected();
36  
37    // Returns true if the Chrome browser should be customized for accessibility.
38    bool IsAccessibleBrowser();
39  
40   private:
41    BrowserAccessibilityState();
42    friend struct DefaultSingletonTraits<BrowserAccessibilityState>;
43  
44    // Set to true when a screen reader client is detected.
45    bool screen_reader_active_;
46  
47    DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityState);
48  };
49  
50  #endif  // CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_STATE_H_
51