LCOV - code coverage report
Current view: top level - accessible/xul - XULTabAccessible.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 83 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 17 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #include "XULTabAccessible.h"
       7             : 
       8             : #include "nsAccUtils.h"
       9             : #include "Relation.h"
      10             : #include "Role.h"
      11             : #include "States.h"
      12             : 
      13             : // NOTE: alphabetically ordered
      14             : #include "nsIDocument.h"
      15             : #include "nsIDOMXULSelectCntrlEl.h"
      16             : #include "nsIDOMXULSelectCntrlItemEl.h"
      17             : #include "nsIDOMXULRelatedElement.h"
      18             : #include "nsXULElement.h"
      19             : 
      20             : #include "mozilla/dom/BindingDeclarations.h"
      21             : 
      22             : using namespace mozilla::a11y;
      23             : 
      24             : ////////////////////////////////////////////////////////////////////////////////
      25             : // XULTabAccessible
      26             : ////////////////////////////////////////////////////////////////////////////////
      27             : 
      28           0 : XULTabAccessible::
      29           0 :   XULTabAccessible(nsIContent* aContent, DocAccessible* aDoc) :
      30           0 :   HyperTextAccessibleWrap(aContent, aDoc)
      31             : {
      32           0 : }
      33             : 
      34             : ////////////////////////////////////////////////////////////////////////////////
      35             : // XULTabAccessible: Accessible
      36             : 
      37             : uint8_t
      38           0 : XULTabAccessible::ActionCount()
      39             : {
      40           0 :   return 1;
      41             : }
      42             : 
      43             : void
      44           0 : XULTabAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
      45             : {
      46           0 :   if (aIndex == eAction_Switch)
      47           0 :     aName.AssignLiteral("switch");
      48           0 : }
      49             : 
      50             : bool
      51           0 : XULTabAccessible::DoAction(uint8_t index)
      52             : {
      53           0 :   if (index == eAction_Switch) {
      54             :     // XXXbz Could this just FromContent?
      55           0 :     RefPtr<nsXULElement> tab = nsXULElement::FromContentOrNull(mContent);
      56           0 :     if (tab) {
      57           0 :       tab->Click(mozilla::dom::CallerType::System);
      58           0 :       return true;
      59             :     }
      60             :   }
      61           0 :   return false;
      62             : }
      63             : 
      64             : ////////////////////////////////////////////////////////////////////////////////
      65             : // XULTabAccessible: Accessible
      66             : 
      67             : role
      68           0 : XULTabAccessible::NativeRole()
      69             : {
      70           0 :   return roles::PAGETAB;
      71             : }
      72             : 
      73             : uint64_t
      74           0 : XULTabAccessible::NativeState()
      75             : {
      76             :   // Possible states: focused, focusable, unavailable(disabled), offscreen.
      77             : 
      78             :   // get focus and disable status from base class
      79           0 :   uint64_t state = AccessibleWrap::NativeState();
      80             : 
      81             :   // Check whether the tab is selected and/or pinned
      82           0 :   nsCOMPtr<nsIDOMXULSelectControlItemElement> tab(do_QueryInterface(mContent));
      83           0 :   if (tab) {
      84           0 :     bool selected = false;
      85           0 :     if (NS_SUCCEEDED(tab->GetSelected(&selected)) && selected)
      86           0 :       state |= states::SELECTED;
      87             : 
      88           0 :     if (mContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::pinned,
      89             :                               nsGkAtoms::_true, eCaseMatters))
      90           0 :       state |= states::PINNED;
      91             : 
      92             :   }
      93             : 
      94           0 :   return state;
      95             : }
      96             : 
      97             : uint64_t
      98           0 : XULTabAccessible::NativeInteractiveState() const
      99             : {
     100           0 :   uint64_t state = Accessible::NativeInteractiveState();
     101           0 :   return (state & states::UNAVAILABLE) ? state : state | states::SELECTABLE;
     102             : }
     103             : 
     104             : Relation
     105           0 : XULTabAccessible::RelationByType(RelationType aType)
     106             : {
     107           0 :   Relation rel = AccessibleWrap::RelationByType(aType);
     108           0 :   if (aType != RelationType::LABEL_FOR)
     109           0 :     return rel;
     110             : 
     111             :   // Expose 'LABEL_FOR' relation on tab accessible for tabpanel accessible.
     112             :   nsCOMPtr<nsIDOMXULRelatedElement> tabsElm =
     113           0 :     do_QueryInterface(mContent->GetParent());
     114           0 :   if (!tabsElm)
     115           0 :     return rel;
     116             : 
     117           0 :   nsCOMPtr<nsIDOMNode> domNode(DOMNode());
     118           0 :   nsCOMPtr<nsIDOMNode> tabpanelNode;
     119           0 :   tabsElm->GetRelatedElement(domNode, getter_AddRefs(tabpanelNode));
     120           0 :   if (!tabpanelNode)
     121           0 :     return rel;
     122             : 
     123           0 :   nsCOMPtr<nsIContent> tabpanelContent(do_QueryInterface(tabpanelNode));
     124           0 :   rel.AppendTarget(mDoc, tabpanelContent);
     125           0 :   return rel;
     126             : }
     127             : 
     128             : 
     129             : ////////////////////////////////////////////////////////////////////////////////
     130             : // XULTabsAccessible
     131             : ////////////////////////////////////////////////////////////////////////////////
     132             : 
     133           0 : XULTabsAccessible::
     134           0 :   XULTabsAccessible(nsIContent* aContent, DocAccessible* aDoc) :
     135           0 :   XULSelectControlAccessible(aContent, aDoc)
     136             : {
     137           0 : }
     138             : 
     139             : role
     140           0 : XULTabsAccessible::NativeRole()
     141             : {
     142           0 :   return roles::PAGETABLIST;
     143             : }
     144             : 
     145             : uint8_t
     146           0 : XULTabsAccessible::ActionCount()
     147             : {
     148           0 :   return 0;
     149             : }
     150             : 
     151             : void
     152           0 : XULTabsAccessible::Value(nsString& aValue)
     153             : {
     154           0 :   aValue.Truncate();
     155           0 : }
     156             : 
     157             : ENameValueFlag
     158           0 : XULTabsAccessible::NativeName(nsString& aName)
     159             : {
     160             :   // no name
     161           0 :   return eNameOK;
     162             : }
     163             : 
     164             : 
     165             : ////////////////////////////////////////////////////////////////////////////////
     166             : // XULTabpanelsAccessible
     167             : ////////////////////////////////////////////////////////////////////////////////
     168             : 
     169             : role
     170           0 : XULTabpanelsAccessible::NativeRole()
     171             : {
     172           0 :   return roles::PANE;
     173             : }
     174             : 
     175             : ////////////////////////////////////////////////////////////////////////////////
     176             : // XULTabpanelAccessible
     177             : ////////////////////////////////////////////////////////////////////////////////
     178             : 
     179           0 : XULTabpanelAccessible::
     180           0 :   XULTabpanelAccessible(nsIContent* aContent, DocAccessible* aDoc) :
     181           0 :   AccessibleWrap(aContent, aDoc)
     182             : {
     183           0 : }
     184             : 
     185             : role
     186           0 : XULTabpanelAccessible::NativeRole()
     187             : {
     188           0 :   return roles::PROPERTYPAGE;
     189             : }
     190             : 
     191             : Relation
     192           0 : XULTabpanelAccessible::RelationByType(RelationType aType)
     193             : {
     194           0 :   Relation rel = AccessibleWrap::RelationByType(aType);
     195           0 :   if (aType != RelationType::LABELLED_BY)
     196           0 :     return rel;
     197             : 
     198             :   // Expose 'LABELLED_BY' relation on tabpanel accessible for tab accessible.
     199             :   nsCOMPtr<nsIDOMXULRelatedElement> tabpanelsElm =
     200           0 :     do_QueryInterface(mContent->GetParent());
     201           0 :   if (!tabpanelsElm)
     202           0 :     return rel;
     203             : 
     204           0 :   nsCOMPtr<nsIDOMNode> domNode(DOMNode());
     205           0 :   nsCOMPtr<nsIDOMNode> tabNode;
     206           0 :   tabpanelsElm->GetRelatedElement(domNode, getter_AddRefs(tabNode));
     207           0 :   if (!tabNode)
     208           0 :     return rel;
     209             : 
     210           0 :   nsCOMPtr<nsIContent> tabContent(do_QueryInterface(tabNode));
     211           0 :   rel.AppendTarget(mDoc, tabContent);
     212           0 :   return rel;
     213             : }

Generated by: LCOV version 1.13