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

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

Issue 6282: Fixes crash in BrowserAccessibilityManager destructor. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 2 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/render_process_host.h" 8 #include "chrome/browser/render_process_host.h"
9 #include "chrome/browser/render_widget_host.h" 9 #include "chrome/browser/render_widget_host.h"
10 10
11 // The time in ms after which we give up and return an error when processing an 11 // The time in ms after which we give up and return an error when processing an
12 // accessibility message and no response has been received from the renderer. 12 // accessibility message and no response has been received from the renderer.
13 static const int kAccessibilityMessageTimeOut = 500; 13 static const int kAccessibilityMessageTimeOut = 500;
14 14
15 // static 15 // static
16 BrowserAccessibilityManager* BrowserAccessibilityManager::Instance() { 16 BrowserAccessibilityManager* BrowserAccessibilityManager::GetInstance() {
17 return Singleton<BrowserAccessibilityManager>::get(); 17 return Singleton<BrowserAccessibilityManager>::get();
18 } 18 }
19 19
20 BrowserAccessibilityManager::BrowserAccessibilityManager() 20 BrowserAccessibilityManager::BrowserAccessibilityManager()
21 : instance_id_(0) { 21 : instance_id_(0) {
22 NotificationService::current()->AddObserver(this, 22 NotificationService::current()->AddObserver(this,
23 NOTIFY_RENDERER_PROCESS_TERMINATED, NotificationService::AllSources()); 23 NOTIFY_RENDERER_PROCESS_TERMINATED, NotificationService::AllSources());
24 } 24 }
25 25
26 BrowserAccessibilityManager::~BrowserAccessibilityManager() { 26 BrowserAccessibilityManager::~BrowserAccessibilityManager() {
27 // Clear hashmaps. 27 // Clear hashmaps.
28 instance_map_.clear(); 28 instance_map_.clear();
29 render_process_host_map_.clear(); 29 render_process_host_map_.clear();
30 30
31 NotificationService::current()->RemoveObserver(this, 31 // We don't remove ourselves as an observer because we are a Singleton object,
32 NOTIFY_RENDERER_PROCESS_TERMINATED, NotificationService::AllSources()); 32 // and NotifcationService is likely gone by this point.
33 } 33 }
34 34
35 STDMETHODIMP BrowserAccessibilityManager::CreateAccessibilityInstance( 35 STDMETHODIMP BrowserAccessibilityManager::CreateAccessibilityInstance(
36 REFIID iid, int iaccessible_id, int instance_id, void** interface_ptr) { 36 REFIID iid, int iaccessible_id, int instance_id, void** interface_ptr) {
37 if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) { 37 if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) {
38 CComObject<BrowserAccessibility>* instance = NULL; 38 CComObject<BrowserAccessibility>* instance = NULL;
39 39
40 HRESULT hr = CComObject<BrowserAccessibility>::CreateInstance(&instance); 40 HRESULT hr = CComObject<BrowserAccessibility>::CreateInstance(&instance);
41 DCHECK(SUCCEEDED(hr)); 41 DCHECK(SUCCEEDED(hr));
42 42
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 // Set BrowserAccessibility instance to inactive state. 158 // Set BrowserAccessibility instance to inactive state.
159 it->second->set_instance_active(false); 159 it->second->set_instance_active(false);
160 render_process_host_map_.erase(it); 160 render_process_host_map_.erase(it);
161 161
162 // Delete entry also from InstanceMap. 162 // Delete entry also from InstanceMap.
163 InstanceMap::iterator it2 = instance_map_.find(it->second->instance_id()); 163 InstanceMap::iterator it2 = instance_map_.find(it->second->instance_id());
164 164
165 if (it2 != instance_map_.end()) 165 if (it2 != instance_map_.end())
166 instance_map_.erase(it2); 166 instance_map_.erase(it2);
167 } 167 }
OLDNEW
« no previous file with comments | « chrome/browser/browser_accessibility_manager.h ('k') | chrome/browser/render_widget_host_hwnd.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698