1731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Use of this source code is governed by a BSD-style license that can be
3731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// found in the LICENSE file.
4731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/accessibility/browser_accessibility_manager_win.h"
6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/accessibility/browser_accessibility_win.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/view_messages.h"
9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickusing webkit_glue::WebAccessibility;
11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// static
13731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickBrowserAccessibilityManager* BrowserAccessibilityManager::Create(
14731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    gfx::NativeView parent_view,
15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    const WebAccessibility& src,
16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    BrowserAccessibilityDelegate* delegate,
17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    BrowserAccessibilityFactory* factory) {
18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  return new BrowserAccessibilityManagerWin(
19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      parent_view,
20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      src,
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      delegate,
22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      factory);
23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
25731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickBrowserAccessibilityManagerWin*
26731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickBrowserAccessibilityManager::toBrowserAccessibilityManagerWin() {
27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  return static_cast<BrowserAccessibilityManagerWin*>(this);
28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
30731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickBrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin(
31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    HWND parent_view,
32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    const WebAccessibility& src,
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    BrowserAccessibilityDelegate* delegate,
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    BrowserAccessibilityFactory* factory)
35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    : BrowserAccessibilityManager(parent_view, src, delegate, factory) {
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Allow NULL parent_view for unit testing.
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (parent_view == NULL) {
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    window_iaccessible_ = NULL;
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  HRESULT hr = ::CreateStdAccessibleObject(
43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      parent_view, OBJID_WINDOW, IID_IAccessible,
44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      reinterpret_cast<void **>(&window_iaccessible_));
45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  DCHECK(SUCCEEDED(hr));
46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
48731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickBrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() {
49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
51731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickIAccessible* BrowserAccessibilityManagerWin::GetParentWindowIAccessible() {
52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  return window_iaccessible_;
53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid BrowserAccessibilityManagerWin::NotifyAccessibilityEvent(
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    int type,
57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    BrowserAccessibility* node) {
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  LONG event_id = EVENT_MIN;
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  switch (type) {
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ViewHostMsg_AccessibilityNotification_Type::
61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          NOTIFICATION_TYPE_CHECK_STATE_CHANGED:
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      event_id = EVENT_OBJECT_STATECHANGE;
63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      break;
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ViewHostMsg_AccessibilityNotification_Type::
65731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          NOTIFICATION_TYPE_CHILDREN_CHANGED:
66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      event_id = EVENT_OBJECT_REORDER;
67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      break;
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ViewHostMsg_AccessibilityNotification_Type::
69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          NOTIFICATION_TYPE_FOCUS_CHANGED:
70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      event_id = EVENT_OBJECT_FOCUS;
71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      break;
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ViewHostMsg_AccessibilityNotification_Type::
73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          NOTIFICATION_TYPE_LOAD_COMPLETE:
74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      event_id = IA2_EVENT_DOCUMENT_LOAD_COMPLETE;
75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      break;
76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ViewHostMsg_AccessibilityNotification_Type::
77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          NOTIFICATION_TYPE_VALUE_CHANGED:
78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      event_id = EVENT_OBJECT_VALUECHANGE;
79731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      break;
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ViewHostMsg_AccessibilityNotification_Type::
81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          NOTIFICATION_TYPE_SELECTED_TEXT_CHANGED:
82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      event_id = IA2_EVENT_TEXT_CARET_MOVED;
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      break;
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    default:
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NOTREACHED();
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      break;
87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  NotifyWinEvent(event_id, GetParentView(), OBJID_CLIENT, node->child_id());
90731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
91