[iOS] Upstream changes in Tools/DumpRenderTree
[WebKit-https.git] / Tools / DumpRenderTree / ios / AccessibilityUIElementIOS.mm
1 /*
2  * Copyright (C) 2009 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 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 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 #import "config.h"
27 #import "DumpRenderTree.h"
28 #import "AccessibilityUIElement.h"
29
30 #import "AccessibilityCommonMac.h"
31 #import <Foundation/Foundation.h>
32 #import <JavaScriptCore/JSRetainPtr.h>
33 #import <JavaScriptCore/JSStringRef.h>
34 #import <JavaScriptCore/JSStringRefCF.h>
35 #import <WebCore/TextGranularity.h>
36 #import <WebKit/WebFrame.h>
37 #import <WebKit/WebHTMLView.h>
38 #import <wtf/RetainPtr.h>
39 #import <wtf/Vector.h>
40
41 #import <UIKit/UIKit.h>
42
43 typedef void (*AXPostedNotificationCallback)(id element, NSString* notification, void* context);
44
45 AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement element)
46     : m_element(element)
47 {
48     [m_element retain];
49 }
50
51 AccessibilityUIElement::AccessibilityUIElement(const AccessibilityUIElement& other)
52     : m_element(other.m_element)
53 {
54     [m_element retain];
55 }
56
57 AccessibilityUIElement::~AccessibilityUIElement()
58 {
59     [m_element release];
60 }
61
62 @interface NSObject (UIAccessibilityHidden)
63 - (id)accessibilityHitTest:(CGPoint)point;
64 - (id)accessibilityLinkedElement;
65 - (NSRange)accessibilityColumnRange;
66 - (NSRange)accessibilityRowRange;
67 - (id)accessibilityElementForRow:(NSInteger)row andColumn:(NSInteger)column;
68 - (NSURL *)accessibilityURL;
69 - (NSArray *)accessibilityHeaderElements;
70 - (NSString *)accessibilityPlaceholderValue;
71 - (NSString *)stringForRange:(NSRange)range;
72 - (NSArray *)elementsForRange:(NSRange)range;
73 - (NSString *)selectionRangeString;
74 - (CGPoint)accessibilityClickPoint;
75 - (void)accessibilityModifySelection:(WebCore::TextGranularity)granularity increase:(BOOL)increase;
76 - (void)accessibilitySetPostedNotificationCallback:(AXPostedNotificationCallback)function withContext:(void*)context;
77 - (CGFloat)_accessibilityMinValue;
78 - (CGFloat)_accessibilityMaxValue;
79 @end
80
81 @interface NSObject (WebAccessibilityObjectWrapperPrivate)
82 - (CGPathRef)_accessibilityPath;
83 @end
84
85 static JSStringRef concatenateAttributeAndValue(NSString* attribute, NSString* value)
86 {
87     Vector<UniChar> buffer([attribute length]);
88     [attribute getCharacters:buffer.data()];
89     buffer.append(':');
90     buffer.append(' ');
91     
92     Vector<UniChar> valueBuffer([value length]);
93     [value getCharacters:valueBuffer.data()];
94     buffer.appendVector(valueBuffer);
95     
96     return JSStringCreateWithCharacters(buffer.data(), buffer.size());
97 }
98
99 #pragma mark iPhone Attributes
100
101 JSStringRef AccessibilityUIElement::iphoneLabel()
102 {
103     return concatenateAttributeAndValue(@"AXLabel", [m_element accessibilityLabel]);
104 }
105
106 JSStringRef AccessibilityUIElement::iphoneHint()
107 {
108     return concatenateAttributeAndValue(@"AXHint", [m_element accessibilityHint]);
109 }
110
111 JSStringRef AccessibilityUIElement::iphoneValue()
112 {
113     return concatenateAttributeAndValue(@"AXValue", [m_element accessibilityValue]);
114 }
115
116 JSStringRef AccessibilityUIElement::iphoneIdentifier()
117 {
118     return concatenateAttributeAndValue(@"AXIdentifier", [m_element accessibilityIdentifier]);
119 }
120
121 JSStringRef AccessibilityUIElement::iphoneTraits()
122 {
123     return concatenateAttributeAndValue(@"AXTraits", [NSString stringWithFormat:@"%qu", [m_element accessibilityTraits]]);
124 }
125
126 bool AccessibilityUIElement::iphoneIsElement()
127 {
128     return [m_element isAccessibilityElement];
129 }
130
131 int AccessibilityUIElement::iphoneElementTextPosition()
132 {
133     NSRange range = [[m_element valueForKey:@"elementTextRange"] rangeValue];
134     return range.location;
135 }
136
137 int AccessibilityUIElement::iphoneElementTextLength()
138 {
139     NSRange range = [[m_element valueForKey:@"elementTextRange"] rangeValue];
140     return range.length;    
141 }
142
143 JSStringRef AccessibilityUIElement::url()
144 {
145     NSURL *url = [m_element accessibilityURL];
146     return [[url absoluteString] createJSStringRef];    
147 }
148
149 double AccessibilityUIElement::x()
150 {
151     CGRect frame = [m_element accessibilityFrame];
152     return frame.origin.x;
153 }
154
155 double AccessibilityUIElement::y()
156 {
157     CGRect frame = [m_element accessibilityFrame];
158     return frame.origin.y;
159 }
160
161 double AccessibilityUIElement::width()
162 {
163     CGRect frame = [m_element accessibilityFrame];
164     return frame.size.width;
165 }
166
167 double AccessibilityUIElement::height()
168 {
169     CGRect frame = [m_element accessibilityFrame];
170     return frame.size.height;
171 }
172
173 double AccessibilityUIElement::clickPointX()
174 {
175     CGPoint centerPoint = [m_element accessibilityClickPoint];
176     return centerPoint.x;
177 }
178
179 double AccessibilityUIElement::clickPointY()
180 {
181     CGPoint centerPoint = [m_element accessibilityClickPoint];
182     return centerPoint.y;
183 }
184
185 void AccessibilityUIElement::getChildren(Vector<AccessibilityUIElement>& elementVector)
186 {
187     NSInteger childCount = [m_element accessibilityElementCount];
188     for (NSInteger k = 0; k < childCount; ++k)
189         elementVector.append(AccessibilityUIElement([m_element accessibilityElementAtIndex:k]));
190 }
191
192 void AccessibilityUIElement::getChildrenWithRange(Vector<AccessibilityUIElement>& elementVector, unsigned location, unsigned length)
193 {
194     NSUInteger childCount = [m_element accessibilityElementCount];
195     for (NSUInteger k = location; k < childCount && k < (location+length); ++k)
196         elementVector.append(AccessibilityUIElement([m_element accessibilityElementAtIndex:k]));    
197 }
198
199 int AccessibilityUIElement::childrenCount()
200 {
201     Vector<AccessibilityUIElement> children;
202     getChildren(children);
203     
204     return children.size();
205 }
206
207 AccessibilityUIElement AccessibilityUIElement::elementAtPoint(int x, int y)
208 {
209     id element = [m_element accessibilityHitTest:NSMakePoint(x, y)];
210     if (!element)
211         return nil;
212     
213     return AccessibilityUIElement(element); 
214 }
215
216 unsigned AccessibilityUIElement::indexOfChild(AccessibilityUIElement* element)
217 {
218     return 0;
219 }
220
221 AccessibilityUIElement AccessibilityUIElement::getChildAtIndex(unsigned index)
222 {
223     Vector<AccessibilityUIElement> children;
224     getChildrenWithRange(children, index, 1);
225     
226     if (children.size() == 1)
227         return children[0];
228     return nil;
229 }
230
231 AccessibilityUIElement AccessibilityUIElement::headerElementAtIndex(unsigned index)
232 {
233     NSArray *headers = [m_element accessibilityHeaderElements];
234     if (index < [headers count])
235         return [headers objectAtIndex:index];
236     
237     return 0;
238 }
239
240 AccessibilityUIElement AccessibilityUIElement::linkedElement()
241 {
242     id linkedElement = [m_element accessibilityLinkedElement];
243     if (linkedElement)
244         return AccessibilityUIElement(linkedElement);
245     
246     return 0;
247 }
248
249 AccessibilityUIElement AccessibilityUIElement::linkedUIElementAtIndex(unsigned index)
250 {
251     // FIXME: implement
252     return 0;
253 }
254
255 AccessibilityUIElement AccessibilityUIElement::ariaOwnsElementAtIndex(unsigned index)
256 {
257     return 0;
258 }
259
260 AccessibilityUIElement AccessibilityUIElement::ariaFlowToElementAtIndex(unsigned index)
261 {
262     return 0;
263 }
264
265 AccessibilityUIElement AccessibilityUIElement::disclosedRowAtIndex(unsigned index)
266 {
267     return 0;
268 }
269
270 AccessibilityUIElement AccessibilityUIElement::selectedRowAtIndex(unsigned index)
271 {
272     return 0;
273 }
274
275 AccessibilityUIElement AccessibilityUIElement::rowAtIndex(unsigned index)
276 {
277     return 0;
278 }
279
280 AccessibilityUIElement AccessibilityUIElement::titleUIElement()
281 {
282     return 0;
283 }
284
285 AccessibilityUIElement AccessibilityUIElement::parentElement()
286 {
287     id accessibilityObject = [m_element accessibilityContainer];
288     if (accessibilityObject)
289         return AccessibilityUIElement(accessibilityObject);
290     
291     return nil;
292 }
293
294 AccessibilityUIElement AccessibilityUIElement::disclosedByRow()
295 {
296     return 0;
297 }
298
299 void AccessibilityUIElement::increaseTextSelection()
300 {
301     [m_element accessibilityModifySelection:WebCore::CharacterGranularity increase:YES];
302 }
303
304 void AccessibilityUIElement::decreaseTextSelection()
305 {
306     [m_element accessibilityModifySelection:WebCore::CharacterGranularity increase:NO];    
307 }
308
309 JSStringRef AccessibilityUIElement::stringForSelection() 
310
311     NSString *stringForRange = [m_element selectionRangeString];
312     if (!stringForRange)
313         return 0;
314     
315     return [stringForRange createJSStringRef];
316 }
317
318 JSStringRef AccessibilityUIElement::stringForRange(unsigned location, unsigned length) 
319
320     NSString *stringForRange = [m_element stringForRange:NSMakeRange(location, length)];
321     if (!stringForRange)
322         return 0;
323     
324     return [stringForRange createJSStringRef];
325 }
326
327 JSStringRef AccessibilityUIElement::attributedStringForRange(unsigned, unsigned)
328 {
329     return JSStringCreateWithCharacters(0, 0);
330 }
331
332 bool AccessibilityUIElement::attributedStringRangeIsMisspelled(unsigned, unsigned)
333 {
334     return false;
335 }
336
337
338 void AccessibilityUIElement::elementsForRange(unsigned location, unsigned length, Vector<AccessibilityUIElement>& elements)
339
340     NSArray *elementsForRange = [m_element elementsForRange:NSMakeRange(location, length)];
341     for (id object in elementsForRange) {
342         AccessibilityUIElement element = AccessibilityUIElement(object);
343         elements.append(element);
344     }
345 }
346
347 static void _CGPathEnumerationIteration(void *info, const CGPathElement *element)
348 {
349     NSMutableString *result = (NSMutableString *)info;
350     switch (element->type) {
351     case kCGPathElementMoveToPoint:
352         [result appendString:@"\tMove to point\n"];
353         break;
354         
355     case kCGPathElementAddLineToPoint:
356         [result appendString:@"\tLine to\n"];
357         break;
358         
359     case kCGPathElementAddQuadCurveToPoint:
360         [result appendString:@"\tQuad curve to\n"];
361         break;
362         
363     case kCGPathElementAddCurveToPoint:
364         [result appendString:@"\tCurve to\n"];
365         break;
366         
367     case kCGPathElementCloseSubpath:
368         [result appendString:@"\tClose\n"];
369         break;
370     }
371 }
372
373 JSStringRef AccessibilityUIElement::pathDescription() const
374 {
375     NSMutableString *result = [NSMutableString stringWithString:@"\nStart Path\n"];
376     CGPathRef pathRef = [m_element _accessibilityPath];
377     
378     CGPathApply(pathRef, result, _CGPathEnumerationIteration);
379     
380     return [result createJSStringRef];
381 }
382
383 #pragma mark Unused
384
385 void AccessibilityUIElement::getLinkedUIElements(Vector<AccessibilityUIElement>& elementVector)
386 {
387 }
388
389 void AccessibilityUIElement::getDocumentLinks(Vector<AccessibilityUIElement>& elementVector)
390 {
391 }
392
393 JSStringRef AccessibilityUIElement::attributesOfLinkedUIElements()
394 {
395     return JSStringCreateWithCharacters(0, 0);
396 }
397
398 JSStringRef AccessibilityUIElement::attributesOfDocumentLinks()
399 {
400     return JSStringCreateWithCharacters(0, 0);
401 }
402
403 JSStringRef AccessibilityUIElement::attributesOfChildren()
404 {
405     return JSStringCreateWithCharacters(0, 0);
406 }
407
408 JSStringRef AccessibilityUIElement::allAttributes()
409 {
410     return JSStringCreateWithCharacters(0, 0);
411 }
412
413 JSStringRef AccessibilityUIElement::stringAttributeValue(JSStringRef attribute)
414 {
415     if (JSStringIsEqualToUTF8CString(attribute, "AXPlaceholderValue"))
416         return [[m_element accessibilityPlaceholderValue] createJSStringRef];
417     
418     return JSStringCreateWithCharacters(0, 0);
419 }
420
421 bool AccessibilityUIElement::isPressActionSupported()
422 {
423     return false;
424 }
425
426 bool AccessibilityUIElement::isIncrementActionSupported()
427 {
428     return false;
429 }
430
431 bool AccessibilityUIElement::isDecrementActionSupported()
432 {
433     return false;
434 }
435
436 bool AccessibilityUIElement::boolAttributeValue(JSStringRef attribute)
437 {
438     return false;
439 }
440
441 bool AccessibilityUIElement::isAttributeSettable(JSStringRef attribute)
442 {
443     return false;
444 }
445
446 bool AccessibilityUIElement::isAttributeSupported(JSStringRef attribute)
447 {
448     return false;
449 }
450
451 JSStringRef AccessibilityUIElement::parameterizedAttributeNames()
452 {
453     return JSStringCreateWithCharacters(0, 0);
454 }
455
456 JSStringRef AccessibilityUIElement::role()
457 {
458     return JSStringCreateWithCharacters(0, 0);
459 }
460
461 JSStringRef AccessibilityUIElement::subrole()
462 {
463     return JSStringCreateWithCharacters(0, 0);
464 }
465
466 JSStringRef AccessibilityUIElement::roleDescription()
467 {
468     return JSStringCreateWithCharacters(0, 0);
469 }
470
471 JSStringRef AccessibilityUIElement::title()
472 {
473     return JSStringCreateWithCharacters(0, 0);
474 }
475
476 JSStringRef AccessibilityUIElement::description()
477 {
478     return JSStringCreateWithCharacters(0, 0);
479 }    
480
481 JSStringRef AccessibilityUIElement::orientation() const
482 {
483     return JSStringCreateWithCharacters(0, 0);
484 }
485
486 JSStringRef AccessibilityUIElement::stringValue()
487 {
488     return JSStringCreateWithCharacters(0, 0);
489 }
490
491 JSStringRef AccessibilityUIElement::language()
492 {
493     return JSStringCreateWithCharacters(0, 0);
494 }
495
496 JSStringRef AccessibilityUIElement::helpText() const
497 {
498     return JSStringCreateWithCharacters(0, 0);
499 }
500
501 double AccessibilityUIElement::intValue() const
502 {
503     return 0.0f;
504 }
505
506 double AccessibilityUIElement::minValue()
507 {
508     return [m_element _accessibilityMinValue];
509 }
510
511 double AccessibilityUIElement::maxValue()
512 {
513     return [m_element _accessibilityMaxValue];
514 }
515
516 JSStringRef AccessibilityUIElement::valueDescription()
517 {
518     return JSStringCreateWithCharacters(0, 0);
519 }
520
521 int AccessibilityUIElement::insertionPointLineNumber()
522 {
523     return -1;
524 }
525
526 bool AccessibilityUIElement::isEnabled()
527 {
528     return false;
529 }
530
531 bool AccessibilityUIElement::isRequired() const
532 {
533     return false;
534 }
535
536 bool AccessibilityUIElement::isFocused() const
537 {
538     // FIXME: implement
539     return false;
540 }
541
542 bool AccessibilityUIElement::isSelected() const
543 {
544     UIAccessibilityTraits traits = [m_element accessibilityTraits];
545     return (traits & UIAccessibilityTraitSelected);
546 }
547
548 bool AccessibilityUIElement::isExpanded() const
549 {
550     return false;
551 }
552
553 bool AccessibilityUIElement::isChecked() const
554 {
555     return false;
556 }
557
558 bool AccessibilityUIElement::isIndeterminate() const
559 {
560     // FIXME: implement
561     return false;
562 }
563
564 int AccessibilityUIElement::hierarchicalLevel() const
565 {
566     return 0;
567 }
568
569 bool AccessibilityUIElement::ariaIsGrabbed() const
570 {
571     return false;
572 }
573
574 JSStringRef AccessibilityUIElement::ariaDropEffects() const
575 {
576     return JSStringCreateWithCharacters(0, 0);
577 }
578
579 int AccessibilityUIElement::lineForIndex(int index)
580 {
581     return -1;
582 }
583
584 JSStringRef AccessibilityUIElement::boundsForRange(unsigned location, unsigned length)
585 {
586     return JSStringCreateWithCharacters(0, 0);
587 }
588
589 JSStringRef AccessibilityUIElement::attributesOfColumnHeaders()
590 {
591     return JSStringCreateWithCharacters(0, 0);
592 }
593
594 JSStringRef AccessibilityUIElement::attributesOfRowHeaders()
595 {
596     return JSStringCreateWithCharacters(0, 0);
597 }
598
599 JSStringRef AccessibilityUIElement::attributesOfColumns()
600 {
601     return JSStringCreateWithCharacters(0, 0);
602 }
603
604 JSStringRef AccessibilityUIElement::attributesOfRows()
605 {
606     return JSStringCreateWithCharacters(0, 0);
607 }
608
609 JSStringRef AccessibilityUIElement::attributesOfVisibleCells()
610 {
611     return JSStringCreateWithCharacters(0, 0);
612 }
613
614 JSStringRef AccessibilityUIElement::attributesOfHeader()
615 {
616     return JSStringCreateWithCharacters(0, 0);
617 }
618
619 int AccessibilityUIElement::rowCount()
620 {
621     return -1;
622 }
623
624 int AccessibilityUIElement::columnCount()
625 {
626     return -1;
627 }
628
629 int AccessibilityUIElement::indexInTable()
630 {
631     return -1;
632 }
633
634 JSStringRef AccessibilityUIElement::rowIndexRange()
635 {
636     NSRange range = [m_element accessibilityRowRange];
637     NSMutableString* rangeDescription = [NSMutableString stringWithFormat:@"{%lu, %lu}", (unsigned long)range.location, (unsigned long)range.length];
638     return [rangeDescription createJSStringRef];
639 }
640
641 JSStringRef AccessibilityUIElement::columnIndexRange()
642 {
643     NSRange range = [m_element accessibilityColumnRange];
644     NSMutableString* rangeDescription = [NSMutableString stringWithFormat:@"{%lu, %lu}", (unsigned long)range.location, (unsigned long)range.length];
645     return [rangeDescription createJSStringRef];    
646 }
647
648 AccessibilityUIElement AccessibilityUIElement::cellForColumnAndRow(unsigned col, unsigned row)
649 {
650     return AccessibilityUIElement([m_element accessibilityElementForRow:row andColumn:col]);
651 }
652
653 void AccessibilityUIElement::scrollToMakeVisible()
654 {
655     // FIXME: implement
656 }
657
658 JSStringRef AccessibilityUIElement::selectedTextRange()
659 {
660     return JSStringCreateWithCharacters(0, 0);
661 }
662
663 void AccessibilityUIElement::assistiveTechnologySimulatedFocus()
664 {
665     [m_element accessibilityElementDidBecomeFocused];
666 }
667
668 void AccessibilityUIElement::setSelectedTextRange(unsigned location, unsigned length)
669 {
670 }
671
672 void AccessibilityUIElement::increment()
673 {
674     [m_element accessibilityIncrement];
675 }
676
677 void AccessibilityUIElement::decrement()
678 {
679     [m_element accessibilityDecrement];
680 }
681
682 void AccessibilityUIElement::showMenu()
683 {
684 }
685
686 void AccessibilityUIElement::press()
687 {
688 }
689
690 JSStringRef AccessibilityUIElement::accessibilityValue() const
691 {
692     // FIXME: implement
693     return JSStringCreateWithCharacters(0, 0);
694 }
695
696 JSStringRef AccessibilityUIElement::documentEncoding()
697 {
698     return JSStringCreateWithCharacters(0, 0);
699 }
700
701 JSStringRef AccessibilityUIElement::documentURI()
702 {
703     return JSStringCreateWithCharacters(0, 0);
704 }
705
706 static void _accessibilityNotificationCallback(id element, NSString* notification, void* context)
707 {
708     if (!context)
709         return;
710     
711     JSObjectRef functionCallback = static_cast<JSObjectRef>(context);
712     
713     JSRetainPtr<JSStringRef> jsNotification(Adopt, [notification createJSStringRef]);
714     JSValueRef argument = JSValueMakeString([mainFrame globalContext], jsNotification.get());
715     JSObjectCallAsFunction([mainFrame globalContext], functionCallback, NULL, 1, &argument, NULL);
716 }
717
718 bool AccessibilityUIElement::addNotificationListener(JSObjectRef functionCallback)
719 {
720     if (!functionCallback)
721         return false;
722     
723     m_notificationFunctionCallback = functionCallback;
724     [platformUIElement() accessibilitySetPostedNotificationCallback:_accessibilityNotificationCallback withContext:reinterpret_cast<void*>(m_notificationFunctionCallback)];
725     return true;    
726 }
727
728 void AccessibilityUIElement::removeNotificationListener()
729 {
730     m_notificationFunctionCallback = 0;
731     [platformUIElement() accessibilitySetPostedNotificationCallback:nil withContext:nil];
732 }
733
734 bool AccessibilityUIElement::isFocusable() const
735 {
736     // FIXME: implement
737     return false;
738 }
739
740 bool AccessibilityUIElement::isSelectable() const
741 {
742     // FIXME: implement
743     return false;
744 }
745
746 bool AccessibilityUIElement::isMultiSelectable() const
747 {
748     // FIXME: implement
749     return false;
750 }
751
752 bool AccessibilityUIElement::isSelectedOptionActive() const
753 {
754     // FIXME: implement
755     return false;
756 }
757
758 bool AccessibilityUIElement::isVisible() const
759 {
760     // FIXME: implement
761     return false;
762 }
763
764 bool AccessibilityUIElement::isOffScreen() const
765 {
766     // FIXME: implement
767     return false;
768 }
769
770 bool AccessibilityUIElement::isCollapsed() const
771 {
772     // FIXME: implement
773     return false;
774 }
775
776 bool AccessibilityUIElement::isIgnored() const
777 {
778     // FIXME: implement
779     return false;
780 }
781
782 bool AccessibilityUIElement::hasPopup() const
783 {
784     // FIXME: implement
785     return false;
786 }
787
788 void AccessibilityUIElement::takeFocus()
789 {
790     // FIXME: implement
791 }
792
793 void AccessibilityUIElement::takeSelection()
794 {
795     // FIXME: implement
796 }
797
798 void AccessibilityUIElement::addSelection()
799 {
800     // FIXME: implement
801 }
802
803 void AccessibilityUIElement::removeSelection()
804 {
805     // FIXME: implement
806 }
807
808 unsigned AccessibilityUIElement::uiElementCountForSearchPredicate(JSContextRef context, AccessibilityUIElement* startElement, bool isDirectionNext, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly)
809 {
810     // FIXME: implement
811     return 0;
812 }
813
814 AccessibilityUIElement AccessibilityUIElement::uiElementForSearchPredicate(JSContextRef context, AccessibilityUIElement* startElement, bool isDirectionNext, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly)
815 {
816     // FIXME: implement
817     return 0;
818 }
819
820 double AccessibilityUIElement::numberAttributeValue(JSStringRef attribute)
821 {
822     // FIXME: implement
823     return 0;
824 }
825
826 JSStringRef AccessibilityUIElement::classList() const
827 {
828     // FIXME: implement
829     return nullptr;
830 }
831
832 void AccessibilityUIElement::uiElementArrayAttributeValue(JSStringRef, Vector<AccessibilityUIElement>&) const
833 {
834     // FIXME: implement
835 }