158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <oleacc.h> 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/win/scoped_bstr.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/win/scoped_comptr.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/win/scoped_variant.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/iaccessible2/ia2_api_all.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/views/accessibility/native_view_accessibility.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/views/controls/textfield/textfield.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/views/test/views_test_base.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using base::win::ScopedBstr; 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using base::win::ScopedComPtr; 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using base::win::ScopedVariant; 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace views { 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace test { 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class NativeViewAcccessibilityWinTest : public ViewsTestBase { 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NativeViewAcccessibilityWinTest() {} 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~NativeViewAcccessibilityWinTest() {} 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void GetIAccessible2InterfaceForView(View* view, IAccessible2_2** result) { 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IAccessible> view_accessible( 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view->GetNativeViewAccessible()); 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IServiceProvider> service_provider; 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(S_OK, view_accessible.QueryInterface(service_provider.Receive())); 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(S_OK, 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) service_provider->QueryService(IID_IAccessible2_2, result)); 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(NativeViewAcccessibilityWinTest, TextfieldAccessibility) { 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Widget widget; 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Widget::InitParams init_params = 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CreateParams(Widget::InitParams::TYPE_POPUP); 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget.Init(init_params); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) View* content = new View; 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget.SetContentsView(content); 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Textfield* textfield = new Textfield; 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) textfield->SetAccessibleName(L"Name"); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) textfield->SetText(L"Value"); 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content->AddChildView(textfield); 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IAccessible> content_accessible( 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content->GetNativeViewAccessible()); 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LONG child_count = 0; 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(S_OK, content_accessible->get_accChildCount(&child_count)); 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1L, child_count); 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IDispatch> textfield_dispatch; 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IAccessible> textfield_accessible; 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedVariant child_index(1); 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(S_OK, content_accessible->get_accChild( 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) child_index, textfield_dispatch.Receive())); 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(S_OK, textfield_dispatch.QueryInterface( 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) textfield_accessible.Receive())); 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedBstr name; 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedVariant childid_self(CHILDID_SELF); 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(S_OK, textfield_accessible->get_accName( 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) childid_self, name.Receive())); 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_STREQ(L"Name", name); 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedBstr value; 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(S_OK, textfield_accessible->get_accValue( 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) childid_self, value.Receive())); 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_STREQ(L"Value", value); 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedBstr new_value(L"New value"); 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(S_OK, textfield_accessible->put_accValue(childid_self, new_value)); 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_STREQ(L"New value", textfield->text().c_str()); 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(NativeViewAcccessibilityWinTest, UnattachedWebView) { 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // This is a regression test. Calling get_accChild on the native accessible 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // object for a WebView with no attached WebContents was causing an 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // infinite loop and crash. This test simulates that with an ordinary 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // View that registers itself as a web view with NativeViewAcccessibility. 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Widget widget; 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Widget::InitParams init_params = 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CreateParams(Widget::InitParams::TYPE_POPUP); 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget.Init(init_params); 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) View* content = new View; 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) widget.SetContentsView(content); 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) View* web_view = new View; 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content->AddChildView(web_view); 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NativeViewAccessibility::RegisterWebView(web_view); 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IAccessible> web_view_accessible( 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) web_view->GetNativeViewAccessible()); 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IDispatch> result_dispatch; 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedVariant child_index(-999); 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(E_FAIL, web_view_accessible->get_accChild( 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) child_index, result_dispatch.Receive())); 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NativeViewAccessibility::UnregisterWebView(web_view); 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(NativeViewAcccessibilityWinTest, AuraOwnedWidgets) { 114d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Widget widget; 115d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Widget::InitParams init_params = 116d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) CreateParams(Widget::InitParams::TYPE_WINDOW); 117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) widget.Init(init_params); 119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IAccessible> root_view_accessible( 121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) widget.GetRootView()->GetNativeViewAccessible()); 122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) LONG child_count = 0; 124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_EQ(S_OK, root_view_accessible->get_accChildCount(&child_count)); 125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_EQ(1L, child_count); 126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 127d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Widget owned_widget; 128d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Widget::InitParams owned_init_params = 129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) CreateParams(Widget::InitParams::TYPE_POPUP); 130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) owned_init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) owned_init_params.parent = widget.GetNativeView(); 132d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) owned_widget.Init(owned_init_params); 133d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) owned_widget.Show(); 134d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_EQ(S_OK, root_view_accessible->get_accChildCount(&child_count)); 136d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_EQ(2L, child_count); 137d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 138d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NativeViewAcccessibilityWinTest, RetrieveAllAlerts) { 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Widget widget; 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Widget::InitParams init_params = 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateParams(Widget::InitParams::TYPE_POPUP); 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) widget.Init(init_params); 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View* content = new View; 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) widget.SetContentsView(content); 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View* infobar = new View; 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content->AddChildView(infobar); 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View* infobar2 = new View; 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content->AddChildView(infobar2); 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View* root_view = content->parent(); 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(NULL, root_view->parent()); 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IAccessible2_2> root_view_accessible; 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetIAccessible2InterfaceForView(root_view, root_view_accessible.Receive()); 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IAccessible2_2> infobar_accessible; 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetIAccessible2InterfaceForView(infobar, infobar_accessible.Receive()); 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedComPtr<IAccessible2_2> infobar2_accessible; 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetIAccessible2InterfaceForView(infobar2, infobar2_accessible.Receive()); 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Initially, there are no alerts 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedBstr alerts_bstr(L"alerts"); 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IUnknown** targets; 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) long n_targets; 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(S_FALSE, root_view_accessible->get_relationTargetsOfType( 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) alerts_bstr, 0, &targets, &n_targets)); 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(0, n_targets); 174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Fire alert events on the infobars. 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) infobar->NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true); 177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) infobar2->NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true); 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Now calling get_relationTargetsOfType should retrieve the alerts. 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(S_OK, root_view_accessible->get_relationTargetsOfType( 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) alerts_bstr, 0, &targets, &n_targets)); 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(2, n_targets); 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(infobar_accessible.IsSameObject(targets[0])); 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(infobar2_accessible.IsSameObject(targets[1])); 185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CoTaskMemFree(targets); 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If we set max_targets to 1, we should only get the first one. 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(S_OK, root_view_accessible->get_relationTargetsOfType( 189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) alerts_bstr, 1, &targets, &n_targets)); 190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(1, n_targets); 191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(infobar_accessible.IsSameObject(targets[0])); 192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CoTaskMemFree(targets); 193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If we delete the first view, we should only get the second one now. 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delete infobar; 196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(S_OK, root_view_accessible->get_relationTargetsOfType( 197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) alerts_bstr, 0, &targets, &n_targets)); 198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(1, n_targets); 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(infobar2_accessible.IsSameObject(targets[0])); 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CoTaskMemFree(targets); 201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 20358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace test 20458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace views 205