tizen beta release
[framework/web/webkit-efl.git] / Source / WebKit / chromium / src / WebAccessibilityObject.cpp
1 /*
2  * Copyright (C) 2009 Google 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 are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32 #include "WebAccessibilityObject.h"
33
34 #include "AXObjectCache.h"
35 #include "AccessibilityObject.h"
36 #include "AccessibilityTable.h"
37 #include "AccessibilityTableCell.h"
38 #include "CSSPrimitiveValueMappings.h"
39 #include "Document.h"
40 #include "EventHandler.h"
41 #include "FrameView.h"
42 #include "HTMLNames.h"
43 #include "Node.h"
44 #include "PlatformKeyboardEvent.h"
45 #include "RenderStyle.h"
46 #include "UserGestureIndicator.h"
47 #include "WebDocument.h"
48 #include "WebNode.h"
49 #include "WebPoint.h"
50 #include "WebRect.h"
51 #include "WebString.h"
52 #include "WebURL.h"
53
54 using namespace WebCore;
55
56 namespace WebKit {
57
58 void WebAccessibilityObject::reset()
59 {
60     m_private.reset();
61 }
62
63 void WebAccessibilityObject::assign(const WebKit::WebAccessibilityObject& other)
64 {
65     m_private = other.m_private;
66 }
67
68 bool WebAccessibilityObject::equals(const WebAccessibilityObject& n) const
69 {
70     return (m_private.get() == n.m_private.get());
71 }
72
73 // static
74 void WebAccessibilityObject::enableAccessibility()
75 {
76     AXObjectCache::enableAccessibility();
77 }
78
79 // static
80 bool WebAccessibilityObject::accessibilityEnabled()
81 {
82     return AXObjectCache::accessibilityEnabled();
83 }
84
85 int WebAccessibilityObject::axID() const
86 {
87     if (m_private.isNull())
88         return -1;
89
90     m_private->updateBackingStore();
91     return m_private->axObjectID();
92 }
93
94 WebString WebAccessibilityObject::accessibilityDescription() const
95 {
96     if (m_private.isNull())
97         return WebString();
98
99     m_private->updateBackingStore();
100     return m_private->accessibilityDescription();
101 }
102
103 WebString WebAccessibilityObject::actionVerb() const
104 {
105     if (m_private.isNull())
106         return WebString();
107
108     m_private->updateBackingStore();
109     return m_private->actionVerb();
110 }
111
112 bool WebAccessibilityObject::canSetFocusAttribute() const
113 {
114     if (m_private.isNull())
115         return false;
116
117     m_private->updateBackingStore();
118     return m_private->canSetFocusAttribute();
119 }
120
121 bool WebAccessibilityObject::canSetValueAttribute() const
122 {
123     if (m_private.isNull())
124         return false;
125
126     m_private->updateBackingStore();
127     return m_private->canSetValueAttribute();
128 }
129
130 bool WebAccessibilityObject::isValid() const
131 {
132     if (m_private.isNull())
133         return false;
134
135     m_private->updateBackingStore();
136     return m_private->axObjectID();
137 }
138
139 unsigned WebAccessibilityObject::childCount() const
140 {
141     if (m_private.isNull())
142         return 0;
143
144     m_private->updateBackingStore();
145     return m_private->children().size();
146 }
147
148 WebAccessibilityObject WebAccessibilityObject::childAt(unsigned index) const
149 {
150     if (m_private.isNull())
151         return WebAccessibilityObject();
152
153     m_private->updateBackingStore();
154     if (m_private->children().size() <= index)
155         return WebAccessibilityObject();
156
157     return WebAccessibilityObject(m_private->children()[index]);
158 }
159
160 WebAccessibilityObject WebAccessibilityObject::firstChild() const
161 {
162     if (m_private.isNull())
163         return WebAccessibilityObject();
164
165     m_private->updateBackingStore();
166     return WebAccessibilityObject(m_private->firstChild());
167 }
168
169 WebAccessibilityObject WebAccessibilityObject::focusedChild() const
170 {
171     if (m_private.isNull())
172         return WebAccessibilityObject();
173
174     m_private->updateBackingStore();
175     RefPtr<AccessibilityObject> focused = m_private->focusedUIElement();
176     if (m_private.get() == focused.get() || m_private.get() == focused->parentObject())
177         return WebAccessibilityObject(focused);
178
179     return WebAccessibilityObject();
180 }
181
182 WebAccessibilityObject WebAccessibilityObject::lastChild() const
183 {
184     if (m_private.isNull())
185         return WebAccessibilityObject();
186
187     m_private->updateBackingStore();
188     return WebAccessibilityObject(m_private->lastChild());
189 }
190
191
192 WebAccessibilityObject WebAccessibilityObject::nextSibling() const
193 {
194     if (m_private.isNull())
195         return WebAccessibilityObject();
196
197     m_private->updateBackingStore();
198     return WebAccessibilityObject(m_private->nextSibling());
199 }
200
201 WebAccessibilityObject WebAccessibilityObject::parentObject() const
202 {
203     if (m_private.isNull())
204         return WebAccessibilityObject();
205
206     m_private->updateBackingStore();
207     return WebAccessibilityObject(m_private->parentObject());
208 }
209
210
211 WebAccessibilityObject WebAccessibilityObject::previousSibling() const
212 {
213     if (m_private.isNull())
214         return WebAccessibilityObject();
215
216     m_private->updateBackingStore();
217     return WebAccessibilityObject(m_private->previousSibling());
218 }
219
220 bool WebAccessibilityObject::canSetSelectedAttribute() const
221 {
222     if (m_private.isNull())
223         return 0;
224
225     m_private->updateBackingStore();
226     return m_private->canSetSelectedAttribute();
227 }
228
229 bool WebAccessibilityObject::isAnchor() const
230 {
231     if (m_private.isNull())
232         return 0;
233
234     m_private->updateBackingStore();
235     return m_private->isAnchor();
236 }
237
238 bool WebAccessibilityObject::isAriaReadOnly() const
239 {
240     if (m_private.isNull())
241         return 0;
242
243     m_private->updateBackingStore();
244     return equalIgnoringCase(m_private->getAttribute(HTMLNames::aria_readonlyAttr), "true");
245 }
246
247 bool WebAccessibilityObject::isButtonStateMixed() const
248 {
249     if (m_private.isNull())
250         return 0;
251
252     m_private->updateBackingStore();
253     return m_private->checkboxOrRadioValue() == ButtonStateMixed;
254 }
255
256 bool WebAccessibilityObject::isChecked() const
257 {
258     if (m_private.isNull())
259         return 0;
260
261     m_private->updateBackingStore();
262     return m_private->isChecked();
263 }
264
265 bool WebAccessibilityObject::isCollapsed() const
266 {
267     if (m_private.isNull())
268         return 0;
269
270     m_private->updateBackingStore();
271     return m_private->isCollapsed();
272 }
273
274 bool WebAccessibilityObject::isControl() const
275 {
276     if (m_private.isNull())
277         return 0;
278
279     m_private->updateBackingStore();
280     return m_private->isControl();
281 }
282
283 bool WebAccessibilityObject::isEnabled() const
284 {
285     if (m_private.isNull())
286         return 0;
287
288     m_private->updateBackingStore();
289     return m_private->isEnabled();
290 }
291
292 bool WebAccessibilityObject::isFocused() const
293 {
294     if (m_private.isNull())
295         return 0;
296
297     m_private->updateBackingStore();
298     return m_private->isFocused();
299 }
300
301 bool WebAccessibilityObject::isHovered() const
302 {
303     if (m_private.isNull())
304         return 0;
305
306     m_private->updateBackingStore();
307     return m_private->isHovered();
308 }
309
310 bool WebAccessibilityObject::isIndeterminate() const
311 {
312     if (m_private.isNull())
313         return 0;
314
315     m_private->updateBackingStore();
316     return m_private->isIndeterminate();
317 }
318
319 bool WebAccessibilityObject::isLinked() const
320 {
321     if (m_private.isNull())
322         return 0;
323
324     m_private->updateBackingStore();
325     return m_private->isLinked();
326 }
327
328 bool WebAccessibilityObject::isLoaded() const
329 {
330     if (m_private.isNull())
331         return 0;
332
333     m_private->updateBackingStore();
334     return m_private->isLoaded();
335 }
336
337 bool WebAccessibilityObject::isMultiSelectable() const
338 {
339     if (m_private.isNull())
340         return 0;
341
342     m_private->updateBackingStore();
343     return m_private->isMultiSelectable();
344 }
345
346 bool WebAccessibilityObject::isOffScreen() const
347 {
348     if (m_private.isNull())
349         return 0;
350
351     m_private->updateBackingStore();
352     return m_private->isOffScreen();
353 }
354
355 bool WebAccessibilityObject::isPasswordField() const
356 {
357     if (m_private.isNull())
358         return 0;
359
360     m_private->updateBackingStore();
361     return m_private->isPasswordField();
362 }
363
364 bool WebAccessibilityObject::isPressed() const
365 {
366     if (m_private.isNull())
367         return 0;
368
369     m_private->updateBackingStore();
370     return m_private->isPressed();
371 }
372
373 bool WebAccessibilityObject::isReadOnly() const
374 {
375     if (m_private.isNull())
376         return 0;
377
378     m_private->updateBackingStore();
379     return m_private->isReadOnly();
380 }
381
382 bool WebAccessibilityObject::isRequired() const
383 {
384     if (m_private.isNull())
385         return 0;
386
387     m_private->updateBackingStore();
388     return m_private->isRequired();
389 }
390
391 bool WebAccessibilityObject::isSelected() const
392 {
393     if (m_private.isNull())
394         return 0;
395
396     m_private->updateBackingStore();
397     return m_private->isSelected();
398 }
399
400 bool WebAccessibilityObject::isSelectedOptionActive() const
401 {
402     if (m_private.isNull())
403         return false;
404
405     m_private->updateBackingStore();
406     return m_private->isSelectedOptionActive();
407 }
408
409 bool WebAccessibilityObject::isVertical() const
410 {
411     if (m_private.isNull())
412         return 0;
413
414     m_private->updateBackingStore();
415     return m_private->orientation() == AccessibilityOrientationVertical;
416 }
417
418 bool WebAccessibilityObject::isVisible() const
419 {
420     if (m_private.isNull())
421         return 0;
422
423     m_private->updateBackingStore();
424     return m_private->isVisible();
425 }
426
427 bool WebAccessibilityObject::isVisited() const
428 {
429     if (m_private.isNull())
430         return 0;
431
432     m_private->updateBackingStore();
433     return m_private->isVisited();
434 }
435
436 WebString WebAccessibilityObject::accessKey() const
437 {
438     if (m_private.isNull())
439         return WebString();
440
441     m_private->updateBackingStore();
442     return WebString(m_private->accessKey());
443 }
444
445 bool WebAccessibilityObject::ariaHasPopup() const
446 {
447     if (m_private.isNull())
448         return 0;
449
450     m_private->updateBackingStore();
451     return m_private->ariaHasPopup();
452 }
453
454 bool WebAccessibilityObject::ariaLiveRegionAtomic() const
455 {
456     if (m_private.isNull())
457         return 0;
458
459     m_private->updateBackingStore();
460     return m_private->ariaLiveRegionAtomic();
461 }
462
463 bool WebAccessibilityObject::ariaLiveRegionBusy() const
464 {
465     if (m_private.isNull())
466         return 0;
467
468     m_private->updateBackingStore();
469     return m_private->ariaLiveRegionBusy();
470 }
471
472 WebString WebAccessibilityObject::ariaLiveRegionRelevant() const
473 {
474     if (m_private.isNull())
475         return WebString();
476
477     m_private->updateBackingStore();
478     return m_private->ariaLiveRegionRelevant();
479 }
480
481 WebString WebAccessibilityObject::ariaLiveRegionStatus() const
482 {
483     if (m_private.isNull())
484         return WebString();
485
486     m_private->updateBackingStore();
487     return m_private->ariaLiveRegionStatus();
488 }
489
490 WebRect WebAccessibilityObject::boundingBoxRect() const
491 {
492     if (m_private.isNull())
493         return WebRect();
494
495     m_private->updateBackingStore();
496     return m_private->boundingBoxRect();
497 }
498
499 double WebAccessibilityObject::estimatedLoadingProgress() const
500 {
501     if (m_private.isNull())
502         return 0.0;
503
504     m_private->updateBackingStore();
505     return m_private->estimatedLoadingProgress();
506 }
507
508 WebString WebAccessibilityObject::helpText() const
509 {
510     if (m_private.isNull())
511         return WebString();
512
513     m_private->updateBackingStore();
514     return m_private->helpText();
515 }
516
517 int WebAccessibilityObject::headingLevel() const
518 {
519     if (m_private.isNull())
520         return 0;
521
522     m_private->updateBackingStore();
523     return m_private->headingLevel();
524 }
525
526 int WebAccessibilityObject::hierarchicalLevel() const
527 {
528     if (m_private.isNull())
529         return 0;
530
531     m_private->updateBackingStore();
532     return m_private->hierarchicalLevel();
533 }
534
535 WebAccessibilityObject WebAccessibilityObject::hitTest(const WebPoint& point) const
536 {
537     if (m_private.isNull())
538         return WebAccessibilityObject();
539
540     m_private->updateBackingStore();
541     IntPoint contentsPoint = m_private->documentFrameView()->windowToContents(point);
542     RefPtr<AccessibilityObject> hit = m_private->accessibilityHitTest(contentsPoint);
543
544     if (hit)
545         return WebAccessibilityObject(hit);
546
547     if (m_private->boundingBoxRect().contains(contentsPoint))
548         return *this;
549
550     return WebAccessibilityObject();
551 }
552
553 WebString WebAccessibilityObject::keyboardShortcut() const
554 {
555     if (m_private.isNull())
556         return WebString();
557
558     m_private->updateBackingStore();
559     String accessKey = m_private->accessKey();
560     if (accessKey.isNull())
561         return WebString();
562
563     DEFINE_STATIC_LOCAL(String, modifierString, ());
564     if (modifierString.isNull()) {
565         unsigned modifiers = EventHandler::accessKeyModifiers();
566         // Follow the same order as Mozilla MSAA implementation:
567         // Ctrl+Alt+Shift+Meta+key. MSDN states that keyboard shortcut strings
568         // should not be localized and defines the separator as "+".
569         if (modifiers & PlatformKeyboardEvent::CtrlKey)
570             modifierString += "Ctrl+";
571         if (modifiers & PlatformKeyboardEvent::AltKey)
572             modifierString += "Alt+";
573         if (modifiers & PlatformKeyboardEvent::ShiftKey)
574             modifierString += "Shift+";
575         if (modifiers & PlatformKeyboardEvent::MetaKey)
576             modifierString += "Win+";
577     }
578
579     return String(modifierString + accessKey);
580 }
581
582 bool WebAccessibilityObject::performDefaultAction() const
583 {
584     if (m_private.isNull())
585         return false;
586
587     UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture);
588
589     m_private->updateBackingStore();
590     return m_private->performDefaultAction();
591 }
592
593 WebAccessibilityRole WebAccessibilityObject::roleValue() const
594 {
595     if (m_private.isNull())
596         return WebKit::WebAccessibilityRoleUnknown;
597
598     m_private->updateBackingStore();
599     return static_cast<WebAccessibilityRole>(m_private->roleValue());
600 }
601
602 unsigned WebAccessibilityObject::selectionEnd() const
603 {
604     if (m_private.isNull())
605         return 0;
606
607     m_private->updateBackingStore();
608     return m_private->selectedTextRange().start + m_private->selectedTextRange().length;
609 }
610
611 unsigned WebAccessibilityObject::selectionStart() const
612 {
613     if (m_private.isNull())
614         return 0;
615
616     m_private->updateBackingStore();
617     return m_private->selectedTextRange().start;
618 }
619
620 void WebAccessibilityObject::setFocused(bool on) const
621 {
622     if (!m_private.isNull())
623         m_private->setFocused(on);
624 }
625
626 WebString WebAccessibilityObject::stringValue() const
627 {
628     if (m_private.isNull())
629         return WebString();
630
631     m_private->updateBackingStore();
632     return m_private->stringValue();
633 }
634
635 WebString WebAccessibilityObject::title() const
636 {
637     if (m_private.isNull())
638         return WebString();
639
640     m_private->updateBackingStore();
641     return m_private->title();
642 }
643
644 WebAccessibilityObject WebAccessibilityObject::titleUIElement() const
645 {
646     if (m_private.isNull())
647         return WebAccessibilityObject();
648
649     m_private->updateBackingStore();
650     return WebAccessibilityObject(m_private->titleUIElement());
651 }
652
653 WebURL WebAccessibilityObject::url() const
654 {
655     if (m_private.isNull())
656         return WebURL();
657     
658     m_private->updateBackingStore();
659     return m_private->url();
660 }
661
662 WebString WebAccessibilityObject::valueDescription() const
663 {
664     if (m_private.isNull())
665         return WebString();
666
667     m_private->updateBackingStore();
668     return m_private->valueDescription();
669 }
670
671 float WebAccessibilityObject::valueForRange() const
672 {
673     if (m_private.isNull())
674         return 0.0;
675
676     m_private->updateBackingStore();
677     return m_private->valueForRange();
678 }
679
680 float WebAccessibilityObject::maxValueForRange() const
681 {
682     if (m_private.isNull())
683         return 0.0;
684
685     m_private->updateBackingStore();
686     return m_private->maxValueForRange();
687 }
688
689 float WebAccessibilityObject::minValueForRange() const
690 {
691     if (m_private.isNull())
692         return 0.0;
693
694     m_private->updateBackingStore();
695     return m_private->minValueForRange();
696 }
697
698 WebNode WebAccessibilityObject::node() const
699 {
700     if (m_private.isNull())
701         return WebNode();
702
703     m_private->updateBackingStore();
704
705     Node* node = m_private->node();
706     if (!node)
707         return WebNode();
708
709     return WebNode(node);
710 }
711
712 WebDocument WebAccessibilityObject::document() const
713 {
714     if (m_private.isNull())
715         return WebDocument();
716
717     m_private->updateBackingStore();
718
719     Document* document = m_private->document();
720     if (!document)
721         return WebDocument();
722
723     return WebDocument(document);
724 }
725
726 bool WebAccessibilityObject::hasComputedStyle() const
727 {
728     if (m_private.isNull())
729         return false;
730
731     Document* document = m_private->document();
732     if (document)
733         document->updateStyleIfNeeded();
734
735     Node* node = m_private->node();
736     if (!node)
737         return false;
738
739     return node->computedStyle();
740 }
741
742 WebString WebAccessibilityObject::computedStyleDisplay() const
743 {
744     if (m_private.isNull())
745         return WebString();
746
747     Document* document = m_private->document();
748     if (document)
749         document->updateStyleIfNeeded();
750
751     Node* node = m_private->node();
752     if (!node)
753         return WebString();
754
755     RenderStyle* renderStyle = node->computedStyle();
756     if (!renderStyle)
757         return WebString();
758
759     return WebString(CSSPrimitiveValue::create(renderStyle->display())->getStringValue());
760 }
761
762 bool WebAccessibilityObject::accessibilityIsIgnored() const
763 {
764     if (m_private.isNull())
765         return false;
766
767     m_private->updateBackingStore();
768     return m_private->accessibilityIsIgnored();
769 }
770
771 bool WebAccessibilityObject::lineBreaks(WebVector<int>& result) const
772 {
773     if (m_private.isNull())
774         return false;
775
776     m_private->updateBackingStore();
777     int textLength = m_private->textLength();
778     if (!textLength)
779         return false;
780
781     VisiblePosition pos = m_private->visiblePositionForIndex(textLength);
782     int lineBreakCount = m_private->lineForPosition(pos);
783     if (lineBreakCount <= 0)
784         return false;
785
786     WebVector<int> lineBreaks(static_cast<size_t>(lineBreakCount));
787     for (int i = 0; i < lineBreakCount; i++) {
788         PlainTextRange range = m_private->doAXRangeForLine(i);
789         lineBreaks[i] = range.start + range.length;
790     }
791     result.swap(lineBreaks);
792     return true;
793 }
794
795 unsigned WebAccessibilityObject::columnCount() const
796 {
797     if (m_private.isNull())
798         return false;
799
800     m_private->updateBackingStore();
801     if (!m_private->isAccessibilityTable())
802         return 0;
803
804     return static_cast<WebCore::AccessibilityTable*>(m_private.get())->columnCount();
805 }
806
807 unsigned WebAccessibilityObject::rowCount() const
808 {
809     if (m_private.isNull())
810         return false;
811
812     m_private->updateBackingStore();
813     if (!m_private->isAccessibilityTable())
814         return 0;
815
816     return static_cast<WebCore::AccessibilityTable*>(m_private.get())->rowCount();
817 }
818
819 WebAccessibilityObject WebAccessibilityObject::cellForColumnAndRow(unsigned column, unsigned row) const
820 {
821     m_private->updateBackingStore();
822     if (!m_private->isAccessibilityTable())
823         return WebAccessibilityObject();
824
825     WebCore::AccessibilityTableCell* cell = static_cast<WebCore::AccessibilityTable*>(m_private.get())->cellForColumnAndRow(column, row);
826     return WebAccessibilityObject(static_cast<WebCore::AccessibilityObject*>(cell));
827 }
828
829 unsigned WebAccessibilityObject::cellColumnIndex() const
830 {
831     m_private->updateBackingStore();
832     if (!m_private->isTableCell())
833        return 0;
834
835     pair<int, int> columnRange;
836     static_cast<WebCore::AccessibilityTableCell*>(m_private.get())->columnIndexRange(columnRange);
837     return columnRange.first;
838 }
839
840 unsigned WebAccessibilityObject::cellColumnSpan() const
841 {
842     m_private->updateBackingStore();
843     if (!m_private->isTableCell())
844        return 0;
845
846     pair<int, int> columnRange;
847     static_cast<WebCore::AccessibilityTableCell*>(m_private.get())->columnIndexRange(columnRange);
848     return columnRange.second;
849 }
850
851 unsigned WebAccessibilityObject::cellRowIndex() const
852 {
853     m_private->updateBackingStore();
854     if (!m_private->isTableCell())
855        return 0;
856
857     pair<int, int> rowRange;
858     static_cast<WebCore::AccessibilityTableCell*>(m_private.get())->rowIndexRange(rowRange);
859     return rowRange.first;
860 }
861
862 unsigned WebAccessibilityObject::cellRowSpan() const
863 {
864     m_private->updateBackingStore();
865     if (!m_private->isTableCell())
866        return 0;
867
868     pair<int, int> rowRange;
869     static_cast<WebCore::AccessibilityTableCell*>(m_private.get())->rowIndexRange(rowRange);
870     return rowRange.second;
871 }
872
873 WebAccessibilityObject::WebAccessibilityObject(const WTF::PassRefPtr<WebCore::AccessibilityObject>& object)
874     : m_private(object)
875 {
876 }
877
878 WebAccessibilityObject& WebAccessibilityObject::operator=(const WTF::PassRefPtr<WebCore::AccessibilityObject>& object)
879 {
880     m_private = object;
881     return *this;
882 }
883
884 WebAccessibilityObject::operator WTF::PassRefPtr<WebCore::AccessibilityObject>() const
885 {
886     return m_private.get();
887 }
888
889 } // namespace WebKit