diff --git a/src/System.Windows.Forms/src/PublicAPI.Unshipped.txt b/src/System.Windows.Forms/src/PublicAPI.Unshipped.txt index e69de29bb2d..00c6887ada5 100644 --- a/src/System.Windows.Forms/src/PublicAPI.Unshipped.txt +++ b/src/System.Windows.Forms/src/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +~override System.Windows.Forms.WebBrowser.CreateAccessibilityInstance() -> System.Windows.Forms.AccessibleObject \ No newline at end of file diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/WebBrowser.WebBrowserAccessibleObject.cs b/src/System.Windows.Forms/src/System/Windows/Forms/WebBrowser.WebBrowserAccessibleObject.cs new file mode 100644 index 00000000000..c9872c1a3f7 --- /dev/null +++ b/src/System.Windows.Forms/src/System/Windows/Forms/WebBrowser.WebBrowserAccessibleObject.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using static Interop; + +namespace System.Windows.Forms +{ + public partial class WebBrowser + { + internal class WebBrowserAccessibleObject : ControlAccessibleObject + { + public WebBrowserAccessibleObject(WebBrowser owner) : base(owner) + { } + + internal override object? GetPropertyValue(UiaCore.UIA propertyID) + => propertyID switch + { + UiaCore.UIA.AutomationIdPropertyId + => Owner.Name, + UiaCore.UIA.HasKeyboardFocusPropertyId + => Owner.Focused, + _ => base.GetPropertyValue(propertyID) + }; + } + } +} diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/WebBrowser.cs b/src/System.Windows.Forms/src/System/Windows/Forms/WebBrowser.cs index 272694fa1c8..291866dc880 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/WebBrowser.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/WebBrowser.cs @@ -138,6 +138,8 @@ public bool ScriptErrorsSuppressed } } + internal override bool SupportsUiaProviders => true; + /// /// Specifies whether the browser control Shortcuts are enabled. /// Maps to IDocHostUIHandler:TranslateAccelerator event. @@ -1122,13 +1124,7 @@ protected override void DetachInterfaces() axIWebBrowser2 = null; } - /// - /// Returns a WebBrowserSite object. - /// - protected override WebBrowserSiteBase CreateWebBrowserSiteBase() - { - return new WebBrowserSite(this); - } + protected override AccessibleObject CreateAccessibilityInstance() => new WebBrowserAccessibleObject(this); /// /// Attaches to the DWebBrowserEvents2 connection point. @@ -1159,6 +1155,14 @@ protected override void DetachSink() } } + /// + /// Returns a WebBrowserSite object. + /// + protected override WebBrowserSiteBase CreateWebBrowserSiteBase() + { + return new WebBrowserSite(this); + } + /// /// Raises the event. /// diff --git a/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/Control.ControlAccessibleObjectTests.cs b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/Control.ControlAccessibleObjectTests.cs index cfc61770f70..a72b4b4c335 100644 --- a/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/Control.ControlAccessibleObjectTests.cs +++ b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/Control.ControlAccessibleObjectTests.cs @@ -43,7 +43,7 @@ public class Control_ControlAccessibleObjectTests : IClassFixture + { + [WinFormsFact] + public void WebBrowserAccessibleObject_Ctor_Default() + { + using WebBrowser webBrowser = new(); + WebBrowserAccessibleObject accessibleObject = (WebBrowserAccessibleObject)webBrowser.AccessibilityObject; + + Assert.Equal(webBrowser, accessibleObject.Owner); + Assert.False(webBrowser.IsHandleCreated); + } + + [WinFormsTheory] + [InlineData((int)UIA.NamePropertyId, "TestName")] + [InlineData((int)UIA.AutomationIdPropertyId, "ToolStripContainer1")] + public void WebBrowserAccessibleObject_GetPropertyValue_Invoke_ReturnsExpected(int propertyID, object expected) + { + using WebBrowser webBrowser = new WebBrowser + { + Name = expected.ToString(), + AccessibleName = expected.ToString() + }; + + WebBrowserAccessibleObject accessibleObject = (WebBrowserAccessibleObject)webBrowser.AccessibilityObject; + object value = accessibleObject.GetPropertyValue((UIA)propertyID); + + Assert.Equal(expected, value); + Assert.False(webBrowser.IsHandleCreated); + } + + [WinFormsFact] + public void WebBrowserAccessibleObject_GetPropertyValue_HasKeyboardFocus_ReturnsFalse_IfControlHasNoFocus() + { + using WebBrowser webBrowser = new(); + + WebBrowserAccessibleObject accessibleObject = (WebBrowserAccessibleObject)webBrowser.AccessibilityObject; + bool value = (bool)accessibleObject.GetPropertyValue(UIA.HasKeyboardFocusPropertyId); + + Assert.False(value); + Assert.False(webBrowser.IsHandleCreated); + } + } +}