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

Side by Side Diff: Source/core/accessibility/AccessibilityRenderObject.cpp

Issue 19510005: [oilpan] Completely move HTMLFormControlElement's hierarchy to the managed heap Base URL: svn://svn.chromium.org/blink/branches/oilpan
Patch Set: Created 7 years, 5 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 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 return false; 467 return false;
468 // Widgets are the replaced elements that we represent to AX as attachments 468 // Widgets are the replaced elements that we represent to AX as attachments
469 bool isWidget = renderer->isWidget(); 469 bool isWidget = renderer->isWidget();
470 ASSERT(!isWidget || (renderer->isReplaced() && !isImage())); 470 ASSERT(!isWidget || (renderer->isReplaced() && !isImage()));
471 return isWidget && ariaRoleAttribute() == UnknownRole; 471 return isWidget && ariaRoleAttribute() == UnknownRole;
472 } 472 }
473 473
474 bool AccessibilityRenderObject::isFileUploadButton() const 474 bool AccessibilityRenderObject::isFileUploadButton() const
475 { 475 {
476 if (m_renderer && m_renderer->node() && m_renderer->node()->hasTagName(input Tag)) { 476 if (m_renderer && m_renderer->node() && m_renderer->node()->hasTagName(input Tag)) {
477 HTMLInputElement* input = static_cast<HTMLInputElement*>(m_renderer->nod e()); 477 Handle<HTMLInputElement> input(static_cast<HTMLInputElement*>(m_renderer ->node()));
478 return input->isFileUpload(); 478 return input->isFileUpload();
479 } 479 }
480 480
481 return false; 481 return false;
482 } 482 }
483 483
484 bool AccessibilityRenderObject::isReadOnly() const 484 bool AccessibilityRenderObject::isReadOnly() const
485 { 485 {
486 ASSERT(m_renderer); 486 ASSERT(m_renderer);
487 487
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 staticText = textUnderElement(); 635 staticText = textUnderElement();
636 return staticText; 636 return staticText;
637 } 637 }
638 638
639 if (m_renderer->isText()) 639 if (m_renderer->isText())
640 return textUnderElement(); 640 return textUnderElement();
641 641
642 if (cssBox && cssBox->isMenuList()) { 642 if (cssBox && cssBox->isMenuList()) {
643 // RenderMenuList will go straight to the text() of its selected item. 643 // RenderMenuList will go straight to the text() of its selected item.
644 // This has to be overridden in the case where the selected item has an ARIA label. 644 // This has to be overridden in the case where the selected item has an ARIA label.
645 HTMLSelectElement* selectElement = toHTMLSelectElement(m_renderer->node( )); 645 Handle<HTMLSelectElement> selectElement = toHTMLSelectElement(m_renderer ->node());
646 int selectedIndex = selectElement->selectedIndex(); 646 int selectedIndex = selectElement->selectedIndex();
647 const Vector<HTMLElement*> listItems = selectElement->listItems(); 647 const Vector<HTMLElement*> listItems = selectElement->listItems();
648 if (selectedIndex >= 0 && static_cast<size_t>(selectedIndex) < listItems .size()) { 648 if (selectedIndex >= 0 && static_cast<size_t>(selectedIndex) < listItems .size()) {
649 const AtomicString& overriddenDescription = listItems[selectedIndex] ->fastGetAttribute(aria_labelAttr); 649 const AtomicString& overriddenDescription = listItems[selectedIndex] ->fastGetAttribute(aria_labelAttr);
650 if (!overriddenDescription.isNull()) 650 if (!overriddenDescription.isNull())
651 return overriddenDescription; 651 return overriddenDescription;
652 } 652 }
653 return toRenderMenuList(m_renderer)->text(); 653 return toRenderMenuList(m_renderer)->text();
654 } 654 }
655 655
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 826
827 void AccessibilityRenderObject::addRadioButtonGroupMembers(AccessibilityChildren Vector& linkedUIElements) const 827 void AccessibilityRenderObject::addRadioButtonGroupMembers(AccessibilityChildren Vector& linkedUIElements) const
828 { 828 {
829 if (!m_renderer || roleValue() != RadioButtonRole) 829 if (!m_renderer || roleValue() != RadioButtonRole)
830 return; 830 return;
831 831
832 Node* node = m_renderer->node(); 832 Node* node = m_renderer->node();
833 if (!node || !node->hasTagName(inputTag)) 833 if (!node || !node->hasTagName(inputTag))
834 return; 834 return;
835 835
836 HTMLInputElement* input = static_cast<HTMLInputElement*>(node); 836 Handle<HTMLInputElement> input(static_cast<HTMLInputElement*>(node));
837 // if there's a form, then this is easy 837 // if there's a form, then this is easy
838 if (input->form()) { 838 if (input->form()) {
839 Vector<RefPtr<Node> > formElements; 839 Vector<RefPtr<Node> > formElements;
840 input->form()->getNamedElements(input->name(), formElements); 840 input->form()->getNamedElements(input->name(), formElements);
841 841
842 unsigned len = formElements.size(); 842 unsigned len = formElements.size();
843 for (unsigned i = 0; i < len; ++i) { 843 for (unsigned i = 0; i < len; ++i) {
844 Node* associateElement = formElements[i].get(); 844 Node* associateElement = formElements[i].get();
845 if (AccessibilityObject* object = axObjectCache()->getOrCreate(assoc iateElement)) 845 if (AccessibilityObject* object = axObjectCache()->getOrCreate(assoc iateElement))
846 linkedUIElements.append(object); 846 linkedUIElements.append(object);
847 } 847 }
848 } else { 848 } else {
849 RefPtr<NodeList> list = node->document()->getElementsByTagName("input"); 849 RefPtr<NodeList> list = node->document()->getElementsByTagName("input");
850 unsigned len = list->length(); 850 unsigned len = list->length();
851 for (unsigned i = 0; i < len; ++i) { 851 for (unsigned i = 0; i < len; ++i) {
852 if (list->item(i)->hasTagName(inputTag)) { 852 if (list->item(i)->hasTagName(inputTag)) {
853 HTMLInputElement* associateElement = static_cast<HTMLInputElemen t*>(list->item(i)); 853 Handle<HTMLInputElement> associateElement(static_cast<HTMLInputE lement*>(list->item(i)));
854 if (associateElement->isRadioButton() && associateElement->name( ) == input->name()) { 854 if (associateElement->isRadioButton() && associateElement->name( ) == input->name()) {
855 if (AccessibilityObject* object = axObjectCache()->getOrCrea te(associateElement)) 855 if (AccessibilityObject* object = axObjectCache()->getOrCrea te(associateElement.raw()))
856 linkedUIElements.append(object); 856 linkedUIElements.append(object);
857 } 857 }
858 } 858 }
859 } 859 }
860 } 860 }
861 } 861 }
862 862
863 // linked ui elements could be all the related radio buttons in a group 863 // linked ui elements could be all the related radio buttons in a group
864 // or an internal anchor connection 864 // or an internal anchor connection
865 void AccessibilityRenderObject::linkedUIElements(AccessibilityChildrenVector& li nkedUIElements) const 865 void AccessibilityRenderObject::linkedUIElements(AccessibilityChildrenVector& li nkedUIElements) const
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 } 1267 }
1268 1268
1269 String AccessibilityRenderObject::selectedText() const 1269 String AccessibilityRenderObject::selectedText() const
1270 { 1270 {
1271 ASSERT(isTextControl()); 1271 ASSERT(isTextControl());
1272 1272
1273 if (isPasswordField()) 1273 if (isPasswordField())
1274 return String(); // need to return something distinct from empty string 1274 return String(); // need to return something distinct from empty string
1275 1275
1276 if (isNativeTextControl()) { 1276 if (isNativeTextControl()) {
1277 HTMLTextFormControlElement* textControl = toRenderTextControl(m_renderer )->textFormControlElement(); 1277 Handle<HTMLTextFormControlElement> textControl = toRenderTextControl(m_r enderer)->textFormControlElement();
1278 return textControl->selectedText(); 1278 return textControl->selectedText();
1279 } 1279 }
1280 1280
1281 if (ariaRoleAttribute() == UnknownRole) 1281 if (ariaRoleAttribute() == UnknownRole)
1282 return String(); 1282 return String();
1283 1283
1284 return doAXStringForRange(ariaSelectedTextRange()); 1284 return doAXStringForRange(ariaSelectedTextRange());
1285 } 1285 }
1286 1286
1287 const AtomicString& AccessibilityRenderObject::accessKey() const 1287 const AtomicString& AccessibilityRenderObject::accessKey() const
(...skipping 13 matching lines...) Expand all
1301 1301
1302 PlainTextRange AccessibilityRenderObject::selectedTextRange() const 1302 PlainTextRange AccessibilityRenderObject::selectedTextRange() const
1303 { 1303 {
1304 ASSERT(isTextControl()); 1304 ASSERT(isTextControl());
1305 1305
1306 if (isPasswordField()) 1306 if (isPasswordField())
1307 return PlainTextRange(); 1307 return PlainTextRange();
1308 1308
1309 AccessibilityRole ariaRole = ariaRoleAttribute(); 1309 AccessibilityRole ariaRole = ariaRoleAttribute();
1310 if (isNativeTextControl() && ariaRole == UnknownRole) { 1310 if (isNativeTextControl() && ariaRole == UnknownRole) {
1311 HTMLTextFormControlElement* textControl = toRenderTextControl(m_renderer )->textFormControlElement(); 1311 Handle<HTMLTextFormControlElement> textControl = toRenderTextControl(m_r enderer)->textFormControlElement();
1312 return PlainTextRange(textControl->selectionStart(), textControl->select ionEnd() - textControl->selectionStart()); 1312 return PlainTextRange(textControl->selectionStart(), textControl->select ionEnd() - textControl->selectionStart());
1313 } 1313 }
1314 1314
1315 if (ariaRole == UnknownRole) 1315 if (ariaRole == UnknownRole)
1316 return PlainTextRange(); 1316 return PlainTextRange();
1317 1317
1318 return ariaSelectedTextRange(); 1318 return ariaSelectedTextRange();
1319 } 1319 }
1320 1320
1321 void AccessibilityRenderObject::setSelectedTextRange(const PlainTextRange& range ) 1321 void AccessibilityRenderObject::setSelectedTextRange(const PlainTextRange& range )
1322 { 1322 {
1323 if (isNativeTextControl()) { 1323 if (isNativeTextControl()) {
1324 HTMLTextFormControlElement* textControl = toRenderTextControl(m_renderer )->textFormControlElement(); 1324 Handle<HTMLTextFormControlElement> textControl = toRenderTextControl(m_r enderer)->textFormControlElement();
1325 textControl->setSelectionRange(range.start, range.start + range.length); 1325 textControl->setSelectionRange(range.start, range.start + range.length);
1326 return; 1326 return;
1327 } 1327 }
1328 1328
1329 Document* document = m_renderer->document(); 1329 Document* document = m_renderer->document();
1330 if (!document) 1330 if (!document)
1331 return; 1331 return;
1332 Frame* frame = document->frame(); 1332 Frame* frame = document->frame();
1333 if (!frame) 1333 if (!frame)
1334 return; 1334 return;
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 RefPtr<Range> range = Range::create(m_renderer->document()); 1675 RefPtr<Range> range = Range::create(m_renderer->document());
1676 range->selectNodeContents(node, IGNORE_EXCEPTION); 1676 range->selectNodeContents(node, IGNORE_EXCEPTION);
1677 CharacterIterator it(range.get()); 1677 CharacterIterator it(range.get());
1678 it.advance(index - 1); 1678 it.advance(index - 1);
1679 return VisiblePosition(Position(it.range()->endContainer(), it.range()->endO ffset(), Position::PositionIsOffsetInAnchor), UPSTREAM); 1679 return VisiblePosition(Position(it.range()->endContainer(), it.range()->endO ffset(), Position::PositionIsOffsetInAnchor), UPSTREAM);
1680 } 1680 }
1681 1681
1682 int AccessibilityRenderObject::indexForVisiblePosition(const VisiblePosition& po s) const 1682 int AccessibilityRenderObject::indexForVisiblePosition(const VisiblePosition& po s) const
1683 { 1683 {
1684 if (isNativeTextControl()) { 1684 if (isNativeTextControl()) {
1685 HTMLTextFormControlElement* textControl = toRenderTextControl(m_renderer )->textFormControlElement(); 1685 Handle<HTMLTextFormControlElement> textControl = toRenderTextControl(m_r enderer)->textFormControlElement();
1686 return textControl->indexForVisiblePosition(pos); 1686 return textControl->indexForVisiblePosition(pos);
1687 } 1687 }
1688 1688
1689 if (!isTextControl()) 1689 if (!isTextControl())
1690 return 0; 1690 return 0;
1691 1691
1692 Node* node = m_renderer->node(); 1692 Node* node = m_renderer->node();
1693 if (!node) 1693 if (!node)
1694 return 0; 1694 return 0;
1695 1695
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
2010 HitTestResult hitTestResult = HitTestResult(point); 2010 HitTestResult hitTestResult = HitTestResult(point);
2011 layer->hitTest(request, hitTestResult); 2011 layer->hitTest(request, hitTestResult);
2012 if (!hitTestResult.innerNode()) 2012 if (!hitTestResult.innerNode())
2013 return 0; 2013 return 0;
2014 Node* node = hitTestResult.innerNode()->deprecatedShadowAncestorNode(); 2014 Node* node = hitTestResult.innerNode()->deprecatedShadowAncestorNode();
2015 2015
2016 if (node->hasTagName(areaTag)) 2016 if (node->hasTagName(areaTag))
2017 return accessibilityImageMapHitTest(static_cast<HTMLAreaElement*>(node), point); 2017 return accessibilityImageMapHitTest(static_cast<HTMLAreaElement*>(node), point);
2018 2018
2019 if (node->hasTagName(optionTag)) 2019 if (node->hasTagName(optionTag))
2020 node = static_cast<HTMLOptionElement*>(node)->ownerSelectElement(); 2020 node = Handle<HTMLSelectElement>(static_cast<HTMLOptionElement*>(node)-> ownerSelectElement()).raw();
2021 2021
2022 RenderObject* obj = node->renderer(); 2022 RenderObject* obj = node->renderer();
2023 if (!obj) 2023 if (!obj)
2024 return 0; 2024 return 0;
2025 2025
2026 AccessibilityObject* result = obj->document()->axObjectCache()->getOrCreate( obj); 2026 AccessibilityObject* result = obj->document()->axObjectCache()->getOrCreate( obj);
2027 result->updateChildrenIfNecessary(); 2027 result->updateChildrenIfNecessary();
2028 2028
2029 // Allow the element to perform any hit-testing it might need to do to reach non-render children. 2029 // Allow the element to perform any hit-testing it might need to do to reach non-render children.
2030 result = result->elementAccessibilityHitTest(point); 2030 result = result->elementAccessibilityHitTest(point);
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
2273 return WebAreaRole; 2273 return WebAreaRole;
2274 } 2274 }
2275 2275
2276 if (cssBox && cssBox->isTextField()) 2276 if (cssBox && cssBox->isTextField())
2277 return TextFieldRole; 2277 return TextFieldRole;
2278 2278
2279 if (cssBox && cssBox->isTextArea()) 2279 if (cssBox && cssBox->isTextArea())
2280 return TextAreaRole; 2280 return TextAreaRole;
2281 2281
2282 if (node && node->hasTagName(inputTag)) { 2282 if (node && node->hasTagName(inputTag)) {
2283 HTMLInputElement* input = static_cast<HTMLInputElement*>(node); 2283 Handle<HTMLInputElement> input(static_cast<HTMLInputElement*>(node));
2284 if (input->isCheckbox()) 2284 if (input->isCheckbox())
2285 return CheckBoxRole; 2285 return CheckBoxRole;
2286 if (input->isRadioButton()) 2286 if (input->isRadioButton())
2287 return RadioButtonRole; 2287 return RadioButtonRole;
2288 if (input->isTextButton()) 2288 if (input->isTextButton())
2289 return buttonRoleType(); 2289 return buttonRoleType();
2290 2290
2291 #if ENABLE(INPUT_TYPE_COLOR) 2291 #if ENABLE(INPUT_TYPE_COLOR)
2292 const AtomicString& type = input->getAttribute(typeAttr); 2292 const AtomicString& type = input->getAttribute(typeAttr);
2293 if (equalIgnoringCase(type, "color")) 2293 if (equalIgnoringCase(type, "color"))
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
2552 2552
2553 AccessibilityObject::updateChildrenIfNecessary(); 2553 AccessibilityObject::updateChildrenIfNecessary();
2554 } 2554 }
2555 2555
2556 void AccessibilityRenderObject::addTextFieldChildren() 2556 void AccessibilityRenderObject::addTextFieldChildren()
2557 { 2557 {
2558 Node* node = this->node(); 2558 Node* node = this->node();
2559 if (!node || !node->hasTagName(inputTag)) 2559 if (!node || !node->hasTagName(inputTag))
2560 return; 2560 return;
2561 2561
2562 HTMLInputElement* input = static_cast<HTMLInputElement*>(node); 2562 Handle<HTMLInputElement> input(static_cast<HTMLInputElement*>(node));
2563 HTMLElement* spinButtonElement = input->innerSpinButtonElement(); 2563 HTMLElement* spinButtonElement = input->innerSpinButtonElement();
2564 if (!spinButtonElement || !spinButtonElement->isSpinButtonElement()) 2564 if (!spinButtonElement || !spinButtonElement->isSpinButtonElement())
2565 return; 2565 return;
2566 2566
2567 AccessibilitySpinButton* axSpinButton = static_cast<AccessibilitySpinButton* >(axObjectCache()->getOrCreate(SpinButtonRole)); 2567 AccessibilitySpinButton* axSpinButton = static_cast<AccessibilitySpinButton* >(axObjectCache()->getOrCreate(SpinButtonRole));
2568 axSpinButton->setSpinButtonElement(static_cast<SpinButtonElement*>(spinButto nElement)); 2568 axSpinButton->setSpinButtonElement(static_cast<SpinButtonElement*>(spinButto nElement));
2569 axSpinButton->setParent(this); 2569 axSpinButton->setParent(this);
2570 m_children.append(axSpinButton); 2570 m_children.append(axSpinButton);
2571 } 2571 }
2572 2572
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
3052 3052
3053 RenderBox* box = toRenderBox(m_renderer); 3053 RenderBox* box = toRenderBox(m_renderer);
3054 if (!box->canBeScrolledAndHasScrollableArea()) 3054 if (!box->canBeScrolledAndHasScrollableArea())
3055 return; 3055 return;
3056 3056
3057 RenderLayer* layer = box->layer(); 3057 RenderLayer* layer = box->layer();
3058 layer->scrollToOffset(toIntSize(point), RenderLayer::ScrollOffsetClamped); 3058 layer->scrollToOffset(toIntSize(point), RenderLayer::ScrollOffsetClamped);
3059 } 3059 }
3060 3060
3061 } // namespace WebCore 3061 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/accessibility/AccessibilityNodeObject.cpp ('k') | Source/core/accessibility/AccessibilitySlider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698