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 "content/common/view_messages.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 25BrowserAccessibilityManagerWin* 26BrowserAccessibilityManager::toBrowserAccessibilityManagerWin() { 27 return static_cast<BrowserAccessibilityManagerWin*>(this); 28} 29 30BrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin( 31 HWND parent_view, 32 const WebAccessibility& src, 33 BrowserAccessibilityDelegate* delegate, 34 BrowserAccessibilityFactory* factory) 35 : BrowserAccessibilityManager(parent_view, src, delegate, factory) { 36 // Allow NULL parent_view for unit testing. 37 if (parent_view == NULL) { 38 window_iaccessible_ = NULL; 39 return; 40 } 41 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 = EVENT_MIN; 59 switch (type) { 60 case ViewHostMsg_AccessibilityNotification_Type:: 61 NOTIFICATION_TYPE_CHECK_STATE_CHANGED: 62 event_id = EVENT_OBJECT_STATECHANGE; 63 break; 64 case ViewHostMsg_AccessibilityNotification_Type:: 65 NOTIFICATION_TYPE_CHILDREN_CHANGED: 66 event_id = EVENT_OBJECT_REORDER; 67 break; 68 case ViewHostMsg_AccessibilityNotification_Type:: 69 NOTIFICATION_TYPE_FOCUS_CHANGED: 70 event_id = EVENT_OBJECT_FOCUS; 71 break; 72 case ViewHostMsg_AccessibilityNotification_Type:: 73 NOTIFICATION_TYPE_LOAD_COMPLETE: 74 event_id = IA2_EVENT_DOCUMENT_LOAD_COMPLETE; 75 break; 76 case ViewHostMsg_AccessibilityNotification_Type:: 77 NOTIFICATION_TYPE_VALUE_CHANGED: 78 event_id = EVENT_OBJECT_VALUECHANGE; 79 break; 80 case ViewHostMsg_AccessibilityNotification_Type:: 81 NOTIFICATION_TYPE_SELECTED_TEXT_CHANGED: 82 event_id = IA2_EVENT_TEXT_CARET_MOVED; 83 break; 84 default: 85 NOTREACHED(); 86 break; 87 } 88 89 NotifyWinEvent(event_id, GetParentView(), OBJID_CLIENT, node->child_id()); 90} 91