Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: chrome/browser/browser_accessibility_manager.cc

Issue 46013: Removes all use of COM and dependencies on Windows-specific classes (includin... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/browser_accessibility_manager.h" 5 #include "chrome/browser/browser_accessibility_manager.h"
6 6
7 #include "chrome/browser/browser_accessibility.h" 7 #include "chrome/browser/browser_accessibility.h"
8 #include "chrome/browser/renderer_host/render_process_host.h" 8 #include "chrome/browser/renderer_host/render_process_host.h"
9 #include "chrome/browser/renderer_host/render_widget_host.h" 9 #include "chrome/browser/renderer_host/render_widget_host.h"
10 #include "chrome/common/notification_service.h" 10 #include "chrome/common/notification_service.h"
11 #include "chrome/common/render_messages.h" 11 #include "chrome/common/render_messages.h"
12 12
13 using webkit_glue::WebAccessibility;
14
13 // The time in ms after which we give up and return an error when processing an 15 // The time in ms after which we give up and return an error when processing an
14 // accessibility message and no response has been received from the renderer. 16 // accessibility message and no response has been received from the renderer.
15 static const int kAccessibilityMessageTimeOut = 500; 17 static const int kAccessibilityMessageTimeOut = 10000;
16 18
17 // static 19 // static
18 BrowserAccessibilityManager* BrowserAccessibilityManager::GetInstance() { 20 BrowserAccessibilityManager* BrowserAccessibilityManager::GetInstance() {
19 return Singleton<BrowserAccessibilityManager>::get(); 21 return Singleton<BrowserAccessibilityManager>::get();
20 } 22 }
21 23
22 BrowserAccessibilityManager::BrowserAccessibilityManager() 24 BrowserAccessibilityManager::BrowserAccessibilityManager()
23 : instance_id_(0) { 25 : instance_id_(0) {
24 NotificationService::current()->AddObserver(this, 26 NotificationService::current()->AddObserver(this,
25 NotificationType::RENDERER_PROCESS_TERMINATED, 27 NotificationType::RENDERER_PROCESS_TERMINATED,
26 NotificationService::AllSources()); 28 NotificationService::AllSources());
27 } 29 }
28 30
29 BrowserAccessibilityManager::~BrowserAccessibilityManager() { 31 BrowserAccessibilityManager::~BrowserAccessibilityManager() {
30 // Clear hashmaps. 32 // Clear hashmaps.
31 instance_map_.clear(); 33 instance_map_.clear();
32 render_process_host_map_.clear(); 34 render_process_host_map_.clear();
33 35
34 // We don't remove ourselves as an observer because we are a Singleton object, 36 // We don't remove ourselves as an observer because we are a Singleton object,
35 // and NotifcationService is likely gone by this point. 37 // and NotifcationService is likely gone by this point.
36 } 38 }
37 39
38 STDMETHODIMP BrowserAccessibilityManager::CreateAccessibilityInstance( 40 STDMETHODIMP BrowserAccessibilityManager::CreateAccessibilityInstance(
39 REFIID iid, int iaccessible_id, int instance_id, void** interface_ptr) { 41 REFIID iid, int acc_obj_id, int instance_id, void** interface_ptr) {
40 if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) { 42 if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) {
41 CComObject<BrowserAccessibility>* instance = NULL; 43 CComObject<BrowserAccessibility>* instance = NULL;
42 44
43 HRESULT hr = CComObject<BrowserAccessibility>::CreateInstance(&instance); 45 HRESULT hr = CComObject<BrowserAccessibility>::CreateInstance(&instance);
44 DCHECK(SUCCEEDED(hr)); 46 DCHECK(SUCCEEDED(hr));
45 47
46 if (!instance) 48 if (!instance)
47 return E_FAIL; 49 return E_FAIL;
48 50
49 CComPtr<IAccessible> accessibility_instance(instance); 51 CComPtr<IAccessible> accessibility_instance(instance);
50 52
51 // Set unique ids. 53 // Set unique ids.
52 instance->set_iaccessible_id(iaccessible_id); 54 instance->set_iaccessible_id(acc_obj_id);
53 instance->set_instance_id(instance_id); 55 instance->set_instance_id(instance_id);
54 56
55 // Retrieve the RenderWidgetHost connected to this request. 57 // Retrieve the RenderWidgetHost connected to this request.
56 InstanceMap::iterator it = instance_map_.find(instance_id); 58 InstanceMap::iterator it = instance_map_.find(instance_id);
57 59
58 if (it != instance_map_.end()) { 60 if (it != instance_map_.end()) {
59 UniqueMembers* members = it->second; 61 UniqueMembers* members = it->second;
60 62
61 if (!members || !members->render_widget_host_) 63 if (!members || !members->render_widget_host_)
62 return E_FAIL; 64 return E_FAIL;
63 65
64 render_process_host_map_[members->render_widget_host_->process()] = 66 render_process_host_map_[members->render_widget_host_->process()] =
65 instance; 67 instance;
66 } else { 68 } else {
67 // No RenderProcess active for this instance. 69 // No RenderProcess active for this instance.
68 return E_FAIL; 70 return E_FAIL;
69 } 71 }
70 72
71 // All is well, assign the temp instance to the output pointer. 73 // All is well, assign the temp instance to the output pointer.
72 *interface_ptr = accessibility_instance.Detach(); 74 *interface_ptr = accessibility_instance.Detach();
73 return S_OK; 75 return S_OK;
74 } 76 }
75 // No supported interface found, return error. 77 // No supported interface found, return error.
76 *interface_ptr = NULL; 78 *interface_ptr = NULL;
77 return E_NOINTERFACE; 79 return E_NOINTERFACE;
78 } 80 }
79 81
80 bool BrowserAccessibilityManager::RequestAccessibilityInfo( 82 bool BrowserAccessibilityManager::RequestAccessibilityInfo(
81 int iaccessible_id, int instance_id, int iaccessible_func_id, 83 int acc_obj_id, int instance_id, int acc_func_id, int child_id, long input1,
82 VARIANT var_id, LONG input1, LONG input2) { 84 long input2) {
83 // Create and populate input message structure. 85 // Create and populate IPC message structure, for retrieval of accessibility
84 AccessibilityInParams in_params; 86 // information from the renderer.
85 87 WebAccessibility::InParams in_params;
86 in_params.iaccessible_id = iaccessible_id; 88 in_params.object_id = acc_obj_id;
87 in_params.iaccessible_function_id = iaccessible_func_id; 89 in_params.function_id = acc_func_id;
88 in_params.input_variant_lval = var_id.lVal; 90 in_params.child_id = child_id;
89 in_params.input_long1 = input1; 91 in_params.input_long1 = input1;
90 in_params.input_long2 = input2; 92 in_params.input_long2 = input2;
91 93
92 // Retrieve the RenderWidgetHost connected to this request. 94 // Retrieve the RenderWidgetHost connected to this request.
93 InstanceMap::iterator it = instance_map_.find(instance_id); 95 InstanceMap::iterator it = instance_map_.find(instance_id);
94 96
95 if (it == instance_map_.end()) { 97 if (it == instance_map_.end()) {
96 // Id not found. 98 // Id not found.
97 return false; 99 return false;
98 } 100 }
99 101
100 UniqueMembers* members = it->second; 102 UniqueMembers* members = it->second;
101 103
102 if (!members || !members->render_widget_host_) 104 if (!members || !members->render_widget_host_)
103 return false; 105 return false;
104 106
105 bool success = false; 107 bool success = false;
106 if (members->render_widget_host_->process() && 108 if (members->render_widget_host_->process() &&
107 members->render_widget_host_->process()->channel()) { 109 members->render_widget_host_->process()->channel()) {
108 IPC::SyncMessage* msg = 110 IPC::SyncMessage* msg =
109 new ViewMsg_GetAccessibilityInfo(members->render_widget_host_-> 111 new ViewMsg_GetAccessibilityInfo(members->render_widget_host_->
110 routing_id(), in_params, &out_params_); 112 routing_id(), in_params, &out_params_);
111 // Necessary for the send to keep the UI responsive. 113 // Necessary for the send to keep the UI responsive.
112 msg->EnableMessagePumping(); 114 msg->EnableMessagePumping();
113 success = members->render_widget_host_->process()->channel()-> 115 success = members->render_widget_host_->process()->channel()->
114 SendWithTimeout(msg, kAccessibilityMessageTimeOut); 116 SendWithTimeout(msg, kAccessibilityMessageTimeOut);
115 } 117 }
116
117 return success; 118 return success;
118 } 119 }
119 120
120 const AccessibilityOutParams& BrowserAccessibilityManager::response() { 121 const WebAccessibility::OutParams& BrowserAccessibilityManager::response() {
121 return out_params_; 122 return out_params_;
122 } 123 }
123 124
124 HWND BrowserAccessibilityManager::parent_hwnd(int id) { 125 HWND BrowserAccessibilityManager::parent_hwnd(int id) {
125 // Retrieve the parent HWND connected to the requester's id. 126 // Retrieve the parent HWND connected to the requester's id.
126 InstanceMap::iterator it = instance_map_.find(id); 127 InstanceMap::iterator it = instance_map_.find(id);
127 128
128 if (it == instance_map_.end()) { 129 if (it == instance_map_.end()) {
129 // Id not found. 130 // Id not found.
130 return NULL; 131 return NULL;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 167
167 // Delete entry also from InstanceMap. 168 // Delete entry also from InstanceMap.
168 InstanceMap::iterator it2 = instance_map_.find(it->second->instance_id()); 169 InstanceMap::iterator it2 = instance_map_.find(it->second->instance_id());
169 170
170 if (it2 != instance_map_.end()) 171 if (it2 != instance_map_.end())
171 instance_map_.erase(it2); 172 instance_map_.erase(it2);
172 173
173 // Only delete the first entry once it is no longer in use. 174 // Only delete the first entry once it is no longer in use.
174 render_process_host_map_.erase(it); 175 render_process_host_map_.erase(it);
175 } 176 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698