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