Revert 268405 "Make sure that ScratchBuffer::Allocate() always r..."
[chromium-blink-merge.git] / content / browser / accessibility / browser_accessibility_manager_mac.mm
blob266f8fb90c854a3faa73c04a5a11b402478fcdd3
1 // Copyright (c) 2012 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.
5 #include "content/browser/accessibility/browser_accessibility_manager_mac.h"
7 #import "base/logging.h"
8 #import "content/browser/accessibility/browser_accessibility_cocoa.h"
9 #include "content/common/accessibility_messages.h"
11 namespace content {
13 // static
14 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
15     const ui::AXTreeUpdate& initial_tree,
16     BrowserAccessibilityDelegate* delegate,
17     BrowserAccessibilityFactory* factory) {
18   return new BrowserAccessibilityManagerMac(
19       NULL, initial_tree, delegate, factory);
22 BrowserAccessibilityManagerMac::BrowserAccessibilityManagerMac(
23     NSView* parent_view,
24     const ui::AXTreeUpdate& initial_tree,
25     BrowserAccessibilityDelegate* delegate,
26     BrowserAccessibilityFactory* factory)
27     : BrowserAccessibilityManager(initial_tree, delegate, factory),
28       parent_view_(parent_view) {
31 // static
32 ui::AXTreeUpdate BrowserAccessibilityManagerMac::GetEmptyDocument() {
33   ui::AXNodeData empty_document;
34   empty_document.id = 0;
35   empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA;
36   empty_document.state =
37       1 << ui::AX_STATE_READ_ONLY;
38   ui::AXTreeUpdate update;
39   update.nodes.push_back(empty_document);
40   return update;
43 void BrowserAccessibilityManagerMac::NotifyAccessibilityEvent(
44     ui::AXEvent event_type,
45     BrowserAccessibility* node) {
46   if (!node->IsNative())
47     return;
49   // Refer to AXObjectCache.mm (webkit).
50   NSString* event_id = @"";
51   switch (event_type) {
52     case ui::AX_EVENT_ACTIVEDESCENDANTCHANGED:
53       if (node->GetRole() == ui::AX_ROLE_TREE)
54         event_id = NSAccessibilitySelectedRowsChangedNotification;
55       else
56         event_id = NSAccessibilityFocusedUIElementChangedNotification;
57       break;
58     case ui::AX_EVENT_ALERT:
59       // Not used on Mac.
60       return;
61     case ui::AX_EVENT_BLUR:
62       // A no-op on Mac.
63       return;
64     case ui::AX_EVENT_CHECKED_STATE_CHANGED:
65       // Not used on Mac.
66       return;
67     case ui::AX_EVENT_CHILDREN_CHANGED:
68       // TODO(dtseng): no clear equivalent on Mac.
69       return;
70     case ui::AX_EVENT_FOCUS:
71       event_id = NSAccessibilityFocusedUIElementChangedNotification;
72       break;
73     case ui::AX_EVENT_LAYOUT_COMPLETE:
74       event_id = @"AXLayoutComplete";
75       break;
76     case ui::AX_EVENT_LIVE_REGION_CHANGED:
77       event_id = @"AXLiveRegionChanged";
78       break;
79     case ui::AX_EVENT_LOAD_COMPLETE:
80       event_id = @"AXLoadComplete";
81       break;
82     case ui::AX_EVENT_MENU_LIST_VALUE_CHANGED:
83       // Not used on Mac.
84       return;
85     case ui::AX_EVENT_SHOW:
86       // Not used on Mac.
87       return;
88     case ui::AX_EVENT_HIDE:
89       // Not used on Mac.
90       return;
91     case ui::AX_EVENT_ROW_COUNT_CHANGED:
92       event_id = NSAccessibilityRowCountChangedNotification;
93       break;
94     case ui::AX_EVENT_ROW_COLLAPSED:
95       event_id = @"AXRowCollapsed";
96       break;
97     case ui::AX_EVENT_ROW_EXPANDED:
98       event_id = @"AXRowExpanded";
99       break;
100     case ui::AX_EVENT_SCROLLED_TO_ANCHOR:
101       // Not used on Mac.
102       return;
103     case ui::AX_EVENT_SELECTED_CHILDREN_CHANGED:
104       event_id = NSAccessibilitySelectedChildrenChangedNotification;
105       break;
106     case ui::AX_EVENT_SELECTED_TEXT_CHANGED:
107       event_id = NSAccessibilitySelectedTextChangedNotification;
108       break;
109     case ui::AX_EVENT_TEXT_INSERTED:
110       // Not used on Mac.
111       return;
112     case ui::AX_EVENT_TEXT_REMOVED:
113       // Not used on Mac.
114       return;
115     case ui::AX_EVENT_VALUE_CHANGED:
116       event_id = NSAccessibilityValueChangedNotification;
117       break;
118     case ui::AX_EVENT_ARIA_ATTRIBUTE_CHANGED:
119       // Not used on Mac.
120       return;
121     case ui::AX_EVENT_AUTOCORRECTION_OCCURED:
122       // Not used on Mac.
123       return;
124     case ui::AX_EVENT_INVALID_STATUS_CHANGED:
125       // Not used on Mac.
126       return;
127     case ui::AX_EVENT_LOCATION_CHANGED:
128       // Not used on Mac.
129       return;
130     case ui::AX_EVENT_MENU_LIST_ITEM_SELECTED:
131       // Not used on Mac.
132       return;
133     case ui::AX_EVENT_TEXT_CHANGED:
134       // Not used on Mac.
135       return;
136     default:
137       LOG(WARNING) << "Unknown accessibility event: " << event_type;
138       return;
139   }
140   BrowserAccessibilityCocoa* native_node = node->ToBrowserAccessibilityCocoa();
141   DCHECK(native_node);
142   NSAccessibilityPostNotification(native_node, event_id);
145 }  // namespace content