65930e9699956a42a2db46f39e525d97841dc30a
[WebKit-https.git] / WebCore / page / AXObjectCache.h
1 /*
2  * Copyright (C) 2003, 2006, 2007, 2008 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef AXObjectCache_h
27 #define AXObjectCache_h
28
29 #include "AccessibilityObject.h"
30 #include <limits.h>
31 #include <wtf/HashMap.h>
32 #include <wtf/HashSet.h>
33 #include <wtf/RefPtr.h>
34
35 #ifdef __OBJC__
36 @class WebCoreTextMarker;
37 #else
38 class WebCoreTextMarker;
39 #endif
40
41 namespace WebCore {
42
43     class RenderObject;
44     class String;
45     class VisiblePosition;
46
47     typedef unsigned AXID;
48
49     struct AXIDHashTraits : WTF::GenericHashTraits<unsigned> {
50         static TraitType deletedValue() { return UINT_MAX; }
51     };
52
53     class AXObjectCache {
54     public:
55         ~AXObjectCache();
56
57         AccessibilityObject* get(RenderObject*);
58         void remove(RenderObject*);
59
60         void removeAXID(AccessibilityObject*);
61
62 #if PLATFORM(MAC)
63         // FIXME: Move this to AccessibilityObjectWrapper.
64         WebCoreTextMarker* textMarkerForVisiblePosition(const VisiblePosition&);
65         VisiblePosition visiblePositionForTextMarker(WebCoreTextMarker*);
66 #endif
67         
68         void childrenChanged(RenderObject*);
69         void postNotification(RenderObject*, const String& message);
70         void postNotificationToElement(RenderObject*, const String& message);
71         void handleFocusedUIElementChanged();
72
73 #if PLATFORM(MAC)
74         static void enableAccessibility() { gAccessibilityEnabled = true; }
75         static bool accessibilityEnabled() { return gAccessibilityEnabled; }
76 #else
77         static bool accessibilityEnabled() { return false; }
78 #endif
79
80     private:
81 #if PLATFORM(MAC)
82         static bool gAccessibilityEnabled;
83 #endif
84
85         AXID getAXID(AccessibilityObject*);
86
87 #if PLATFORM(MAC)
88         HashMap<RenderObject*, RefPtr<AccessibilityObject> > m_objects;
89         HashSet<AXID, IntHash<AXID>, AXIDHashTraits> m_idsInUse;
90 #endif
91     };
92
93 #if !PLATFORM(MAC)
94     inline AXObjectCache::~AXObjectCache() { }
95     inline AccessibilityObject* AXObjectCache::get(RenderObject*) { return 0; }
96     inline void AXObjectCache::remove(RenderObject*) { }
97     inline void AXObjectCache::removeAXID(AccessibilityObject*) { }
98     inline void AXObjectCache::childrenChanged(RenderObject*) { }
99     inline void AXObjectCache::postNotification(RenderObject*, const String&) { }
100     inline void AXObjectCache::postNotificationToElement(RenderObject*, const String&) { }
101     inline void AXObjectCache::handleFocusedUIElementChanged() { }
102 #endif
103
104 }
105
106 #endif