mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
04083ef9b4
- Bug 1235261 - Part 1: Rename nsAutoTArray to AutoTArray. r=froydnj (0662c2ac56)
- Bug 1235261 - Part 2: Switch some uses of AutoFallibleTArray to AutoTArray. r=froydnj (ab52085f2a)
- Bug 1235261 - Part 3: Switch remaining uses of AutoFallibleTArray to AutoTArray. r=froydnj (3763b16ddd)
- Bug 1235261 - Part 4: Remove AutoFallibleTArray. r=froydnj (5480b0d786)
- Bug 1235261 - Part 5: Merge nsAutoArrayBase into AutoTArray. r=froydnj (6c64e73e3b)
- Bug 1235261 - Part 7: Remove AutoInfallibleTArray. r=froydnj (acf266464e)
- Bug 1222624: Make xpath document() function use nsIPrincipals and nsIURIs rather than strings. r=peterv (5ee694d132)
- Bug 1235261 - Part 6: Rename AutoInfallibleTArray to AutoTArray. r=froydnj (d282f7df6c)
- Bug 1241394 - Hit testing with 3d transforms should use fuzzy when comparing depths. r=thinker (6c3f50670f)
- Bug 1241394 - Follow up to fix windows build bustage. (02ab2600af)
- Bug 1241394 - Check clip for the children of the establisher. r=mattwoodrow (46f151ea55)
- bug 1241453 - allow caching proxies in xpcAccessibleDocuments r=davidb (f5d41ad2ee)
- Bug 1247364 - use AllChildrenIterator::Seek by a11y tree walker, r=davidb (0ec230908e)
- Bug 1248840 - rename TreeWalker::NextChild, r=yzen (c89ecc5a29)
- Bug 1249927 - devirtualize CanHavaAnonymousChildren, r=davdib (89e8088e63)
- Bug 1206598 - Use universal reference to reduce the redundant copy. r=nfroyd (bae4ad6dd1)
- Bug 1247364 - add AllChildrenIterator::Seek, r=bz (215abebf12)
- bug 1241453 - allow storing proxies in xpcAccessibleGeneric::mIntl r=davidb (dd5e6c896b)
- bug 1241453 - allow constructing xpcAccessibles with proxies r=davidb (d0258122be)
- bug 1241453 - fixup xpcAccessible Intl() methods to not assume mIntl is always an Accessible r=davidb (168f71fdf5)
- bug 1241453 - allow xpcAccessibleDocument::mCache to use proxies as keys r=davidb (85b7eec81c)
- bug 1241453 - assert accessibles are only added to non remote xpcAccessibleDocuments r=davidb (7731b21d17)
- bug 1243077 - add ToXPC{,Document} overloads for proxied accessibles r=davidb (7bc085f1b5)
- bug 1243077 - add AccessibleOrProxy xpcAccessible::IntlGeneric() r=davidb (006a635992)
- Bug 1245464 - initialize with 0 mSupportedIfaces in xpcAccessibleGeneric in order to avoid corrupted result after bit-wise operation. r=surkov (ae41bafcef)
- bug 1241453 - allow caching xpc documents for remote documents r=davidb (a357630690)
- bug 1241453 - factor dispatching nsIAccessibleEvents out of HandleAccEvent() r=davidb (091073d981)
- Bug 1249183 - Suppress GC harder, r=terrence (2185ccb4dd)
- Bug 1248420 - Handle JSObject::getGroup OOM in js::ArraySetLength. r=jandem (04b67c8d31)
- Bug 1242270 - Add SPS pseudo frames for the Array.prototype methods; r=shu (f5e5871439)
- Bug 1247701 - Bail from ArrayShiftDenseKernel if the array is used by for-in iteration. r=jandem (41eff38954)
- Bug 1247701 followup - Change ArrayShiftDenseKernel to receive handle. r=bz (b29ce0c555)
573 lines
15 KiB
C++
573 lines
15 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=2 et sw=2 tw=80: */
|
|
/* 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 "xpcAccessibleHyperText.h"
|
|
|
|
#include "Accessible-inl.h"
|
|
#include "HyperTextAccessible-inl.h"
|
|
#include "TextRange.h"
|
|
#include "xpcAccessibleDocument.h"
|
|
#include "xpcAccessibleTextRange.h"
|
|
|
|
#include "nsIPersistentProperties2.h"
|
|
#include "nsIMutableArray.h"
|
|
|
|
using namespace mozilla::a11y;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// nsISupports
|
|
|
|
NS_INTERFACE_MAP_BEGIN(xpcAccessibleHyperText)
|
|
NS_INTERFACE_MAP_ENTRY_CONDITIONAL(nsIAccessibleText,
|
|
mSupportedIfaces & eText)
|
|
NS_INTERFACE_MAP_ENTRY_CONDITIONAL(nsIAccessibleEditableText,
|
|
mSupportedIfaces & eText)
|
|
NS_INTERFACE_MAP_ENTRY_CONDITIONAL(nsIAccessibleHyperText,
|
|
mSupportedIfaces & eText)
|
|
NS_INTERFACE_MAP_END_INHERITING(xpcAccessibleGeneric)
|
|
|
|
NS_IMPL_ADDREF_INHERITED(xpcAccessibleHyperText, xpcAccessibleGeneric)
|
|
NS_IMPL_RELEASE_INHERITED(xpcAccessibleHyperText, xpcAccessibleGeneric)
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// nsIAccessibleText
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetCharacterCount(int32_t* aCharacterCount)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aCharacterCount);
|
|
*aCharacterCount = 0;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
*aCharacterCount = Intl()->CharacterCount();
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetText(int32_t aStartOffset, int32_t aEndOffset,
|
|
nsAString& aText)
|
|
{
|
|
aText.Truncate();
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->TextSubstring(aStartOffset, aEndOffset, aText);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetTextBeforeOffset(int32_t aOffset,
|
|
AccessibleTextBoundary aBoundaryType,
|
|
int32_t* aStartOffset,
|
|
int32_t* aEndOffset,
|
|
nsAString& aText)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aStartOffset);
|
|
NS_ENSURE_ARG_POINTER(aEndOffset);
|
|
*aStartOffset = *aEndOffset = 0;
|
|
aText.Truncate();
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->TextBeforeOffset(aOffset, aBoundaryType, aStartOffset, aEndOffset, aText);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetTextAtOffset(int32_t aOffset,
|
|
AccessibleTextBoundary aBoundaryType,
|
|
int32_t* aStartOffset,
|
|
int32_t* aEndOffset, nsAString& aText)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aStartOffset);
|
|
NS_ENSURE_ARG_POINTER(aEndOffset);
|
|
*aStartOffset = *aEndOffset = 0;
|
|
aText.Truncate();
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->TextAtOffset(aOffset, aBoundaryType, aStartOffset, aEndOffset, aText);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetTextAfterOffset(int32_t aOffset,
|
|
AccessibleTextBoundary aBoundaryType,
|
|
int32_t* aStartOffset,
|
|
int32_t* aEndOffset, nsAString& aText)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aStartOffset);
|
|
NS_ENSURE_ARG_POINTER(aEndOffset);
|
|
*aStartOffset = *aEndOffset = 0;
|
|
aText.Truncate();
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->TextAfterOffset(aOffset, aBoundaryType, aStartOffset, aEndOffset, aText);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetCharacterAtOffset(int32_t aOffset,
|
|
char16_t* aCharacter)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aCharacter);
|
|
*aCharacter = L'\0';
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
*aCharacter = Intl()->CharAt(aOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetTextAttributes(bool aIncludeDefAttrs,
|
|
int32_t aOffset,
|
|
int32_t* aStartOffset,
|
|
int32_t* aEndOffset,
|
|
nsIPersistentProperties** aAttributes)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aStartOffset);
|
|
NS_ENSURE_ARG_POINTER(aEndOffset);
|
|
NS_ENSURE_ARG_POINTER(aAttributes);
|
|
*aStartOffset = *aEndOffset = 0;
|
|
*aAttributes = nullptr;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsCOMPtr<nsIPersistentProperties> attrs =
|
|
Intl()->TextAttributes(aIncludeDefAttrs, aOffset, aStartOffset, aEndOffset);
|
|
attrs.swap(*aAttributes);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetDefaultTextAttributes(nsIPersistentProperties** aAttributes)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aAttributes);
|
|
*aAttributes = nullptr;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsCOMPtr<nsIPersistentProperties> attrs = Intl()->DefaultTextAttributes();
|
|
attrs.swap(*aAttributes);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetCharacterExtents(int32_t aOffset,
|
|
int32_t* aX, int32_t* aY,
|
|
int32_t* aWidth, int32_t* aHeight,
|
|
uint32_t aCoordType)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aX);
|
|
NS_ENSURE_ARG_POINTER(aY);
|
|
NS_ENSURE_ARG_POINTER(aWidth);
|
|
NS_ENSURE_ARG_POINTER(aHeight);
|
|
*aX = *aY = *aWidth = *aHeight;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsIntRect rect = Intl()->CharBounds(aOffset, aCoordType);
|
|
*aX = rect.x; *aY = rect.y;
|
|
*aWidth = rect.width; *aHeight = rect.height;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetRangeExtents(int32_t aStartOffset, int32_t aEndOffset,
|
|
int32_t* aX, int32_t* aY,
|
|
int32_t* aWidth, int32_t* aHeight,
|
|
uint32_t aCoordType)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aX);
|
|
NS_ENSURE_ARG_POINTER(aY);
|
|
NS_ENSURE_ARG_POINTER(aWidth);
|
|
NS_ENSURE_ARG_POINTER(aHeight);
|
|
*aX = *aY = *aWidth = *aHeight = 0;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsIntRect rect = Intl()->TextBounds(aStartOffset, aEndOffset, aCoordType);
|
|
*aX = rect.x; *aY = rect.y;
|
|
*aWidth = rect.width; *aHeight = rect.height;
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetOffsetAtPoint(int32_t aX, int32_t aY,
|
|
uint32_t aCoordType, int32_t* aOffset)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aOffset);
|
|
*aOffset = -1;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
*aOffset = Intl()->OffsetAtPoint(aX, aY, aCoordType);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetCaretOffset(int32_t* aCaretOffset)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aCaretOffset);
|
|
*aCaretOffset = -1;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
*aCaretOffset = Intl()->CaretOffset();
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::SetCaretOffset(int32_t aCaretOffset)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->SetCaretOffset(aCaretOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetSelectionCount(int32_t* aSelectionCount)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aSelectionCount);
|
|
*aSelectionCount = 0;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
*aSelectionCount = Intl()->SelectionCount();
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetSelectionBounds(int32_t aSelectionNum,
|
|
int32_t* aStartOffset,
|
|
int32_t* aEndOffset)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aStartOffset);
|
|
NS_ENSURE_ARG_POINTER(aEndOffset);
|
|
*aStartOffset = *aEndOffset = 0;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
if (aSelectionNum < 0 || aSelectionNum >= Intl()->SelectionCount())
|
|
return NS_ERROR_INVALID_ARG;
|
|
|
|
Intl()->SelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::SetSelectionBounds(int32_t aSelectionNum,
|
|
int32_t aStartOffset,
|
|
int32_t aEndOffset)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
if (aSelectionNum < 0 ||
|
|
!Intl()->SetSelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset))
|
|
return NS_ERROR_INVALID_ARG;
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::AddSelection(int32_t aStartOffset, int32_t aEndOffset)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->AddToSelection(aStartOffset, aEndOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::RemoveSelection(int32_t aSelectionNum)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->RemoveFromSelection(aSelectionNum);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::ScrollSubstringTo(int32_t aStartOffset,
|
|
int32_t aEndOffset,
|
|
uint32_t aScrollType)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->ScrollSubstringTo(aStartOffset, aEndOffset, aScrollType);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::ScrollSubstringToPoint(int32_t aStartOffset,
|
|
int32_t aEndOffset,
|
|
uint32_t aCoordinateType,
|
|
int32_t aX, int32_t aY)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->ScrollSubstringToPoint(aStartOffset, aEndOffset, aCoordinateType, aX, aY);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetEnclosingRange(nsIAccessibleTextRange** aRange)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aRange);
|
|
*aRange = nullptr;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
RefPtr<xpcAccessibleTextRange> range = new xpcAccessibleTextRange;
|
|
Intl()->EnclosingRange(range->mRange);
|
|
NS_ASSERTION(range->mRange.IsValid(),
|
|
"Should always have an enclosing range!");
|
|
|
|
range.forget(aRange);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetSelectionRanges(nsIArray** aRanges)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aRanges);
|
|
*aRanges = nullptr;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsresult rv = NS_OK;
|
|
nsCOMPtr<nsIMutableArray> xpcRanges =
|
|
do_CreateInstance(NS_ARRAY_CONTRACTID, &rv);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
AutoTArray<TextRange, 1> ranges;
|
|
Intl()->SelectionRanges(&ranges);
|
|
uint32_t len = ranges.Length();
|
|
for (uint32_t idx = 0; idx < len; idx++)
|
|
xpcRanges->AppendElement(new xpcAccessibleTextRange(Move(ranges[idx])),
|
|
false);
|
|
|
|
xpcRanges.forget(aRanges);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetVisibleRanges(nsIArray** aRanges)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aRanges);
|
|
*aRanges = nullptr;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsresult rv = NS_OK;
|
|
nsCOMPtr<nsIMutableArray> xpcRanges =
|
|
do_CreateInstance(NS_ARRAY_CONTRACTID, &rv);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
nsTArray<TextRange> ranges;
|
|
Intl()->VisibleRanges(&ranges);
|
|
uint32_t len = ranges.Length();
|
|
for (uint32_t idx = 0; idx < len; idx++)
|
|
xpcRanges->AppendElement(new xpcAccessibleTextRange(Move(ranges[idx])),
|
|
false);
|
|
|
|
xpcRanges.forget(aRanges);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetRangeByChild(nsIAccessible* aChild,
|
|
nsIAccessibleTextRange** aRange)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aRange);
|
|
*aRange = nullptr;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Accessible* child = aChild->ToInternalAccessible();
|
|
if (child) {
|
|
RefPtr<xpcAccessibleTextRange> range = new xpcAccessibleTextRange;
|
|
Intl()->RangeByChild(child, range->mRange);
|
|
if (range->mRange.IsValid())
|
|
range.forget(aRange);
|
|
}
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetRangeAtPoint(int32_t aX, int32_t aY,
|
|
nsIAccessibleTextRange** aRange)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aRange);
|
|
*aRange = nullptr;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
RefPtr<xpcAccessibleTextRange> range = new xpcAccessibleTextRange;
|
|
Intl()->RangeAtPoint(aX, aY, range->mRange);
|
|
if (range->mRange.IsValid())
|
|
range.forget(aRange);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// nsIAccessibleEditableText
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::SetTextContents(const nsAString& aText)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->ReplaceText(aText);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::InsertText(const nsAString& aText, int32_t aOffset)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->InsertText(aText, aOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::CopyText(int32_t aStartOffset, int32_t aEndOffset)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->CopyText(aStartOffset, aEndOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::CutText(int32_t aStartOffset, int32_t aEndOffset)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->CutText(aStartOffset, aEndOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::DeleteText(int32_t aStartOffset, int32_t aEndOffset)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->DeleteText(aStartOffset, aEndOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::PasteText(int32_t aOffset)
|
|
{
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Intl()->PasteText(aOffset);
|
|
return NS_OK;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// nsIAccessibleHyperText
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetLinkCount(int32_t* aLinkCount)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aLinkCount);
|
|
*aLinkCount = 0;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
*aLinkCount = Intl()->LinkCount();
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetLinkAt(int32_t aIndex, nsIAccessibleHyperLink** aLink)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aLink);
|
|
*aLink = nullptr;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
NS_IF_ADDREF(*aLink = ToXPC(Intl()->LinkAt(aIndex)));
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetLinkIndex(nsIAccessibleHyperLink* aLink,
|
|
int32_t* aIndex)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aLink);
|
|
NS_ENSURE_ARG_POINTER(aIndex);
|
|
*aIndex = -1;
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsCOMPtr<nsIAccessible> xpcLink(do_QueryInterface(aLink));
|
|
Accessible* link = xpcLink->ToInternalAccessible();
|
|
if (link)
|
|
*aIndex = Intl()->LinkIndexOf(link);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
xpcAccessibleHyperText::GetLinkIndexAtOffset(int32_t aOffset,
|
|
int32_t* aLinkIndex)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aLinkIndex);
|
|
*aLinkIndex = -1; // API says this magic value means 'not found'
|
|
|
|
if (!Intl())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
*aLinkIndex = Intl()->LinkIndexAtOffset(aOffset);
|
|
return NS_OK;
|
|
}
|