blob: de71650a132a28b759856942792b16476b92ac9f [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/accessibility/view_ax_platform_node_delegate_mac.h"
#include <memory>
#include "ui/views/cocoa/bridged_native_widget_host_impl.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
namespace views {
// static
std::unique_ptr<ViewAccessibility> ViewAccessibility::Create(View* view) {
return std::make_unique<ViewAXPlatformNodeDelegateMac>(view);
}
ViewAXPlatformNodeDelegateMac::ViewAXPlatformNodeDelegateMac(View* view)
: ViewAXPlatformNodeDelegate(view) {}
ViewAXPlatformNodeDelegateMac::~ViewAXPlatformNodeDelegateMac() = default;
gfx::NativeViewAccessible ViewAXPlatformNodeDelegateMac::GetNSWindow() {
auto* widget = view()->GetWidget();
if (!widget)
return nil;
auto* top_level_widget = widget->GetTopLevelWidget();
if (!top_level_widget)
return nil;
auto* bridge_host = BridgedNativeWidgetHostImpl::GetFromNativeWindow(
top_level_widget->GetNativeWindow());
if (!bridge_host)
return nil;
return bridge_host->GetNativeViewAccessibleForNSWindow();
}
gfx::NativeViewAccessible ViewAXPlatformNodeDelegateMac::GetParent() {
if (view()->parent())
return view()->parent()->GetNativeViewAccessible();
auto* widget = view()->GetWidget();
if (!widget)
return nil;
auto* bridge_host = BridgedNativeWidgetHostImpl::GetFromNativeWindow(
view()->GetWidget()->GetNativeWindow());
if (!bridge_host)
return nil;
return bridge_host->GetNativeViewAccessibleForNSView();
}
} // namespace views