accessible/src/xpcom/xpcAccessibleHyperText.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
michael@0 2 /* vim: set ts=2 et sw=2 tw=80: */
michael@0 3 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
michael@0 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 6
michael@0 7 #include "xpcAccessibleHyperText.h"
michael@0 8
michael@0 9 #include "HyperTextAccessible-inl.h"
michael@0 10 #include "TextRange.h"
michael@0 11 #include "xpcAccessibleTextRange.h"
michael@0 12
michael@0 13 #include "nsIPersistentProperties2.h"
michael@0 14 #include "nsIMutableArray.h"
michael@0 15
michael@0 16 using namespace mozilla::a11y;
michael@0 17
michael@0 18 ////////////////////////////////////////////////////////////////////////////////
michael@0 19 // nsISupports
michael@0 20
michael@0 21 nsresult
michael@0 22 xpcAccessibleHyperText::QueryInterface(REFNSIID aIID, void** aInstancePtr)
michael@0 23 {
michael@0 24 *aInstancePtr = nullptr;
michael@0 25
michael@0 26 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 27 if (!text->IsTextRole())
michael@0 28 return NS_ERROR_NO_INTERFACE;
michael@0 29
michael@0 30 if (aIID.Equals(NS_GET_IID(nsIAccessibleText)))
michael@0 31 *aInstancePtr = static_cast<nsIAccessibleText*>(text);
michael@0 32 else if (aIID.Equals(NS_GET_IID(nsIAccessibleEditableText)))
michael@0 33 *aInstancePtr = static_cast<nsIAccessibleEditableText*>(text);
michael@0 34 else if (aIID.Equals(NS_GET_IID(nsIAccessibleHyperText)))
michael@0 35 *aInstancePtr = static_cast<nsIAccessibleHyperText*>(text);
michael@0 36 else
michael@0 37 return NS_ERROR_NO_INTERFACE;
michael@0 38
michael@0 39 NS_ADDREF(text);
michael@0 40 return NS_OK;
michael@0 41 }
michael@0 42
michael@0 43 ////////////////////////////////////////////////////////////////////////////////
michael@0 44 // nsIAccessibleText
michael@0 45
michael@0 46 NS_IMETHODIMP
michael@0 47 xpcAccessibleHyperText::GetCharacterCount(int32_t* aCharacterCount)
michael@0 48 {
michael@0 49 NS_ENSURE_ARG_POINTER(aCharacterCount);
michael@0 50 *aCharacterCount = 0;
michael@0 51
michael@0 52 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 53 if (text->IsDefunct())
michael@0 54 return NS_ERROR_FAILURE;
michael@0 55
michael@0 56 *aCharacterCount = text->CharacterCount();
michael@0 57 return NS_OK;
michael@0 58 }
michael@0 59
michael@0 60 NS_IMETHODIMP
michael@0 61 xpcAccessibleHyperText::GetText(int32_t aStartOffset, int32_t aEndOffset,
michael@0 62 nsAString& aText)
michael@0 63 {
michael@0 64 aText.Truncate();
michael@0 65
michael@0 66 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 67 if (text->IsDefunct())
michael@0 68 return NS_ERROR_FAILURE;
michael@0 69
michael@0 70 text->TextSubstring(aStartOffset, aEndOffset, aText);
michael@0 71 return NS_OK;
michael@0 72 }
michael@0 73
michael@0 74 NS_IMETHODIMP
michael@0 75 xpcAccessibleHyperText::GetTextBeforeOffset(int32_t aOffset,
michael@0 76 AccessibleTextBoundary aBoundaryType,
michael@0 77 int32_t* aStartOffset,
michael@0 78 int32_t* aEndOffset,
michael@0 79 nsAString& aText)
michael@0 80 {
michael@0 81 NS_ENSURE_ARG_POINTER(aStartOffset);
michael@0 82 NS_ENSURE_ARG_POINTER(aEndOffset);
michael@0 83 *aStartOffset = *aEndOffset = 0;
michael@0 84 aText.Truncate();
michael@0 85
michael@0 86 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 87 if (text->IsDefunct())
michael@0 88 return NS_ERROR_FAILURE;
michael@0 89
michael@0 90 text->TextBeforeOffset(aOffset, aBoundaryType, aStartOffset, aEndOffset, aText);
michael@0 91 return NS_OK;
michael@0 92 }
michael@0 93
michael@0 94 NS_IMETHODIMP
michael@0 95 xpcAccessibleHyperText::GetTextAtOffset(int32_t aOffset,
michael@0 96 AccessibleTextBoundary aBoundaryType,
michael@0 97 int32_t* aStartOffset,
michael@0 98 int32_t* aEndOffset, nsAString& aText)
michael@0 99 {
michael@0 100 NS_ENSURE_ARG_POINTER(aStartOffset);
michael@0 101 NS_ENSURE_ARG_POINTER(aEndOffset);
michael@0 102 *aStartOffset = *aEndOffset = 0;
michael@0 103 aText.Truncate();
michael@0 104
michael@0 105 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 106 if (text->IsDefunct())
michael@0 107 return NS_ERROR_FAILURE;
michael@0 108
michael@0 109 text->TextAtOffset(aOffset, aBoundaryType, aStartOffset, aEndOffset, aText);
michael@0 110 return NS_OK;
michael@0 111 }
michael@0 112
michael@0 113 NS_IMETHODIMP
michael@0 114 xpcAccessibleHyperText::GetTextAfterOffset(int32_t aOffset,
michael@0 115 AccessibleTextBoundary aBoundaryType,
michael@0 116 int32_t* aStartOffset,
michael@0 117 int32_t* aEndOffset, nsAString& aText)
michael@0 118 {
michael@0 119 NS_ENSURE_ARG_POINTER(aStartOffset);
michael@0 120 NS_ENSURE_ARG_POINTER(aEndOffset);
michael@0 121 *aStartOffset = *aEndOffset = 0;
michael@0 122 aText.Truncate();
michael@0 123
michael@0 124 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 125 if (text->IsDefunct())
michael@0 126 return NS_ERROR_FAILURE;
michael@0 127
michael@0 128 text->TextAfterOffset(aOffset, aBoundaryType, aStartOffset, aEndOffset, aText);
michael@0 129 return NS_OK;
michael@0 130 }
michael@0 131
michael@0 132 NS_IMETHODIMP
michael@0 133 xpcAccessibleHyperText::GetCharacterAtOffset(int32_t aOffset,
michael@0 134 char16_t* aCharacter)
michael@0 135 {
michael@0 136 NS_ENSURE_ARG_POINTER(aCharacter);
michael@0 137 *aCharacter = L'\0';
michael@0 138
michael@0 139 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 140 if (text->IsDefunct())
michael@0 141 return NS_ERROR_FAILURE;
michael@0 142
michael@0 143 *aCharacter = text->CharAt(aOffset);
michael@0 144 return NS_OK;
michael@0 145 }
michael@0 146
michael@0 147 NS_IMETHODIMP
michael@0 148 xpcAccessibleHyperText::GetTextAttributes(bool aIncludeDefAttrs,
michael@0 149 int32_t aOffset,
michael@0 150 int32_t* aStartOffset,
michael@0 151 int32_t* aEndOffset,
michael@0 152 nsIPersistentProperties** aAttributes)
michael@0 153 {
michael@0 154 NS_ENSURE_ARG_POINTER(aStartOffset);
michael@0 155 NS_ENSURE_ARG_POINTER(aEndOffset);
michael@0 156 NS_ENSURE_ARG_POINTER(aAttributes);
michael@0 157 *aStartOffset = *aEndOffset = 0;
michael@0 158 *aAttributes = nullptr;
michael@0 159
michael@0 160 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 161 if (text->IsDefunct())
michael@0 162 return NS_ERROR_FAILURE;
michael@0 163
michael@0 164 nsCOMPtr<nsIPersistentProperties> attrs =
michael@0 165 text->TextAttributes(aIncludeDefAttrs, aOffset, aStartOffset, aEndOffset);
michael@0 166 attrs.swap(*aAttributes);
michael@0 167
michael@0 168 return NS_OK;
michael@0 169 }
michael@0 170
michael@0 171 NS_IMETHODIMP
michael@0 172 xpcAccessibleHyperText::GetDefaultTextAttributes(nsIPersistentProperties** aAttributes)
michael@0 173 {
michael@0 174 NS_ENSURE_ARG_POINTER(aAttributes);
michael@0 175 *aAttributes = nullptr;
michael@0 176
michael@0 177 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 178 if (text->IsDefunct())
michael@0 179 return NS_ERROR_FAILURE;
michael@0 180
michael@0 181 nsCOMPtr<nsIPersistentProperties> attrs = text->DefaultTextAttributes();
michael@0 182 attrs.swap(*aAttributes);
michael@0 183 return NS_OK;
michael@0 184 }
michael@0 185
michael@0 186 NS_IMETHODIMP
michael@0 187 xpcAccessibleHyperText::GetCharacterExtents(int32_t aOffset,
michael@0 188 int32_t* aX, int32_t* aY,
michael@0 189 int32_t* aWidth, int32_t* aHeight,
michael@0 190 uint32_t aCoordType)
michael@0 191 {
michael@0 192 NS_ENSURE_ARG_POINTER(aX);
michael@0 193 NS_ENSURE_ARG_POINTER(aY);
michael@0 194 NS_ENSURE_ARG_POINTER(aWidth);
michael@0 195 NS_ENSURE_ARG_POINTER(aHeight);
michael@0 196 *aX = *aY = *aWidth = *aHeight;
michael@0 197
michael@0 198 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 199 if (text->IsDefunct())
michael@0 200 return NS_ERROR_FAILURE;
michael@0 201
michael@0 202 nsIntRect rect = text->CharBounds(aOffset, aCoordType);
michael@0 203 *aX = rect.x; *aY = rect.y;
michael@0 204 *aWidth = rect.width; *aHeight = rect.height;
michael@0 205 return NS_OK;
michael@0 206 }
michael@0 207
michael@0 208 NS_IMETHODIMP
michael@0 209 xpcAccessibleHyperText::GetRangeExtents(int32_t aStartOffset, int32_t aEndOffset,
michael@0 210 int32_t* aX, int32_t* aY,
michael@0 211 int32_t* aWidth, int32_t* aHeight,
michael@0 212 uint32_t aCoordType)
michael@0 213 {
michael@0 214 NS_ENSURE_ARG_POINTER(aX);
michael@0 215 NS_ENSURE_ARG_POINTER(aY);
michael@0 216 NS_ENSURE_ARG_POINTER(aWidth);
michael@0 217 NS_ENSURE_ARG_POINTER(aHeight);
michael@0 218 *aX = *aY = *aWidth = *aHeight = 0;
michael@0 219
michael@0 220 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 221 if (text->IsDefunct())
michael@0 222 return NS_ERROR_FAILURE;
michael@0 223
michael@0 224 nsIntRect rect = text->TextBounds(aStartOffset, aEndOffset, aCoordType);
michael@0 225 *aX = rect.x; *aY = rect.y;
michael@0 226 *aWidth = rect.width; *aHeight = rect.height;
michael@0 227 return NS_OK;
michael@0 228 }
michael@0 229
michael@0 230 NS_IMETHODIMP
michael@0 231 xpcAccessibleHyperText::GetOffsetAtPoint(int32_t aX, int32_t aY,
michael@0 232 uint32_t aCoordType, int32_t* aOffset)
michael@0 233 {
michael@0 234 NS_ENSURE_ARG_POINTER(aOffset);
michael@0 235 *aOffset = -1;
michael@0 236
michael@0 237 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 238 if (text->IsDefunct())
michael@0 239 return NS_ERROR_FAILURE;
michael@0 240
michael@0 241 *aOffset = text->OffsetAtPoint(aX, aY, aCoordType);
michael@0 242 return NS_OK;
michael@0 243 }
michael@0 244
michael@0 245 NS_IMETHODIMP
michael@0 246 xpcAccessibleHyperText::GetScriptableCaretOffset(int32_t* aCaretOffset)
michael@0 247 {
michael@0 248 NS_ENSURE_ARG_POINTER(aCaretOffset);
michael@0 249 *aCaretOffset = -1;
michael@0 250
michael@0 251 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 252 if (text->IsDefunct())
michael@0 253 return NS_ERROR_FAILURE;
michael@0 254
michael@0 255 *aCaretOffset = text->CaretOffset();
michael@0 256 return NS_OK;
michael@0 257 }
michael@0 258
michael@0 259 NS_IMETHODIMP
michael@0 260 xpcAccessibleHyperText::SetScriptableCaretOffset(int32_t aCaretOffset)
michael@0 261 {
michael@0 262 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 263 if (text->IsDefunct())
michael@0 264 return NS_ERROR_FAILURE;
michael@0 265
michael@0 266 text->SetCaretOffset(aCaretOffset);
michael@0 267 return NS_OK;
michael@0 268 }
michael@0 269
michael@0 270 NS_IMETHODIMP
michael@0 271 xpcAccessibleHyperText::GetSelectionCount(int32_t* aSelectionCount)
michael@0 272 {
michael@0 273 NS_ENSURE_ARG_POINTER(aSelectionCount);
michael@0 274 *aSelectionCount = 0;
michael@0 275
michael@0 276 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 277 if (text->IsDefunct())
michael@0 278 return NS_ERROR_FAILURE;
michael@0 279
michael@0 280 *aSelectionCount = text->SelectionCount();
michael@0 281 return NS_OK;
michael@0 282 }
michael@0 283
michael@0 284 NS_IMETHODIMP
michael@0 285 xpcAccessibleHyperText::GetSelectionBounds(int32_t aSelectionNum,
michael@0 286 int32_t* aStartOffset,
michael@0 287 int32_t* aEndOffset)
michael@0 288 {
michael@0 289 NS_ENSURE_ARG_POINTER(aStartOffset);
michael@0 290 NS_ENSURE_ARG_POINTER(aEndOffset);
michael@0 291 *aStartOffset = *aEndOffset = 0;
michael@0 292
michael@0 293 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 294 if (text->IsDefunct())
michael@0 295 return NS_ERROR_FAILURE;
michael@0 296
michael@0 297 if (aSelectionNum < 0 || aSelectionNum >= text->SelectionCount())
michael@0 298 return NS_ERROR_INVALID_ARG;
michael@0 299
michael@0 300 text->SelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset);
michael@0 301 return NS_OK;
michael@0 302 }
michael@0 303
michael@0 304 NS_IMETHODIMP
michael@0 305 xpcAccessibleHyperText::SetSelectionBounds(int32_t aSelectionNum,
michael@0 306 int32_t aStartOffset,
michael@0 307 int32_t aEndOffset)
michael@0 308 {
michael@0 309 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 310 if (text->IsDefunct())
michael@0 311 return NS_ERROR_FAILURE;
michael@0 312
michael@0 313 if (aSelectionNum < 0 ||
michael@0 314 !text->SetSelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset))
michael@0 315 return NS_ERROR_INVALID_ARG;
michael@0 316
michael@0 317 return NS_OK;
michael@0 318 }
michael@0 319
michael@0 320 NS_IMETHODIMP
michael@0 321 xpcAccessibleHyperText::AddSelection(int32_t aStartOffset, int32_t aEndOffset)
michael@0 322 {
michael@0 323 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 324 if (text->IsDefunct())
michael@0 325 return NS_ERROR_FAILURE;
michael@0 326
michael@0 327 text->AddToSelection(aStartOffset, aEndOffset);
michael@0 328 return NS_OK;
michael@0 329 }
michael@0 330
michael@0 331 NS_IMETHODIMP
michael@0 332 xpcAccessibleHyperText::RemoveSelection(int32_t aSelectionNum)
michael@0 333 {
michael@0 334 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 335 if (text->IsDefunct())
michael@0 336 return NS_ERROR_FAILURE;
michael@0 337
michael@0 338 text->RemoveFromSelection(aSelectionNum);
michael@0 339 return NS_OK;
michael@0 340 }
michael@0 341
michael@0 342 NS_IMETHODIMP
michael@0 343 xpcAccessibleHyperText::ScriptableScrollSubstringTo(int32_t aStartOffset,
michael@0 344 int32_t aEndOffset,
michael@0 345 uint32_t aScrollType)
michael@0 346 {
michael@0 347 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 348 if (text->IsDefunct())
michael@0 349 return NS_ERROR_FAILURE;
michael@0 350
michael@0 351 text->ScrollSubstringTo(aStartOffset, aEndOffset, aScrollType);
michael@0 352 return NS_OK;
michael@0 353 }
michael@0 354
michael@0 355 NS_IMETHODIMP
michael@0 356 xpcAccessibleHyperText::ScriptableScrollSubstringToPoint(int32_t aStartOffset,
michael@0 357 int32_t aEndOffset,
michael@0 358 uint32_t aCoordinateType,
michael@0 359 int32_t aX, int32_t aY)
michael@0 360 {
michael@0 361 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 362 if (text->IsDefunct())
michael@0 363 return NS_ERROR_FAILURE;
michael@0 364
michael@0 365 text->ScrollSubstringToPoint(aStartOffset, aEndOffset, aCoordinateType, aX, aY);
michael@0 366 return NS_OK;
michael@0 367 }
michael@0 368
michael@0 369 NS_IMETHODIMP
michael@0 370 xpcAccessibleHyperText::GetEnclosingRange(nsIAccessibleTextRange** aRange)
michael@0 371 {
michael@0 372 NS_ENSURE_ARG_POINTER(aRange);
michael@0 373 *aRange = nullptr;
michael@0 374
michael@0 375 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 376 if (text->IsDefunct())
michael@0 377 return NS_ERROR_FAILURE;
michael@0 378
michael@0 379 nsRefPtr<xpcAccessibleTextRange> range = new xpcAccessibleTextRange;
michael@0 380 text->EnclosingRange(range->mRange);
michael@0 381 NS_ASSERTION(range->mRange.IsValid(),
michael@0 382 "Should always have an enclosing range!");
michael@0 383
michael@0 384 range.forget(aRange);
michael@0 385
michael@0 386 return NS_OK;
michael@0 387 }
michael@0 388
michael@0 389 NS_IMETHODIMP
michael@0 390 xpcAccessibleHyperText::GetSelectionRanges(nsIArray** aRanges)
michael@0 391 {
michael@0 392 NS_ENSURE_ARG_POINTER(aRanges);
michael@0 393 *aRanges = nullptr;
michael@0 394
michael@0 395 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 396 if (text->IsDefunct())
michael@0 397 return NS_ERROR_FAILURE;
michael@0 398
michael@0 399 nsresult rv = NS_OK;
michael@0 400 nsCOMPtr<nsIMutableArray> xpcRanges =
michael@0 401 do_CreateInstance(NS_ARRAY_CONTRACTID, &rv);
michael@0 402 NS_ENSURE_SUCCESS(rv, rv);
michael@0 403
michael@0 404 nsAutoTArray<TextRange, 1> ranges;
michael@0 405 text->SelectionRanges(&ranges);
michael@0 406 uint32_t len = ranges.Length();
michael@0 407 for (uint32_t idx = 0; idx < len; idx++)
michael@0 408 xpcRanges->AppendElement(new xpcAccessibleTextRange(Move(ranges[idx])),
michael@0 409 false);
michael@0 410
michael@0 411 xpcRanges.forget(aRanges);
michael@0 412 return NS_OK;
michael@0 413 }
michael@0 414
michael@0 415 NS_IMETHODIMP
michael@0 416 xpcAccessibleHyperText::GetVisibleRanges(nsIArray** aRanges)
michael@0 417 {
michael@0 418 NS_ENSURE_ARG_POINTER(aRanges);
michael@0 419 *aRanges = nullptr;
michael@0 420
michael@0 421 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 422 if (text->IsDefunct())
michael@0 423 return NS_ERROR_FAILURE;
michael@0 424
michael@0 425 nsresult rv = NS_OK;
michael@0 426 nsCOMPtr<nsIMutableArray> xpcRanges =
michael@0 427 do_CreateInstance(NS_ARRAY_CONTRACTID, &rv);
michael@0 428 NS_ENSURE_SUCCESS(rv, rv);
michael@0 429
michael@0 430 nsTArray<TextRange> ranges;
michael@0 431 text->VisibleRanges(&ranges);
michael@0 432 uint32_t len = ranges.Length();
michael@0 433 for (uint32_t idx = 0; idx < len; idx++)
michael@0 434 xpcRanges->AppendElement(new xpcAccessibleTextRange(Move(ranges[idx])),
michael@0 435 false);
michael@0 436
michael@0 437 xpcRanges.forget(aRanges);
michael@0 438 return NS_OK;
michael@0 439 }
michael@0 440
michael@0 441 NS_IMETHODIMP
michael@0 442 xpcAccessibleHyperText::GetRangeByChild(nsIAccessible* aChild,
michael@0 443 nsIAccessibleTextRange** aRange)
michael@0 444 {
michael@0 445 NS_ENSURE_ARG_POINTER(aRange);
michael@0 446 *aRange = nullptr;
michael@0 447
michael@0 448 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 449 if (text->IsDefunct())
michael@0 450 return NS_ERROR_FAILURE;
michael@0 451
michael@0 452 nsRefPtr<Accessible> child = do_QueryObject(aChild);
michael@0 453 if (child) {
michael@0 454 nsRefPtr<xpcAccessibleTextRange> range = new xpcAccessibleTextRange;
michael@0 455 text->RangeByChild(child, range->mRange);
michael@0 456 if (range->mRange.IsValid())
michael@0 457 range.forget(aRange);
michael@0 458 }
michael@0 459
michael@0 460 return NS_OK;
michael@0 461 }
michael@0 462
michael@0 463 NS_IMETHODIMP
michael@0 464 xpcAccessibleHyperText::GetRangeAtPoint(int32_t aX, int32_t aY,
michael@0 465 nsIAccessibleTextRange** aRange)
michael@0 466 {
michael@0 467 NS_ENSURE_ARG_POINTER(aRange);
michael@0 468 *aRange = nullptr;
michael@0 469
michael@0 470 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 471 if (text->IsDefunct())
michael@0 472 return NS_ERROR_FAILURE;
michael@0 473
michael@0 474 nsRefPtr<xpcAccessibleTextRange> range = new xpcAccessibleTextRange;
michael@0 475 text->RangeAtPoint(aX, aY, range->mRange);
michael@0 476 if (range->mRange.IsValid())
michael@0 477 range.forget(aRange);
michael@0 478
michael@0 479 return NS_OK;
michael@0 480 }
michael@0 481
michael@0 482 ////////////////////////////////////////////////////////////////////////////////
michael@0 483 // nsIAccessibleEditableText
michael@0 484
michael@0 485 NS_IMETHODIMP
michael@0 486 xpcAccessibleHyperText::SetTextContents(const nsAString& aText)
michael@0 487 {
michael@0 488 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 489 if (text->IsDefunct())
michael@0 490 return NS_ERROR_FAILURE;
michael@0 491
michael@0 492 text->ReplaceText(aText);
michael@0 493 return NS_OK;
michael@0 494 }
michael@0 495
michael@0 496 NS_IMETHODIMP
michael@0 497 xpcAccessibleHyperText::ScriptableInsertText(const nsAString& aText,
michael@0 498 int32_t aOffset)
michael@0 499 {
michael@0 500 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 501 if (text->IsDefunct())
michael@0 502 return NS_ERROR_FAILURE;
michael@0 503
michael@0 504 text->InsertText(aText, aOffset);
michael@0 505 return NS_OK;
michael@0 506 }
michael@0 507
michael@0 508 NS_IMETHODIMP
michael@0 509 xpcAccessibleHyperText::ScriptableCopyText(int32_t aStartOffset,
michael@0 510 int32_t aEndOffset)
michael@0 511 {
michael@0 512 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 513 if (text->IsDefunct())
michael@0 514 return NS_ERROR_FAILURE;
michael@0 515
michael@0 516 text->CopyText(aStartOffset, aEndOffset);
michael@0 517 return NS_OK;
michael@0 518 }
michael@0 519
michael@0 520 NS_IMETHODIMP
michael@0 521 xpcAccessibleHyperText::ScriptableCutText(int32_t aStartOffset,
michael@0 522 int32_t aEndOffset)
michael@0 523 {
michael@0 524 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 525 if (text->IsDefunct())
michael@0 526 return NS_ERROR_FAILURE;
michael@0 527
michael@0 528 text->CutText(aStartOffset, aEndOffset);
michael@0 529 return NS_OK;
michael@0 530 }
michael@0 531
michael@0 532 NS_IMETHODIMP
michael@0 533 xpcAccessibleHyperText::ScriptableDeleteText(int32_t aStartOffset,
michael@0 534 int32_t aEndOffset)
michael@0 535 {
michael@0 536 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 537 if (text->IsDefunct())
michael@0 538 return NS_ERROR_FAILURE;
michael@0 539
michael@0 540 text->DeleteText(aStartOffset, aEndOffset);
michael@0 541 return NS_OK;
michael@0 542 }
michael@0 543
michael@0 544 NS_IMETHODIMP
michael@0 545 xpcAccessibleHyperText::ScriptablePasteText(int32_t aOffset)
michael@0 546 {
michael@0 547 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 548 if (text->IsDefunct())
michael@0 549 return NS_ERROR_FAILURE;
michael@0 550
michael@0 551 text->PasteText(aOffset);
michael@0 552 return NS_OK;
michael@0 553 }
michael@0 554
michael@0 555 ////////////////////////////////////////////////////////////////////////////////
michael@0 556 // nsIAccessibleHyperText
michael@0 557
michael@0 558 NS_IMETHODIMP
michael@0 559 xpcAccessibleHyperText::GetLinkCount(int32_t* aLinkCount)
michael@0 560 {
michael@0 561 NS_ENSURE_ARG_POINTER(aLinkCount);
michael@0 562 *aLinkCount = 0;
michael@0 563
michael@0 564 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 565 if (text->IsDefunct())
michael@0 566 return NS_ERROR_FAILURE;
michael@0 567
michael@0 568 *aLinkCount = text->LinkCount();
michael@0 569 return NS_OK;
michael@0 570 }
michael@0 571
michael@0 572 NS_IMETHODIMP
michael@0 573 xpcAccessibleHyperText::GetLinkAt(int32_t aIndex, nsIAccessibleHyperLink** aLink)
michael@0 574 {
michael@0 575 NS_ENSURE_ARG_POINTER(aLink);
michael@0 576 *aLink = nullptr;
michael@0 577
michael@0 578 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 579 if (text->IsDefunct())
michael@0 580 return NS_ERROR_FAILURE;
michael@0 581
michael@0 582 nsCOMPtr<nsIAccessibleHyperLink> link = text->LinkAt(aIndex);
michael@0 583 link.forget(aLink);
michael@0 584
michael@0 585 return NS_OK;
michael@0 586 }
michael@0 587
michael@0 588 NS_IMETHODIMP
michael@0 589 xpcAccessibleHyperText::GetLinkIndex(nsIAccessibleHyperLink* aLink,
michael@0 590 int32_t* aIndex)
michael@0 591 {
michael@0 592 NS_ENSURE_ARG_POINTER(aLink);
michael@0 593 NS_ENSURE_ARG_POINTER(aIndex);
michael@0 594 *aIndex = -1;
michael@0 595
michael@0 596 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 597 if (text->IsDefunct())
michael@0 598 return NS_ERROR_FAILURE;
michael@0 599
michael@0 600 nsRefPtr<Accessible> link(do_QueryObject(aLink));
michael@0 601 *aIndex = text->LinkIndexOf(link);
michael@0 602 return NS_OK;
michael@0 603 }
michael@0 604
michael@0 605 NS_IMETHODIMP
michael@0 606 xpcAccessibleHyperText::GetLinkIndexAtOffset(int32_t aOffset,
michael@0 607 int32_t* aLinkIndex)
michael@0 608 {
michael@0 609 NS_ENSURE_ARG_POINTER(aLinkIndex);
michael@0 610 *aLinkIndex = -1; // API says this magic value means 'not found'
michael@0 611
michael@0 612 HyperTextAccessible* text = static_cast<HyperTextAccessible*>(this);
michael@0 613 if (text->IsDefunct())
michael@0 614 return NS_ERROR_FAILURE;
michael@0 615
michael@0 616 *aLinkIndex = text->LinkIndexAtOffset(aOffset);
michael@0 617 return NS_OK;
michael@0 618 }

mercurial