Home | History | Annotate | Download | only in accessibility
      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 
     10 using webkit_glue::WebAccessibility;
     11 
     12 // static
     13 BrowserAccessibilityManager* 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 BrowserAccessibilityManagerWin*
     26 BrowserAccessibilityManager::toBrowserAccessibilityManagerWin() {
     27   return static_cast<BrowserAccessibilityManagerWin*>(this);
     28 }
     29 
     30 BrowserAccessibilityManagerWin::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 
     48 BrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() {
     49 }
     50 
     51 IAccessible* BrowserAccessibilityManagerWin::GetParentWindowIAccessible() {
     52   return window_iaccessible_;
     53 }
     54 
     55 void 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