// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_H_ #define CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_H_ #include // Needed for VARIANT structure. #include #include "base/singleton.h" #include "chrome/common/notification_service.h" #include "chrome/common/render_messages.h" class BrowserAccessibility; class RenderProcessHost; class RenderWidgetHost; // Member variable structure, used in instance hashmap. struct UniqueMembers { RenderWidgetHost* render_widget_host_; HWND parent_hwnd_; UniqueMembers(HWND parent_hwnd, RenderWidgetHost* render_widget_host) : parent_hwnd_(parent_hwnd), render_widget_host_(render_widget_host) { } }; typedef stdext::hash_map InstanceMap; typedef stdext::hash_map RenderProcessHostMap; //////////////////////////////////////////////////////////////////////////////// // // BrowserAccessibilityManager // // Used to manage instance creation and memory handling for browser side // accessibility. A singleton class. It implements NotificationObserver to // ensure that a termination of a renderer process gets propagated to the // active BrowserAccessibility instances calling into it. Each such instance // will upon such an event be set to an inactive state, failing calls from the // assistive technology gracefully. //////////////////////////////////////////////////////////////////////////////// class BrowserAccessibilityManager : public NotificationObserver { public: // Gets the singleton BrowserAccessibilityManager object. The first time this // method is called, a CacheManagerHost object is constructed and returned. // Subsequent calls will return the same object. static BrowserAccessibilityManager* GetInstance(); // Creates an instance of BrowserAccessibility, initializes it and sets the // iaccessible_id and parent_id. STDMETHODIMP CreateAccessibilityInstance(REFIID iid, int iaccessible_id, int instance_id, void** interface_ptr); // Composes and sends a message for requesting needed accessibility // information. Unused LONG input parameters should be NULL, and the VARIANT // an empty, valid instance. bool RequestAccessibilityInfo(int iaccessible_id, int instance_id, int iaccessible_func_id, VARIANT var_id, LONG input1, LONG input2); // Wrapper function, for cleaner code. ViewHostMsg_Accessibility_Out_Params response(); // Retrieves the parent HWND connected to the provided id. HWND parent_hwnd(int id); // Mutator, needed since constructor does not take any arguments, and to keep // instance accessor clean. int SetMembers(BrowserAccessibility* browser_acc, HWND parent_hwnd, RenderWidgetHost* render_widget_host); // NotificationObserver implementation. virtual void Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details); protected: // This class is a singleton. Do not instantiate directly. BrowserAccessibilityManager(); friend struct DefaultSingletonTraits; ~BrowserAccessibilityManager(); private: // Caching of the unique member variables used to handle browser accessibility // requests from multiple processes. InstanceMap instance_map_; int instance_id_; // Reverse mapping to track which RenderProcessHosts are active. If a // RenderProcessHost is found to be terminated, it should be removed from this // mapping, and the connected BrowserAccessibility ids/instances invalidated. RenderProcessHostMap render_process_host_map_; ViewHostMsg_Accessibility_Out_Params out_params_; DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager); }; #endif // CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_H_