browser_accessibility_manager_win.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
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#include "chrome/browser/accessibility/browser_accessibility_manager_win.h"
6
7#include "chrome/browser/accessibility/browser_accessibility_win.h"
8#include "chrome/common/render_messages_params.h"
9
10using webkit_glue::WebAccessibility;
11
12// static
13BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
14    gfx::NativeView parent_view,
15    const WebAccessibility& src,
16    BrowserAccessibilityDelegate* delegate,
17    BrowserAccessibilityFactory* factory) {
18  return new BrowserAccessibilityManagerWin(
19      parent_view,
20      src,
21      delegate,
22      factory);
23}
24
25// Defining this here instead of in the base implementation file to address link
26// errors on the linux shared library build. (linux shlib)
27BrowserAccessibility* BrowserAccessibilityFactory::Create() {
28  return BrowserAccessibility::Create();
29}
30
31BrowserAccessibilityManagerWin*
32BrowserAccessibilityManager::toBrowserAccessibilityManagerWin() {
33  return static_cast<BrowserAccessibilityManagerWin*>(this);
34}
35
36BrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin(
37    HWND parent_view,
38    const WebAccessibility& src,
39    BrowserAccessibilityDelegate* delegate,
40    BrowserAccessibilityFactory* factory)
41    : BrowserAccessibilityManager(parent_view, src, delegate, factory) {
42  HRESULT hr = ::CreateStdAccessibleObject(
43      parent_view, OBJID_WINDOW, IID_IAccessible,
44      reinterpret_cast<void **>(&window_iaccessible_));
45  DCHECK(SUCCEEDED(hr));
46}
47
48BrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() {
49}
50
51IAccessible* BrowserAccessibilityManagerWin::GetParentWindowIAccessible() {
52  return window_iaccessible_;
53}
54
55void BrowserAccessibilityManagerWin::NotifyAccessibilityEvent(
56    int type,
57    BrowserAccessibility* node) {
58  LONG event_id;
59  switch (type) {
60    case ViewHostMsg_AccessibilityNotification_Params::
61          NOTIFICATION_TYPE_CHECK_STATE_CHANGED:
62      event_id = EVENT_OBJECT_STATECHANGE;
63      break;
64    case ViewHostMsg_AccessibilityNotification_Params::
65          NOTIFICATION_TYPE_CHILDREN_CHANGED:
66      event_id = EVENT_OBJECT_REORDER;
67      break;
68    case ViewHostMsg_AccessibilityNotification_Params::
69          NOTIFICATION_TYPE_FOCUS_CHANGED:
70      event_id = EVENT_OBJECT_FOCUS;
71      break;
72    case ViewHostMsg_AccessibilityNotification_Params::
73          NOTIFICATION_TYPE_LOAD_COMPLETE:
74      event_id = IA2_EVENT_DOCUMENT_LOAD_COMPLETE;
75      break;
76    case ViewHostMsg_AccessibilityNotification_Params::
77          NOTIFICATION_TYPE_VALUE_CHANGED:
78      event_id = EVENT_OBJECT_VALUECHANGE;
79      break;
80    case ViewHostMsg_AccessibilityNotification_Params::
81          NOTIFICATION_TYPE_SELECTED_TEXT_CHANGED:
82      event_id = IA2_EVENT_TEXT_CARET_MOVED;
83  }
84
85  NotifyWinEvent(event_id, GetParentView(), OBJID_CLIENT, node->child_id());
86}
87