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

Side by Side Diff: content/browser/accessibility/browser_accessibility_com_win.cc

Issue 2874443002: BrowserAccessibilityWin precondition only needs to check for a valid owner (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/accessibility/browser_accessibility_com_win.h" 5 #include "content/browser/accessibility/browser_accessibility_com_win.h"
6 6
7 #include <UIAutomationClient.h> 7 #include <UIAutomationClient.h>
8 #include <UIAutomationCoreApi.h> 8 #include <UIAutomationCoreApi.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 target_ids_.erase( 304 target_ids_.erase(
305 std::remove(target_ids_.begin(), target_ids_.end(), target_id), 305 std::remove(target_ids_.begin(), target_ids_.end(), target_id),
306 target_ids_.end()); 306 target_ids_.end());
307 } 307 }
308 308
309 STDMETHODIMP BrowserAccessibilityRelation::get_relationType( 309 STDMETHODIMP BrowserAccessibilityRelation::get_relationType(
310 BSTR* relation_type) { 310 BSTR* relation_type) {
311 if (!relation_type) 311 if (!relation_type)
312 return E_INVALIDARG; 312 return E_INVALIDARG;
313 313
314 if (!owner_->GetOwner()->instance_active()) 314 if (!owner_->GetOwner())
315 return E_FAIL; 315 return E_FAIL;
316 316
317 *relation_type = SysAllocString(type_.c_str()); 317 *relation_type = SysAllocString(type_.c_str());
318 DCHECK(*relation_type); 318 DCHECK(*relation_type);
319 return S_OK; 319 return S_OK;
320 } 320 }
321 321
322 STDMETHODIMP BrowserAccessibilityRelation::get_nTargets(long* n_targets) { 322 STDMETHODIMP BrowserAccessibilityRelation::get_nTargets(long* n_targets) {
323 if (!n_targets) 323 if (!n_targets)
324 return E_INVALIDARG; 324 return E_INVALIDARG;
325 325
326 if (!owner_->GetOwner()->instance_active()) 326 if (!owner_->GetOwner())
327 return E_FAIL; 327 return E_FAIL;
328 328
329 *n_targets = static_cast<long>(target_ids_.size()); 329 *n_targets = static_cast<long>(target_ids_.size());
330 330
331 for (long i = *n_targets - 1; i >= 0; --i) { 331 for (long i = *n_targets - 1; i >= 0; --i) {
332 BrowserAccessibilityComWin* result = owner_->GetFromID(target_ids_[i]); 332 BrowserAccessibilityComWin* result = owner_->GetFromID(target_ids_[i]);
333 if (!result || !result->GetOwner()->instance_active()) { 333 if (!result || !result->GetOwner()) {
334 *n_targets = 0; 334 *n_targets = 0;
335 break; 335 break;
336 } 336 }
337 } 337 }
338 return S_OK; 338 return S_OK;
339 } 339 }
340 340
341 STDMETHODIMP BrowserAccessibilityRelation::get_target(long target_index, 341 STDMETHODIMP BrowserAccessibilityRelation::get_target(long target_index,
342 IUnknown** target) { 342 IUnknown** target) {
343 if (!target) 343 if (!target)
344 return E_INVALIDARG; 344 return E_INVALIDARG;
345 345
346 if (!owner_->GetOwner()->instance_active()) 346 if (!owner_->GetOwner())
347 return E_FAIL; 347 return E_FAIL;
348 348
349 auto* manager = owner_->GetOwner()->manager(); 349 auto* manager = owner_->GetOwner()->manager();
350 if (!manager) 350 if (!manager)
351 return E_FAIL; 351 return E_FAIL;
352 352
353 if (target_index < 0 || 353 if (target_index < 0 ||
354 target_index >= static_cast<long>(target_ids_.size())) { 354 target_index >= static_cast<long>(target_ids_.size())) {
355 return E_INVALIDARG; 355 return E_INVALIDARG;
356 } 356 }
357 357
358 BrowserAccessibility* result = manager->GetFromID(target_ids_[target_index]); 358 BrowserAccessibility* result = manager->GetFromID(target_ids_[target_index]);
359 if (!result || !result->instance_active()) 359 if (!result || !result->instance_active())
360 return E_FAIL; 360 return E_FAIL;
361 361
362 *target = static_cast<IAccessible*>( 362 *target = static_cast<IAccessible*>(
363 ToBrowserAccessibilityComWin(result)->NewReference()); 363 ToBrowserAccessibilityComWin(result)->NewReference());
364 return S_OK; 364 return S_OK;
365 } 365 }
366 366
367 STDMETHODIMP BrowserAccessibilityRelation::get_targets(long max_targets, 367 STDMETHODIMP BrowserAccessibilityRelation::get_targets(long max_targets,
368 IUnknown** targets, 368 IUnknown** targets,
369 long* n_targets) { 369 long* n_targets) {
370 if (!targets || !n_targets) 370 if (!targets || !n_targets)
371 return E_INVALIDARG; 371 return E_INVALIDARG;
372 372
373 if (!owner_->GetOwner()->instance_active()) 373 if (!owner_->GetOwner())
374 return E_FAIL; 374 return E_FAIL;
375 375
376 long count = static_cast<long>(target_ids_.size()); 376 long count = static_cast<long>(target_ids_.size());
377 if (count > max_targets) 377 if (count > max_targets)
378 count = max_targets; 378 count = max_targets;
379 379
380 *n_targets = count; 380 *n_targets = count;
381 if (count == 0) 381 if (count == 0)
382 return S_FALSE; 382 return S_FALSE;
383 383
(...skipping 26 matching lines...) Expand all
410 410
411 BrowserAccessibilityComWin::~BrowserAccessibilityComWin() { 411 BrowserAccessibilityComWin::~BrowserAccessibilityComWin() {
412 for (BrowserAccessibilityRelation* relation : relations_) 412 for (BrowserAccessibilityRelation* relation : relations_)
413 relation->Release(); 413 relation->Release();
414 } 414 }
415 415
416 // 416 //
417 // IAccessible methods. 417 // IAccessible methods.
418 // 418 //
419 // Conventions: 419 // Conventions:
420 // * Always test for GetOwner() and GetOwner()->instance_active first and 420 // * Always test for GetOwner() first and return E_FAIL if it's false.
421 // return E_FAIL if either are false.
422 // * Always check for invalid arguments first, even if they're unused. 421 // * Always check for invalid arguments first, even if they're unused.
423 // * Return S_FALSE if the only output is a string argument and it's empty. 422 // * Return S_FALSE if the only output is a string argument and it's empty.
424 // * There are some methods that don't touch any state such as get_toolkitName. 423 // * There are some methods that don't touch any state such as get_toolkitName.
425 // For these rare cases, you may not need to call GetOwner(). 424 // For these rare cases, you may not need to call GetOwner().
426 // 425 //
427 426
428 HRESULT BrowserAccessibilityComWin::accDoDefaultAction(VARIANT var_id) { 427 HRESULT BrowserAccessibilityComWin::accDoDefaultAction(VARIANT var_id) {
429 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_DO_DEFAULT_ACTION); 428 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_DO_DEFAULT_ACTION);
430 429
431 if (!GetOwner() || !GetOwner()->instance_active()) 430 if (!GetOwner())
432 return E_FAIL; 431 return E_FAIL;
433 432
434 auto* manager = GetOwner()->manager(); 433 auto* manager = GetOwner()->manager();
435 if (!manager) 434 if (!manager)
436 return E_FAIL; 435 return E_FAIL;
437 436
438 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 437 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
439 if (!target) 438 if (!target)
440 return E_INVALIDARG; 439 return E_INVALIDARG;
441 440
442 // Return an error if it's not clickable. 441 // Return an error if it's not clickable.
443 if (!target->GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION)) 442 if (!target->GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION))
444 return DISP_E_MEMBERNOTFOUND; 443 return DISP_E_MEMBERNOTFOUND;
445 444
446 manager->DoDefaultAction(*target->GetOwner()); 445 manager->DoDefaultAction(*target->GetOwner());
447 return S_OK; 446 return S_OK;
448 } 447 }
449 448
450 STDMETHODIMP BrowserAccessibilityComWin::accHitTest(LONG x_left, 449 STDMETHODIMP BrowserAccessibilityComWin::accHitTest(LONG x_left,
451 LONG y_top, 450 LONG y_top,
452 VARIANT* child) { 451 VARIANT* child) {
453 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_HIT_TEST); 452 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_HIT_TEST);
454 453
455 if (!GetOwner() || !GetOwner()->instance_active()) 454 if (!GetOwner())
456 return E_FAIL; 455 return E_FAIL;
457 456
458 auto* manager = GetOwner()->manager(); 457 auto* manager = GetOwner()->manager();
459 if (!manager) 458 if (!manager)
460 return E_FAIL; 459 return E_FAIL;
461 460
462 if (!child) 461 if (!child)
463 return E_INVALIDARG; 462 return E_INVALIDARG;
464 463
465 gfx::Point point(x_left, y_top); 464 gfx::Point point(x_left, y_top);
(...skipping 14 matching lines...) Expand all
480 } 479 }
481 return S_OK; 480 return S_OK;
482 } 481 }
483 482
484 STDMETHODIMP BrowserAccessibilityComWin::accLocation(LONG* x_left, 483 STDMETHODIMP BrowserAccessibilityComWin::accLocation(LONG* x_left,
485 LONG* y_top, 484 LONG* y_top,
486 LONG* width, 485 LONG* width,
487 LONG* height, 486 LONG* height,
488 VARIANT var_id) { 487 VARIANT var_id) {
489 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_LOCATION); 488 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_LOCATION);
490 if (!GetOwner() || !GetOwner()->instance_active()) 489 if (!GetOwner())
491 return E_FAIL; 490 return E_FAIL;
492 491
493 return AXPlatformNodeWin::accLocation(x_left, y_top, width, height, var_id); 492 return AXPlatformNodeWin::accLocation(x_left, y_top, width, height, var_id);
494 } 493 }
495 494
496 STDMETHODIMP BrowserAccessibilityComWin::accNavigate(LONG nav_dir, 495 STDMETHODIMP BrowserAccessibilityComWin::accNavigate(LONG nav_dir,
497 VARIANT start, 496 VARIANT start,
498 VARIANT* end) { 497 VARIANT* end) {
499 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_NAVIGATE); 498 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_NAVIGATE);
500 if (!GetOwner() || !GetOwner()->instance_active()) 499 if (!GetOwner())
501 return E_FAIL; 500 return E_FAIL;
502 501
503 // Forward all directions but NAVDIR_ to the platform node implementation. 502 // Forward all directions but NAVDIR_ to the platform node implementation.
504 if (nav_dir != NAVDIR_DOWN && nav_dir != NAVDIR_UP && 503 if (nav_dir != NAVDIR_DOWN && nav_dir != NAVDIR_UP &&
505 nav_dir != NAVDIR_LEFT && nav_dir != NAVDIR_RIGHT) { 504 nav_dir != NAVDIR_LEFT && nav_dir != NAVDIR_RIGHT) {
506 return AXPlatformNodeWin::accNavigate(nav_dir, start, end); 505 return AXPlatformNodeWin::accNavigate(nav_dir, start, end);
507 } 506 }
508 507
509 BrowserAccessibilityComWin* target = GetTargetFromChildID(start); 508 BrowserAccessibilityComWin* target = GetTargetFromChildID(start);
510 if (!target) 509 if (!target)
(...skipping 27 matching lines...) Expand all
538 } 537 }
539 538
540 end->vt = VT_DISPATCH; 539 end->vt = VT_DISPATCH;
541 end->pdispVal = ToBrowserAccessibilityComWin(result)->NewReference(); 540 end->pdispVal = ToBrowserAccessibilityComWin(result)->NewReference();
542 return S_OK; 541 return S_OK;
543 } 542 }
544 543
545 STDMETHODIMP BrowserAccessibilityComWin::get_accChild(VARIANT var_child, 544 STDMETHODIMP BrowserAccessibilityComWin::get_accChild(VARIANT var_child,
546 IDispatch** disp_child) { 545 IDispatch** disp_child) {
547 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_CHILD); 546 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_CHILD);
548 if (!GetOwner() || !GetOwner()->instance_active()) 547 if (!GetOwner())
549 return E_FAIL; 548 return E_FAIL;
550 549
551 if (!disp_child) 550 if (!disp_child)
552 return E_INVALIDARG; 551 return E_INVALIDARG;
553 552
554 *disp_child = NULL; 553 *disp_child = NULL;
555 554
556 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_child); 555 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_child);
557 if (!target) 556 if (!target)
558 return E_INVALIDARG; 557 return E_INVALIDARG;
559 558
560 (*disp_child) = target->NewReference(); 559 (*disp_child) = target->NewReference();
561 return S_OK; 560 return S_OK;
562 } 561 }
563 562
564 STDMETHODIMP BrowserAccessibilityComWin::get_accChildCount(LONG* child_count) { 563 STDMETHODIMP BrowserAccessibilityComWin::get_accChildCount(LONG* child_count) {
565 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_CHILD_COUNT); 564 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_CHILD_COUNT);
566 if (!GetOwner() || !GetOwner()->instance_active()) 565 if (!GetOwner())
567 return E_FAIL; 566 return E_FAIL;
568 567
569 if (!child_count) 568 if (!child_count)
570 return E_INVALIDARG; 569 return E_INVALIDARG;
571 570
572 *child_count = GetOwner()->PlatformChildCount(); 571 *child_count = GetOwner()->PlatformChildCount();
573 572
574 return S_OK; 573 return S_OK;
575 } 574 }
576 575
577 STDMETHODIMP BrowserAccessibilityComWin::get_accDefaultAction( 576 STDMETHODIMP BrowserAccessibilityComWin::get_accDefaultAction(
578 VARIANT var_id, 577 VARIANT var_id,
579 BSTR* def_action) { 578 BSTR* def_action) {
580 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_DEFAULT_ACTION); 579 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_DEFAULT_ACTION);
581 if (!GetOwner() || !GetOwner()->instance_active()) 580 if (!GetOwner())
582 return E_FAIL; 581 return E_FAIL;
583 582
584 if (!def_action) 583 if (!def_action)
585 return E_INVALIDARG; 584 return E_INVALIDARG;
586 585
587 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 586 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
588 if (!target) 587 if (!target)
589 return E_INVALIDARG; 588 return E_INVALIDARG;
590 589
591 return target->get_localizedName(0, def_action); 590 return target->get_localizedName(0, def_action);
592 } 591 }
593 592
594 STDMETHODIMP BrowserAccessibilityComWin::get_accDescription(VARIANT var_id, 593 STDMETHODIMP BrowserAccessibilityComWin::get_accDescription(VARIANT var_id,
595 BSTR* desc) { 594 BSTR* desc) {
596 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_DESCRIPTION); 595 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_DESCRIPTION);
597 if (!GetOwner() || !GetOwner()->instance_active()) 596 if (!GetOwner())
598 return E_FAIL; 597 return E_FAIL;
599 598
600 if (!desc) 599 if (!desc)
601 return E_INVALIDARG; 600 return E_INVALIDARG;
602 601
603 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 602 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
604 if (!target) 603 if (!target)
605 return E_INVALIDARG; 604 return E_INVALIDARG;
606 605
607 base::string16 description_str = target->description(); 606 base::string16 description_str = target->description();
608 if (description_str.empty()) 607 if (description_str.empty())
609 return S_FALSE; 608 return S_FALSE;
610 609
611 *desc = SysAllocString(description_str.c_str()); 610 *desc = SysAllocString(description_str.c_str());
612 611
613 DCHECK(*desc); 612 DCHECK(*desc);
614 return S_OK; 613 return S_OK;
615 } 614 }
616 615
617 STDMETHODIMP BrowserAccessibilityComWin::get_accFocus(VARIANT* focus_child) { 616 STDMETHODIMP BrowserAccessibilityComWin::get_accFocus(VARIANT* focus_child) {
618 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_FOCUS); 617 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_FOCUS);
619 if (!GetOwner() || !GetOwner()->instance_active()) 618 if (!GetOwner())
620 return E_FAIL; 619 return E_FAIL;
621 620
622 auto* manager = GetOwner()->manager(); 621 auto* manager = GetOwner()->manager();
623 if (!manager) 622 if (!manager)
624 return E_FAIL; 623 return E_FAIL;
625 624
626 if (!focus_child) 625 if (!focus_child)
627 return E_INVALIDARG; 626 return E_INVALIDARG;
628 627
629 BrowserAccessibilityWin* focus = 628 BrowserAccessibilityWin* focus =
630 static_cast<BrowserAccessibilityWin*>(manager->GetFocus()); 629 static_cast<BrowserAccessibilityWin*>(manager->GetFocus());
631 if (focus == GetOwner()) { 630 if (focus == GetOwner()) {
632 focus_child->vt = VT_I4; 631 focus_child->vt = VT_I4;
633 focus_child->lVal = CHILDID_SELF; 632 focus_child->lVal = CHILDID_SELF;
634 } else if (focus == NULL) { 633 } else if (focus == NULL) {
635 focus_child->vt = VT_EMPTY; 634 focus_child->vt = VT_EMPTY;
636 } else { 635 } else {
637 focus_child->vt = VT_DISPATCH; 636 focus_child->vt = VT_DISPATCH;
638 focus_child->pdispVal = focus->GetCOM()->NewReference(); 637 focus_child->pdispVal = focus->GetCOM()->NewReference();
639 } 638 }
640 639
641 return S_OK; 640 return S_OK;
642 } 641 }
643 642
644 STDMETHODIMP BrowserAccessibilityComWin::get_accHelp(VARIANT var_id, 643 STDMETHODIMP BrowserAccessibilityComWin::get_accHelp(VARIANT var_id,
645 BSTR* help) { 644 BSTR* help) {
646 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_HELP); 645 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_HELP);
647 if (!GetOwner() || !GetOwner()->instance_active()) 646 if (!GetOwner())
648 return E_FAIL; 647 return E_FAIL;
649 648
650 return AXPlatformNodeWin::get_accHelp(var_id, help); 649 return AXPlatformNodeWin::get_accHelp(var_id, help);
651 } 650 }
652 651
653 STDMETHODIMP BrowserAccessibilityComWin::get_accKeyboardShortcut( 652 STDMETHODIMP BrowserAccessibilityComWin::get_accKeyboardShortcut(
654 VARIANT var_id, 653 VARIANT var_id,
655 BSTR* acc_key) { 654 BSTR* acc_key) {
656 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_KEYBOARD_SHORTCUT); 655 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_KEYBOARD_SHORTCUT);
657 if (!GetOwner() || !GetOwner()->instance_active()) 656 if (!GetOwner())
658 return E_FAIL; 657 return E_FAIL;
659 658
660 if (!acc_key) 659 if (!acc_key)
661 return E_INVALIDARG; 660 return E_INVALIDARG;
662 661
663 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 662 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
664 if (!target) 663 if (!target)
665 return E_INVALIDARG; 664 return E_INVALIDARG;
666 665
667 if (target->HasStringAttribute(ui::AX_ATTR_KEY_SHORTCUTS)) { 666 if (target->HasStringAttribute(ui::AX_ATTR_KEY_SHORTCUTS)) {
668 return target->GetStringAttributeAsBstr(ui::AX_ATTR_KEY_SHORTCUTS, acc_key); 667 return target->GetStringAttributeAsBstr(ui::AX_ATTR_KEY_SHORTCUTS, acc_key);
669 } 668 }
670 669
671 return target->GetStringAttributeAsBstr(ui::AX_ATTR_SHORTCUT, acc_key); 670 return target->GetStringAttributeAsBstr(ui::AX_ATTR_SHORTCUT, acc_key);
672 } 671 }
673 672
674 STDMETHODIMP BrowserAccessibilityComWin::get_accName(VARIANT var_id, 673 STDMETHODIMP BrowserAccessibilityComWin::get_accName(VARIANT var_id,
675 BSTR* name) { 674 BSTR* name) {
676 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_NAME); 675 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_NAME);
677 if (!GetOwner() || !GetOwner()->instance_active()) 676 if (!GetOwner())
678 return E_FAIL; 677 return E_FAIL;
679 678
680 return AXPlatformNodeWin::get_accName(var_id, name); 679 return AXPlatformNodeWin::get_accName(var_id, name);
681 } 680 }
682 681
683 STDMETHODIMP BrowserAccessibilityComWin::get_accParent( 682 STDMETHODIMP BrowserAccessibilityComWin::get_accParent(
684 IDispatch** disp_parent) { 683 IDispatch** disp_parent) {
685 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_PARENT); 684 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_PARENT);
686 if (!GetOwner() || !GetOwner()->instance_active()) 685 if (!GetOwner())
687 return E_FAIL; 686 return E_FAIL;
688 687
689 if (!disp_parent) 688 if (!disp_parent)
690 return E_INVALIDARG; 689 return E_INVALIDARG;
691 690
692 IAccessible* parent_obj = 691 IAccessible* parent_obj =
693 ToBrowserAccessibilityComWin(GetOwner()->PlatformGetParent()); 692 ToBrowserAccessibilityComWin(GetOwner()->PlatformGetParent());
694 if (parent_obj == NULL) { 693 if (parent_obj == NULL) {
695 // This happens if we're the root of the tree; 694 // This happens if we're the root of the tree;
696 // return the IAccessible for the window. 695 // return the IAccessible for the window.
(...skipping 13 matching lines...) Expand all
710 } 709 }
711 } 710 }
712 parent_obj->AddRef(); 711 parent_obj->AddRef();
713 *disp_parent = parent_obj; 712 *disp_parent = parent_obj;
714 return S_OK; 713 return S_OK;
715 } 714 }
716 715
717 STDMETHODIMP BrowserAccessibilityComWin::get_accRole(VARIANT var_id, 716 STDMETHODIMP BrowserAccessibilityComWin::get_accRole(VARIANT var_id,
718 VARIANT* role) { 717 VARIANT* role) {
719 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_ROLE); 718 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_ROLE);
720 if (!GetOwner() || !GetOwner()->instance_active()) 719 if (!GetOwner())
721 return E_FAIL; 720 return E_FAIL;
722 721
723 if (!role) 722 if (!role)
724 return E_INVALIDARG; 723 return E_INVALIDARG;
725 724
726 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 725 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
727 if (!target) 726 if (!target)
728 return E_INVALIDARG; 727 return E_INVALIDARG;
729 728
730 if (!target->role_name().empty()) { 729 if (!target->role_name().empty()) {
731 role->vt = VT_BSTR; 730 role->vt = VT_BSTR;
732 role->bstrVal = SysAllocString(target->role_name().c_str()); 731 role->bstrVal = SysAllocString(target->role_name().c_str());
733 } else { 732 } else {
734 role->vt = VT_I4; 733 role->vt = VT_I4;
735 role->lVal = target->ia_role(); 734 role->lVal = target->ia_role();
736 } 735 }
737 return S_OK; 736 return S_OK;
738 } 737 }
739 738
740 STDMETHODIMP BrowserAccessibilityComWin::get_accState(VARIANT var_id, 739 STDMETHODIMP BrowserAccessibilityComWin::get_accState(VARIANT var_id,
741 VARIANT* state) { 740 VARIANT* state) {
742 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_STATE); 741 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_STATE);
743 if (!GetOwner() || !GetOwner()->instance_active()) 742 if (!GetOwner())
744 return E_FAIL; 743 return E_FAIL;
745 744
746 auto* manager = GetOwner()->manager(); 745 auto* manager = GetOwner()->manager();
747 if (!manager) 746 if (!manager)
748 return E_FAIL; 747 return E_FAIL;
749 748
750 if (!state) 749 if (!state)
751 return E_INVALIDARG; 750 return E_INVALIDARG;
752 751
753 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 752 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
754 if (!target) 753 if (!target)
755 return E_INVALIDARG; 754 return E_INVALIDARG;
756 755
757 state->vt = VT_I4; 756 state->vt = VT_I4;
758 state->lVal = target->ia_state(); 757 state->lVal = target->ia_state();
759 if (manager->GetFocus() == GetOwner()) 758 if (manager->GetFocus() == GetOwner())
760 state->lVal |= STATE_SYSTEM_FOCUSED; 759 state->lVal |= STATE_SYSTEM_FOCUSED;
761 760
762 return S_OK; 761 return S_OK;
763 } 762 }
764 763
765 STDMETHODIMP BrowserAccessibilityComWin::get_accValue(VARIANT var_id, 764 STDMETHODIMP BrowserAccessibilityComWin::get_accValue(VARIANT var_id,
766 BSTR* value) { 765 BSTR* value) {
767 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_VALUE); 766 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_VALUE);
768 if (!GetOwner() || !GetOwner()->instance_active()) 767 if (!GetOwner())
769 return E_FAIL; 768 return E_FAIL;
770 769
771 if (!value) 770 if (!value)
772 return E_INVALIDARG; 771 return E_INVALIDARG;
773 772
774 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 773 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
775 if (!target) 774 if (!target)
776 return E_INVALIDARG; 775 return E_INVALIDARG;
777 776
778 if (target->ia_role() == ROLE_SYSTEM_PROGRESSBAR || 777 if (target->ia_role() == ROLE_SYSTEM_PROGRESSBAR ||
(...skipping 28 matching lines...) Expand all
807 806
808 STDMETHODIMP BrowserAccessibilityComWin::get_accHelpTopic(BSTR* help_file, 807 STDMETHODIMP BrowserAccessibilityComWin::get_accHelpTopic(BSTR* help_file,
809 VARIANT var_id, 808 VARIANT var_id,
810 LONG* topic_id) { 809 LONG* topic_id) {
811 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_HELP_TOPIC); 810 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_HELP_TOPIC);
812 return E_NOTIMPL; 811 return E_NOTIMPL;
813 } 812 }
814 813
815 STDMETHODIMP BrowserAccessibilityComWin::get_accSelection(VARIANT* selected) { 814 STDMETHODIMP BrowserAccessibilityComWin::get_accSelection(VARIANT* selected) {
816 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_SELECTION); 815 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_SELECTION);
817 if (!GetOwner() || !GetOwner()->instance_active()) 816 if (!GetOwner())
818 return E_FAIL; 817 return E_FAIL;
819 818
820 if (GetOwner()->GetRole() != ui::AX_ROLE_LIST_BOX) 819 if (GetOwner()->GetRole() != ui::AX_ROLE_LIST_BOX)
821 return E_NOTIMPL; 820 return E_NOTIMPL;
822 821
823 unsigned long selected_count = 0; 822 unsigned long selected_count = 0;
824 for (size_t i = 0; i < GetOwner()->InternalChildCount(); ++i) { 823 for (size_t i = 0; i < GetOwner()->InternalChildCount(); ++i) {
825 if (GetOwner()->InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED)) 824 if (GetOwner()->InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED))
826 ++selected_count; 825 ++selected_count;
827 } 826 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 } 858 }
860 selected->vt = VT_UNKNOWN; 859 selected->vt = VT_UNKNOWN;
861 selected->punkVal = static_cast<IUnknown*>( 860 selected->punkVal = static_cast<IUnknown*>(
862 static_cast<base::win::IUnknownImpl*>(enum_variant)); 861 static_cast<base::win::IUnknownImpl*>(enum_variant));
863 return S_OK; 862 return S_OK;
864 } 863 }
865 864
866 STDMETHODIMP BrowserAccessibilityComWin::accSelect(LONG flags_sel, 865 STDMETHODIMP BrowserAccessibilityComWin::accSelect(LONG flags_sel,
867 VARIANT var_id) { 866 VARIANT var_id) {
868 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_SELECT); 867 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_SELECT);
869 if (!GetOwner() || !GetOwner()->instance_active()) 868 if (!GetOwner())
870 return E_FAIL; 869 return E_FAIL;
871 870
872 auto* manager = GetOwner()->manager(); 871 auto* manager = GetOwner()->manager();
873 if (!manager) 872 if (!manager)
874 return E_FAIL; 873 return E_FAIL;
875 874
876 if (flags_sel & SELFLAG_TAKEFOCUS) { 875 if (flags_sel & SELFLAG_TAKEFOCUS) {
877 manager->SetFocus(*GetOwner()); 876 manager->SetFocus(*GetOwner());
878 return S_OK; 877 return S_OK;
879 } 878 }
880 879
881 return S_FALSE; 880 return S_FALSE;
882 } 881 }
883 882
884 STDMETHODIMP 883 STDMETHODIMP
885 BrowserAccessibilityComWin::put_accName(VARIANT var_id, BSTR put_name) { 884 BrowserAccessibilityComWin::put_accName(VARIANT var_id, BSTR put_name) {
886 return E_NOTIMPL; 885 return E_NOTIMPL;
887 } 886 }
888 STDMETHODIMP 887 STDMETHODIMP
889 BrowserAccessibilityComWin::put_accValue(VARIANT var_id, BSTR put_val) { 888 BrowserAccessibilityComWin::put_accValue(VARIANT var_id, BSTR put_val) {
890 return E_NOTIMPL; 889 return E_NOTIMPL;
891 } 890 }
892 891
893 // 892 //
894 // IAccessible2 methods. 893 // IAccessible2 methods.
895 // 894 //
896 895
897 STDMETHODIMP BrowserAccessibilityComWin::role(LONG* role) { 896 STDMETHODIMP BrowserAccessibilityComWin::role(LONG* role) {
898 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ROLE); 897 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ROLE);
899 if (!GetOwner() || !GetOwner()->instance_active()) 898 if (!GetOwner())
900 return E_FAIL; 899 return E_FAIL;
901 900
902 if (!role) 901 if (!role)
903 return E_INVALIDARG; 902 return E_INVALIDARG;
904 903
905 *role = ia2_role(); 904 *role = ia2_role();
906 return S_OK; 905 return S_OK;
907 } 906 }
908 907
909 STDMETHODIMP BrowserAccessibilityComWin::get_attributes(BSTR* attributes) { 908 STDMETHODIMP BrowserAccessibilityComWin::get_attributes(BSTR* attributes) {
910 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IA2_GET_ATTRIBUTES); 909 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IA2_GET_ATTRIBUTES);
911 if (!GetOwner() || !GetOwner()->instance_active()) 910 if (!GetOwner())
912 return E_FAIL; 911 return E_FAIL;
913 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 912 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
914 if (!attributes) 913 if (!attributes)
915 return E_INVALIDARG; 914 return E_INVALIDARG;
916 *attributes = nullptr; 915 *attributes = nullptr;
917 916
918 if (!GetOwner() || !GetOwner()->instance_active()) 917 if (!GetOwner())
919 return E_FAIL; 918 return E_FAIL;
920 919
921 base::string16 str; 920 base::string16 str;
922 for (const base::string16& attribute : ia2_attributes()) 921 for (const base::string16& attribute : ia2_attributes())
923 str += attribute + L';'; 922 str += attribute + L';';
924 923
925 if (str.empty()) 924 if (str.empty())
926 return S_FALSE; 925 return S_FALSE;
927 926
928 *attributes = SysAllocString(str.c_str()); 927 *attributes = SysAllocString(str.c_str());
929 DCHECK(*attributes); 928 DCHECK(*attributes);
930 return S_OK; 929 return S_OK;
931 } 930 }
932 931
933 STDMETHODIMP BrowserAccessibilityComWin::get_states(AccessibleStates* states) { 932 STDMETHODIMP BrowserAccessibilityComWin::get_states(AccessibleStates* states) {
934 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_STATES); 933 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_STATES);
935 if (!GetOwner() || !GetOwner()->instance_active()) 934 if (!GetOwner())
936 return E_FAIL; 935 return E_FAIL;
937 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 936 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
938 937
939 if (!states) 938 if (!states)
940 return E_INVALIDARG; 939 return E_INVALIDARG;
941 940
942 *states = ia2_state(); 941 *states = ia2_state();
943 942
944 return S_OK; 943 return S_OK;
945 } 944 }
946 945
947 STDMETHODIMP BrowserAccessibilityComWin::get_uniqueID(LONG* unique_id) { 946 STDMETHODIMP BrowserAccessibilityComWin::get_uniqueID(LONG* unique_id) {
948 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_UNIQUE_ID); 947 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_UNIQUE_ID);
949 if (!GetOwner() || !GetOwner()->instance_active()) 948 if (!GetOwner())
950 return E_FAIL; 949 return E_FAIL;
951 950
952 if (!unique_id) 951 if (!unique_id)
953 return E_INVALIDARG; 952 return E_INVALIDARG;
954 953
955 *unique_id = -GetOwner()->unique_id(); 954 *unique_id = -GetOwner()->unique_id();
956 return S_OK; 955 return S_OK;
957 } 956 }
958 957
959 STDMETHODIMP BrowserAccessibilityComWin::get_windowHandle(HWND* window_handle) { 958 STDMETHODIMP BrowserAccessibilityComWin::get_windowHandle(HWND* window_handle) {
960 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_WINDOW_HANDLE); 959 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_WINDOW_HANDLE);
961 if (!GetOwner() || !GetOwner()->instance_active()) 960 if (!GetOwner())
962 return E_FAIL; 961 return E_FAIL;
963 962
964 if (!window_handle) 963 if (!window_handle)
965 return E_INVALIDARG; 964 return E_INVALIDARG;
966 965
967 *window_handle = GetOwner() 966 *window_handle = GetOwner()
968 ->manager() 967 ->manager()
969 ->ToBrowserAccessibilityManagerWin() 968 ->ToBrowserAccessibilityManagerWin()
970 ->GetParentHWND(); 969 ->GetParentHWND();
971 if (!*window_handle) 970 if (!*window_handle)
972 return E_FAIL; 971 return E_FAIL;
973 972
974 return S_OK; 973 return S_OK;
975 } 974 }
976 975
977 STDMETHODIMP BrowserAccessibilityComWin::get_indexInParent( 976 STDMETHODIMP BrowserAccessibilityComWin::get_indexInParent(
978 LONG* index_in_parent) { 977 LONG* index_in_parent) {
979 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_INDEX_IN_PARENT); 978 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_INDEX_IN_PARENT);
980 if (!GetOwner() || !GetOwner()->instance_active()) 979 if (!GetOwner())
981 return E_FAIL; 980 return E_FAIL;
982 981
983 if (!index_in_parent) 982 if (!index_in_parent)
984 return E_INVALIDARG; 983 return E_INVALIDARG;
985 984
986 *index_in_parent = GetIndexInParent(); 985 *index_in_parent = GetIndexInParent();
987 return S_OK; 986 return S_OK;
988 } 987 }
989 988
990 STDMETHODIMP BrowserAccessibilityComWin::get_nRelations(LONG* n_relations) { 989 STDMETHODIMP BrowserAccessibilityComWin::get_nRelations(LONG* n_relations) {
991 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_RELATIONS); 990 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_RELATIONS);
992 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 991 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
993 if (!GetOwner() || !GetOwner()->instance_active()) 992 if (!GetOwner())
994 return E_FAIL; 993 return E_FAIL;
995 994
996 if (!n_relations) 995 if (!n_relations)
997 return E_INVALIDARG; 996 return E_INVALIDARG;
998 997
999 *n_relations = relations_.size(); 998 *n_relations = relations_.size();
1000 return S_OK; 999 return S_OK;
1001 } 1000 }
1002 1001
1003 STDMETHODIMP BrowserAccessibilityComWin::get_relation( 1002 STDMETHODIMP BrowserAccessibilityComWin::get_relation(
1004 LONG relation_index, 1003 LONG relation_index,
1005 IAccessibleRelation** relation) { 1004 IAccessibleRelation** relation) {
1006 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_RELATION); 1005 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_RELATION);
1007 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1006 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1008 if (!GetOwner() || !GetOwner()->instance_active()) 1007 if (!GetOwner())
1009 return E_FAIL; 1008 return E_FAIL;
1010 1009
1011 if (relation_index < 0 || 1010 if (relation_index < 0 ||
1012 relation_index >= static_cast<long>(relations_.size())) { 1011 relation_index >= static_cast<long>(relations_.size())) {
1013 return E_INVALIDARG; 1012 return E_INVALIDARG;
1014 } 1013 }
1015 1014
1016 if (!relation) 1015 if (!relation)
1017 return E_INVALIDARG; 1016 return E_INVALIDARG;
1018 1017
1019 relations_[relation_index]->AddRef(); 1018 relations_[relation_index]->AddRef();
1020 *relation = relations_[relation_index]; 1019 *relation = relations_[relation_index];
1021 return S_OK; 1020 return S_OK;
1022 } 1021 }
1023 1022
1024 STDMETHODIMP BrowserAccessibilityComWin::get_relations( 1023 STDMETHODIMP BrowserAccessibilityComWin::get_relations(
1025 LONG max_relations, 1024 LONG max_relations,
1026 IAccessibleRelation** relations, 1025 IAccessibleRelation** relations,
1027 LONG* n_relations) { 1026 LONG* n_relations) {
1028 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_RELATIONS); 1027 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_RELATIONS);
1029 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1028 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1030 if (!GetOwner() || !GetOwner()->instance_active()) 1029 if (!GetOwner())
1031 return E_FAIL; 1030 return E_FAIL;
1032 1031
1033 if (!relations || !n_relations) 1032 if (!relations || !n_relations)
1034 return E_INVALIDARG; 1033 return E_INVALIDARG;
1035 1034
1036 long count = static_cast<long>(relations_.size()); 1035 long count = static_cast<long>(relations_.size());
1037 *n_relations = count; 1036 *n_relations = count;
1038 if (count == 0) 1037 if (count == 0)
1039 return S_FALSE; 1038 return S_FALSE;
1040 1039
1041 for (long i = 0; i < count; ++i) { 1040 for (long i = 0; i < count; ++i) {
1042 relations_[i]->AddRef(); 1041 relations_[i]->AddRef();
1043 relations[i] = relations_[i]; 1042 relations[i] = relations_[i];
1044 } 1043 }
1045 1044
1046 return S_OK; 1045 return S_OK;
1047 } 1046 }
1048 1047
1049 STDMETHODIMP BrowserAccessibilityComWin::scrollTo(IA2ScrollType scroll_type) { 1048 STDMETHODIMP BrowserAccessibilityComWin::scrollTo(IA2ScrollType scroll_type) {
1050 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IA2_SCROLL_TO); 1049 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IA2_SCROLL_TO);
1051 if (!GetOwner() || !GetOwner()->instance_active()) 1050 if (!GetOwner())
1052 return E_FAIL; 1051 return E_FAIL;
1053 1052
1054 auto* manager = GetOwner()->manager(); 1053 auto* manager = GetOwner()->manager();
1055 1054
1056 if (!manager) 1055 if (!manager)
1057 return E_FAIL; 1056 return E_FAIL;
1058 1057
1059 gfx::Rect r = GetOwner()->GetFrameBoundsRect(); 1058 gfx::Rect r = GetOwner()->GetFrameBoundsRect();
1060 switch (scroll_type) { 1059 switch (scroll_type) {
1061 case IA2_SCROLL_TYPE_TOP_LEFT: 1060 case IA2_SCROLL_TYPE_TOP_LEFT:
(...skipping 26 matching lines...) Expand all
1088 } 1087 }
1089 1088
1090 return S_OK; 1089 return S_OK;
1091 } 1090 }
1092 1091
1093 STDMETHODIMP BrowserAccessibilityComWin::scrollToPoint( 1092 STDMETHODIMP BrowserAccessibilityComWin::scrollToPoint(
1094 IA2CoordinateType coordinate_type, 1093 IA2CoordinateType coordinate_type,
1095 LONG x, 1094 LONG x,
1096 LONG y) { 1095 LONG y) {
1097 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_TO_POINT); 1096 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_TO_POINT);
1098 if (!GetOwner() || !GetOwner()->instance_active()) 1097 if (!GetOwner())
1099 return E_FAIL; 1098 return E_FAIL;
1100 1099
1101 auto* manager = GetOwner()->manager(); 1100 auto* manager = GetOwner()->manager();
1102 if (!manager) 1101 if (!manager)
1103 return E_FAIL; 1102 return E_FAIL;
1104 1103
1105 gfx::Point scroll_to(x, y); 1104 gfx::Point scroll_to(x, y);
1106 1105
1107 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { 1106 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) {
1108 scroll_to -= manager->GetViewBounds().OffsetFromOrigin(); 1107 scroll_to -= manager->GetViewBounds().OffsetFromOrigin();
(...skipping 12 matching lines...) Expand all
1121 1120
1122 return S_OK; 1121 return S_OK;
1123 } 1122 }
1124 1123
1125 STDMETHODIMP BrowserAccessibilityComWin::get_groupPosition( 1124 STDMETHODIMP BrowserAccessibilityComWin::get_groupPosition(
1126 LONG* group_level, 1125 LONG* group_level,
1127 LONG* similar_items_in_group, 1126 LONG* similar_items_in_group,
1128 LONG* position_in_group) { 1127 LONG* position_in_group) {
1129 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_GROUP_POSITION); 1128 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_GROUP_POSITION);
1130 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1129 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1131 if (!GetOwner() || !GetOwner()->instance_active()) 1130 if (!GetOwner())
1132 return E_FAIL; 1131 return E_FAIL;
1133 1132
1134 if (!group_level || !similar_items_in_group || !position_in_group) 1133 if (!group_level || !similar_items_in_group || !position_in_group)
1135 return E_INVALIDARG; 1134 return E_INVALIDARG;
1136 1135
1137 *group_level = GetOwner()->GetIntAttribute(ui::AX_ATTR_HIERARCHICAL_LEVEL); 1136 *group_level = GetOwner()->GetIntAttribute(ui::AX_ATTR_HIERARCHICAL_LEVEL);
1138 *similar_items_in_group = GetOwner()->GetIntAttribute(ui::AX_ATTR_SET_SIZE); 1137 *similar_items_in_group = GetOwner()->GetIntAttribute(ui::AX_ATTR_SET_SIZE);
1139 *position_in_group = GetOwner()->GetIntAttribute(ui::AX_ATTR_POS_IN_SET); 1138 *position_in_group = GetOwner()->GetIntAttribute(ui::AX_ATTR_POS_IN_SET);
1140 1139
1141 if (*group_level == *similar_items_in_group == *position_in_group == 0) 1140 if (*group_level == *similar_items_in_group == *position_in_group == 0)
1142 return S_FALSE; 1141 return S_FALSE;
1143 return S_OK; 1142 return S_OK;
1144 } 1143 }
1145 1144
1146 STDMETHODIMP 1145 STDMETHODIMP
1147 BrowserAccessibilityComWin::get_localizedExtendedRole( 1146 BrowserAccessibilityComWin::get_localizedExtendedRole(
1148 BSTR* localized_extended_role) { 1147 BSTR* localized_extended_role) {
1149 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LOCALIZED_EXTENDED_ROLE); 1148 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LOCALIZED_EXTENDED_ROLE);
1150 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1149 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1151 if (!GetOwner() || !GetOwner()->instance_active()) 1150 if (!GetOwner())
1152 return E_FAIL; 1151 return E_FAIL;
1153 1152
1154 if (!localized_extended_role) 1153 if (!localized_extended_role)
1155 return E_INVALIDARG; 1154 return E_INVALIDARG;
1156 1155
1157 return GetStringAttributeAsBstr(ui::AX_ATTR_ROLE_DESCRIPTION, 1156 return GetStringAttributeAsBstr(ui::AX_ATTR_ROLE_DESCRIPTION,
1158 localized_extended_role); 1157 localized_extended_role);
1159 } 1158 }
1160 1159
1161 // 1160 //
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1195 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1194 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1196 return E_NOTIMPL; 1195 return E_NOTIMPL;
1197 } 1196 }
1198 1197
1199 // 1198 //
1200 // IAccessibleApplication methods. 1199 // IAccessibleApplication methods.
1201 // 1200 //
1202 1201
1203 STDMETHODIMP BrowserAccessibilityComWin::get_appName(BSTR* app_name) { 1202 STDMETHODIMP BrowserAccessibilityComWin::get_appName(BSTR* app_name) {
1204 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_APP_NAME); 1203 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_APP_NAME);
1205 // No need to check |GetOwner()| or |GetOwner->manager()| because this
1206 // interface is global, and doesn't depend on any local state.
1207 1204
1208 if (!app_name) 1205 if (!app_name)
1209 return E_INVALIDARG; 1206 return E_INVALIDARG;
1210 1207
1211 // GetProduct() returns a string like "Chrome/aa.bb.cc.dd", split out 1208 // GetProduct() returns a string like "Chrome/aa.bb.cc.dd", split out
1212 // the part before the "/". 1209 // the part before the "/".
1213 std::vector<std::string> product_components = 1210 std::vector<std::string> product_components =
1214 base::SplitString(GetContentClient()->GetProduct(), "/", 1211 base::SplitString(GetContentClient()->GetProduct(), "/",
1215 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); 1212 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
1216 DCHECK_EQ(2U, product_components.size()); 1213 DCHECK_EQ(2U, product_components.size());
1217 if (product_components.size() != 2) 1214 if (product_components.size() != 2)
1218 return E_FAIL; 1215 return E_FAIL;
1219 *app_name = SysAllocString(base::UTF8ToUTF16(product_components[0]).c_str()); 1216 *app_name = SysAllocString(base::UTF8ToUTF16(product_components[0]).c_str());
1220 DCHECK(*app_name); 1217 DCHECK(*app_name);
1221 return *app_name ? S_OK : E_FAIL; 1218 return *app_name ? S_OK : E_FAIL;
1222 } 1219 }
1223 1220
1224 STDMETHODIMP BrowserAccessibilityComWin::get_appVersion(BSTR* app_version) { 1221 STDMETHODIMP BrowserAccessibilityComWin::get_appVersion(BSTR* app_version) {
1225 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_APP_VERSION); 1222 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_APP_VERSION);
1226 // No need to check |GetOwner()->manager()| because this interface is
1227 // global, and doesn't depend on any local state.
1228 1223
1229 if (!app_version) 1224 if (!app_version)
1230 return E_INVALIDARG; 1225 return E_INVALIDARG;
1231 1226
1232 // GetProduct() returns a string like "Chrome/aa.bb.cc.dd", split out 1227 // GetProduct() returns a string like "Chrome/aa.bb.cc.dd", split out
1233 // the part after the "/". 1228 // the part after the "/".
1234 std::vector<std::string> product_components = 1229 std::vector<std::string> product_components =
1235 base::SplitString(GetContentClient()->GetProduct(), "/", 1230 base::SplitString(GetContentClient()->GetProduct(), "/",
1236 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); 1231 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
1237 DCHECK_EQ(2U, product_components.size()); 1232 DCHECK_EQ(2U, product_components.size());
(...skipping 29 matching lines...) Expand all
1267 DCHECK(*toolkit_version); 1262 DCHECK(*toolkit_version);
1268 return *toolkit_version ? S_OK : E_FAIL; 1263 return *toolkit_version ? S_OK : E_FAIL;
1269 } 1264 }
1270 1265
1271 // 1266 //
1272 // IAccessibleImage methods. 1267 // IAccessibleImage methods.
1273 // 1268 //
1274 1269
1275 STDMETHODIMP BrowserAccessibilityComWin::get_description(BSTR* desc) { 1270 STDMETHODIMP BrowserAccessibilityComWin::get_description(BSTR* desc) {
1276 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_DESCRIPTION); 1271 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_DESCRIPTION);
1277 if (!GetOwner() || !GetOwner()->instance_active()) 1272 if (!GetOwner())
1278 return E_FAIL; 1273 return E_FAIL;
1279 1274
1280 if (!desc) 1275 if (!desc)
1281 return E_INVALIDARG; 1276 return E_INVALIDARG;
1282 1277
1283 if (description().empty()) 1278 if (description().empty())
1284 return S_FALSE; 1279 return S_FALSE;
1285 1280
1286 *desc = SysAllocString(description().c_str()); 1281 *desc = SysAllocString(description().c_str());
1287 1282
1288 DCHECK(*desc); 1283 DCHECK(*desc);
1289 return S_OK; 1284 return S_OK;
1290 } 1285 }
1291 1286
1292 STDMETHODIMP BrowserAccessibilityComWin::get_imagePosition( 1287 STDMETHODIMP BrowserAccessibilityComWin::get_imagePosition(
1293 IA2CoordinateType coordinate_type, 1288 IA2CoordinateType coordinate_type,
1294 LONG* x, 1289 LONG* x,
1295 LONG* y) { 1290 LONG* y) {
1296 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IMAGE_POSITION); 1291 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IMAGE_POSITION);
1297 if (!GetOwner() || !GetOwner()->instance_active()) 1292 if (!GetOwner())
1298 return E_FAIL; 1293 return E_FAIL;
1299 1294
1300 if (!x || !y) 1295 if (!x || !y)
1301 return E_INVALIDARG; 1296 return E_INVALIDARG;
1302 1297
1303 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { 1298 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) {
1304 gfx::Rect bounds = GetOwner()->GetScreenBoundsRect(); 1299 gfx::Rect bounds = GetOwner()->GetScreenBoundsRect();
1305 *x = bounds.x(); 1300 *x = bounds.x();
1306 *y = bounds.y(); 1301 *y = bounds.y();
1307 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { 1302 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) {
1308 gfx::Rect bounds = GetOwner()->GetPageBoundsRect(); 1303 gfx::Rect bounds = GetOwner()->GetPageBoundsRect();
1309 gfx::Rect parent_bounds = 1304 gfx::Rect parent_bounds =
1310 GetOwner()->PlatformGetParent() 1305 GetOwner()->PlatformGetParent()
1311 ? GetOwner()->PlatformGetParent()->GetPageBoundsRect() 1306 ? GetOwner()->PlatformGetParent()->GetPageBoundsRect()
1312 : gfx::Rect(); 1307 : gfx::Rect();
1313 *x = bounds.x() - parent_bounds.x(); 1308 *x = bounds.x() - parent_bounds.x();
1314 *y = bounds.y() - parent_bounds.y(); 1309 *y = bounds.y() - parent_bounds.y();
1315 } else { 1310 } else {
1316 return E_INVALIDARG; 1311 return E_INVALIDARG;
1317 } 1312 }
1318 1313
1319 return S_OK; 1314 return S_OK;
1320 } 1315 }
1321 1316
1322 STDMETHODIMP BrowserAccessibilityComWin::get_imageSize(LONG* height, 1317 STDMETHODIMP BrowserAccessibilityComWin::get_imageSize(LONG* height,
1323 LONG* width) { 1318 LONG* width) {
1324 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IMAGE_SIZE); 1319 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IMAGE_SIZE);
1325 if (!GetOwner() || !GetOwner()->instance_active()) 1320 if (!GetOwner())
1326 return E_FAIL; 1321 return E_FAIL;
1327 1322
1328 if (!height || !width) 1323 if (!height || !width)
1329 return E_INVALIDARG; 1324 return E_INVALIDARG;
1330 1325
1331 *height = GetOwner()->GetPageBoundsRect().height(); 1326 *height = GetOwner()->GetPageBoundsRect().height();
1332 *width = GetOwner()->GetPageBoundsRect().width(); 1327 *width = GetOwner()->GetPageBoundsRect().width();
1333 return S_OK; 1328 return S_OK;
1334 } 1329 }
1335 1330
1336 // 1331 //
1337 // IAccessibleTable methods. 1332 // IAccessibleTable methods.
1338 // 1333 //
1339 1334
1340 STDMETHODIMP BrowserAccessibilityComWin::get_accessibleAt( 1335 STDMETHODIMP BrowserAccessibilityComWin::get_accessibleAt(
1341 long row, 1336 long row,
1342 long column, 1337 long column,
1343 IUnknown** accessible) { 1338 IUnknown** accessible) {
1344 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACCESSIBLE_AT); 1339 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACCESSIBLE_AT);
1345 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1340 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1346 if (!GetOwner() || !GetOwner()->instance_active()) 1341 if (!GetOwner())
1347 return E_FAIL; 1342 return E_FAIL;
1348 1343
1349 if (!accessible) 1344 if (!accessible)
1350 return E_INVALIDARG; 1345 return E_INVALIDARG;
1351 1346
1352 BrowserAccessibility* cell = 1347 BrowserAccessibility* cell =
1353 GetOwner()->GetTableCell(static_cast<int>(row), static_cast<int>(column)); 1348 GetOwner()->GetTableCell(static_cast<int>(row), static_cast<int>(column));
1354 if (cell && ToBrowserAccessibilityComWin(cell)) { 1349 if (cell && ToBrowserAccessibilityComWin(cell)) {
1355 *accessible = static_cast<IAccessible*>( 1350 *accessible = static_cast<IAccessible*>(
1356 ToBrowserAccessibilityComWin(cell)->NewReference()); 1351 ToBrowserAccessibilityComWin(cell)->NewReference());
1357 return S_OK; 1352 return S_OK;
1358 } 1353 }
1359 1354
1360 *accessible = nullptr; 1355 *accessible = nullptr;
1361 return E_INVALIDARG; 1356 return E_INVALIDARG;
1362 } 1357 }
1363 1358
1364 STDMETHODIMP BrowserAccessibilityComWin::get_caption(IUnknown** accessible) { 1359 STDMETHODIMP BrowserAccessibilityComWin::get_caption(IUnknown** accessible) {
1365 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CAPTION); 1360 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CAPTION);
1366 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1361 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1367 if (!GetOwner() || !GetOwner()->instance_active()) 1362 if (!GetOwner())
1368 return E_FAIL; 1363 return E_FAIL;
1369 1364
1370 if (!accessible) 1365 if (!accessible)
1371 return E_INVALIDARG; 1366 return E_INVALIDARG;
1372 1367
1373 // TODO(dmazzoni): implement 1368 // TODO(dmazzoni): implement
1374 *accessible = nullptr; 1369 *accessible = nullptr;
1375 return S_FALSE; 1370 return S_FALSE;
1376 } 1371 }
1377 1372
1378 STDMETHODIMP BrowserAccessibilityComWin::get_childIndex(long row, 1373 STDMETHODIMP BrowserAccessibilityComWin::get_childIndex(long row,
1379 long column, 1374 long column,
1380 long* cell_index) { 1375 long* cell_index) {
1381 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CHILD_INDEX); 1376 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CHILD_INDEX);
1382 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1377 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1383 if (!GetOwner() || !GetOwner()->instance_active()) 1378 if (!GetOwner())
1384 return E_FAIL; 1379 return E_FAIL;
1385 1380
1386 if (!cell_index) 1381 if (!cell_index)
1387 return E_INVALIDARG; 1382 return E_INVALIDARG;
1388 1383
1389 BrowserAccessibility* cell = 1384 BrowserAccessibility* cell =
1390 GetOwner()->GetTableCell(static_cast<int>(row), static_cast<int>(column)); 1385 GetOwner()->GetTableCell(static_cast<int>(row), static_cast<int>(column));
1391 if (cell) { 1386 if (cell) {
1392 *cell_index = static_cast<LONG>(cell->GetTableCellIndex()); 1387 *cell_index = static_cast<LONG>(cell->GetTableCellIndex());
1393 return S_OK; 1388 return S_OK;
1394 } 1389 }
1395 1390
1396 *cell_index = 0; 1391 *cell_index = 0;
1397 return E_INVALIDARG; 1392 return E_INVALIDARG;
1398 } 1393 }
1399 1394
1400 STDMETHODIMP BrowserAccessibilityComWin::get_columnDescription( 1395 STDMETHODIMP BrowserAccessibilityComWin::get_columnDescription(
1401 long column, 1396 long column,
1402 BSTR* description) { 1397 BSTR* description) {
1403 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_DESCRIPTION); 1398 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_DESCRIPTION);
1404 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1399 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1405 if (!GetOwner() || !GetOwner()->instance_active()) 1400 if (!GetOwner())
1406 return E_FAIL; 1401 return E_FAIL;
1407 1402
1408 if (!description) 1403 if (!description)
1409 return E_INVALIDARG; 1404 return E_INVALIDARG;
1410 1405
1411 int columns = GetOwner()->GetTableColumnCount(); 1406 int columns = GetOwner()->GetTableColumnCount();
1412 if (column < 0 || column >= columns) 1407 if (column < 0 || column >= columns)
1413 return E_INVALIDARG; 1408 return E_INVALIDARG;
1414 1409
1415 int rows = GetOwner()->GetTableRowCount(); 1410 int rows = GetOwner()->GetTableRowCount();
(...skipping 23 matching lines...) Expand all
1439 *description = nullptr; 1434 *description = nullptr;
1440 return S_FALSE; 1435 return S_FALSE;
1441 } 1436 }
1442 1437
1443 STDMETHODIMP BrowserAccessibilityComWin::get_columnExtentAt( 1438 STDMETHODIMP BrowserAccessibilityComWin::get_columnExtentAt(
1444 long row, 1439 long row,
1445 long column, 1440 long column,
1446 long* n_columns_spanned) { 1441 long* n_columns_spanned) {
1447 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_EXTENT_AT); 1442 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_EXTENT_AT);
1448 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1443 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1449 if (!GetOwner() || !GetOwner()->instance_active()) 1444 if (!GetOwner())
1450 return E_FAIL; 1445 return E_FAIL;
1451 1446
1452 if (!n_columns_spanned) 1447 if (!n_columns_spanned)
1453 return E_INVALIDARG; 1448 return E_INVALIDARG;
1454 1449
1455 BrowserAccessibility* cell = 1450 BrowserAccessibility* cell =
1456 GetOwner()->GetTableCell(static_cast<int>(row), static_cast<int>(column)); 1451 GetOwner()->GetTableCell(static_cast<int>(row), static_cast<int>(column));
1457 if (!cell) 1452 if (!cell)
1458 return E_INVALIDARG; 1453 return E_INVALIDARG;
1459 1454
1460 *n_columns_spanned = cell->GetTableColumnSpan(); 1455 *n_columns_spanned = cell->GetTableColumnSpan();
1461 return S_OK; 1456 return S_OK;
1462 } 1457 }
1463 1458
1464 STDMETHODIMP BrowserAccessibilityComWin::get_columnHeader( 1459 STDMETHODIMP BrowserAccessibilityComWin::get_columnHeader(
1465 IAccessibleTable** accessible_table, 1460 IAccessibleTable** accessible_table,
1466 long* starting_row_index) { 1461 long* starting_row_index) {
1467 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_HEADER); 1462 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_HEADER);
1468 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1463 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1469 // TODO(dmazzoni): implement 1464 // TODO(dmazzoni): implement
1470 return E_NOTIMPL; 1465 return E_NOTIMPL;
1471 } 1466 }
1472 1467
1473 STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long cell_index, 1468 STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long cell_index,
1474 long* column_index) { 1469 long* column_index) {
1475 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_INDEX); 1470 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_INDEX);
1476 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1471 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1477 if (!GetOwner() || !GetOwner()->instance_active()) 1472 if (!GetOwner())
1478 return E_FAIL; 1473 return E_FAIL;
1479 1474
1480 if (!column_index) 1475 if (!column_index)
1481 return E_INVALIDARG; 1476 return E_INVALIDARG;
1482 1477
1483 BrowserAccessibility* cell = GetOwner()->GetTableCell(cell_index); 1478 BrowserAccessibility* cell = GetOwner()->GetTableCell(cell_index);
1484 if (!cell) 1479 if (!cell)
1485 return E_INVALIDARG; 1480 return E_INVALIDARG;
1486 *column_index = cell->GetTableColumn(); 1481 *column_index = cell->GetTableColumn();
1487 return S_OK; 1482 return S_OK;
1488 } 1483 }
1489 1484
1490 STDMETHODIMP BrowserAccessibilityComWin::get_nColumns(long* column_count) { 1485 STDMETHODIMP BrowserAccessibilityComWin::get_nColumns(long* column_count) {
1491 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_COLUMNS); 1486 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_COLUMNS);
1492 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1487 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1493 if (!GetOwner() || !GetOwner()->instance_active()) 1488 if (!GetOwner())
1494 return E_FAIL; 1489 return E_FAIL;
1495 1490
1496 if (!column_count) 1491 if (!column_count)
1497 return E_INVALIDARG; 1492 return E_INVALIDARG;
1498 1493
1499 *column_count = GetOwner()->GetTableColumnCount(); 1494 *column_count = GetOwner()->GetTableColumnCount();
1500 return S_OK; 1495 return S_OK;
1501 } 1496 }
1502 1497
1503 STDMETHODIMP BrowserAccessibilityComWin::get_nRows(long* row_count) { 1498 STDMETHODIMP BrowserAccessibilityComWin::get_nRows(long* row_count) {
1504 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_ROWS); 1499 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_ROWS);
1505 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1500 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1506 if (!GetOwner() || !GetOwner()->instance_active()) 1501 if (!GetOwner())
1507 return E_FAIL; 1502 return E_FAIL;
1508 1503
1509 if (!row_count) 1504 if (!row_count)
1510 return E_INVALIDARG; 1505 return E_INVALIDARG;
1511 1506
1512 *row_count = GetOwner()->GetTableRowCount(); 1507 *row_count = GetOwner()->GetTableRowCount();
1513 return S_OK; 1508 return S_OK;
1514 } 1509 }
1515 1510
1516 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedChildren( 1511 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedChildren(
1517 long* cell_count) { 1512 long* cell_count) {
1518 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_CHILDREN); 1513 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_CHILDREN);
1519 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1514 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1520 if (!GetOwner() || !GetOwner()->instance_active()) 1515 if (!GetOwner())
1521 return E_FAIL; 1516 return E_FAIL;
1522 1517
1523 if (!cell_count) 1518 if (!cell_count)
1524 return E_INVALIDARG; 1519 return E_INVALIDARG;
1525 1520
1526 // TODO(dmazzoni): add support for selected cells/rows/columns in tables. 1521 // TODO(dmazzoni): add support for selected cells/rows/columns in tables.
1527 *cell_count = 0; 1522 *cell_count = 0;
1528 return S_FALSE; 1523 return S_FALSE;
1529 } 1524 }
1530 1525
1531 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedColumns( 1526 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedColumns(
1532 long* column_count) { 1527 long* column_count) {
1533 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_COLUMNS); 1528 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_COLUMNS);
1534 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1529 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1535 if (!GetOwner() || !GetOwner()->instance_active()) 1530 if (!GetOwner())
1536 return E_FAIL; 1531 return E_FAIL;
1537 1532
1538 if (!column_count) 1533 if (!column_count)
1539 return E_INVALIDARG; 1534 return E_INVALIDARG;
1540 1535
1541 *column_count = 0; 1536 *column_count = 0;
1542 return S_FALSE; 1537 return S_FALSE;
1543 } 1538 }
1544 1539
1545 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedRows(long* row_count) { 1540 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedRows(long* row_count) {
1546 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_ROWS); 1541 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_ROWS);
1547 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1542 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1548 if (!GetOwner() || !GetOwner()->instance_active()) 1543 if (!GetOwner())
1549 return E_FAIL; 1544 return E_FAIL;
1550 1545
1551 if (!row_count) 1546 if (!row_count)
1552 return E_INVALIDARG; 1547 return E_INVALIDARG;
1553 1548
1554 *row_count = 0; 1549 *row_count = 0;
1555 return S_FALSE; 1550 return S_FALSE;
1556 } 1551 }
1557 1552
1558 STDMETHODIMP BrowserAccessibilityComWin::get_rowDescription(long row, 1553 STDMETHODIMP BrowserAccessibilityComWin::get_rowDescription(long row,
1559 BSTR* description) { 1554 BSTR* description) {
1560 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_DESCRIPTION); 1555 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_DESCRIPTION);
1561 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1556 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1562 if (!GetOwner() || !GetOwner()->instance_active()) 1557 if (!GetOwner())
1563 return E_FAIL; 1558 return E_FAIL;
1564 1559
1565 if (!description) 1560 if (!description)
1566 return E_INVALIDARG; 1561 return E_INVALIDARG;
1567 1562
1568 if (row < 0 || row >= GetOwner()->GetTableRowCount()) 1563 if (row < 0 || row >= GetOwner()->GetTableRowCount())
1569 return E_INVALIDARG; 1564 return E_INVALIDARG;
1570 1565
1571 int columns = GetOwner()->GetTableColumnCount(); 1566 int columns = GetOwner()->GetTableColumnCount();
1572 if (columns <= 0) { 1567 if (columns <= 0) {
(...skipping 21 matching lines...) Expand all
1594 1589
1595 *description = nullptr; 1590 *description = nullptr;
1596 return S_FALSE; 1591 return S_FALSE;
1597 } 1592 }
1598 1593
1599 STDMETHODIMP BrowserAccessibilityComWin::get_rowExtentAt(long row, 1594 STDMETHODIMP BrowserAccessibilityComWin::get_rowExtentAt(long row,
1600 long column, 1595 long column,
1601 long* n_rows_spanned) { 1596 long* n_rows_spanned) {
1602 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_EXTENT_AT); 1597 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_EXTENT_AT);
1603 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1598 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1604 if (!GetOwner() || !GetOwner()->instance_active()) 1599 if (!GetOwner())
1605 return E_FAIL; 1600 return E_FAIL;
1606 1601
1607 if (!n_rows_spanned) 1602 if (!n_rows_spanned)
1608 return E_INVALIDARG; 1603 return E_INVALIDARG;
1609 1604
1610 BrowserAccessibility* cell = GetOwner()->GetTableCell(row, column); 1605 BrowserAccessibility* cell = GetOwner()->GetTableCell(row, column);
1611 if (!cell) 1606 if (!cell)
1612 return E_INVALIDARG; 1607 return E_INVALIDARG;
1613 1608
1614 *n_rows_spanned = GetOwner()->GetTableRowSpan(); 1609 *n_rows_spanned = GetOwner()->GetTableRowSpan();
1615 return S_OK; 1610 return S_OK;
1616 } 1611 }
1617 1612
1618 STDMETHODIMP BrowserAccessibilityComWin::get_rowHeader( 1613 STDMETHODIMP BrowserAccessibilityComWin::get_rowHeader(
1619 IAccessibleTable** accessible_table, 1614 IAccessibleTable** accessible_table,
1620 long* starting_column_index) { 1615 long* starting_column_index) {
1621 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_HEADER); 1616 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_HEADER);
1622 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1617 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1623 // TODO(dmazzoni): implement 1618 // TODO(dmazzoni): implement
1624 return E_NOTIMPL; 1619 return E_NOTIMPL;
1625 } 1620 }
1626 1621
1627 STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long cell_index, 1622 STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long cell_index,
1628 long* row_index) { 1623 long* row_index) {
1629 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_INDEX); 1624 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_INDEX);
1630 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1625 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1631 if (!GetOwner() || !GetOwner()->instance_active()) 1626 if (!GetOwner())
1632 return E_FAIL; 1627 return E_FAIL;
1633 1628
1634 if (!row_index) 1629 if (!row_index)
1635 return E_INVALIDARG; 1630 return E_INVALIDARG;
1636 1631
1637 BrowserAccessibility* cell = GetOwner()->GetTableCell(cell_index); 1632 BrowserAccessibility* cell = GetOwner()->GetTableCell(cell_index);
1638 if (!cell) 1633 if (!cell)
1639 return E_INVALIDARG; 1634 return E_INVALIDARG;
1640 1635
1641 *row_index = cell->GetTableRow(); 1636 *row_index = cell->GetTableRow();
1642 return S_OK; 1637 return S_OK;
1643 } 1638 }
1644 1639
1645 STDMETHODIMP BrowserAccessibilityComWin::get_selectedChildren( 1640 STDMETHODIMP BrowserAccessibilityComWin::get_selectedChildren(
1646 long max_children, 1641 long max_children,
1647 long** children, 1642 long** children,
1648 long* n_children) { 1643 long* n_children) {
1649 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTED_CHILDREN); 1644 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTED_CHILDREN);
1650 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1645 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1651 if (!GetOwner() || !GetOwner()->instance_active()) 1646 if (!GetOwner())
1652 return E_FAIL; 1647 return E_FAIL;
1653 1648
1654 if (!children || !n_children) 1649 if (!children || !n_children)
1655 return E_INVALIDARG; 1650 return E_INVALIDARG;
1656 1651
1657 // TODO(dmazzoni): Implement this. 1652 // TODO(dmazzoni): Implement this.
1658 *n_children = 0; 1653 *n_children = 0;
1659 return S_FALSE; 1654 return S_FALSE;
1660 } 1655 }
1661 1656
1662 STDMETHODIMP BrowserAccessibilityComWin::get_selectedColumns(long max_columns, 1657 STDMETHODIMP BrowserAccessibilityComWin::get_selectedColumns(long max_columns,
1663 long** columns, 1658 long** columns,
1664 long* n_columns) { 1659 long* n_columns) {
1665 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTED_COLUMNS); 1660 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTED_COLUMNS);
1666 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1661 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1667 if (!GetOwner() || !GetOwner()->instance_active()) 1662 if (!GetOwner())
1668 return E_FAIL; 1663 return E_FAIL;
1669 1664
1670 if (!columns || !n_columns) 1665 if (!columns || !n_columns)
1671 return E_INVALIDARG; 1666 return E_INVALIDARG;
1672 1667
1673 // TODO(dmazzoni): Implement this. 1668 // TODO(dmazzoni): Implement this.
1674 *n_columns = 0; 1669 *n_columns = 0;
1675 return S_FALSE; 1670 return S_FALSE;
1676 } 1671 }
1677 1672
1678 STDMETHODIMP BrowserAccessibilityComWin::get_selectedRows(long max_rows, 1673 STDMETHODIMP BrowserAccessibilityComWin::get_selectedRows(long max_rows,
1679 long** rows, 1674 long** rows,
1680 long* n_rows) { 1675 long* n_rows) {
1681 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTED_ROWS); 1676 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTED_ROWS);
1682 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1677 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1683 if (!GetOwner() || !GetOwner()->instance_active()) 1678 if (!GetOwner())
1684 return E_FAIL; 1679 return E_FAIL;
1685 1680
1686 if (!rows || !n_rows) 1681 if (!rows || !n_rows)
1687 return E_INVALIDARG; 1682 return E_INVALIDARG;
1688 1683
1689 // TODO(dmazzoni): Implement this. 1684 // TODO(dmazzoni): Implement this.
1690 *n_rows = 0; 1685 *n_rows = 0;
1691 return S_FALSE; 1686 return S_FALSE;
1692 } 1687 }
1693 1688
1694 STDMETHODIMP BrowserAccessibilityComWin::get_summary(IUnknown** accessible) { 1689 STDMETHODIMP BrowserAccessibilityComWin::get_summary(IUnknown** accessible) {
1695 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SUMMARY); 1690 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SUMMARY);
1696 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1691 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1697 if (!GetOwner() || !GetOwner()->instance_active()) 1692 if (!GetOwner())
1698 return E_FAIL; 1693 return E_FAIL;
1699 1694
1700 if (!accessible) 1695 if (!accessible)
1701 return E_INVALIDARG; 1696 return E_INVALIDARG;
1702 1697
1703 // TODO(dmazzoni): implement 1698 // TODO(dmazzoni): implement
1704 *accessible = nullptr; 1699 *accessible = nullptr;
1705 return S_FALSE; 1700 return S_FALSE;
1706 } 1701 }
1707 1702
1708 STDMETHODIMP BrowserAccessibilityComWin::get_isColumnSelected( 1703 STDMETHODIMP BrowserAccessibilityComWin::get_isColumnSelected(
1709 long column, 1704 long column,
1710 boolean* is_selected) { 1705 boolean* is_selected) {
1711 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IS_COLUMN_SELECTED); 1706 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IS_COLUMN_SELECTED);
1712 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1707 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1713 if (!GetOwner() || !GetOwner()->instance_active()) 1708 if (!GetOwner())
1714 return E_FAIL; 1709 return E_FAIL;
1715 1710
1716 if (!is_selected) 1711 if (!is_selected)
1717 return E_INVALIDARG; 1712 return E_INVALIDARG;
1718 1713
1719 // TODO(dmazzoni): Implement this. 1714 // TODO(dmazzoni): Implement this.
1720 *is_selected = false; 1715 *is_selected = false;
1721 return S_OK; 1716 return S_OK;
1722 } 1717 }
1723 1718
1724 STDMETHODIMP BrowserAccessibilityComWin::get_isRowSelected( 1719 STDMETHODIMP BrowserAccessibilityComWin::get_isRowSelected(
1725 long row, 1720 long row,
1726 boolean* is_selected) { 1721 boolean* is_selected) {
1727 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IS_ROW_SELECTED); 1722 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IS_ROW_SELECTED);
1728 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1723 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1729 if (!GetOwner() || !GetOwner()->instance_active()) 1724 if (!GetOwner())
1730 return E_FAIL; 1725 return E_FAIL;
1731 1726
1732 if (!is_selected) 1727 if (!is_selected)
1733 return E_INVALIDARG; 1728 return E_INVALIDARG;
1734 1729
1735 // TODO(dmazzoni): Implement this. 1730 // TODO(dmazzoni): Implement this.
1736 *is_selected = false; 1731 *is_selected = false;
1737 return S_OK; 1732 return S_OK;
1738 } 1733 }
1739 1734
1740 STDMETHODIMP BrowserAccessibilityComWin::get_isSelected(long row, 1735 STDMETHODIMP BrowserAccessibilityComWin::get_isSelected(long row,
1741 long column, 1736 long column,
1742 boolean* is_selected) { 1737 boolean* is_selected) {
1743 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IS_SELECTED); 1738 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_IS_SELECTED);
1744 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1739 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1745 if (!GetOwner() || !GetOwner()->instance_active()) 1740 if (!GetOwner())
1746 return E_FAIL; 1741 return E_FAIL;
1747 1742
1748 if (!is_selected) 1743 if (!is_selected)
1749 return E_INVALIDARG; 1744 return E_INVALIDARG;
1750 1745
1751 // TODO(dmazzoni): Implement this. 1746 // TODO(dmazzoni): Implement this.
1752 *is_selected = false; 1747 *is_selected = false;
1753 return S_OK; 1748 return S_OK;
1754 } 1749 }
1755 1750
1756 STDMETHODIMP BrowserAccessibilityComWin::get_rowColumnExtentsAtIndex( 1751 STDMETHODIMP BrowserAccessibilityComWin::get_rowColumnExtentsAtIndex(
1757 long index, 1752 long index,
1758 long* row, 1753 long* row,
1759 long* column, 1754 long* column,
1760 long* row_extents, 1755 long* row_extents,
1761 long* column_extents, 1756 long* column_extents,
1762 boolean* is_selected) { 1757 boolean* is_selected) {
1763 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_COLUMN_EXTENTS_AT_INDEX); 1758 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_COLUMN_EXTENTS_AT_INDEX);
1764 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1759 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1765 if (!GetOwner() || !GetOwner()->instance_active()) 1760 if (!GetOwner())
1766 return E_FAIL; 1761 return E_FAIL;
1767 1762
1768 if (!row || !column || !row_extents || !column_extents || !is_selected) 1763 if (!row || !column || !row_extents || !column_extents || !is_selected)
1769 return E_INVALIDARG; 1764 return E_INVALIDARG;
1770 1765
1771 BrowserAccessibility* cell = GetOwner()->GetTableCell(index); 1766 BrowserAccessibility* cell = GetOwner()->GetTableCell(index);
1772 if (!cell) 1767 if (!cell)
1773 return E_INVALIDARG; 1768 return E_INVALIDARG;
1774 1769
1775 *row = cell->GetTableRow(); 1770 *row = cell->GetTableRow();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1812 1807
1813 // 1808 //
1814 // IAccessibleTable2 methods. 1809 // IAccessibleTable2 methods.
1815 // 1810 //
1816 1811
1817 STDMETHODIMP BrowserAccessibilityComWin::get_cellAt(long row, 1812 STDMETHODIMP BrowserAccessibilityComWin::get_cellAt(long row,
1818 long column, 1813 long column,
1819 IUnknown** cell) { 1814 IUnknown** cell) {
1820 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CELL_AT); 1815 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CELL_AT);
1821 AddAccessibilityModeFlags(AccessibilityMode::kScreenReader); 1816 AddAccessibilityModeFlags(AccessibilityMode::kScreenReader);
1822 if (!GetOwner() || !GetOwner()->instance_active()) 1817 if (!GetOwner())
1823 return E_FAIL; 1818 return E_FAIL;
1824 1819
1825 if (!cell) 1820 if (!cell)
1826 return E_INVALIDARG; 1821 return E_INVALIDARG;
1827 1822
1828 BrowserAccessibility* table_cell = 1823 BrowserAccessibility* table_cell =
1829 GetOwner()->GetTableCell(static_cast<int>(row), static_cast<int>(column)); 1824 GetOwner()->GetTableCell(static_cast<int>(row), static_cast<int>(column));
1830 if (ToBrowserAccessibilityComWin(table_cell)) { 1825 if (ToBrowserAccessibilityComWin(table_cell)) {
1831 return ToBrowserAccessibilityComWin(table_cell) 1826 return ToBrowserAccessibilityComWin(table_cell)
1832 ->QueryInterface(IID_IUnknown, reinterpret_cast<void**>(cell)); 1827 ->QueryInterface(IID_IUnknown, reinterpret_cast<void**>(cell));
1833 } 1828 }
1834 1829
1835 *cell = nullptr; 1830 *cell = nullptr;
1836 return E_INVALIDARG; 1831 return E_INVALIDARG;
1837 } 1832 }
1838 1833
1839 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedCells(long* cell_count) { 1834 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedCells(long* cell_count) {
1840 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_CELLS); 1835 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_CELLS);
1841 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1836 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1842 return get_nSelectedChildren(cell_count); 1837 return get_nSelectedChildren(cell_count);
1843 } 1838 }
1844 1839
1845 STDMETHODIMP BrowserAccessibilityComWin::get_selectedCells( 1840 STDMETHODIMP BrowserAccessibilityComWin::get_selectedCells(
1846 IUnknown*** cells, 1841 IUnknown*** cells,
1847 long* n_selected_cells) { 1842 long* n_selected_cells) {
1848 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTED_CELLS); 1843 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTED_CELLS);
1849 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1844 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1850 if (!GetOwner() || !GetOwner()->instance_active()) 1845 if (!GetOwner())
1851 return E_FAIL; 1846 return E_FAIL;
1852 1847
1853 if (!cells || !n_selected_cells) 1848 if (!cells || !n_selected_cells)
1854 return E_INVALIDARG; 1849 return E_INVALIDARG;
1855 1850
1856 // TODO(dmazzoni): Implement this. 1851 // TODO(dmazzoni): Implement this.
1857 *n_selected_cells = 0; 1852 *n_selected_cells = 0;
1858 return S_OK; 1853 return S_OK;
1859 } 1854 }
1860 1855
1861 STDMETHODIMP BrowserAccessibilityComWin::get_selectedColumns(long** columns, 1856 STDMETHODIMP BrowserAccessibilityComWin::get_selectedColumns(long** columns,
1862 long* n_columns) { 1857 long* n_columns) {
1863 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLE2_GET_SELECTED_COLUMNS); 1858 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLE2_GET_SELECTED_COLUMNS);
1864 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1859 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1865 if (!GetOwner() || !GetOwner()->instance_active()) 1860 if (!GetOwner())
1866 return E_FAIL; 1861 return E_FAIL;
1867 1862
1868 if (!columns || !n_columns) 1863 if (!columns || !n_columns)
1869 return E_INVALIDARG; 1864 return E_INVALIDARG;
1870 1865
1871 // TODO(dmazzoni): Implement this. 1866 // TODO(dmazzoni): Implement this.
1872 *n_columns = 0; 1867 *n_columns = 0;
1873 return S_OK; 1868 return S_OK;
1874 } 1869 }
1875 1870
1876 STDMETHODIMP BrowserAccessibilityComWin::get_selectedRows(long** rows, 1871 STDMETHODIMP BrowserAccessibilityComWin::get_selectedRows(long** rows,
1877 long* n_rows) { 1872 long* n_rows) {
1878 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLE2_GET_SELECTED_ROWS); 1873 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLE2_GET_SELECTED_ROWS);
1879 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1874 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1880 if (!GetOwner() || !GetOwner()->instance_active()) 1875 if (!GetOwner())
1881 return E_FAIL; 1876 return E_FAIL;
1882 1877
1883 if (!rows || !n_rows) 1878 if (!rows || !n_rows)
1884 return E_INVALIDARG; 1879 return E_INVALIDARG;
1885 1880
1886 // TODO(dmazzoni): Implement this. 1881 // TODO(dmazzoni): Implement this.
1887 *n_rows = 0; 1882 *n_rows = 0;
1888 return S_OK; 1883 return S_OK;
1889 } 1884 }
1890 1885
1891 // 1886 //
1892 // IAccessibleTableCell methods. 1887 // IAccessibleTableCell methods.
1893 // 1888 //
1894 1889
1895 STDMETHODIMP BrowserAccessibilityComWin::get_columnExtent( 1890 STDMETHODIMP BrowserAccessibilityComWin::get_columnExtent(
1896 long* n_columns_spanned) { 1891 long* n_columns_spanned) {
1897 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_EXTENT); 1892 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_EXTENT);
1898 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1893 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1899 if (!GetOwner() || !GetOwner()->instance_active()) 1894 if (!GetOwner())
1900 return E_FAIL; 1895 return E_FAIL;
1901 1896
1902 if (!n_columns_spanned) 1897 if (!n_columns_spanned)
1903 return E_INVALIDARG; 1898 return E_INVALIDARG;
1904 1899
1905 *n_columns_spanned = GetOwner()->GetTableColumnSpan(); 1900 *n_columns_spanned = GetOwner()->GetTableColumnSpan();
1906 return S_OK; 1901 return S_OK;
1907 } 1902 }
1908 1903
1909 STDMETHODIMP BrowserAccessibilityComWin::get_columnHeaderCells( 1904 STDMETHODIMP BrowserAccessibilityComWin::get_columnHeaderCells(
1910 IUnknown*** cell_accessibles, 1905 IUnknown*** cell_accessibles,
1911 long* n_column_header_cells) { 1906 long* n_column_header_cells) {
1912 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_HEADER_CELLS); 1907 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_HEADER_CELLS);
1913 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1908 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1914 if (!GetOwner() || !GetOwner()->instance_active()) 1909 if (!GetOwner())
1915 return E_FAIL; 1910 return E_FAIL;
1916 1911
1917 if (!cell_accessibles || !n_column_header_cells) 1912 if (!cell_accessibles || !n_column_header_cells)
1918 return E_INVALIDARG; 1913 return E_INVALIDARG;
1919 1914
1920 *n_column_header_cells = 0; 1915 *n_column_header_cells = 0;
1921 BrowserAccessibility* table = GetOwner()->GetTable(); 1916 BrowserAccessibility* table = GetOwner()->GetTable();
1922 if (!table) { 1917 if (!table) {
1923 NOTREACHED(); 1918 NOTREACHED();
1924 return S_FALSE; 1919 return S_FALSE;
(...skipping 22 matching lines...) Expand all
1947 ++index; 1942 ++index;
1948 } 1943 }
1949 } 1944 }
1950 1945
1951 return S_OK; 1946 return S_OK;
1952 } 1947 }
1953 1948
1954 STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long* column_index) { 1949 STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long* column_index) {
1955 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_COLUMN_INDEX); 1950 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_COLUMN_INDEX);
1956 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1951 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1957 if (!GetOwner() || !GetOwner()->instance_active()) 1952 if (!GetOwner())
1958 return E_FAIL; 1953 return E_FAIL;
1959 1954
1960 if (!column_index) 1955 if (!column_index)
1961 return E_INVALIDARG; 1956 return E_INVALIDARG;
1962 1957
1963 *column_index = GetOwner()->GetTableColumn(); 1958 *column_index = GetOwner()->GetTableColumn();
1964 return S_OK; 1959 return S_OK;
1965 } 1960 }
1966 1961
1967 STDMETHODIMP BrowserAccessibilityComWin::get_rowExtent(long* n_rows_spanned) { 1962 STDMETHODIMP BrowserAccessibilityComWin::get_rowExtent(long* n_rows_spanned) {
1968 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_EXTENT); 1963 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_EXTENT);
1969 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1964 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1970 if (!GetOwner() || !GetOwner()->instance_active()) 1965 if (!GetOwner())
1971 return E_FAIL; 1966 return E_FAIL;
1972 1967
1973 if (!n_rows_spanned) 1968 if (!n_rows_spanned)
1974 return E_INVALIDARG; 1969 return E_INVALIDARG;
1975 1970
1976 *n_rows_spanned = GetOwner()->GetTableRowSpan(); 1971 *n_rows_spanned = GetOwner()->GetTableRowSpan();
1977 return S_OK; 1972 return S_OK;
1978 } 1973 }
1979 1974
1980 STDMETHODIMP BrowserAccessibilityComWin::get_rowHeaderCells( 1975 STDMETHODIMP BrowserAccessibilityComWin::get_rowHeaderCells(
1981 IUnknown*** cell_accessibles, 1976 IUnknown*** cell_accessibles,
1982 long* n_row_header_cells) { 1977 long* n_row_header_cells) {
1983 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_HEADER_CELLS); 1978 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_HEADER_CELLS);
1984 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 1979 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
1985 if (!GetOwner() || !GetOwner()->instance_active()) 1980 if (!GetOwner())
1986 return E_FAIL; 1981 return E_FAIL;
1987 1982
1988 if (!cell_accessibles || !n_row_header_cells) 1983 if (!cell_accessibles || !n_row_header_cells)
1989 return E_INVALIDARG; 1984 return E_INVALIDARG;
1990 1985
1991 *n_row_header_cells = 0; 1986 *n_row_header_cells = 0;
1992 BrowserAccessibility* table = GetOwner()->GetTable(); 1987 BrowserAccessibility* table = GetOwner()->GetTable();
1993 if (!table) { 1988 if (!table) {
1994 NOTREACHED(); 1989 NOTREACHED();
1995 return S_FALSE; 1990 return S_FALSE;
(...skipping 22 matching lines...) Expand all
2018 ++index; 2013 ++index;
2019 } 2014 }
2020 } 2015 }
2021 2016
2022 return S_OK; 2017 return S_OK;
2023 } 2018 }
2024 2019
2025 STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long* row_index) { 2020 STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long* row_index) {
2026 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_ROW_INDEX); 2021 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_ROW_INDEX);
2027 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2022 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2028 if (!GetOwner() || !GetOwner()->instance_active()) 2023 if (!GetOwner())
2029 return E_FAIL; 2024 return E_FAIL;
2030 2025
2031 if (!row_index) 2026 if (!row_index)
2032 return E_INVALIDARG; 2027 return E_INVALIDARG;
2033 2028
2034 *row_index = GetOwner()->GetTableRow(); 2029 *row_index = GetOwner()->GetTableRow();
2035 return S_OK; 2030 return S_OK;
2036 } 2031 }
2037 2032
2038 STDMETHODIMP BrowserAccessibilityComWin::get_isSelected(boolean* is_selected) { 2033 STDMETHODIMP BrowserAccessibilityComWin::get_isSelected(boolean* is_selected) {
2039 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_IS_SELECTED); 2034 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_IS_SELECTED);
2040 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2035 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2041 if (!GetOwner() || !GetOwner()->instance_active()) 2036 if (!GetOwner())
2042 return E_FAIL; 2037 return E_FAIL;
2043 2038
2044 if (!is_selected) 2039 if (!is_selected)
2045 return E_INVALIDARG; 2040 return E_INVALIDARG;
2046 2041
2047 *is_selected = false; 2042 *is_selected = false;
2048 return S_OK; 2043 return S_OK;
2049 } 2044 }
2050 2045
2051 STDMETHODIMP BrowserAccessibilityComWin::get_rowColumnExtents( 2046 STDMETHODIMP BrowserAccessibilityComWin::get_rowColumnExtents(
2052 long* row_index, 2047 long* row_index,
2053 long* column_index, 2048 long* column_index,
2054 long* row_extents, 2049 long* row_extents,
2055 long* column_extents, 2050 long* column_extents,
2056 boolean* is_selected) { 2051 boolean* is_selected) {
2057 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_COLUMN_EXTENTS); 2052 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_COLUMN_EXTENTS);
2058 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2053 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2059 if (!GetOwner() || !GetOwner()->instance_active()) 2054 if (!GetOwner())
2060 return E_FAIL; 2055 return E_FAIL;
2061 2056
2062 if (!row_index || !column_index || !row_extents || !column_extents || 2057 if (!row_index || !column_index || !row_extents || !column_extents ||
2063 !is_selected) { 2058 !is_selected) {
2064 return E_INVALIDARG; 2059 return E_INVALIDARG;
2065 } 2060 }
2066 2061
2067 *row_index = GetOwner()->GetTableRow(); 2062 *row_index = GetOwner()->GetTableRow();
2068 *column_index = GetOwner()->GetTableColumn(); 2063 *column_index = GetOwner()->GetTableColumn();
2069 *row_extents = GetOwner()->GetTableRowSpan(); 2064 *row_extents = GetOwner()->GetTableRowSpan();
2070 *column_extents = GetOwner()->GetTableColumnSpan(); 2065 *column_extents = GetOwner()->GetTableColumnSpan();
2071 *is_selected = false; // Not supported. 2066 *is_selected = false; // Not supported.
2072 2067
2073 return S_OK; 2068 return S_OK;
2074 } 2069 }
2075 2070
2076 STDMETHODIMP BrowserAccessibilityComWin::get_table(IUnknown** table) { 2071 STDMETHODIMP BrowserAccessibilityComWin::get_table(IUnknown** table) {
2077 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TABLE); 2072 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TABLE);
2078 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2073 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2079 if (!GetOwner() || !GetOwner()->instance_active()) 2074 if (!GetOwner())
2080 return E_FAIL; 2075 return E_FAIL;
2081 2076
2082 if (!table) 2077 if (!table)
2083 return E_INVALIDARG; 2078 return E_INVALIDARG;
2084 2079
2085 BrowserAccessibility* find_table = GetOwner()->GetTable(); 2080 BrowserAccessibility* find_table = GetOwner()->GetTable();
2086 if (!find_table || !ToBrowserAccessibilityComWin(find_table)) { 2081 if (!find_table || !ToBrowserAccessibilityComWin(find_table)) {
2087 *table = nullptr; 2082 *table = nullptr;
2088 return S_FALSE; 2083 return S_FALSE;
2089 } 2084 }
2090 2085
2091 *table = static_cast<IAccessibleTable*>( 2086 *table = static_cast<IAccessibleTable*>(
2092 ToBrowserAccessibilityComWin(find_table)->NewReference()); 2087 ToBrowserAccessibilityComWin(find_table)->NewReference());
2093 return S_OK; 2088 return S_OK;
2094 } 2089 }
2095 2090
2096 // 2091 //
2097 // IAccessibleText methods. 2092 // IAccessibleText methods.
2098 // 2093 //
2099 2094
2100 STDMETHODIMP BrowserAccessibilityComWin::get_nCharacters(LONG* n_characters) { 2095 STDMETHODIMP BrowserAccessibilityComWin::get_nCharacters(LONG* n_characters) {
2101 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_CHARACTERS); 2096 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_CHARACTERS);
2102 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 2097 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
2103 AccessibilityMode::kInlineTextBoxes); 2098 AccessibilityMode::kInlineTextBoxes);
2104 if (!GetOwner() || !GetOwner()->instance_active()) 2099 if (!GetOwner())
2105 return E_FAIL; 2100 return E_FAIL;
2106 2101
2107 if (!n_characters) 2102 if (!n_characters)
2108 return E_INVALIDARG; 2103 return E_INVALIDARG;
2109 2104
2110 *n_characters = static_cast<LONG>(GetOwner()->GetText().size()); 2105 *n_characters = static_cast<LONG>(GetOwner()->GetText().size());
2111 return S_OK; 2106 return S_OK;
2112 } 2107 }
2113 2108
2114 STDMETHODIMP BrowserAccessibilityComWin::get_caretOffset(LONG* offset) { 2109 STDMETHODIMP BrowserAccessibilityComWin::get_caretOffset(LONG* offset) {
2115 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CARET_OFFSET); 2110 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CARET_OFFSET);
2116 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2111 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2117 if (!GetOwner() || !GetOwner()->instance_active()) 2112 if (!GetOwner())
2118 return E_FAIL; 2113 return E_FAIL;
2119 2114
2120 if (!offset) 2115 if (!offset)
2121 return E_INVALIDARG; 2116 return E_INVALIDARG;
2122 2117
2123 if (!GetOwner()->HasCaret()) 2118 if (!GetOwner()->HasCaret())
2124 return S_FALSE; 2119 return S_FALSE;
2125 2120
2126 int selection_start, selection_end; 2121 int selection_start, selection_end;
2127 GetSelectionOffsets(&selection_start, &selection_end); 2122 GetSelectionOffsets(&selection_start, &selection_end);
2128 // The caret is always at the end of the selection. 2123 // The caret is always at the end of the selection.
2129 *offset = selection_end; 2124 *offset = selection_end;
2130 if (*offset < 0) 2125 if (*offset < 0)
2131 return S_FALSE; 2126 return S_FALSE;
2132 2127
2133 return S_OK; 2128 return S_OK;
2134 } 2129 }
2135 2130
2136 STDMETHODIMP BrowserAccessibilityComWin::get_characterExtents( 2131 STDMETHODIMP BrowserAccessibilityComWin::get_characterExtents(
2137 LONG offset, 2132 LONG offset,
2138 IA2CoordinateType coordinate_type, 2133 IA2CoordinateType coordinate_type,
2139 LONG* out_x, 2134 LONG* out_x,
2140 LONG* out_y, 2135 LONG* out_y,
2141 LONG* out_width, 2136 LONG* out_width,
2142 LONG* out_height) { 2137 LONG* out_height) {
2143 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CHARACTER_EXTENTS); 2138 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CHARACTER_EXTENTS);
2144 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 2139 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
2145 AccessibilityMode::kInlineTextBoxes); 2140 AccessibilityMode::kInlineTextBoxes);
2146 if (!GetOwner() || !GetOwner()->instance_active()) 2141 if (!GetOwner())
2147 return E_FAIL; 2142 return E_FAIL;
2148 2143
2149 if (!out_x || !out_y || !out_width || !out_height) 2144 if (!out_x || !out_y || !out_width || !out_height)
2150 return E_INVALIDARG; 2145 return E_INVALIDARG;
2151 2146
2152 const base::string16& text_str = GetOwner()->GetText(); 2147 const base::string16& text_str = GetOwner()->GetText();
2153 HandleSpecialTextOffset(&offset); 2148 HandleSpecialTextOffset(&offset);
2154 if (offset < 0 || offset > static_cast<LONG>(text_str.size())) 2149 if (offset < 0 || offset > static_cast<LONG>(text_str.size()))
2155 return E_INVALIDARG; 2150 return E_INVALIDARG;
2156 2151
(...skipping 16 matching lines...) Expand all
2173 *out_y = character_bounds.y(); 2168 *out_y = character_bounds.y();
2174 *out_width = character_bounds.width(); 2169 *out_width = character_bounds.width();
2175 *out_height = character_bounds.height(); 2170 *out_height = character_bounds.height();
2176 2171
2177 return S_OK; 2172 return S_OK;
2178 } 2173 }
2179 2174
2180 STDMETHODIMP BrowserAccessibilityComWin::get_nSelections(LONG* n_selections) { 2175 STDMETHODIMP BrowserAccessibilityComWin::get_nSelections(LONG* n_selections) {
2181 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTIONS); 2176 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTIONS);
2182 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2177 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2183 if (!GetOwner() || !GetOwner()->instance_active()) 2178 if (!GetOwner())
2184 return E_FAIL; 2179 return E_FAIL;
2185 2180
2186 if (!n_selections) 2181 if (!n_selections)
2187 return E_INVALIDARG; 2182 return E_INVALIDARG;
2188 2183
2189 *n_selections = 0; 2184 *n_selections = 0;
2190 int selection_start, selection_end; 2185 int selection_start, selection_end;
2191 GetSelectionOffsets(&selection_start, &selection_end); 2186 GetSelectionOffsets(&selection_start, &selection_end);
2192 if (selection_start >= 0 && selection_end >= 0 && 2187 if (selection_start >= 0 && selection_end >= 0 &&
2193 selection_start != selection_end) { 2188 selection_start != selection_end) {
2194 *n_selections = 1; 2189 *n_selections = 1;
2195 } 2190 }
2196 2191
2197 return S_OK; 2192 return S_OK;
2198 } 2193 }
2199 2194
2200 STDMETHODIMP BrowserAccessibilityComWin::get_selection(LONG selection_index, 2195 STDMETHODIMP BrowserAccessibilityComWin::get_selection(LONG selection_index,
2201 LONG* start_offset, 2196 LONG* start_offset,
2202 LONG* end_offset) { 2197 LONG* end_offset) {
2203 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTION); 2198 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_SELECTION);
2204 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2199 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2205 if (!GetOwner() || !GetOwner()->instance_active()) 2200 if (!GetOwner())
2206 return E_FAIL; 2201 return E_FAIL;
2207 2202
2208 if (!start_offset || !end_offset || selection_index != 0) 2203 if (!start_offset || !end_offset || selection_index != 0)
2209 return E_INVALIDARG; 2204 return E_INVALIDARG;
2210 2205
2211 *start_offset = 0; 2206 *start_offset = 0;
2212 *end_offset = 0; 2207 *end_offset = 0;
2213 int selection_start, selection_end; 2208 int selection_start, selection_end;
2214 GetSelectionOffsets(&selection_start, &selection_end); 2209 GetSelectionOffsets(&selection_start, &selection_end);
2215 if (selection_start >= 0 && selection_end >= 0 && 2210 if (selection_start >= 0 && selection_end >= 0 &&
(...skipping 11 matching lines...) Expand all
2227 } 2222 }
2228 2223
2229 return E_INVALIDARG; 2224 return E_INVALIDARG;
2230 } 2225 }
2231 2226
2232 STDMETHODIMP BrowserAccessibilityComWin::get_text(LONG start_offset, 2227 STDMETHODIMP BrowserAccessibilityComWin::get_text(LONG start_offset,
2233 LONG end_offset, 2228 LONG end_offset,
2234 BSTR* text) { 2229 BSTR* text) {
2235 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TEXT); 2230 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TEXT);
2236 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2231 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2237 if (!GetOwner() || !GetOwner()->instance_active()) 2232 if (!GetOwner())
2238 return E_FAIL; 2233 return E_FAIL;
2239 2234
2240 if (!text) 2235 if (!text)
2241 return E_INVALIDARG; 2236 return E_INVALIDARG;
2242 2237
2243 const base::string16& text_str = GetOwner()->GetText(); 2238 const base::string16& text_str = GetOwner()->GetText();
2244 HandleSpecialTextOffset(&start_offset); 2239 HandleSpecialTextOffset(&start_offset);
2245 HandleSpecialTextOffset(&end_offset); 2240 HandleSpecialTextOffset(&end_offset);
2246 2241
2247 // The spec allows the arguments to be reversed. 2242 // The spec allows the arguments to be reversed.
(...skipping 24 matching lines...) Expand all
2272 2267
2273 STDMETHODIMP BrowserAccessibilityComWin::get_textAtOffset( 2268 STDMETHODIMP BrowserAccessibilityComWin::get_textAtOffset(
2274 LONG offset, 2269 LONG offset,
2275 IA2TextBoundaryType boundary_type, 2270 IA2TextBoundaryType boundary_type,
2276 LONG* start_offset, 2271 LONG* start_offset,
2277 LONG* end_offset, 2272 LONG* end_offset,
2278 BSTR* text) { 2273 BSTR* text) {
2279 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TEXT_AT_OFFSET); 2274 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TEXT_AT_OFFSET);
2280 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 2275 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
2281 AccessibilityMode::kInlineTextBoxes); 2276 AccessibilityMode::kInlineTextBoxes);
2282 if (!GetOwner() || !GetOwner()->instance_active()) 2277 if (!GetOwner())
2283 return E_FAIL; 2278 return E_FAIL;
2284 2279
2285 if (!start_offset || !end_offset || !text) 2280 if (!start_offset || !end_offset || !text)
2286 return E_INVALIDARG; 2281 return E_INVALIDARG;
2287 2282
2288 HandleSpecialTextOffset(&offset); 2283 HandleSpecialTextOffset(&offset);
2289 if (offset < 0) 2284 if (offset < 0)
2290 return E_INVALIDARG; 2285 return E_INVALIDARG;
2291 2286
2292 const base::string16& text_str = GetOwner()->GetText(); 2287 const base::string16& text_str = GetOwner()->GetText();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2325 2320
2326 STDMETHODIMP BrowserAccessibilityComWin::get_textBeforeOffset( 2321 STDMETHODIMP BrowserAccessibilityComWin::get_textBeforeOffset(
2327 LONG offset, 2322 LONG offset,
2328 IA2TextBoundaryType boundary_type, 2323 IA2TextBoundaryType boundary_type,
2329 LONG* start_offset, 2324 LONG* start_offset,
2330 LONG* end_offset, 2325 LONG* end_offset,
2331 BSTR* text) { 2326 BSTR* text) {
2332 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TEXT_BEFORE_OFFSET); 2327 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TEXT_BEFORE_OFFSET);
2333 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 2328 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
2334 AccessibilityMode::kInlineTextBoxes); 2329 AccessibilityMode::kInlineTextBoxes);
2335 if (!GetOwner() || !GetOwner()->instance_active()) 2330 if (!GetOwner())
2336 return E_FAIL; 2331 return E_FAIL;
2337 2332
2338 if (!start_offset || !end_offset || !text) 2333 if (!start_offset || !end_offset || !text)
2339 return E_INVALIDARG; 2334 return E_INVALIDARG;
2340 2335
2341 // The IAccessible2 spec says we don't have to implement the "sentence" 2336 // The IAccessible2 spec says we don't have to implement the "sentence"
2342 // boundary type, we can just let the screenreader handle it. 2337 // boundary type, we can just let the screenreader handle it.
2343 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) { 2338 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) {
2344 *start_offset = 0; 2339 *start_offset = 0;
2345 *end_offset = 0; 2340 *end_offset = 0;
(...skipping 11 matching lines...) Expand all
2357 2352
2358 STDMETHODIMP BrowserAccessibilityComWin::get_textAfterOffset( 2353 STDMETHODIMP BrowserAccessibilityComWin::get_textAfterOffset(
2359 LONG offset, 2354 LONG offset,
2360 IA2TextBoundaryType boundary_type, 2355 IA2TextBoundaryType boundary_type,
2361 LONG* start_offset, 2356 LONG* start_offset,
2362 LONG* end_offset, 2357 LONG* end_offset,
2363 BSTR* text) { 2358 BSTR* text) {
2364 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TEXT_AFTER_OFFSET); 2359 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TEXT_AFTER_OFFSET);
2365 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 2360 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
2366 AccessibilityMode::kInlineTextBoxes); 2361 AccessibilityMode::kInlineTextBoxes);
2367 if (!GetOwner() || !GetOwner()->instance_active()) 2362 if (!GetOwner())
2368 return E_FAIL; 2363 return E_FAIL;
2369 2364
2370 if (!start_offset || !end_offset || !text) 2365 if (!start_offset || !end_offset || !text)
2371 return E_INVALIDARG; 2366 return E_INVALIDARG;
2372 2367
2373 // The IAccessible2 spec says we don't have to implement the "sentence" 2368 // The IAccessible2 spec says we don't have to implement the "sentence"
2374 // boundary type, we can just let the screenreader handle it. 2369 // boundary type, we can just let the screenreader handle it.
2375 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) { 2370 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) {
2376 *start_offset = 0; 2371 *start_offset = 0;
2377 *end_offset = 0; 2372 *end_offset = 0;
2378 *text = NULL; 2373 *text = NULL;
2379 return S_FALSE; 2374 return S_FALSE;
2380 } 2375 }
2381 2376
2382 const base::string16& text_str = GetOwner()->GetText(); 2377 const base::string16& text_str = GetOwner()->GetText();
2383 2378
2384 *start_offset = offset; 2379 *start_offset = offset;
2385 *end_offset = 2380 *end_offset =
2386 FindBoundary(text_str, boundary_type, offset, ui::FORWARDS_DIRECTION); 2381 FindBoundary(text_str, boundary_type, offset, ui::FORWARDS_DIRECTION);
2387 return get_text(*start_offset, *end_offset, text); 2382 return get_text(*start_offset, *end_offset, text);
2388 } 2383 }
2389 2384
2390 STDMETHODIMP BrowserAccessibilityComWin::get_newText(IA2TextSegment* new_text) { 2385 STDMETHODIMP BrowserAccessibilityComWin::get_newText(IA2TextSegment* new_text) {
2391 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_NEW_TEXT); 2386 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_NEW_TEXT);
2392 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2387 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2393 if (!GetOwner() || !GetOwner()->instance_active()) 2388 if (!GetOwner())
2394 return E_FAIL; 2389 return E_FAIL;
2395 2390
2396 if (!new_text) 2391 if (!new_text)
2397 return E_INVALIDARG; 2392 return E_INVALIDARG;
2398 2393
2399 if (!old_win_attributes_) 2394 if (!old_win_attributes_)
2400 return E_FAIL; 2395 return E_FAIL;
2401 2396
2402 int start, old_len, new_len; 2397 int start, old_len, new_len;
2403 ComputeHypertextRemovedAndInserted(&start, &old_len, &new_len); 2398 ComputeHypertextRemovedAndInserted(&start, &old_len, &new_len);
2404 if (new_len == 0) 2399 if (new_len == 0)
2405 return E_FAIL; 2400 return E_FAIL;
2406 2401
2407 base::string16 substr = GetOwner()->GetText().substr(start, new_len); 2402 base::string16 substr = GetOwner()->GetText().substr(start, new_len);
2408 new_text->text = SysAllocString(substr.c_str()); 2403 new_text->text = SysAllocString(substr.c_str());
2409 new_text->start = static_cast<long>(start); 2404 new_text->start = static_cast<long>(start);
2410 new_text->end = static_cast<long>(start + new_len); 2405 new_text->end = static_cast<long>(start + new_len);
2411 return S_OK; 2406 return S_OK;
2412 } 2407 }
2413 2408
2414 STDMETHODIMP BrowserAccessibilityComWin::get_oldText(IA2TextSegment* old_text) { 2409 STDMETHODIMP BrowserAccessibilityComWin::get_oldText(IA2TextSegment* old_text) {
2415 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_OLD_TEXT); 2410 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_OLD_TEXT);
2416 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2411 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2417 if (!GetOwner() || !GetOwner()->instance_active()) 2412 if (!GetOwner())
2418 return E_FAIL; 2413 return E_FAIL;
2419 2414
2420 if (!old_text) 2415 if (!old_text)
2421 return E_INVALIDARG; 2416 return E_INVALIDARG;
2422 2417
2423 if (!old_win_attributes_) 2418 if (!old_win_attributes_)
2424 return E_FAIL; 2419 return E_FAIL;
2425 2420
2426 int start, old_len, new_len; 2421 int start, old_len, new_len;
2427 ComputeHypertextRemovedAndInserted(&start, &old_len, &new_len); 2422 ComputeHypertextRemovedAndInserted(&start, &old_len, &new_len);
2428 if (old_len == 0) 2423 if (old_len == 0)
2429 return E_FAIL; 2424 return E_FAIL;
2430 2425
2431 base::string16 old_hypertext = old_win_attributes_->hypertext; 2426 base::string16 old_hypertext = old_win_attributes_->hypertext;
2432 base::string16 substr = old_hypertext.substr(start, old_len); 2427 base::string16 substr = old_hypertext.substr(start, old_len);
2433 old_text->text = SysAllocString(substr.c_str()); 2428 old_text->text = SysAllocString(substr.c_str());
2434 old_text->start = static_cast<long>(start); 2429 old_text->start = static_cast<long>(start);
2435 old_text->end = static_cast<long>(start + old_len); 2430 old_text->end = static_cast<long>(start + old_len);
2436 return S_OK; 2431 return S_OK;
2437 } 2432 }
2438 2433
2439 STDMETHODIMP BrowserAccessibilityComWin::get_offsetAtPoint( 2434 STDMETHODIMP BrowserAccessibilityComWin::get_offsetAtPoint(
2440 LONG x, 2435 LONG x,
2441 LONG y, 2436 LONG y,
2442 IA2CoordinateType coord_type, 2437 IA2CoordinateType coord_type,
2443 LONG* offset) { 2438 LONG* offset) {
2444 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_OFFSET_AT_POINT); 2439 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_OFFSET_AT_POINT);
2445 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 2440 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
2446 AccessibilityMode::kInlineTextBoxes); 2441 AccessibilityMode::kInlineTextBoxes);
2447 if (!GetOwner() || !GetOwner()->instance_active()) 2442 if (!GetOwner())
2448 return E_FAIL; 2443 return E_FAIL;
2449 2444
2450 if (!offset) 2445 if (!offset)
2451 return E_INVALIDARG; 2446 return E_INVALIDARG;
2452 2447
2453 // TODO(dmazzoni): implement this. We're returning S_OK for now so that 2448 // TODO(dmazzoni): implement this. We're returning S_OK for now so that
2454 // screen readers still return partially accurate results rather than 2449 // screen readers still return partially accurate results rather than
2455 // completely failing. 2450 // completely failing.
2456 *offset = 0; 2451 *offset = 0;
2457 return S_OK; 2452 return S_OK;
(...skipping 12 matching lines...) Expand all
2470 2465
2471 STDMETHODIMP BrowserAccessibilityComWin::scrollSubstringToPoint( 2466 STDMETHODIMP BrowserAccessibilityComWin::scrollSubstringToPoint(
2472 LONG start_index, 2467 LONG start_index,
2473 LONG end_index, 2468 LONG end_index,
2474 IA2CoordinateType coordinate_type, 2469 IA2CoordinateType coordinate_type,
2475 LONG x, 2470 LONG x,
2476 LONG y) { 2471 LONG y) {
2477 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_SUBSTRING_TO_POINT); 2472 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_SUBSTRING_TO_POINT);
2478 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 2473 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
2479 AccessibilityMode::kInlineTextBoxes); 2474 AccessibilityMode::kInlineTextBoxes);
2480 if (!GetOwner() || !GetOwner()->instance_active()) 2475 if (!GetOwner())
2481 return E_FAIL; 2476 return E_FAIL;
2482 2477
2483 if (start_index > end_index) 2478 if (start_index > end_index)
2484 std::swap(start_index, end_index); 2479 std::swap(start_index, end_index);
2485 LONG length = end_index - start_index + 1; 2480 LONG length = end_index - start_index + 1;
2486 DCHECK_GE(length, 0); 2481 DCHECK_GE(length, 0);
2487 2482
2488 gfx::Rect string_bounds = 2483 gfx::Rect string_bounds =
2489 GetOwner()->GetPageBoundsForRange(start_index, length); 2484 GetOwner()->GetPageBoundsForRange(start_index, length);
2490 string_bounds -= GetOwner()->GetPageBoundsRect().OffsetFromOrigin(); 2485 string_bounds -= GetOwner()->GetPageBoundsRect().OffsetFromOrigin();
2491 x -= string_bounds.x(); 2486 x -= string_bounds.x();
2492 y -= string_bounds.y(); 2487 y -= string_bounds.y();
2493 2488
2494 return scrollToPoint(coordinate_type, x, y); 2489 return scrollToPoint(coordinate_type, x, y);
2495 } 2490 }
2496 2491
2497 STDMETHODIMP BrowserAccessibilityComWin::addSelection(LONG start_offset, 2492 STDMETHODIMP BrowserAccessibilityComWin::addSelection(LONG start_offset,
2498 LONG end_offset) { 2493 LONG end_offset) {
2499 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ADD_SELECTION); 2494 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ADD_SELECTION);
2500 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2495 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2501 if (!GetOwner() || !GetOwner()->instance_active()) 2496 if (!GetOwner())
2502 return E_FAIL; 2497 return E_FAIL;
2503 2498
2504 // We only support one selection. 2499 // We only support one selection.
2505 SetIA2HypertextSelection(start_offset, end_offset); 2500 SetIA2HypertextSelection(start_offset, end_offset);
2506 return S_OK; 2501 return S_OK;
2507 } 2502 }
2508 2503
2509 STDMETHODIMP BrowserAccessibilityComWin::removeSelection(LONG selection_index) { 2504 STDMETHODIMP BrowserAccessibilityComWin::removeSelection(LONG selection_index) {
2510 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_REMOVE_SELECTION); 2505 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_REMOVE_SELECTION);
2511 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2506 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2512 if (!GetOwner() || !GetOwner()->instance_active()) 2507 if (!GetOwner())
2513 return E_FAIL; 2508 return E_FAIL;
2514 2509
2515 if (selection_index != 0) 2510 if (selection_index != 0)
2516 return E_INVALIDARG; 2511 return E_INVALIDARG;
2517 2512
2518 // Simply collapse the selection to the position of the caret if a caret is 2513 // Simply collapse the selection to the position of the caret if a caret is
2519 // visible, otherwise set the selection to 0. 2514 // visible, otherwise set the selection to 0.
2520 LONG caret_offset = 0; 2515 LONG caret_offset = 0;
2521 int selection_start, selection_end; 2516 int selection_start, selection_end;
2522 GetSelectionOffsets(&selection_start, &selection_end); 2517 GetSelectionOffsets(&selection_start, &selection_end);
2523 if (GetOwner()->HasCaret() && selection_end >= 0) 2518 if (GetOwner()->HasCaret() && selection_end >= 0)
2524 caret_offset = selection_end; 2519 caret_offset = selection_end;
2525 SetIA2HypertextSelection(caret_offset, caret_offset); 2520 SetIA2HypertextSelection(caret_offset, caret_offset);
2526 return S_OK; 2521 return S_OK;
2527 } 2522 }
2528 2523
2529 STDMETHODIMP BrowserAccessibilityComWin::setCaretOffset(LONG offset) { 2524 STDMETHODIMP BrowserAccessibilityComWin::setCaretOffset(LONG offset) {
2530 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SET_CARET_OFFSET); 2525 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SET_CARET_OFFSET);
2531 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2526 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2532 if (!GetOwner() || !GetOwner()->instance_active()) 2527 if (!GetOwner())
2533 return E_FAIL; 2528 return E_FAIL;
2534 SetIA2HypertextSelection(offset, offset); 2529 SetIA2HypertextSelection(offset, offset);
2535 return S_OK; 2530 return S_OK;
2536 } 2531 }
2537 2532
2538 STDMETHODIMP BrowserAccessibilityComWin::setSelection(LONG selection_index, 2533 STDMETHODIMP BrowserAccessibilityComWin::setSelection(LONG selection_index,
2539 LONG start_offset, 2534 LONG start_offset,
2540 LONG end_offset) { 2535 LONG end_offset) {
2541 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SET_SELECTION); 2536 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SET_SELECTION);
2542 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2537 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2543 if (!GetOwner() || !GetOwner()->instance_active()) 2538 if (!GetOwner())
2544 return E_FAIL; 2539 return E_FAIL;
2545 if (selection_index != 0) 2540 if (selection_index != 0)
2546 return E_INVALIDARG; 2541 return E_INVALIDARG;
2547 SetIA2HypertextSelection(start_offset, end_offset); 2542 SetIA2HypertextSelection(start_offset, end_offset);
2548 return S_OK; 2543 return S_OK;
2549 } 2544 }
2550 2545
2551 STDMETHODIMP BrowserAccessibilityComWin::get_attributes(LONG offset, 2546 STDMETHODIMP BrowserAccessibilityComWin::get_attributes(LONG offset,
2552 LONG* start_offset, 2547 LONG* start_offset,
2553 LONG* end_offset, 2548 LONG* end_offset,
2554 BSTR* text_attributes) { 2549 BSTR* text_attributes) {
2555 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IATEXT_GET_ATTRIBUTES); 2550 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IATEXT_GET_ATTRIBUTES);
2556 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2551 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2557 if (!start_offset || !end_offset || !text_attributes) 2552 if (!start_offset || !end_offset || !text_attributes)
2558 return E_INVALIDARG; 2553 return E_INVALIDARG;
2559 2554
2560 *start_offset = *end_offset = 0; 2555 *start_offset = *end_offset = 0;
2561 *text_attributes = nullptr; 2556 *text_attributes = nullptr;
2562 if (!GetOwner() || !GetOwner()->instance_active()) 2557 if (!GetOwner())
2563 return E_FAIL; 2558 return E_FAIL;
2564 2559
2565 const base::string16 text = GetOwner()->GetText(); 2560 const base::string16 text = GetOwner()->GetText();
2566 HandleSpecialTextOffset(&offset); 2561 HandleSpecialTextOffset(&offset);
2567 if (offset < 0 || offset > static_cast<LONG>(text.size())) 2562 if (offset < 0 || offset > static_cast<LONG>(text.size()))
2568 return E_INVALIDARG; 2563 return E_INVALIDARG;
2569 2564
2570 ComputeStylesIfNeeded(); 2565 ComputeStylesIfNeeded();
2571 *start_offset = FindStartOfStyle(offset, ui::BACKWARDS_DIRECTION); 2566 *start_offset = FindStartOfStyle(offset, ui::BACKWARDS_DIRECTION);
2572 *end_offset = FindStartOfStyle(offset, ui::FORWARDS_DIRECTION); 2567 *end_offset = FindStartOfStyle(offset, ui::FORWARDS_DIRECTION);
(...skipping 14 matching lines...) Expand all
2587 } 2582 }
2588 2583
2589 // 2584 //
2590 // IAccessibleHypertext methods. 2585 // IAccessibleHypertext methods.
2591 // 2586 //
2592 2587
2593 STDMETHODIMP BrowserAccessibilityComWin::get_nHyperlinks( 2588 STDMETHODIMP BrowserAccessibilityComWin::get_nHyperlinks(
2594 long* hyperlink_count) { 2589 long* hyperlink_count) {
2595 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_HYPERLINKS); 2590 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_HYPERLINKS);
2596 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2591 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2597 if (!GetOwner() || !GetOwner()->instance_active()) 2592 if (!GetOwner())
2598 return E_FAIL; 2593 return E_FAIL;
2599 2594
2600 if (!hyperlink_count) 2595 if (!hyperlink_count)
2601 return E_INVALIDARG; 2596 return E_INVALIDARG;
2602 2597
2603 *hyperlink_count = hyperlink_offset_to_index().size(); 2598 *hyperlink_count = hyperlink_offset_to_index().size();
2604 return S_OK; 2599 return S_OK;
2605 } 2600 }
2606 2601
2607 STDMETHODIMP BrowserAccessibilityComWin::get_hyperlink( 2602 STDMETHODIMP BrowserAccessibilityComWin::get_hyperlink(
2608 long index, 2603 long index,
2609 IAccessibleHyperlink** hyperlink) { 2604 IAccessibleHyperlink** hyperlink) {
2610 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_HYPERLINK); 2605 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_HYPERLINK);
2611 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2606 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2612 if (!GetOwner() || !GetOwner()->instance_active()) 2607 if (!GetOwner())
2613 return E_FAIL; 2608 return E_FAIL;
2614 2609
2615 if (!hyperlink || index < 0 || 2610 if (!hyperlink || index < 0 ||
2616 index >= static_cast<long>(hyperlinks().size())) { 2611 index >= static_cast<long>(hyperlinks().size())) {
2617 return E_INVALIDARG; 2612 return E_INVALIDARG;
2618 } 2613 }
2619 2614
2620 int32_t id = hyperlinks()[index]; 2615 int32_t id = hyperlinks()[index];
2621 BrowserAccessibilityComWin* link = 2616 BrowserAccessibilityComWin* link =
2622 ToBrowserAccessibilityComWin(GetOwner()->GetFromUniqueID(id)); 2617 ToBrowserAccessibilityComWin(GetOwner()->GetFromUniqueID(id));
2623 if (!link) 2618 if (!link)
2624 return E_FAIL; 2619 return E_FAIL;
2625 2620
2626 *hyperlink = static_cast<IAccessibleHyperlink*>(link->NewReference()); 2621 *hyperlink = static_cast<IAccessibleHyperlink*>(link->NewReference());
2627 return S_OK; 2622 return S_OK;
2628 } 2623 }
2629 2624
2630 STDMETHODIMP BrowserAccessibilityComWin::get_hyperlinkIndex( 2625 STDMETHODIMP BrowserAccessibilityComWin::get_hyperlinkIndex(
2631 long char_index, 2626 long char_index,
2632 long* hyperlink_index) { 2627 long* hyperlink_index) {
2633 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_HYPERLINK_INDEX); 2628 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_HYPERLINK_INDEX);
2634 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2629 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2635 if (!GetOwner() || !GetOwner()->instance_active()) 2630 if (!GetOwner())
2636 return E_FAIL; 2631 return E_FAIL;
2637 2632
2638 if (!hyperlink_index) 2633 if (!hyperlink_index)
2639 return E_INVALIDARG; 2634 return E_INVALIDARG;
2640 2635
2641 if (char_index < 0 || 2636 if (char_index < 0 ||
2642 char_index >= static_cast<long>(GetOwner()->GetText().size())) { 2637 char_index >= static_cast<long>(GetOwner()->GetText().size())) {
2643 return E_INVALIDARG; 2638 return E_INVALIDARG;
2644 } 2639 }
2645 2640
(...skipping 10 matching lines...) Expand all
2656 2651
2657 // 2652 //
2658 // IAccessibleHyperlink methods. 2653 // IAccessibleHyperlink methods.
2659 // 2654 //
2660 2655
2661 // Currently, only text links are supported. 2656 // Currently, only text links are supported.
2662 STDMETHODIMP BrowserAccessibilityComWin::get_anchor(long index, 2657 STDMETHODIMP BrowserAccessibilityComWin::get_anchor(long index,
2663 VARIANT* anchor) { 2658 VARIANT* anchor) {
2664 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ANCHOR); 2659 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ANCHOR);
2665 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2660 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2666 if (!GetOwner()->instance_active() || !IsHyperlink()) 2661 if (!GetOwner() || !IsHyperlink())
2667 return E_FAIL; 2662 return E_FAIL;
2668 2663
2669 // IA2 text links can have only one anchor, that is the text inside them. 2664 // IA2 text links can have only one anchor, that is the text inside them.
2670 if (index != 0 || !anchor) 2665 if (index != 0 || !anchor)
2671 return E_INVALIDARG; 2666 return E_INVALIDARG;
2672 2667
2673 BSTR ia2_hypertext = SysAllocString(GetOwner()->GetText().c_str()); 2668 BSTR ia2_hypertext = SysAllocString(GetOwner()->GetText().c_str());
2674 DCHECK(ia2_hypertext); 2669 DCHECK(ia2_hypertext);
2675 anchor->vt = VT_BSTR; 2670 anchor->vt = VT_BSTR;
2676 anchor->bstrVal = ia2_hypertext; 2671 anchor->bstrVal = ia2_hypertext;
2677 2672
2678 // Returning S_FALSE is not mentioned in the IA2 Spec, but it might have been 2673 // Returning S_FALSE is not mentioned in the IA2 Spec, but it might have been
2679 // an oversight. 2674 // an oversight.
2680 if (!SysStringLen(ia2_hypertext)) 2675 if (!SysStringLen(ia2_hypertext))
2681 return S_FALSE; 2676 return S_FALSE;
2682 2677
2683 return S_OK; 2678 return S_OK;
2684 } 2679 }
2685 2680
2686 // Currently, only text links are supported. 2681 // Currently, only text links are supported.
2687 STDMETHODIMP BrowserAccessibilityComWin::get_anchorTarget( 2682 STDMETHODIMP BrowserAccessibilityComWin::get_anchorTarget(
2688 long index, 2683 long index,
2689 VARIANT* anchor_target) { 2684 VARIANT* anchor_target) {
2690 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ANCHOR_TARGET); 2685 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ANCHOR_TARGET);
2691 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2686 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2692 if (!GetOwner()->instance_active() || !IsHyperlink()) 2687 if (!GetOwner() || !IsHyperlink())
2693 return E_FAIL; 2688 return E_FAIL;
2694 2689
2695 // IA2 text links can have at most one target, that is when they represent an 2690 // IA2 text links can have at most one target, that is when they represent an
2696 // HTML hyperlink, i.e. an <a> element with a "href" attribute. 2691 // HTML hyperlink, i.e. an <a> element with a "href" attribute.
2697 if (index != 0 || !anchor_target) 2692 if (index != 0 || !anchor_target)
2698 return E_INVALIDARG; 2693 return E_INVALIDARG;
2699 2694
2700 BSTR target; 2695 BSTR target;
2701 if (!(ia_state() & STATE_SYSTEM_LINKED) || 2696 if (!(ia_state() & STATE_SYSTEM_LINKED) ||
2702 FAILED(GetStringAttributeAsBstr(ui::AX_ATTR_URL, &target))) { 2697 FAILED(GetStringAttributeAsBstr(ui::AX_ATTR_URL, &target))) {
2703 target = SysAllocString(L""); 2698 target = SysAllocString(L"");
2704 } 2699 }
2705 DCHECK(target); 2700 DCHECK(target);
2706 anchor_target->vt = VT_BSTR; 2701 anchor_target->vt = VT_BSTR;
2707 anchor_target->bstrVal = target; 2702 anchor_target->bstrVal = target;
2708 2703
2709 // Returning S_FALSE is not mentioned in the IA2 Spec, but it might have been 2704 // Returning S_FALSE is not mentioned in the IA2 Spec, but it might have been
2710 // an oversight. 2705 // an oversight.
2711 if (!SysStringLen(target)) 2706 if (!SysStringLen(target))
2712 return S_FALSE; 2707 return S_FALSE;
2713 2708
2714 return S_OK; 2709 return S_OK;
2715 } 2710 }
2716 2711
2717 STDMETHODIMP BrowserAccessibilityComWin::get_startIndex(long* index) { 2712 STDMETHODIMP BrowserAccessibilityComWin::get_startIndex(long* index) {
2718 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_START_INDEX); 2713 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_START_INDEX);
2719 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2714 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2720 if (!GetOwner()->instance_active() || !IsHyperlink()) 2715 if (!GetOwner() || !IsHyperlink())
2721 return E_FAIL; 2716 return E_FAIL;
2722 2717
2723 if (!index) 2718 if (!index)
2724 return E_INVALIDARG; 2719 return E_INVALIDARG;
2725 2720
2726 int32_t hypertext_offset = 0; 2721 int32_t hypertext_offset = 0;
2727 auto* parent = GetOwner()->PlatformGetParent(); 2722 auto* parent = GetOwner()->PlatformGetParent();
2728 if (parent) { 2723 if (parent) {
2729 hypertext_offset = 2724 hypertext_offset =
2730 ToBrowserAccessibilityComWin(parent)->GetHypertextOffsetFromChild( 2725 ToBrowserAccessibilityComWin(parent)->GetHypertextOffsetFromChild(
(...skipping 20 matching lines...) Expand all
2751 return E_NOTIMPL; 2746 return E_NOTIMPL;
2752 } 2747 }
2753 2748
2754 // 2749 //
2755 // IAccessibleAction partly implemented. 2750 // IAccessibleAction partly implemented.
2756 // 2751 //
2757 2752
2758 STDMETHODIMP BrowserAccessibilityComWin::nActions(long* n_actions) { 2753 STDMETHODIMP BrowserAccessibilityComWin::nActions(long* n_actions) {
2759 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_N_ACTIONS); 2754 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_N_ACTIONS);
2760 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2755 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2761 if (!GetOwner() || !GetOwner()->instance_active()) 2756 if (!GetOwner())
2762 return E_FAIL; 2757 return E_FAIL;
2763 2758
2764 if (!n_actions) 2759 if (!n_actions)
2765 return E_INVALIDARG; 2760 return E_INVALIDARG;
2766 2761
2767 // |IsHyperlink| is required for |IAccessibleHyperlink::anchor/anchorTarget| 2762 // |IsHyperlink| is required for |IAccessibleHyperlink::anchor/anchorTarget|
2768 // to work properly because the |IAccessibleHyperlink| interface inherits from 2763 // to work properly because the |IAccessibleHyperlink| interface inherits from
2769 // |IAccessibleAction|. 2764 // |IAccessibleAction|.
2770 if (IsHyperlink() || GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION)) { 2765 if (IsHyperlink() || GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION)) {
2771 *n_actions = 1; 2766 *n_actions = 1;
2772 } else { 2767 } else {
2773 *n_actions = 0; 2768 *n_actions = 0;
2774 } 2769 }
2775 2770
2776 return S_OK; 2771 return S_OK;
2777 } 2772 }
2778 2773
2779 STDMETHODIMP BrowserAccessibilityComWin::doAction(long action_index) { 2774 STDMETHODIMP BrowserAccessibilityComWin::doAction(long action_index) {
2780 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_DO_ACTION); 2775 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_DO_ACTION);
2781 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2776 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2782 if (!GetOwner() || !GetOwner()->instance_active()) 2777 if (!GetOwner())
2783 return E_FAIL; 2778 return E_FAIL;
2784 2779
2785 if (!GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION) || action_index != 0) 2780 if (!GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION) || action_index != 0)
2786 return E_INVALIDARG; 2781 return E_INVALIDARG;
2787 2782
2788 GetOwner()->manager()->DoDefaultAction(*GetOwner()); 2783 GetOwner()->manager()->DoDefaultAction(*GetOwner());
2789 return S_OK; 2784 return S_OK;
2790 } 2785 }
2791 2786
2792 STDMETHODIMP 2787 STDMETHODIMP
(...skipping 10 matching lines...) Expand all
2803 long* n_bindings) { 2798 long* n_bindings) {
2804 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_KEY_BINDING); 2799 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_KEY_BINDING);
2805 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2800 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2806 return E_NOTIMPL; 2801 return E_NOTIMPL;
2807 } 2802 }
2808 2803
2809 STDMETHODIMP BrowserAccessibilityComWin::get_name(long action_index, 2804 STDMETHODIMP BrowserAccessibilityComWin::get_name(long action_index,
2810 BSTR* name) { 2805 BSTR* name) {
2811 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_NAME); 2806 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_NAME);
2812 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2807 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2813 if (!GetOwner() || !GetOwner()->instance_active()) 2808 if (!GetOwner())
2814 return E_FAIL; 2809 return E_FAIL;
2815 2810
2816 if (!name) 2811 if (!name)
2817 return E_INVALIDARG; 2812 return E_INVALIDARG;
2818 2813
2819 int action; 2814 int action;
2820 if (!GetOwner()->GetIntAttribute(ui::AX_ATTR_ACTION, &action) || 2815 if (!GetOwner()->GetIntAttribute(ui::AX_ATTR_ACTION, &action) ||
2821 action_index != 0) { 2816 action_index != 0) {
2822 *name = nullptr; 2817 *name = nullptr;
2823 return E_INVALIDARG; 2818 return E_INVALIDARG;
2824 } 2819 }
2825 2820
2826 base::string16 action_verb = 2821 base::string16 action_verb =
2827 ui::ActionToUnlocalizedString(static_cast<ui::AXSupportedAction>(action)); 2822 ui::ActionToUnlocalizedString(static_cast<ui::AXSupportedAction>(action));
2828 if (action_verb.empty() || action_verb == L"none") { 2823 if (action_verb.empty() || action_verb == L"none") {
2829 *name = nullptr; 2824 *name = nullptr;
2830 return S_FALSE; 2825 return S_FALSE;
2831 } 2826 }
2832 2827
2833 *name = SysAllocString(action_verb.c_str()); 2828 *name = SysAllocString(action_verb.c_str());
2834 DCHECK(name); 2829 DCHECK(name);
2835 return S_OK; 2830 return S_OK;
2836 } 2831 }
2837 2832
2838 STDMETHODIMP 2833 STDMETHODIMP
2839 BrowserAccessibilityComWin::get_localizedName(long action_index, 2834 BrowserAccessibilityComWin::get_localizedName(long action_index,
2840 BSTR* localized_name) { 2835 BSTR* localized_name) {
2841 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LOCALIZED_NAME); 2836 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LOCALIZED_NAME);
2842 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2837 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2843 if (!GetOwner() || !GetOwner()->instance_active()) 2838 if (!GetOwner())
2844 return E_FAIL; 2839 return E_FAIL;
2845 2840
2846 if (!localized_name) 2841 if (!localized_name)
2847 return E_INVALIDARG; 2842 return E_INVALIDARG;
2848 2843
2849 int action; 2844 int action;
2850 if (!GetOwner()->GetIntAttribute(ui::AX_ATTR_ACTION, &action) || 2845 if (!GetOwner()->GetIntAttribute(ui::AX_ATTR_ACTION, &action) ||
2851 action_index != 0) { 2846 action_index != 0) {
2852 *localized_name = nullptr; 2847 *localized_name = nullptr;
2853 return E_INVALIDARG; 2848 return E_INVALIDARG;
(...skipping 11 matching lines...) Expand all
2865 return S_OK; 2860 return S_OK;
2866 } 2861 }
2867 2862
2868 // 2863 //
2869 // IAccessibleValue methods. 2864 // IAccessibleValue methods.
2870 // 2865 //
2871 2866
2872 STDMETHODIMP BrowserAccessibilityComWin::get_currentValue(VARIANT* value) { 2867 STDMETHODIMP BrowserAccessibilityComWin::get_currentValue(VARIANT* value) {
2873 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CURRENT_VALUE); 2868 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CURRENT_VALUE);
2874 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2869 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2875 if (!GetOwner() || !GetOwner()->instance_active()) 2870 if (!GetOwner())
2876 return E_FAIL; 2871 return E_FAIL;
2877 2872
2878 if (!value) 2873 if (!value)
2879 return E_INVALIDARG; 2874 return E_INVALIDARG;
2880 2875
2881 float float_val; 2876 float float_val;
2882 if (GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, &float_val)) { 2877 if (GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, &float_val)) {
2883 value->vt = VT_R8; 2878 value->vt = VT_R8;
2884 value->dblVal = float_val; 2879 value->dblVal = float_val;
2885 return S_OK; 2880 return S_OK;
2886 } 2881 }
2887 2882
2888 value->vt = VT_EMPTY; 2883 value->vt = VT_EMPTY;
2889 return S_FALSE; 2884 return S_FALSE;
2890 } 2885 }
2891 2886
2892 STDMETHODIMP BrowserAccessibilityComWin::get_minimumValue(VARIANT* value) { 2887 STDMETHODIMP BrowserAccessibilityComWin::get_minimumValue(VARIANT* value) {
2893 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_MINIMUM_VALUE); 2888 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_MINIMUM_VALUE);
2894 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2889 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2895 if (!GetOwner() || !GetOwner()->instance_active()) 2890 if (!GetOwner())
2896 return E_FAIL; 2891 return E_FAIL;
2897 2892
2898 if (!value) 2893 if (!value)
2899 return E_INVALIDARG; 2894 return E_INVALIDARG;
2900 2895
2901 float float_val; 2896 float float_val;
2902 if (GetFloatAttribute(ui::AX_ATTR_MIN_VALUE_FOR_RANGE, &float_val)) { 2897 if (GetFloatAttribute(ui::AX_ATTR_MIN_VALUE_FOR_RANGE, &float_val)) {
2903 value->vt = VT_R8; 2898 value->vt = VT_R8;
2904 value->dblVal = float_val; 2899 value->dblVal = float_val;
2905 return S_OK; 2900 return S_OK;
2906 } 2901 }
2907 2902
2908 value->vt = VT_EMPTY; 2903 value->vt = VT_EMPTY;
2909 return S_FALSE; 2904 return S_FALSE;
2910 } 2905 }
2911 2906
2912 STDMETHODIMP BrowserAccessibilityComWin::get_maximumValue(VARIANT* value) { 2907 STDMETHODIMP BrowserAccessibilityComWin::get_maximumValue(VARIANT* value) {
2913 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_MAXIMUM_VALUE); 2908 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_MAXIMUM_VALUE);
2914 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2909 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2915 if (!GetOwner() || !GetOwner()->instance_active()) 2910 if (!GetOwner())
2916 return E_FAIL; 2911 return E_FAIL;
2917 2912
2918 if (!value) 2913 if (!value)
2919 return E_INVALIDARG; 2914 return E_INVALIDARG;
2920 2915
2921 float float_val; 2916 float float_val;
2922 if (GetFloatAttribute(ui::AX_ATTR_MAX_VALUE_FOR_RANGE, &float_val)) { 2917 if (GetFloatAttribute(ui::AX_ATTR_MAX_VALUE_FOR_RANGE, &float_val)) {
2923 value->vt = VT_R8; 2918 value->vt = VT_R8;
2924 value->dblVal = float_val; 2919 value->dblVal = float_val;
2925 return S_OK; 2920 return S_OK;
2926 } 2921 }
2927 2922
2928 value->vt = VT_EMPTY; 2923 value->vt = VT_EMPTY;
2929 return S_FALSE; 2924 return S_FALSE;
2930 } 2925 }
2931 2926
2932 STDMETHODIMP BrowserAccessibilityComWin::setCurrentValue(VARIANT new_value) { 2927 STDMETHODIMP BrowserAccessibilityComWin::setCurrentValue(VARIANT new_value) {
2933 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SET_CURRENT_VALUE); 2928 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SET_CURRENT_VALUE);
2934 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2929 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2935 // TODO(dmazzoni): Implement this. 2930 // TODO(dmazzoni): Implement this.
2936 return E_NOTIMPL; 2931 return E_NOTIMPL;
2937 } 2932 }
2938 2933
2939 // 2934 //
2940 // ISimpleDOMDocument methods. 2935 // ISimpleDOMDocument methods.
2941 // 2936 //
2942 2937
2943 STDMETHODIMP BrowserAccessibilityComWin::get_URL(BSTR* url) { 2938 STDMETHODIMP BrowserAccessibilityComWin::get_URL(BSTR* url) {
2944 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_URL); 2939 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_URL);
2945 if (!GetOwner() || !GetOwner()->instance_active()) 2940 if (!GetOwner())
2946 return E_FAIL; 2941 return E_FAIL;
2947 2942
2948 auto* manager = GetOwner()->manager(); 2943 auto* manager = GetOwner()->manager();
2949 if (!manager) 2944 if (!manager)
2950 return E_FAIL; 2945 return E_FAIL;
2951 2946
2952 if (!url) 2947 if (!url)
2953 return E_INVALIDARG; 2948 return E_INVALIDARG;
2954 2949
2955 if (GetOwner() != manager->GetRoot()) 2950 if (GetOwner() != manager->GetRoot())
2956 return E_FAIL; 2951 return E_FAIL;
2957 2952
2958 std::string str = manager->GetTreeData().url; 2953 std::string str = manager->GetTreeData().url;
2959 if (str.empty()) 2954 if (str.empty())
2960 return S_FALSE; 2955 return S_FALSE;
2961 2956
2962 *url = SysAllocString(base::UTF8ToUTF16(str).c_str()); 2957 *url = SysAllocString(base::UTF8ToUTF16(str).c_str());
2963 DCHECK(*url); 2958 DCHECK(*url);
2964 2959
2965 return S_OK; 2960 return S_OK;
2966 } 2961 }
2967 2962
2968 STDMETHODIMP BrowserAccessibilityComWin::get_title(BSTR* title) { 2963 STDMETHODIMP BrowserAccessibilityComWin::get_title(BSTR* title) {
2969 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TITLE); 2964 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TITLE);
2970 if (!GetOwner() || !GetOwner()->instance_active()) 2965 if (!GetOwner())
2971 return E_FAIL; 2966 return E_FAIL;
2972 2967
2973 auto* manager = GetOwner()->manager(); 2968 auto* manager = GetOwner()->manager();
2974 if (!manager) 2969 if (!manager)
2975 return E_FAIL; 2970 return E_FAIL;
2976 2971
2977 if (!title) 2972 if (!title)
2978 return E_INVALIDARG; 2973 return E_INVALIDARG;
2979 2974
2980 std::string str = manager->GetTreeData().title; 2975 std::string str = manager->GetTreeData().title;
2981 if (str.empty()) 2976 if (str.empty())
2982 return S_FALSE; 2977 return S_FALSE;
2983 2978
2984 *title = SysAllocString(base::UTF8ToUTF16(str).c_str()); 2979 *title = SysAllocString(base::UTF8ToUTF16(str).c_str());
2985 DCHECK(*title); 2980 DCHECK(*title);
2986 2981
2987 return S_OK; 2982 return S_OK;
2988 } 2983 }
2989 2984
2990 STDMETHODIMP BrowserAccessibilityComWin::get_mimeType(BSTR* mime_type) { 2985 STDMETHODIMP BrowserAccessibilityComWin::get_mimeType(BSTR* mime_type) {
2991 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_MIME_TYPE); 2986 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_MIME_TYPE);
2992 if (!GetOwner() || !GetOwner()->instance_active()) 2987 if (!GetOwner())
2993 return E_FAIL; 2988 return E_FAIL;
2994 2989
2995 auto* manager = GetOwner()->manager(); 2990 auto* manager = GetOwner()->manager();
2996 if (!manager) 2991 if (!manager)
2997 return E_FAIL; 2992 return E_FAIL;
2998 2993
2999 if (!mime_type) 2994 if (!mime_type)
3000 return E_INVALIDARG; 2995 return E_INVALIDARG;
3001 2996
3002 std::string str = manager->GetTreeData().mimetype; 2997 std::string str = manager->GetTreeData().mimetype;
3003 if (str.empty()) 2998 if (str.empty())
3004 return S_FALSE; 2999 return S_FALSE;
3005 3000
3006 *mime_type = SysAllocString(base::UTF8ToUTF16(str).c_str()); 3001 *mime_type = SysAllocString(base::UTF8ToUTF16(str).c_str());
3007 DCHECK(*mime_type); 3002 DCHECK(*mime_type);
3008 3003
3009 return S_OK; 3004 return S_OK;
3010 } 3005 }
3011 3006
3012 STDMETHODIMP BrowserAccessibilityComWin::get_docType(BSTR* doc_type) { 3007 STDMETHODIMP BrowserAccessibilityComWin::get_docType(BSTR* doc_type) {
3013 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_DOC_TYPE); 3008 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_DOC_TYPE);
3014 if (!GetOwner() || !GetOwner()->instance_active()) 3009 if (!GetOwner())
3015 return E_FAIL; 3010 return E_FAIL;
3016 3011
3017 auto* manager = GetOwner()->manager(); 3012 auto* manager = GetOwner()->manager();
3018 if (!manager) 3013 if (!manager)
3019 return E_FAIL; 3014 return E_FAIL;
3020 3015
3021 if (!doc_type) 3016 if (!doc_type)
3022 return E_INVALIDARG; 3017 return E_INVALIDARG;
3023 3018
3024 std::string str = manager->GetTreeData().doctype; 3019 std::string str = manager->GetTreeData().doctype;
(...skipping 26 matching lines...) Expand all
3051 3046
3052 STDMETHODIMP BrowserAccessibilityComWin::get_nodeInfo( 3047 STDMETHODIMP BrowserAccessibilityComWin::get_nodeInfo(
3053 BSTR* node_name, 3048 BSTR* node_name,
3054 short* name_space_id, 3049 short* name_space_id,
3055 BSTR* node_value, 3050 BSTR* node_value,
3056 unsigned int* num_children, 3051 unsigned int* num_children,
3057 unsigned int* unique_id, 3052 unsigned int* unique_id,
3058 unsigned short* node_type) { 3053 unsigned short* node_type) {
3059 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_NODE_INFO); 3054 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_NODE_INFO);
3060 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3055 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3061 if (!GetOwner() || !GetOwner()->instance_active()) 3056 if (!GetOwner())
3062 return E_FAIL; 3057 return E_FAIL;
3063 3058
3064 if (!node_name || !name_space_id || !node_value || !num_children || 3059 if (!node_name || !name_space_id || !node_value || !num_children ||
3065 !unique_id || !node_type) { 3060 !unique_id || !node_type) {
3066 return E_INVALIDARG; 3061 return E_INVALIDARG;
3067 } 3062 }
3068 3063
3069 base::string16 tag; 3064 base::string16 tag;
3070 if (GetOwner()->GetString16Attribute(ui::AX_ATTR_HTML_TAG, &tag)) 3065 if (GetOwner()->GetString16Attribute(ui::AX_ATTR_HTML_TAG, &tag))
3071 *node_name = SysAllocString(tag.c_str()); 3066 *node_name = SysAllocString(tag.c_str());
(...skipping 18 matching lines...) Expand all
3090 } 3085 }
3091 3086
3092 STDMETHODIMP BrowserAccessibilityComWin::get_attributes( 3087 STDMETHODIMP BrowserAccessibilityComWin::get_attributes(
3093 unsigned short max_attribs, 3088 unsigned short max_attribs,
3094 BSTR* attrib_names, 3089 BSTR* attrib_names,
3095 short* name_space_id, 3090 short* name_space_id,
3096 BSTR* attrib_values, 3091 BSTR* attrib_values,
3097 unsigned short* num_attribs) { 3092 unsigned short* num_attribs) {
3098 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ISIMPLEDOMNODE_GET_ATTRIBUTES); 3093 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ISIMPLEDOMNODE_GET_ATTRIBUTES);
3099 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3094 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3100 if (!GetOwner() || !GetOwner()->instance_active()) 3095 if (!GetOwner())
3101 return E_FAIL; 3096 return E_FAIL;
3102 3097
3103 if (!attrib_names || !name_space_id || !attrib_values || !num_attribs) 3098 if (!attrib_names || !name_space_id || !attrib_values || !num_attribs)
3104 return E_INVALIDARG; 3099 return E_INVALIDARG;
3105 3100
3106 *num_attribs = max_attribs; 3101 *num_attribs = max_attribs;
3107 if (*num_attribs > GetOwner()->GetHtmlAttributes().size()) 3102 if (*num_attribs > GetOwner()->GetHtmlAttributes().size())
3108 *num_attribs = GetOwner()->GetHtmlAttributes().size(); 3103 *num_attribs = GetOwner()->GetHtmlAttributes().size();
3109 3104
3110 for (unsigned short i = 0; i < *num_attribs; ++i) { 3105 for (unsigned short i = 0; i < *num_attribs; ++i) {
3111 attrib_names[i] = SysAllocString( 3106 attrib_names[i] = SysAllocString(
3112 base::UTF8ToUTF16(GetOwner()->GetHtmlAttributes()[i].first).c_str()); 3107 base::UTF8ToUTF16(GetOwner()->GetHtmlAttributes()[i].first).c_str());
3113 name_space_id[i] = 0; 3108 name_space_id[i] = 0;
3114 attrib_values[i] = SysAllocString( 3109 attrib_values[i] = SysAllocString(
3115 base::UTF8ToUTF16(GetOwner()->GetHtmlAttributes()[i].second).c_str()); 3110 base::UTF8ToUTF16(GetOwner()->GetHtmlAttributes()[i].second).c_str());
3116 } 3111 }
3117 return S_OK; 3112 return S_OK;
3118 } 3113 }
3119 3114
3120 STDMETHODIMP BrowserAccessibilityComWin::get_attributesForNames( 3115 STDMETHODIMP BrowserAccessibilityComWin::get_attributesForNames(
3121 unsigned short num_attribs, 3116 unsigned short num_attribs,
3122 BSTR* attrib_names, 3117 BSTR* attrib_names,
3123 short* name_space_id, 3118 short* name_space_id,
3124 BSTR* attrib_values) { 3119 BSTR* attrib_values) {
3125 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ATTRIBUTES_FOR_NAMES); 3120 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ATTRIBUTES_FOR_NAMES);
3126 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3121 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3127 if (!GetOwner() || !GetOwner()->instance_active()) 3122 if (!GetOwner())
3128 return E_FAIL; 3123 return E_FAIL;
3129 3124
3130 if (!attrib_names || !name_space_id || !attrib_values) 3125 if (!attrib_names || !name_space_id || !attrib_values)
3131 return E_INVALIDARG; 3126 return E_INVALIDARG;
3132 3127
3133 for (unsigned short i = 0; i < num_attribs; ++i) { 3128 for (unsigned short i = 0; i < num_attribs; ++i) {
3134 name_space_id[i] = 0; 3129 name_space_id[i] = 0;
3135 bool found = false; 3130 bool found = false;
3136 std::string name = base::UTF16ToUTF8((LPCWSTR)attrib_names[i]); 3131 std::string name = base::UTF16ToUTF8((LPCWSTR)attrib_names[i]);
3137 for (unsigned int j = 0; j < GetOwner()->GetHtmlAttributes().size(); ++j) { 3132 for (unsigned int j = 0; j < GetOwner()->GetHtmlAttributes().size(); ++j) {
(...skipping 13 matching lines...) Expand all
3151 } 3146 }
3152 3147
3153 STDMETHODIMP BrowserAccessibilityComWin::get_computedStyle( 3148 STDMETHODIMP BrowserAccessibilityComWin::get_computedStyle(
3154 unsigned short max_style_properties, 3149 unsigned short max_style_properties,
3155 boolean use_alternate_view, 3150 boolean use_alternate_view,
3156 BSTR* style_properties, 3151 BSTR* style_properties,
3157 BSTR* style_values, 3152 BSTR* style_values,
3158 unsigned short* num_style_properties) { 3153 unsigned short* num_style_properties) {
3159 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COMPUTED_STYLE); 3154 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COMPUTED_STYLE);
3160 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3155 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3161 if (!GetOwner() || !GetOwner()->instance_active()) 3156 if (!GetOwner())
3162 return E_FAIL; 3157 return E_FAIL;
3163 3158
3164 if (!style_properties || !style_values) 3159 if (!style_properties || !style_values)
3165 return E_INVALIDARG; 3160 return E_INVALIDARG;
3166 3161
3167 // We only cache a single style property for now: DISPLAY 3162 // We only cache a single style property for now: DISPLAY
3168 3163
3169 base::string16 display; 3164 base::string16 display;
3170 if (max_style_properties == 0 || 3165 if (max_style_properties == 0 ||
3171 !GetOwner()->GetString16Attribute(ui::AX_ATTR_DISPLAY, &display)) { 3166 !GetOwner()->GetString16Attribute(ui::AX_ATTR_DISPLAY, &display)) {
3172 *num_style_properties = 0; 3167 *num_style_properties = 0;
3173 return S_OK; 3168 return S_OK;
3174 } 3169 }
3175 3170
3176 *num_style_properties = 1; 3171 *num_style_properties = 1;
3177 style_properties[0] = SysAllocString(L"display"); 3172 style_properties[0] = SysAllocString(L"display");
3178 style_values[0] = SysAllocString(display.c_str()); 3173 style_values[0] = SysAllocString(display.c_str());
3179 3174
3180 return S_OK; 3175 return S_OK;
3181 } 3176 }
3182 3177
3183 STDMETHODIMP BrowserAccessibilityComWin::get_computedStyleForProperties( 3178 STDMETHODIMP BrowserAccessibilityComWin::get_computedStyleForProperties(
3184 unsigned short num_style_properties, 3179 unsigned short num_style_properties,
3185 boolean use_alternate_view, 3180 boolean use_alternate_view,
3186 BSTR* style_properties, 3181 BSTR* style_properties,
3187 BSTR* style_values) { 3182 BSTR* style_values) {
3188 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COMPUTED_STYLE_FOR_PROPERTIES); 3183 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COMPUTED_STYLE_FOR_PROPERTIES);
3189 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3184 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3190 if (!GetOwner() || !GetOwner()->instance_active()) 3185 if (!GetOwner())
3191 return E_FAIL; 3186 return E_FAIL;
3192 3187
3193 if (!style_properties || !style_values) 3188 if (!style_properties || !style_values)
3194 return E_INVALIDARG; 3189 return E_INVALIDARG;
3195 3190
3196 // We only cache a single style property for now: DISPLAY 3191 // We only cache a single style property for now: DISPLAY
3197 3192
3198 for (unsigned short i = 0; i < num_style_properties; ++i) { 3193 for (unsigned short i = 0; i < num_style_properties; ++i) {
3199 base::string16 name = base::ToLowerASCII( 3194 base::string16 name = base::ToLowerASCII(
3200 reinterpret_cast<const base::char16*>(style_properties[i])); 3195 reinterpret_cast<const base::char16*>(style_properties[i]));
(...skipping 10 matching lines...) Expand all
3211 } 3206 }
3212 3207
3213 STDMETHODIMP BrowserAccessibilityComWin::scrollTo(boolean placeTopLeft) { 3208 STDMETHODIMP BrowserAccessibilityComWin::scrollTo(boolean placeTopLeft) {
3214 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ISIMPLEDOMNODE_SCROLL_TO); 3209 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ISIMPLEDOMNODE_SCROLL_TO);
3215 return scrollTo(placeTopLeft ? IA2_SCROLL_TYPE_TOP_LEFT 3210 return scrollTo(placeTopLeft ? IA2_SCROLL_TYPE_TOP_LEFT
3216 : IA2_SCROLL_TYPE_ANYWHERE); 3211 : IA2_SCROLL_TYPE_ANYWHERE);
3217 } 3212 }
3218 3213
3219 STDMETHODIMP BrowserAccessibilityComWin::get_parentNode(ISimpleDOMNode** node) { 3214 STDMETHODIMP BrowserAccessibilityComWin::get_parentNode(ISimpleDOMNode** node) {
3220 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_PARENT_NODE); 3215 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_PARENT_NODE);
3221 if (!GetOwner() || !GetOwner()->instance_active()) 3216 if (!GetOwner())
3222 return E_FAIL; 3217 return E_FAIL;
3223 3218
3224 if (!node) 3219 if (!node)
3225 return E_INVALIDARG; 3220 return E_INVALIDARG;
3226 3221
3227 *node = ToBrowserAccessibilityComWin(GetOwner()->PlatformGetParent()) 3222 *node = ToBrowserAccessibilityComWin(GetOwner()->PlatformGetParent())
3228 ->NewReference(); 3223 ->NewReference();
3229 return S_OK; 3224 return S_OK;
3230 } 3225 }
3231 3226
3232 STDMETHODIMP BrowserAccessibilityComWin::get_firstChild(ISimpleDOMNode** node) { 3227 STDMETHODIMP BrowserAccessibilityComWin::get_firstChild(ISimpleDOMNode** node) {
3233 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_FIRST_CHILD); 3228 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_FIRST_CHILD);
3234 if (!GetOwner() || !GetOwner()->instance_active()) 3229 if (!GetOwner())
3235 return E_FAIL; 3230 return E_FAIL;
3236 3231
3237 if (!node) 3232 if (!node)
3238 return E_INVALIDARG; 3233 return E_INVALIDARG;
3239 3234
3240 if (GetOwner()->PlatformChildCount() == 0) { 3235 if (GetOwner()->PlatformChildCount() == 0) {
3241 *node = NULL; 3236 *node = NULL;
3242 return S_FALSE; 3237 return S_FALSE;
3243 } 3238 }
3244 3239
3245 *node = ToBrowserAccessibilityComWin(GetOwner()->PlatformGetChild(0)) 3240 *node = ToBrowserAccessibilityComWin(GetOwner()->PlatformGetChild(0))
3246 ->NewReference(); 3241 ->NewReference();
3247 return S_OK; 3242 return S_OK;
3248 } 3243 }
3249 3244
3250 STDMETHODIMP BrowserAccessibilityComWin::get_lastChild(ISimpleDOMNode** node) { 3245 STDMETHODIMP BrowserAccessibilityComWin::get_lastChild(ISimpleDOMNode** node) {
3251 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LAST_CHILD); 3246 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LAST_CHILD);
3252 if (!GetOwner() || !GetOwner()->instance_active()) 3247 if (!GetOwner())
3253 return E_FAIL; 3248 return E_FAIL;
3254 3249
3255 if (!node) 3250 if (!node)
3256 return E_INVALIDARG; 3251 return E_INVALIDARG;
3257 3252
3258 if (GetOwner()->PlatformChildCount() == 0) { 3253 if (GetOwner()->PlatformChildCount() == 0) {
3259 *node = NULL; 3254 *node = NULL;
3260 return S_FALSE; 3255 return S_FALSE;
3261 } 3256 }
3262 3257
3263 *node = 3258 *node =
3264 ToBrowserAccessibilityComWin( 3259 ToBrowserAccessibilityComWin(
3265 GetOwner()->PlatformGetChild(GetOwner()->PlatformChildCount() - 1)) 3260 GetOwner()->PlatformGetChild(GetOwner()->PlatformChildCount() - 1))
3266 ->NewReference(); 3261 ->NewReference();
3267 return S_OK; 3262 return S_OK;
3268 } 3263 }
3269 3264
3270 STDMETHODIMP BrowserAccessibilityComWin::get_previousSibling( 3265 STDMETHODIMP BrowserAccessibilityComWin::get_previousSibling(
3271 ISimpleDOMNode** node) { 3266 ISimpleDOMNode** node) {
3272 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_PREVIOUS_SIBLING); 3267 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_PREVIOUS_SIBLING);
3273 if (!GetOwner() || !GetOwner()->instance_active()) 3268 if (!GetOwner())
3274 return E_FAIL; 3269 return E_FAIL;
3275 3270
3276 if (!node) 3271 if (!node)
3277 return E_INVALIDARG; 3272 return E_INVALIDARG;
3278 3273
3279 if (!GetOwner()->PlatformGetParent() || GetIndexInParent() <= 0) { 3274 if (!GetOwner()->PlatformGetParent() || GetIndexInParent() <= 0) {
3280 *node = NULL; 3275 *node = NULL;
3281 return S_FALSE; 3276 return S_FALSE;
3282 } 3277 }
3283 3278
3284 *node = ToBrowserAccessibilityComWin( 3279 *node = ToBrowserAccessibilityComWin(
3285 GetOwner()->PlatformGetParent()->InternalGetChild( 3280 GetOwner()->PlatformGetParent()->InternalGetChild(
3286 GetIndexInParent() - 1)) 3281 GetIndexInParent() - 1))
3287 ->NewReference(); 3282 ->NewReference();
3288 return S_OK; 3283 return S_OK;
3289 } 3284 }
3290 3285
3291 STDMETHODIMP BrowserAccessibilityComWin::get_nextSibling( 3286 STDMETHODIMP BrowserAccessibilityComWin::get_nextSibling(
3292 ISimpleDOMNode** node) { 3287 ISimpleDOMNode** node) {
3293 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_NEXT_SIBLING); 3288 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_NEXT_SIBLING);
3294 if (!GetOwner() || !GetOwner()->instance_active()) 3289 if (!GetOwner())
3295 return E_FAIL; 3290 return E_FAIL;
3296 3291
3297 if (!node) 3292 if (!node)
3298 return E_INVALIDARG; 3293 return E_INVALIDARG;
3299 3294
3300 if (!GetOwner()->PlatformGetParent() || GetIndexInParent() < 0 || 3295 if (!GetOwner()->PlatformGetParent() || GetIndexInParent() < 0 ||
3301 GetIndexInParent() >= 3296 GetIndexInParent() >=
3302 static_cast<int>( 3297 static_cast<int>(
3303 GetOwner()->PlatformGetParent()->InternalChildCount()) - 3298 GetOwner()->PlatformGetParent()->InternalChildCount()) -
3304 1) { 3299 1) {
3305 *node = NULL; 3300 *node = NULL;
3306 return S_FALSE; 3301 return S_FALSE;
3307 } 3302 }
3308 3303
3309 *node = ToBrowserAccessibilityComWin( 3304 *node = ToBrowserAccessibilityComWin(
3310 GetOwner()->PlatformGetParent()->InternalGetChild( 3305 GetOwner()->PlatformGetParent()->InternalGetChild(
3311 GetIndexInParent() + 1)) 3306 GetIndexInParent() + 1))
3312 ->NewReference(); 3307 ->NewReference();
3313 return S_OK; 3308 return S_OK;
3314 } 3309 }
3315 3310
3316 STDMETHODIMP BrowserAccessibilityComWin::get_childAt(unsigned int child_index, 3311 STDMETHODIMP BrowserAccessibilityComWin::get_childAt(unsigned int child_index,
3317 ISimpleDOMNode** node) { 3312 ISimpleDOMNode** node) {
3318 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CHILD_AT); 3313 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CHILD_AT);
3319 if (!GetOwner() || !GetOwner()->instance_active()) 3314 if (!GetOwner())
3320 return E_FAIL; 3315 return E_FAIL;
3321 3316
3322 if (!node) 3317 if (!node)
3323 return E_INVALIDARG; 3318 return E_INVALIDARG;
3324 3319
3325 if (child_index >= GetOwner()->PlatformChildCount()) 3320 if (child_index >= GetOwner()->PlatformChildCount())
3326 return E_INVALIDARG; 3321 return E_INVALIDARG;
3327 3322
3328 BrowserAccessibility* child = GetOwner()->PlatformGetChild(child_index); 3323 BrowserAccessibility* child = GetOwner()->PlatformGetChild(child_index);
3329 if (!child) { 3324 if (!child) {
3330 *node = NULL; 3325 *node = NULL;
3331 return S_FALSE; 3326 return S_FALSE;
3332 } 3327 }
3333 3328
3334 *node = ToBrowserAccessibilityComWin(child)->NewReference(); 3329 *node = ToBrowserAccessibilityComWin(child)->NewReference();
3335 return S_OK; 3330 return S_OK;
3336 } 3331 }
3337 3332
3338 // We only support this method for retrieving MathML content. 3333 // We only support this method for retrieving MathML content.
3339 STDMETHODIMP BrowserAccessibilityComWin::get_innerHTML(BSTR* innerHTML) { 3334 STDMETHODIMP BrowserAccessibilityComWin::get_innerHTML(BSTR* innerHTML) {
3340 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_INNER_HTML); 3335 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_INNER_HTML);
3341 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3336 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3342 if (!GetOwner() || !GetOwner()->instance_active()) 3337 if (!GetOwner())
3343 return E_FAIL; 3338 return E_FAIL;
3344 if (GetOwner()->GetRole() != ui::AX_ROLE_MATH) 3339 if (GetOwner()->GetRole() != ui::AX_ROLE_MATH)
3345 return E_NOTIMPL; 3340 return E_NOTIMPL;
3346 3341
3347 base::string16 inner_html = 3342 base::string16 inner_html =
3348 GetOwner()->GetString16Attribute(ui::AX_ATTR_INNER_HTML); 3343 GetOwner()->GetString16Attribute(ui::AX_ATTR_INNER_HTML);
3349 *innerHTML = SysAllocString(inner_html.c_str()); 3344 *innerHTML = SysAllocString(inner_html.c_str());
3350 DCHECK(*innerHTML); 3345 DCHECK(*innerHTML);
3351 return S_OK; 3346 return S_OK;
3352 } 3347 }
3353 3348
3354 STDMETHODIMP 3349 STDMETHODIMP
3355 BrowserAccessibilityComWin::get_localInterface(void** local_interface) { 3350 BrowserAccessibilityComWin::get_localInterface(void** local_interface) {
3356 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LOCAL_INTERFACE); 3351 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LOCAL_INTERFACE);
3357 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3352 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3358 return E_NOTIMPL; 3353 return E_NOTIMPL;
3359 } 3354 }
3360 3355
3361 STDMETHODIMP BrowserAccessibilityComWin::get_language(BSTR* language) { 3356 STDMETHODIMP BrowserAccessibilityComWin::get_language(BSTR* language) {
3362 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LANGUAGE); 3357 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LANGUAGE);
3363 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3358 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3364 if (!language) 3359 if (!language)
3365 return E_INVALIDARG; 3360 return E_INVALIDARG;
3366 *language = nullptr; 3361 *language = nullptr;
3367 3362
3368 if (!GetOwner() || !GetOwner()->instance_active()) 3363 if (!GetOwner())
3369 return E_FAIL; 3364 return E_FAIL;
3370 3365
3371 base::string16 lang = 3366 base::string16 lang =
3372 GetOwner()->GetInheritedString16Attribute(ui::AX_ATTR_LANGUAGE); 3367 GetOwner()->GetInheritedString16Attribute(ui::AX_ATTR_LANGUAGE);
3373 if (lang.empty()) 3368 if (lang.empty())
3374 lang = L"en-US"; 3369 lang = L"en-US";
3375 3370
3376 *language = SysAllocString(lang.c_str()); 3371 *language = SysAllocString(lang.c_str());
3377 DCHECK(*language); 3372 DCHECK(*language);
3378 return S_OK; 3373 return S_OK;
3379 } 3374 }
3380 3375
3381 // 3376 //
3382 // ISimpleDOMText methods. 3377 // ISimpleDOMText methods.
3383 // 3378 //
3384 3379
3385 STDMETHODIMP BrowserAccessibilityComWin::get_domText(BSTR* dom_text) { 3380 STDMETHODIMP BrowserAccessibilityComWin::get_domText(BSTR* dom_text) {
3386 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_DOM_TEXT); 3381 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_DOM_TEXT);
3387 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3382 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3388 if (!GetOwner() || !GetOwner()->instance_active()) 3383 if (!GetOwner())
3389 return E_FAIL; 3384 return E_FAIL;
3390 3385
3391 if (!dom_text) 3386 if (!dom_text)
3392 return E_INVALIDARG; 3387 return E_INVALIDARG;
3393 3388
3394 return GetStringAttributeAsBstr(ui::AX_ATTR_NAME, dom_text); 3389 return GetStringAttributeAsBstr(ui::AX_ATTR_NAME, dom_text);
3395 } 3390 }
3396 3391
3397 STDMETHODIMP BrowserAccessibilityComWin::get_clippedSubstringBounds( 3392 STDMETHODIMP BrowserAccessibilityComWin::get_clippedSubstringBounds(
3398 unsigned int start_index, 3393 unsigned int start_index,
(...skipping 14 matching lines...) Expand all
3413 STDMETHODIMP BrowserAccessibilityComWin::get_unclippedSubstringBounds( 3408 STDMETHODIMP BrowserAccessibilityComWin::get_unclippedSubstringBounds(
3414 unsigned int start_index, 3409 unsigned int start_index,
3415 unsigned int end_index, 3410 unsigned int end_index,
3416 int* out_x, 3411 int* out_x,
3417 int* out_y, 3412 int* out_y,
3418 int* out_width, 3413 int* out_width,
3419 int* out_height) { 3414 int* out_height) {
3420 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_UNCLIPPED_SUBSTRING_BOUNDS); 3415 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_UNCLIPPED_SUBSTRING_BOUNDS);
3421 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 3416 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
3422 AccessibilityMode::kInlineTextBoxes); 3417 AccessibilityMode::kInlineTextBoxes);
3423 if (!GetOwner() || !GetOwner()->instance_active()) 3418 if (!GetOwner())
3424 return E_FAIL; 3419 return E_FAIL;
3425 3420
3426 if (!out_x || !out_y || !out_width || !out_height) 3421 if (!out_x || !out_y || !out_width || !out_height)
3427 return E_INVALIDARG; 3422 return E_INVALIDARG;
3428 3423
3429 unsigned int text_length = 3424 unsigned int text_length =
3430 static_cast<unsigned int>(GetOwner()->GetText().size()); 3425 static_cast<unsigned int>(GetOwner()->GetText().size());
3431 if (start_index > text_length || end_index > text_length || 3426 if (start_index > text_length || end_index > text_length ||
3432 start_index > end_index) { 3427 start_index > end_index) {
3433 return E_INVALIDARG; 3428 return E_INVALIDARG;
3434 } 3429 }
3435 3430
3436 gfx::Rect bounds = 3431 gfx::Rect bounds =
3437 GetOwner()->GetScreenBoundsForRange(start_index, end_index - start_index); 3432 GetOwner()->GetScreenBoundsForRange(start_index, end_index - start_index);
3438 *out_x = bounds.x(); 3433 *out_x = bounds.x();
3439 *out_y = bounds.y(); 3434 *out_y = bounds.y();
3440 *out_width = bounds.width(); 3435 *out_width = bounds.width();
3441 *out_height = bounds.height(); 3436 *out_height = bounds.height();
3442 return S_OK; 3437 return S_OK;
3443 } 3438 }
3444 3439
3445 STDMETHODIMP BrowserAccessibilityComWin::scrollToSubstring( 3440 STDMETHODIMP BrowserAccessibilityComWin::scrollToSubstring(
3446 unsigned int start_index, 3441 unsigned int start_index,
3447 unsigned int end_index) { 3442 unsigned int end_index) {
3448 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_TO_SUBSTRING); 3443 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_TO_SUBSTRING);
3449 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 3444 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
3450 AccessibilityMode::kInlineTextBoxes); 3445 AccessibilityMode::kInlineTextBoxes);
3451 if (!GetOwner() || !GetOwner()->instance_active()) 3446 if (!GetOwner())
3452 return E_FAIL; 3447 return E_FAIL;
3453 3448
3454 auto* manager = GetOwner()->manager(); 3449 auto* manager = GetOwner()->manager();
3455 if (!manager) 3450 if (!manager)
3456 return E_FAIL; 3451 return E_FAIL;
3457 3452
3458 unsigned int text_length = 3453 unsigned int text_length =
3459 static_cast<unsigned int>(GetOwner()->GetText().size()); 3454 static_cast<unsigned int>(GetOwner()->GetText().size());
3460 if (start_index > text_length || end_index > text_length || 3455 if (start_index > text_length || end_index > text_length ||
3461 start_index > end_index) { 3456 start_index > end_index) {
3462 return E_INVALIDARG; 3457 return E_INVALIDARG;
3463 } 3458 }
3464 3459
3465 manager->ScrollToMakeVisible( 3460 manager->ScrollToMakeVisible(
3466 *GetOwner(), 3461 *GetOwner(),
3467 GetOwner()->GetPageBoundsForRange(start_index, end_index - start_index)); 3462 GetOwner()->GetPageBoundsForRange(start_index, end_index - start_index));
3468 3463
3469 return S_OK; 3464 return S_OK;
3470 } 3465 }
3471 3466
3472 STDMETHODIMP BrowserAccessibilityComWin::get_fontFamily(BSTR* font_family) { 3467 STDMETHODIMP BrowserAccessibilityComWin::get_fontFamily(BSTR* font_family) {
3473 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_FONT_FAMILY); 3468 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_FONT_FAMILY);
3474 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 3469 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
3475 if (!font_family) 3470 if (!font_family)
3476 return E_INVALIDARG; 3471 return E_INVALIDARG;
3477 *font_family = nullptr; 3472 *font_family = nullptr;
3478 3473
3479 if (!GetOwner() || !GetOwner()->instance_active()) 3474 if (!GetOwner())
3480 return E_FAIL; 3475 return E_FAIL;
3481 3476
3482 base::string16 family = 3477 base::string16 family =
3483 GetOwner()->GetInheritedString16Attribute(ui::AX_ATTR_FONT_FAMILY); 3478 GetOwner()->GetInheritedString16Attribute(ui::AX_ATTR_FONT_FAMILY);
3484 if (family.empty()) 3479 if (family.empty())
3485 return S_FALSE; 3480 return S_FALSE;
3486 3481
3487 *font_family = SysAllocString(family.c_str()); 3482 *font_family = SysAllocString(family.c_str());
3488 DCHECK(*font_family); 3483 DCHECK(*font_family);
3489 return S_OK; 3484 return S_OK;
3490 } 3485 }
3491 3486
3492 // 3487 //
3493 // IServiceProvider methods. 3488 // IServiceProvider methods.
3494 // 3489 //
3495 3490
3496 STDMETHODIMP BrowserAccessibilityComWin::QueryService(REFGUID guid_service, 3491 STDMETHODIMP BrowserAccessibilityComWin::QueryService(REFGUID guid_service,
3497 REFIID riid, 3492 REFIID riid,
3498 void** object) { 3493 void** object) {
3499 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_QUERY_SERVICE); 3494 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_QUERY_SERVICE);
3500 if (!GetOwner() || !GetOwner()->instance_active()) 3495 if (!GetOwner())
3501 return E_FAIL; 3496 return E_FAIL;
3502 3497
3503 if (guid_service == GUID_IAccessibleContentDocument) { 3498 if (guid_service == GUID_IAccessibleContentDocument) {
3504 // Special Mozilla extension: return the accessible for the root document. 3499 // Special Mozilla extension: return the accessible for the root document.
3505 // Screen readers use this to distinguish between a document loaded event 3500 // Screen readers use this to distinguish between a document loaded event
3506 // on the root document vs on an iframe. 3501 // on the root document vs on an iframe.
3507 BrowserAccessibility* node = GetOwner(); 3502 BrowserAccessibility* node = GetOwner();
3508 while (node->PlatformGetParent()) 3503 while (node->PlatformGetParent())
3509 node = node->PlatformGetParent()->manager()->GetRoot(); 3504 node = node->PlatformGetParent()->manager()->GetRoot();
3510 return ToBrowserAccessibilityComWin(node)->QueryInterface(IID_IAccessible2, 3505 return ToBrowserAccessibilityComWin(node)->QueryInterface(IID_IAccessible2,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
3566 IAccessibleEx** acc) { 3561 IAccessibleEx** acc) {
3567 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_CONVERT_RETURNED_ELEMENT); 3562 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_CONVERT_RETURNED_ELEMENT);
3568 return E_NOTIMPL; 3563 return E_NOTIMPL;
3569 } 3564 }
3570 3565
3571 STDMETHODIMP BrowserAccessibilityComWin::GetPatternProvider( 3566 STDMETHODIMP BrowserAccessibilityComWin::GetPatternProvider(
3572 PATTERNID id, 3567 PATTERNID id,
3573 IUnknown** provider) { 3568 IUnknown** provider) {
3574 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_PATTERN_PROVIDER); 3569 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_PATTERN_PROVIDER);
3575 DVLOG(1) << "In Function: " << __func__ << " for pattern id: " << id; 3570 DVLOG(1) << "In Function: " << __func__ << " for pattern id: " << id;
3576 if (!GetOwner() || !GetOwner()->instance_active()) 3571 if (!GetOwner())
3577 return E_FAIL; 3572 return E_FAIL;
3578 3573
3579 if (id == UIA_ValuePatternId || id == UIA_TextPatternId) { 3574 if (id == UIA_ValuePatternId || id == UIA_TextPatternId) {
3580 if (GetOwner()->HasState(ui::AX_STATE_EDITABLE)) { 3575 if (GetOwner()->HasState(ui::AX_STATE_EDITABLE)) {
3581 DVLOG(1) << "Returning UIA text provider"; 3576 DVLOG(1) << "Returning UIA text provider";
3582 base::win::UIATextProvider::CreateTextProvider(GetValueText(), true, 3577 base::win::UIATextProvider::CreateTextProvider(GetValueText(), true,
3583 provider); 3578 provider);
3584 return S_OK; 3579 return S_OK;
3585 } 3580 }
3586 } 3581 }
3587 return E_NOTIMPL; 3582 return E_NOTIMPL;
3588 } 3583 }
3589 3584
3590 STDMETHODIMP BrowserAccessibilityComWin::GetPropertyValue(PROPERTYID id, 3585 STDMETHODIMP BrowserAccessibilityComWin::GetPropertyValue(PROPERTYID id,
3591 VARIANT* ret) { 3586 VARIANT* ret) {
3592 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_PROPERTY_VALUE); 3587 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_PROPERTY_VALUE);
3593 DVLOG(1) << "In Function: " << __func__ << " for property id: " << id; 3588 DVLOG(1) << "In Function: " << __func__ << " for property id: " << id;
3594 if (!GetOwner() || !GetOwner()->instance_active()) 3589 if (!GetOwner())
3595 return E_FAIL; 3590 return E_FAIL;
3596 3591
3597 V_VT(ret) = VT_EMPTY; 3592 V_VT(ret) = VT_EMPTY;
3598 if (id == UIA_ControlTypePropertyId) { 3593 if (id == UIA_ControlTypePropertyId) {
3599 if (GetOwner()->HasState(ui::AX_STATE_EDITABLE)) { 3594 if (GetOwner()->HasState(ui::AX_STATE_EDITABLE)) {
3600 V_VT(ret) = VT_I4; 3595 V_VT(ret) = VT_I4;
3601 ret->lVal = UIA_EditControlTypeId; 3596 ret->lVal = UIA_EditControlTypeId;
3602 DVLOG(1) << "Returning Edit control type"; 3597 DVLOG(1) << "Returning Edit control type";
3603 } else { 3598 } else {
3604 DVLOG(1) << "Returning empty control type"; 3599 DVLOG(1) << "Returning empty control type";
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
4321 start_offset += 4316 start_offset +=
4322 static_cast<int>(text_win->GetOwner()->GetText().length()); 4317 static_cast<int>(text_win->GetOwner()->GetText().length());
4323 } 4318 }
4324 } 4319 }
4325 } 4320 }
4326 return spelling_attributes; 4321 return spelling_attributes;
4327 } 4322 }
4328 4323
4329 BrowserAccessibilityComWin* BrowserAccessibilityComWin::GetTargetFromChildID( 4324 BrowserAccessibilityComWin* BrowserAccessibilityComWin::GetTargetFromChildID(
4330 const VARIANT& var_id) { 4325 const VARIANT& var_id) {
4331 if (!GetOwner() || !GetOwner()->instance_active()) 4326 if (!GetOwner())
4332 return nullptr; 4327 return nullptr;
4333 4328
4334 if (var_id.vt != VT_I4) 4329 if (var_id.vt != VT_I4)
4335 return nullptr; 4330 return nullptr;
4336 4331
4337 LONG child_id = var_id.lVal; 4332 LONG child_id = var_id.lVal;
4338 if (child_id == CHILDID_SELF) 4333 if (child_id == CHILDID_SELF)
4339 return this; 4334 return this;
4340 4335
4341 if (child_id >= 1 && 4336 if (child_id >= 1 &&
4342 child_id <= static_cast<LONG>(GetOwner()->PlatformChildCount())) 4337 child_id <= static_cast<LONG>(GetOwner()->PlatformChildCount()))
4343 return ToBrowserAccessibilityComWin( 4338 return ToBrowserAccessibilityComWin(
4344 GetOwner()->PlatformGetChild(child_id - 1)); 4339 GetOwner()->PlatformGetChild(child_id - 1));
4345 4340
4346 BrowserAccessibilityComWin* child = ToBrowserAccessibilityComWin( 4341 BrowserAccessibilityComWin* child = ToBrowserAccessibilityComWin(
4347 BrowserAccessibility::GetFromUniqueID(-child_id)); 4342 BrowserAccessibility::GetFromUniqueID(-child_id));
4348 if (child && child->GetOwner()->IsDescendantOf(GetOwner())) 4343 if (child && child->GetOwner()->IsDescendantOf(GetOwner()))
4349 return child; 4344 return child;
4350 4345
4351 return nullptr; 4346 return nullptr;
4352 } 4347 }
4353 4348
4354 HRESULT BrowserAccessibilityComWin::GetStringAttributeAsBstr( 4349 HRESULT BrowserAccessibilityComWin::GetStringAttributeAsBstr(
4355 ui::AXStringAttribute attribute, 4350 ui::AXStringAttribute attribute,
4356 BSTR* value_bstr) { 4351 BSTR* value_bstr) {
4357 base::string16 str; 4352 base::string16 str;
4358 if (!GetOwner() || !GetOwner()->instance_active()) 4353 if (!GetOwner())
4359 return E_FAIL; 4354 return E_FAIL;
4360 4355
4361 if (!GetOwner()->GetString16Attribute(attribute, &str)) 4356 if (!GetOwner()->GetString16Attribute(attribute, &str))
4362 return S_FALSE; 4357 return S_FALSE;
4363 4358
4364 *value_bstr = SysAllocString(str.c_str()); 4359 *value_bstr = SysAllocString(str.c_str());
4365 DCHECK(*value_bstr); 4360 DCHECK(*value_bstr);
4366 4361
4367 return S_OK; 4362 return S_OK;
4368 } 4363 }
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
4885 return static_cast<LONG>(iterator->first); 4880 return static_cast<LONG>(iterator->first);
4886 } 4881 }
4887 } 4882 }
4888 4883
4889 NOTREACHED(); 4884 NOTREACHED();
4890 return start_offset; 4885 return start_offset;
4891 } 4886 }
4892 4887
4893 BrowserAccessibilityComWin* BrowserAccessibilityComWin::GetFromID( 4888 BrowserAccessibilityComWin* BrowserAccessibilityComWin::GetFromID(
4894 int32_t id) const { 4889 int32_t id) const {
4895 if (!GetOwner() || !GetOwner()->instance_active()) 4890 if (!GetOwner())
4896 return nullptr; 4891 return nullptr;
4897 return ToBrowserAccessibilityComWin(GetOwner()->manager()->GetFromID(id)); 4892 return ToBrowserAccessibilityComWin(GetOwner()->manager()->GetFromID(id));
4898 } 4893 }
4899 4894
4900 bool BrowserAccessibilityComWin::IsListBoxOptionOrMenuListOption() { 4895 bool BrowserAccessibilityComWin::IsListBoxOptionOrMenuListOption() {
4901 if (!GetOwner()->PlatformGetParent()) 4896 if (!GetOwner()->PlatformGetParent())
4902 return false; 4897 return false;
4903 4898
4904 int32_t role = GetOwner()->GetRole(); 4899 int32_t role = GetOwner()->GetRole();
4905 int32_t parent_role = GetOwner()->PlatformGetParent()->GetRole(); 4900 int32_t parent_role = GetOwner()->PlatformGetParent()->GetRole();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
4955 CComObject<BrowserAccessibilityRelation>* relation; 4950 CComObject<BrowserAccessibilityRelation>* relation;
4956 HRESULT hr = 4951 HRESULT hr =
4957 CComObject<BrowserAccessibilityRelation>::CreateInstance(&relation); 4952 CComObject<BrowserAccessibilityRelation>::CreateInstance(&relation);
4958 DCHECK(SUCCEEDED(hr)); 4953 DCHECK(SUCCEEDED(hr));
4959 relation->AddRef(); 4954 relation->AddRef();
4960 relation->Initialize(this, relation_type); 4955 relation->Initialize(this, relation_type);
4961 4956
4962 for (int target_id : filtered_target_ids) { 4957 for (int target_id : filtered_target_ids) {
4963 BrowserAccessibilityComWin* target = 4958 BrowserAccessibilityComWin* target =
4964 GetFromID(static_cast<int32_t>(target_id)); 4959 GetFromID(static_cast<int32_t>(target_id));
4965 if (!target || !target->GetOwner()->instance_active()) 4960 if (!target || !target->GetOwner())
4966 continue; 4961 continue;
4967 relation->AddTarget(target_id); 4962 relation->AddTarget(target_id);
4968 target->AddRelation(reverse_relation_type, GetOwner()->GetId()); 4963 target->AddRelation(reverse_relation_type, GetOwner()->GetId());
4969 } 4964 }
4970 4965
4971 relations_.push_back(relation); 4966 relations_.push_back(relation);
4972 } 4967 }
4973 4968
4974 // Clears all the forward relations from this object to any other object and the 4969 // Clears all the forward relations from this object to any other object and the
4975 // associated reverse relations on the other objects, but leaves any reverse 4970 // associated reverse relations on the other objects, but leaves any reverse
(...skipping 23 matching lines...) Expand all
4999 void BrowserAccessibilityComWin::RemoveBidirectionalRelationsOfType( 4994 void BrowserAccessibilityComWin::RemoveBidirectionalRelationsOfType(
5000 const base::string16& relation_type, 4995 const base::string16& relation_type,
5001 const base::string16& reverse_relation_type) { 4996 const base::string16& reverse_relation_type) {
5002 for (auto iter = relations_.begin(); iter != relations_.end();) { 4997 for (auto iter = relations_.begin(); iter != relations_.end();) {
5003 BrowserAccessibilityRelation* relation = *iter; 4998 BrowserAccessibilityRelation* relation = *iter;
5004 DCHECK(relation); 4999 DCHECK(relation);
5005 if (relation->get_type() == relation_type) { 5000 if (relation->get_type() == relation_type) {
5006 for (int target_id : relation->get_target_ids()) { 5001 for (int target_id : relation->get_target_ids()) {
5007 BrowserAccessibilityComWin* target = 5002 BrowserAccessibilityComWin* target =
5008 GetFromID(static_cast<int32_t>(target_id)); 5003 GetFromID(static_cast<int32_t>(target_id));
5009 if (!target || !target->GetOwner()->instance_active()) 5004 if (!target || !target->GetOwner())
5010 continue; 5005 continue;
5011 DCHECK_NE(target, this); 5006 DCHECK_NE(target, this);
5012 target->RemoveTargetFromRelation(reverse_relation_type, 5007 target->RemoveTargetFromRelation(reverse_relation_type,
5013 GetOwner()->GetId()); 5008 GetOwner()->GetId());
5014 } 5009 }
5015 iter = relations_.erase(iter); 5010 iter = relations_.erase(iter);
5016 relation->Release(); 5011 relation->Release();
5017 } else { 5012 } else {
5018 ++iter; 5013 ++iter;
5019 } 5014 }
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
5725 5720
5726 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( 5721 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin(
5727 BrowserAccessibility* obj) { 5722 BrowserAccessibility* obj) {
5728 if (!obj || !obj->IsNative()) 5723 if (!obj || !obj->IsNative())
5729 return nullptr; 5724 return nullptr;
5730 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); 5725 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM();
5731 return result; 5726 return result;
5732 } 5727 }
5733 5728
5734 } // namespace content 5729 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698