diff -r 000000000000 -r 6474c204b198 accessible/src/html/HTMLElementAccessibles.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accessible/src/html/HTMLElementAccessibles.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,117 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "HTMLElementAccessibles.h" + +#include "DocAccessible.h" +#include "nsAccUtils.h" +#include "nsIAccessibleRelation.h" +#include "nsIPersistentProperties2.h" +#include "nsTextEquivUtils.h" +#include "Relation.h" +#include "Role.h" +#include "States.h" + +#include "mozilla/dom/HTMLLabelElement.h" + +using namespace mozilla::a11y; + +//////////////////////////////////////////////////////////////////////////////// +// HTMLHRAccessible +//////////////////////////////////////////////////////////////////////////////// + +role +HTMLHRAccessible::NativeRole() +{ + return roles::SEPARATOR; +} + +//////////////////////////////////////////////////////////////////////////////// +// HTMLBRAccessible +//////////////////////////////////////////////////////////////////////////////// + +role +HTMLBRAccessible::NativeRole() +{ + return roles::WHITESPACE; +} + +uint64_t +HTMLBRAccessible::NativeState() +{ + return states::READONLY; +} + +ENameValueFlag +HTMLBRAccessible::NativeName(nsString& aName) +{ + aName = static_cast('\n'); // Newline char + return eNameOK; +} + +//////////////////////////////////////////////////////////////////////////////// +// HTMLLabelAccessible +//////////////////////////////////////////////////////////////////////////////// + +NS_IMPL_ISUPPORTS_INHERITED0(HTMLLabelAccessible, HyperTextAccessible) + +ENameValueFlag +HTMLLabelAccessible::NativeName(nsString& aName) +{ + nsTextEquivUtils::GetNameFromSubtree(this, aName); + return aName.IsEmpty() ? eNameOK : eNameFromSubtree; +} + +Relation +HTMLLabelAccessible::RelationByType(RelationType aType) +{ + Relation rel = AccessibleWrap::RelationByType(aType); + if (aType == RelationType::LABEL_FOR) { + nsRefPtr label = dom::HTMLLabelElement::FromContent(mContent); + rel.AppendTarget(mDoc, label->GetControl()); + } + + return rel; +} + +role +HTMLLabelAccessible::NativeRole() +{ + return roles::LABEL; +} + +//////////////////////////////////////////////////////////////////////////////// +// nsHTMLOuputAccessible +//////////////////////////////////////////////////////////////////////////////// + +NS_IMPL_ISUPPORTS_INHERITED0(HTMLOutputAccessible, HyperTextAccessible) + +Relation +HTMLOutputAccessible::RelationByType(RelationType aType) +{ + Relation rel = AccessibleWrap::RelationByType(aType); + if (aType == RelationType::CONTROLLED_BY) + rel.AppendIter(new IDRefsIterator(mDoc, mContent, nsGkAtoms::_for)); + + return rel; +} + +role +HTMLOutputAccessible::NativeRole() +{ + return roles::SECTION; +} + +already_AddRefed +HTMLOutputAccessible::NativeAttributes() +{ + nsCOMPtr attributes = + AccessibleWrap::NativeAttributes(); + nsAccUtils::SetAccAttr(attributes, nsGkAtoms::live, + NS_LITERAL_STRING("polite")); + + return attributes.forget(); +} +