1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License. 5e0dac50fSopenharmony_ci * You may obtain a copy of the License at 6e0dac50fSopenharmony_ci * 7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0dac50fSopenharmony_ci * 9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and 13e0dac50fSopenharmony_ci * limitations under the License. 14e0dac50fSopenharmony_ci */ 15e0dac50fSopenharmony_ci 16e0dac50fSopenharmony_ci#include <gtest/gtest.h> 17e0dac50fSopenharmony_ci#include <gmock/gmock.h> 18e0dac50fSopenharmony_ci 19e0dac50fSopenharmony_ci#include "window_extension_connection.h" 20e0dac50fSopenharmony_ci#include "window_extension_connection.cpp" 21e0dac50fSopenharmony_ci#include "wm_common.h" 22e0dac50fSopenharmony_ci#include "iremote_object_mocker.h" 23e0dac50fSopenharmony_ci 24e0dac50fSopenharmony_ciusing namespace testing; 25e0dac50fSopenharmony_ciusing namespace testing::ext; 26e0dac50fSopenharmony_ci 27e0dac50fSopenharmony_cinamespace OHOS { 28e0dac50fSopenharmony_cinamespace Rosen { 29e0dac50fSopenharmony_ci 30e0dac50fSopenharmony_ciclass MockWindowExtensionProxy : public IRemoteProxy<IWindowExtension> { 31e0dac50fSopenharmony_cipublic: 32e0dac50fSopenharmony_ci explicit MockWindowExtensionProxy(const sptr<IRemoteObject>& impl) 33e0dac50fSopenharmony_ci : IRemoteProxy<IWindowExtension>(impl) {}; 34e0dac50fSopenharmony_ci ~MockWindowExtensionProxy() {}; 35e0dac50fSopenharmony_ci 36e0dac50fSopenharmony_ci MOCK_METHOD(void, SetBounds, (const Rect& rect), (override)); 37e0dac50fSopenharmony_ci MOCK_METHOD(void, Hide, (), (override)); 38e0dac50fSopenharmony_ci MOCK_METHOD(void, Show, (), (override)); 39e0dac50fSopenharmony_ci MOCK_METHOD(void, RequestFocus, (), (override)); 40e0dac50fSopenharmony_ci MOCK_METHOD(void, GetExtensionWindow, (sptr<IWindowExtensionClient>& token), (override)); 41e0dac50fSopenharmony_ci}; 42e0dac50fSopenharmony_ci 43e0dac50fSopenharmony_ciclass ExtensionCallback : public Rosen::IWindowExtensionCallback { 44e0dac50fSopenharmony_cipublic: 45e0dac50fSopenharmony_ci ExtensionCallback() = default; 46e0dac50fSopenharmony_ci ~ExtensionCallback() = default; 47e0dac50fSopenharmony_ci void OnWindowReady(const std::shared_ptr<Rosen::RSSurfaceNode>& rsSurfaceNode) override; 48e0dac50fSopenharmony_ci void OnExtensionDisconnected() override; 49e0dac50fSopenharmony_ci void OnKeyEvent(const std::shared_ptr<MMI::KeyEvent>& event) override; 50e0dac50fSopenharmony_ci void OnPointerEvent(const std::shared_ptr<MMI::PointerEvent>& event) override; 51e0dac50fSopenharmony_ci void OnBackPress() override; 52e0dac50fSopenharmony_ci bool isWindowReady_ = false; 53e0dac50fSopenharmony_ci}; 54e0dac50fSopenharmony_ci 55e0dac50fSopenharmony_civoid ExtensionCallback::OnWindowReady(const std::shared_ptr<Rosen::RSSurfaceNode>& rsSurfaceNode) 56e0dac50fSopenharmony_ci{ 57e0dac50fSopenharmony_ci isWindowReady_ = true; 58e0dac50fSopenharmony_ci} 59e0dac50fSopenharmony_ci 60e0dac50fSopenharmony_civoid ExtensionCallback::OnExtensionDisconnected() 61e0dac50fSopenharmony_ci{ 62e0dac50fSopenharmony_ci} 63e0dac50fSopenharmony_ci 64e0dac50fSopenharmony_civoid ExtensionCallback::OnKeyEvent(const std::shared_ptr<MMI::KeyEvent>& event) 65e0dac50fSopenharmony_ci{ 66e0dac50fSopenharmony_ci} 67e0dac50fSopenharmony_ci 68e0dac50fSopenharmony_civoid ExtensionCallback::OnPointerEvent(const std::shared_ptr<MMI::PointerEvent>& event) 69e0dac50fSopenharmony_ci{ 70e0dac50fSopenharmony_ci} 71e0dac50fSopenharmony_ci 72e0dac50fSopenharmony_civoid ExtensionCallback::OnBackPress() 73e0dac50fSopenharmony_ci{ 74e0dac50fSopenharmony_ci} 75e0dac50fSopenharmony_ci 76e0dac50fSopenharmony_ciclass ExtensionConnectionTest : public testing::Test { 77e0dac50fSopenharmony_cipublic: 78e0dac50fSopenharmony_ci static void SetUpTestCase(); 79e0dac50fSopenharmony_ci static void TearDownTestCase(); 80e0dac50fSopenharmony_ci virtual void SetUp() override; 81e0dac50fSopenharmony_ci virtual void TearDown() override; 82e0dac50fSopenharmony_ciprivate: 83e0dac50fSopenharmony_ci sptr<WindowExtensionConnection> connection_ = nullptr; 84e0dac50fSopenharmony_ci}; 85e0dac50fSopenharmony_ci 86e0dac50fSopenharmony_civoid ExtensionConnectionTest::SetUpTestCase() 87e0dac50fSopenharmony_ci{ 88e0dac50fSopenharmony_ci} 89e0dac50fSopenharmony_ci 90e0dac50fSopenharmony_civoid ExtensionConnectionTest::TearDownTestCase() 91e0dac50fSopenharmony_ci{ 92e0dac50fSopenharmony_ci} 93e0dac50fSopenharmony_ci 94e0dac50fSopenharmony_civoid ExtensionConnectionTest::SetUp() 95e0dac50fSopenharmony_ci{ 96e0dac50fSopenharmony_ci connection_ = new(std::nothrow)WindowExtensionConnection(); 97e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_); 98e0dac50fSopenharmony_ci} 99e0dac50fSopenharmony_ci 100e0dac50fSopenharmony_civoid ExtensionConnectionTest::TearDown() 101e0dac50fSopenharmony_ci{ 102e0dac50fSopenharmony_ci connection_ = nullptr; 103e0dac50fSopenharmony_ci} 104e0dac50fSopenharmony_ci 105e0dac50fSopenharmony_cinamespace { 106e0dac50fSopenharmony_ci/** 107e0dac50fSopenharmony_ci * @tc.name: WindowExtensionConnection01 108e0dac50fSopenharmony_ci * @tc.desc: connect window extension 109e0dac50fSopenharmony_ci * @tc.type: FUNC 110e0dac50fSopenharmony_ci */ 111e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, WindowExtensionConnection01, Function | SmallTest | Level2) 112e0dac50fSopenharmony_ci{ 113e0dac50fSopenharmony_ci AppExecFwk::ElementName element; 114e0dac50fSopenharmony_ci element.SetBundleName("com.test.windowextension"); 115e0dac50fSopenharmony_ci element.SetAbilityName("WindowExtAbility"); 116e0dac50fSopenharmony_ci Rosen::Rect rect {100, 100, 60, 60}; 117e0dac50fSopenharmony_ci ASSERT_TRUE(connection_->ConnectExtension(element, rect, 100, INVALID_WINDOW_ID, nullptr) != ERR_OK); 118e0dac50fSopenharmony_ci connection_->Show(); 119e0dac50fSopenharmony_ci connection_->RequestFocus(); 120e0dac50fSopenharmony_ci connection_->SetBounds(rect); 121e0dac50fSopenharmony_ci connection_->Hide(); 122e0dac50fSopenharmony_ci} 123e0dac50fSopenharmony_ci 124e0dac50fSopenharmony_ci/** 125e0dac50fSopenharmony_ci * @tc.name: Show 126e0dac50fSopenharmony_ci * @tc.desc: Show Test 127e0dac50fSopenharmony_ci * @tc.type: FUNC 128e0dac50fSopenharmony_ci */ 129e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, Show, Function | SmallTest | Level2) 130e0dac50fSopenharmony_ci{ 131e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = new(std::nothrow) IRemoteObjectMocker(); 132e0dac50fSopenharmony_ci ASSERT_NE(nullptr, remoteObject); 133e0dac50fSopenharmony_ci auto mockProxy = new(std::nothrow) MockWindowExtensionProxy(remoteObject); 134e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mockProxy); 135e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 136e0dac50fSopenharmony_ci connection_->pImpl_->proxy_ = mockProxy; 137e0dac50fSopenharmony_ci EXPECT_CALL(*mockProxy, Show()); 138e0dac50fSopenharmony_ci connection_->Show(); 139e0dac50fSopenharmony_ci} 140e0dac50fSopenharmony_ci 141e0dac50fSopenharmony_ci/** 142e0dac50fSopenharmony_ci * @tc.name: Hide 143e0dac50fSopenharmony_ci * @tc.desc: Hide Test 144e0dac50fSopenharmony_ci * @tc.type: FUNC 145e0dac50fSopenharmony_ci */ 146e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, Hide, Function | SmallTest | Level2) 147e0dac50fSopenharmony_ci{ 148e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = new(std::nothrow) IRemoteObjectMocker(); 149e0dac50fSopenharmony_ci ASSERT_NE(nullptr, remoteObject); 150e0dac50fSopenharmony_ci auto mockProxy = new(std::nothrow) MockWindowExtensionProxy(remoteObject); 151e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mockProxy); 152e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 153e0dac50fSopenharmony_ci connection_->pImpl_->proxy_ = mockProxy; 154e0dac50fSopenharmony_ci EXPECT_CALL(*mockProxy, Hide()); 155e0dac50fSopenharmony_ci connection_->Hide(); 156e0dac50fSopenharmony_ci} 157e0dac50fSopenharmony_ci 158e0dac50fSopenharmony_ci/** 159e0dac50fSopenharmony_ci * @tc.name: RequestFocus 160e0dac50fSopenharmony_ci * @tc.desc: RequestFocus Test 161e0dac50fSopenharmony_ci * @tc.type: FUNC 162e0dac50fSopenharmony_ci */ 163e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, RequestFocus, Function | SmallTest | Level2) 164e0dac50fSopenharmony_ci{ 165e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = new(std::nothrow) IRemoteObjectMocker(); 166e0dac50fSopenharmony_ci ASSERT_NE(nullptr, remoteObject); 167e0dac50fSopenharmony_ci auto mockProxy = new(std::nothrow) MockWindowExtensionProxy(remoteObject); 168e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mockProxy); 169e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 170e0dac50fSopenharmony_ci connection_->pImpl_->proxy_ = mockProxy; 171e0dac50fSopenharmony_ci EXPECT_CALL(*mockProxy, RequestFocus()); 172e0dac50fSopenharmony_ci connection_->RequestFocus(); 173e0dac50fSopenharmony_ci} 174e0dac50fSopenharmony_ci 175e0dac50fSopenharmony_ci/** 176e0dac50fSopenharmony_ci * @tc.name: SetBounds 177e0dac50fSopenharmony_ci * @tc.desc: SetBounds Test 178e0dac50fSopenharmony_ci * @tc.type: FUNC 179e0dac50fSopenharmony_ci */ 180e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, SetBounds, Function | SmallTest | Level2) 181e0dac50fSopenharmony_ci{ 182e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = new(std::nothrow) IRemoteObjectMocker(); 183e0dac50fSopenharmony_ci ASSERT_NE(nullptr, remoteObject); 184e0dac50fSopenharmony_ci auto mockProxy = new(std::nothrow) MockWindowExtensionProxy(remoteObject); 185e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mockProxy); 186e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 187e0dac50fSopenharmony_ci connection_->pImpl_->proxy_ = mockProxy; 188e0dac50fSopenharmony_ci Rect rect; 189e0dac50fSopenharmony_ci EXPECT_CALL(*mockProxy, SetBounds(rect)); 190e0dac50fSopenharmony_ci connection_->SetBounds(rect); 191e0dac50fSopenharmony_ci} 192e0dac50fSopenharmony_ci 193e0dac50fSopenharmony_ci/** 194e0dac50fSopenharmony_ci * @tc.name: OnRemoteDied01 195e0dac50fSopenharmony_ci * @tc.desc: OnRemoteDied Test 196e0dac50fSopenharmony_ci * @tc.type: FUNC 197e0dac50fSopenharmony_ci */ 198e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, OnRemoteDied01, Function | SmallTest | Level2) 199e0dac50fSopenharmony_ci{ 200e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = nullptr; 201e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 202e0dac50fSopenharmony_ci connection_->pImpl_->deathRecipient_ = 203e0dac50fSopenharmony_ci new(std::nothrow) WindowExtensionConnection::Impl::WindowExtensionClientRecipient(nullptr); 204e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_->deathRecipient_); 205e0dac50fSopenharmony_ci connection_->pImpl_->deathRecipient_->OnRemoteDied(remoteObject); 206e0dac50fSopenharmony_ci} 207e0dac50fSopenharmony_ci 208e0dac50fSopenharmony_ci/** 209e0dac50fSopenharmony_ci * @tc.name: OnRemoteDied02 210e0dac50fSopenharmony_ci * @tc.desc: OnRemoteDied Test 211e0dac50fSopenharmony_ci * @tc.type: FUNC 212e0dac50fSopenharmony_ci */ 213e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, OnRemoteDied02, Function | SmallTest | Level2) 214e0dac50fSopenharmony_ci{ 215e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = new(std::nothrow) IRemoteObjectMocker(); 216e0dac50fSopenharmony_ci ASSERT_NE(nullptr, remoteObject); 217e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 218e0dac50fSopenharmony_ci connection_->pImpl_->deathRecipient_ = 219e0dac50fSopenharmony_ci new(std::nothrow) WindowExtensionConnection::Impl::WindowExtensionClientRecipient(nullptr); 220e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_->deathRecipient_); 221e0dac50fSopenharmony_ci connection_->pImpl_->deathRecipient_->OnRemoteDied(remoteObject); 222e0dac50fSopenharmony_ci} 223e0dac50fSopenharmony_ci 224e0dac50fSopenharmony_ci/** 225e0dac50fSopenharmony_ci * @tc.name: OnRemoteDied03 226e0dac50fSopenharmony_ci * @tc.desc: OnRemoteDied Test 227e0dac50fSopenharmony_ci * @tc.type: FUNC 228e0dac50fSopenharmony_ci */ 229e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, OnRemoteDied03, Function | SmallTest | Level2) 230e0dac50fSopenharmony_ci{ 231e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = new(std::nothrow) IRemoteObjectMocker(); 232e0dac50fSopenharmony_ci ASSERT_NE(nullptr, remoteObject); 233e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 234e0dac50fSopenharmony_ci connection_->pImpl_->deathRecipient_ = 235e0dac50fSopenharmony_ci new(std::nothrow) WindowExtensionConnection::Impl::WindowExtensionClientRecipient(nullptr); 236e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_->deathRecipient_); 237e0dac50fSopenharmony_ci connection_->pImpl_->deathRecipient_->callback_ = new(std::nothrow) ExtensionCallback(); 238e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_->deathRecipient_->callback_); 239e0dac50fSopenharmony_ci connection_->pImpl_->deathRecipient_->OnRemoteDied(remoteObject); 240e0dac50fSopenharmony_ci} 241e0dac50fSopenharmony_ci 242e0dac50fSopenharmony_ci/** 243e0dac50fSopenharmony_ci * @tc.name: OnAbilityConnectDone01 244e0dac50fSopenharmony_ci * @tc.desc: OnAbilityConnectDone Test 245e0dac50fSopenharmony_ci * @tc.type: FUNC 246e0dac50fSopenharmony_ci */ 247e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, OnAbilityConnectDone01, Function | SmallTest | Level2) 248e0dac50fSopenharmony_ci{ 249e0dac50fSopenharmony_ci AppExecFwk::ElementName element; 250e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = nullptr; 251e0dac50fSopenharmony_ci int resultCode = 0; 252e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 253e0dac50fSopenharmony_ci connection_->pImpl_->OnAbilityConnectDone(element, remoteObject, resultCode); 254e0dac50fSopenharmony_ci} 255e0dac50fSopenharmony_ci 256e0dac50fSopenharmony_ci/** 257e0dac50fSopenharmony_ci * @tc.name: OnAbilityConnectDone02 258e0dac50fSopenharmony_ci * @tc.desc: OnAbilityConnectDone Test 259e0dac50fSopenharmony_ci * @tc.type: FUNC 260e0dac50fSopenharmony_ci */ 261e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, OnAbilityConnectDone02, Function | SmallTest | Level2) 262e0dac50fSopenharmony_ci{ 263e0dac50fSopenharmony_ci AppExecFwk::ElementName element; 264e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = new(std::nothrow) IRemoteObjectMocker(); 265e0dac50fSopenharmony_ci ASSERT_NE(nullptr, remoteObject); 266e0dac50fSopenharmony_ci int resultCode = 0; 267e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 268e0dac50fSopenharmony_ci connection_->pImpl_->OnAbilityConnectDone(element, remoteObject, resultCode); 269e0dac50fSopenharmony_ci} 270e0dac50fSopenharmony_ci 271e0dac50fSopenharmony_ci/** 272e0dac50fSopenharmony_ci * @tc.name: OnAbilityConnectDone03 273e0dac50fSopenharmony_ci * @tc.desc: OnAbilityConnectDone Test 274e0dac50fSopenharmony_ci * @tc.type: FUNC 275e0dac50fSopenharmony_ci */ 276e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, OnAbilityConnectDone03, Function | SmallTest | Level2) 277e0dac50fSopenharmony_ci{ 278e0dac50fSopenharmony_ci AppExecFwk::ElementName element; 279e0dac50fSopenharmony_ci sptr<IRemoteObject> remoteObject = new(std::nothrow) IRemoteObjectMocker(); 280e0dac50fSopenharmony_ci ASSERT_NE(nullptr, remoteObject); 281e0dac50fSopenharmony_ci auto mockProxy = new(std::nothrow) MockWindowExtensionProxy(remoteObject); 282e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mockProxy); 283e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 284e0dac50fSopenharmony_ci connection_->pImpl_->deathRecipient_ = 285e0dac50fSopenharmony_ci new(std::nothrow) WindowExtensionConnection::Impl::WindowExtensionClientRecipient(nullptr); 286e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_->deathRecipient_); 287e0dac50fSopenharmony_ci connection_->pImpl_->proxy_ = mockProxy; 288e0dac50fSopenharmony_ci int resultCode = 0; 289e0dac50fSopenharmony_ci connection_->pImpl_->OnAbilityConnectDone(element, remoteObject, resultCode); 290e0dac50fSopenharmony_ci} 291e0dac50fSopenharmony_ci 292e0dac50fSopenharmony_ci/** 293e0dac50fSopenharmony_ci * @tc.name: OnAbilityDisconnectDone01 294e0dac50fSopenharmony_ci * @tc.desc: OnAbilityConnectDone Test 295e0dac50fSopenharmony_ci * @tc.type: FUNC 296e0dac50fSopenharmony_ci */ 297e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, OnAbilityDisconnectDone01, Function | SmallTest | Level2) 298e0dac50fSopenharmony_ci{ 299e0dac50fSopenharmony_ci AppExecFwk::ElementName element; 300e0dac50fSopenharmony_ci int resultCode = 0; 301e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 302e0dac50fSopenharmony_ci connection_->pImpl_->OnAbilityDisconnectDone(element, resultCode); 303e0dac50fSopenharmony_ci} 304e0dac50fSopenharmony_ci 305e0dac50fSopenharmony_ci/** 306e0dac50fSopenharmony_ci * @tc.name: OnAbilityDisconnectDone02 307e0dac50fSopenharmony_ci * @tc.desc: OnAbilityConnectDone Test 308e0dac50fSopenharmony_ci * @tc.type: FUNC 309e0dac50fSopenharmony_ci */ 310e0dac50fSopenharmony_ciHWTEST_F(ExtensionConnectionTest, OnAbilityDisconnectDone02, Function | SmallTest | Level2) 311e0dac50fSopenharmony_ci{ 312e0dac50fSopenharmony_ci AppExecFwk::ElementName element; 313e0dac50fSopenharmony_ci int resultCode = 0; 314e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_); 315e0dac50fSopenharmony_ci connection_->pImpl_->componentCallback_ = new(std::nothrow) ExtensionCallback(); 316e0dac50fSopenharmony_ci ASSERT_NE(nullptr, connection_->pImpl_->componentCallback_); 317e0dac50fSopenharmony_ci connection_->pImpl_->OnAbilityDisconnectDone(element, resultCode); 318e0dac50fSopenharmony_ci} 319e0dac50fSopenharmony_ci} 320e0dac50fSopenharmony_ci} // Rosen 321e0dac50fSopenharmony_ci} // OHOS