12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/accessibility/native_view_accessibility.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/accessibility/ax_view_state.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/views/view.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/views/widget/widget.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_WIN) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NativeViewAccessibility* NativeViewAccessibility::Create(View* view) { 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(view); 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NativeViewAccessibility* instance = new NativeViewAccessibility(); 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) instance->set_view(view); 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return instance; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)NativeViewAccessibility::NativeViewAccessibility() 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : view_(NULL), ax_node_(ui::AXPlatformNode::Create(this)) { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NativeViewAccessibility::~NativeViewAccessibility() { 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ax_node_) 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ax_node_->Destroy(); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::NativeViewAccessible NativeViewAccessibility::GetNativeObject() { 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ax_node_ ? ax_node_->GetNativeViewAccessible() : NULL; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NativeViewAccessibility::Destroy() { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete this; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_WIN) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void NativeViewAccessibility::RegisterWebView(View* web_view) { 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void NativeViewAccessibility::UnregisterWebView(View* web_view) { 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// ui::AXPlatformNodeDelegate 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ui::AXNodeData* NativeViewAccessibility::GetData() { 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::AXViewState state; 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) view_->GetAccessibleState(&state); 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data_.role = state.role; 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data_.location = view_->GetBoundsInScreen(); 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return &data_; 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int NativeViewAccessibility::GetChildCount() { 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return view_->child_count(); 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gfx::NativeViewAccessible NativeViewAccessibility::ChildAtIndex(int index) { 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (index < 0 || index >= view_->child_count()) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return view_->child_at(index)->GetNativeViewAccessible(); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gfx::NativeViewAccessible NativeViewAccessibility::GetParent() { 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (view_->parent()) 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return view_->parent()->GetNativeViewAccessible(); 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_MACOSX) 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (view_->GetWidget()) 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return view_->GetWidget()->GetNativeView(); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gfx::Vector2d NativeViewAccessibility::GetGlobalCoordinateOffset() { 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return gfx::Vector2d(0, 0); // location is already in screen coordinates. 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void NativeViewAccessibility::NotifyAccessibilityEvent(ui::AXEvent event_type) { 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace views 90