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