diff --git a/ash/webui/eche_app_ui/BUILD.gn b/ash/webui/eche_app_ui/BUILD.gn index 787f232348df4..3bd749e61d7f4 100644 --- a/ash/webui/eche_app_ui/BUILD.gn +++ b/ash/webui/eche_app_ui/BUILD.gn @@ -54,6 +54,8 @@ static_library("eche_app_ui") { "apps_access_manager_impl.h", "apps_access_setup_operation.cc", "apps_access_setup_operation.h", + "apps_launch_info_provider.cc", + "apps_launch_info_provider.h", "eche_alert_generator.cc", "eche_alert_generator.h", "eche_app_manager.cc", @@ -163,6 +165,7 @@ source_set("unit_tests") { sources = [ "apps_access_manager_impl_unittest.cc", "apps_access_setup_operation_unittest.cc", + "apps_launch_info_provider_unittest.cc", "eche_alert_generator_unittest.cc", "eche_app_manager_unittest.cc", "eche_connection_scheduler_impl_unittest.cc", diff --git a/ash/webui/eche_app_ui/apps_launch_info_provider.cc b/ash/webui/eche_app_ui/apps_launch_info_provider.cc new file mode 100644 index 0000000000000..13b657f4c8195 --- /dev/null +++ b/ash/webui/eche_app_ui/apps_launch_info_provider.cc @@ -0,0 +1,33 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/webui/eche_app_ui/apps_launch_info_provider.h" + +#include "ash/webui/eche_app_ui/mojom/eche_app.mojom-shared.h" + +namespace ash { +namespace eche_app { + +AppsLaunchInfoProvider::AppsLaunchInfoProvider( + EcheConnectionStatusHandler* connection_handler) + : eche_connection_status_handler_(connection_handler) { + eche_connection_status_handler_->AddObserver(this); +} + +AppsLaunchInfoProvider::~AppsLaunchInfoProvider() { + eche_connection_status_handler_->RemoveObserver(this); +} + +void AppsLaunchInfoProvider::OnConnectionStatusForUiChanged( + mojom::ConnectionStatus connection_status) { + last_connection_ = connection_status; +} + +void AppsLaunchInfoProvider::SetEntryPoint( + mojom::AppStreamLaunchEntryPoint entry_point) { + entry_point_ = entry_point; +} + +} // namespace eche_app +} // namespace ash \ No newline at end of file diff --git a/ash/webui/eche_app_ui/apps_launch_info_provider.h b/ash/webui/eche_app_ui/apps_launch_info_provider.h new file mode 100644 index 0000000000000..5612cba1167bf --- /dev/null +++ b/ash/webui/eche_app_ui/apps_launch_info_provider.h @@ -0,0 +1,48 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_WEBUI_ECHE_APP_UI_APPS_LAUNCH_INFO_PROVIDER_H_ +#define ASH_WEBUI_ECHE_APP_UI_APPS_LAUNCH_INFO_PROVIDER_H_ + +#include <cstdint> +#include "ash/webui/eche_app_ui/eche_connection_status_handler.h" +#include "ash/webui/eche_app_ui/mojom/eche_app.mojom-shared.h" +#include "ash/webui/eche_app_ui/mojom/eche_app.mojom.h" + +namespace ash { +namespace eche_app { + +// A class to store app stream entry point and last connection status. +class AppsLaunchInfoProvider : public EcheConnectionStatusHandler::Observer { + public: + explicit AppsLaunchInfoProvider(EcheConnectionStatusHandler*); + ~AppsLaunchInfoProvider() override; + + AppsLaunchInfoProvider(const AppsLaunchInfoProvider&) = delete; + AppsLaunchInfoProvider& operator=(const AppsLaunchInfoProvider&) = delete; + + // EcheConnectionStatusHandler::Observer: + void OnConnectionStatusForUiChanged( + mojom::ConnectionStatus connection_status) override; + + void SetEntryPoint(mojom::AppStreamLaunchEntryPoint entry_point); + + mojom::ConnectionStatus GetConnectionStatusForUi() { + return last_connection_; + } + + mojom::AppStreamLaunchEntryPoint entry_point() { return entry_point_; } + + private: + EcheConnectionStatusHandler* eche_connection_status_handler_; + mojom::AppStreamLaunchEntryPoint entry_point_ = + mojom::AppStreamLaunchEntryPoint::UNKNOWN; + mojom::ConnectionStatus last_connection_ = + mojom::ConnectionStatus::kConnectionStatusDisconnected; +}; + +} // namespace eche_app +} // namespace ash + +#endif // ASH_WEBUI_ECHE_APP_UI_APPS_LAUNCH_INFO_PROVIDER_H_ \ No newline at end of file diff --git a/ash/webui/eche_app_ui/apps_launch_info_provider_unittest.cc b/ash/webui/eche_app_ui/apps_launch_info_provider_unittest.cc new file mode 100644 index 0000000000000..7b0adf5703136 --- /dev/null +++ b/ash/webui/eche_app_ui/apps_launch_info_provider_unittest.cc @@ -0,0 +1,101 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/webui/eche_app_ui/apps_launch_info_provider.h" +#include <memory> +#include "ash/webui/eche_app_ui/eche_connection_status_handler.h" + +#include "ash/constants/ash_features.h" +#include "base/test/scoped_feature_list.h" +#include "base/test/task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace ash::eche_app { + +class AppsLaunchInfoProviderTest : public testing::Test { + public: + AppsLaunchInfoProviderTest() = default; + AppsLaunchInfoProviderTest(const AppsLaunchInfoProviderTest&) = delete; + AppsLaunchInfoProviderTest& operator=(const AppsLaunchInfoProviderTest&) = + delete; + ~AppsLaunchInfoProviderTest() override = default; + + // testing::Test: + void SetUp() override { + scoped_feature_list_.InitWithFeatures( + /*enabled_features=*/{features::kEcheSWA, + features::kEcheNetworkConnectionState}, + /*disabled_features=*/{}); + + handler_ = std::make_unique<EcheConnectionStatusHandler>(); + provider_ = std::make_unique<AppsLaunchInfoProvider>(handler_.get()); + } + + void TearDown() override { + provider_.reset(); + handler_.reset(); + } + + void NotifyConnectionStatusForUiChanged(mojom::ConnectionStatus status) { + handler_->SetConnectionStatusForUi(status); + } + + mojom::ConnectionStatus GetLastConnectionStatus() { + return provider_->GetConnectionStatusForUi(); + } + + void SetEntryPoint(mojom::AppStreamLaunchEntryPoint entry_point) { + provider_->SetEntryPoint(entry_point); + } + + mojom::AppStreamLaunchEntryPoint GetEntryPoint() { + return provider_->entry_point(); + } + + base::test::ScopedFeatureList scoped_feature_list_; + + private: + std::unique_ptr<EcheConnectionStatusHandler> handler_; + std::unique_ptr<AppsLaunchInfoProvider> provider_; +}; + +TEST_F(AppsLaunchInfoProviderTest, OnConnectionStatusForUiChanged) { + EXPECT_EQ(GetLastConnectionStatus(), + mojom::ConnectionStatus::kConnectionStatusDisconnected); + + NotifyConnectionStatusForUiChanged( + mojom::ConnectionStatus::kConnectionStatusConnecting); + EXPECT_EQ(GetLastConnectionStatus(), + mojom::ConnectionStatus::kConnectionStatusConnecting); + + NotifyConnectionStatusForUiChanged( + mojom::ConnectionStatus::kConnectionStatusConnected); + EXPECT_EQ(GetLastConnectionStatus(), + mojom::ConnectionStatus::kConnectionStatusConnected); + + NotifyConnectionStatusForUiChanged( + mojom::ConnectionStatus::kConnectionStatusFailed); + EXPECT_EQ(GetLastConnectionStatus(), + mojom::ConnectionStatus::kConnectionStatusFailed); + + NotifyConnectionStatusForUiChanged( + mojom::ConnectionStatus::kConnectionStatusDisconnected); + EXPECT_EQ(GetLastConnectionStatus(), + mojom::ConnectionStatus::kConnectionStatusDisconnected); +} + +TEST_F(AppsLaunchInfoProviderTest, SetEntryPoint) { + EXPECT_EQ(GetEntryPoint(), mojom::AppStreamLaunchEntryPoint::UNKNOWN); + + SetEntryPoint(mojom::AppStreamLaunchEntryPoint::NOTIFICATION); + EXPECT_EQ(GetEntryPoint(), mojom::AppStreamLaunchEntryPoint::NOTIFICATION); + + SetEntryPoint(mojom::AppStreamLaunchEntryPoint::APPS_LIST); + EXPECT_EQ(GetEntryPoint(), mojom::AppStreamLaunchEntryPoint::APPS_LIST); + + SetEntryPoint(mojom::AppStreamLaunchEntryPoint::RECENT_APPS); + EXPECT_EQ(GetEntryPoint(), mojom::AppStreamLaunchEntryPoint::RECENT_APPS); +} + +} // namespace ash::eche_app \ No newline at end of file diff --git a/ash/webui/eche_app_ui/eche_app_manager.cc b/ash/webui/eche_app_ui/eche_app_manager.cc index 0dab695597841..11d3f4c22d607 100644 --- a/ash/webui/eche_app_ui/eche_app_manager.cc +++ b/ash/webui/eche_app_ui/eche_app_manager.cc @@ -9,6 +9,7 @@ #include "ash/constants/ash_features.h" #include "ash/public/cpp/network_config_service.h" #include "ash/webui/eche_app_ui/apps_access_manager_impl.h" +#include "ash/webui/eche_app_ui/apps_launch_info_provider.h" #include "ash/webui/eche_app_ui/eche_alert_generator.h" #include "ash/webui/eche_app_ui/eche_connection_metrics_recorder.h" #include "ash/webui/eche_app_ui/eche_connection_scheduler_impl.h" @@ -59,18 +60,23 @@ EcheAppManager::EcheAppManager( device_sync_client, multidevice_setup_client, connection_manager_.get())), + eche_connection_status_handler_( + std::make_unique<EcheConnectionStatusHandler>()), launch_app_helper_( std::make_unique<LaunchAppHelper>(phone_hub_manager, launch_eche_app_function, launch_notification_function, close_notification_function)), + apps_launch_info_provider_(std::make_unique<AppsLaunchInfoProvider>( + eche_connection_status_handler_.get())), stream_status_change_handler_( std::make_unique<EcheStreamStatusChangeHandler>()), eche_notification_click_handler_( std::make_unique<EcheNotificationClickHandler>( phone_hub_manager, feature_status_provider_.get(), - launch_app_helper_.get())), + launch_app_helper_.get(), + apps_launch_info_provider_.get())), connection_scheduler_(std::make_unique<EcheConnectionSchedulerImpl>( connection_manager_.get(), feature_status_provider_.get())), @@ -95,7 +101,8 @@ EcheAppManager::EcheAppManager( phone_hub_manager, feature_status_provider_.get(), launch_app_helper_.get(), - stream_status_change_handler_.get())), + stream_status_change_handler_.get(), + apps_launch_info_provider_.get())), alert_generator_( std::make_unique<EcheAlertGenerator>(launch_app_helper_.get(), pref_service)), @@ -111,9 +118,7 @@ EcheAppManager::EcheAppManager( stream_status_change_handler_.get(), feature_status_provider_.get())), eche_stream_orientation_observer_( - std::make_unique<EcheStreamOrientationObserver>()), - eche_connection_status_handler_( - std::make_unique<EcheConnectionStatusHandler>()) { + std::make_unique<EcheStreamOrientationObserver>()) { ash::GetNetworkConfigService( remote_cros_network_config_.BindNewPipeAndPassReceiver()); system_info_provider_ = std::make_unique<SystemInfoProvider>( @@ -179,7 +184,6 @@ void EcheAppManager::StreamGoBack() { // NOTE: These should be destroyed in the opposite order of how these objects // are initialized in the constructor. void EcheAppManager::Shutdown() { - eche_connection_status_handler_.reset(); eche_stream_orientation_observer_.reset(); system_info_provider_.reset(); eche_tray_stream_status_observer_.reset(); @@ -194,7 +198,9 @@ void EcheAppManager::Shutdown() { connection_scheduler_.reset(); eche_notification_click_handler_.reset(); stream_status_change_handler_.reset(); + apps_launch_info_provider_.reset(); launch_app_helper_.reset(); + eche_connection_status_handler_.reset(); feature_status_provider_.reset(); connection_manager_.reset(); } diff --git a/ash/webui/eche_app_ui/eche_app_manager.h b/ash/webui/eche_app_ui/eche_app_manager.h index 2f080510d4788..16cd4802efd1c 100644 --- a/ash/webui/eche_app_ui/eche_app_manager.h +++ b/ash/webui/eche_app_ui/eche_app_manager.h @@ -9,6 +9,7 @@ #include <memory> +#include "ash/webui/eche_app_ui/apps_launch_info_provider.h" #include "ash/webui/eche_app_ui/eche_feature_status_provider.h" #include "ash/webui/eche_app_ui/eche_notification_click_handler.h" #include "ash/webui/eche_app_ui/eche_recent_app_click_handler.h" @@ -42,6 +43,7 @@ class SecureChannelClient; namespace eche_app { +class AppsLaunchInfoProvider; class EcheConnector; class EcheMessageReceiver; class EcheAlertGenerator; @@ -113,7 +115,9 @@ class EcheAppManager : public KeyedService { private: std::unique_ptr<secure_channel::ConnectionManager> connection_manager_; std::unique_ptr<EcheFeatureStatusProvider> feature_status_provider_; + std::unique_ptr<EcheConnectionStatusHandler> eche_connection_status_handler_; std::unique_ptr<LaunchAppHelper> launch_app_helper_; + std::unique_ptr<AppsLaunchInfoProvider> apps_launch_info_provider_; std::unique_ptr<EcheStreamStatusChangeHandler> stream_status_change_handler_; std::unique_ptr<EcheNotificationClickHandler> eche_notification_click_handler_; @@ -133,7 +137,6 @@ class EcheAppManager : public KeyedService { eche_tray_stream_status_observer_; std::unique_ptr<EcheStreamOrientationObserver> eche_stream_orientation_observer_; - std::unique_ptr<EcheConnectionStatusHandler> eche_connection_status_handler_; }; } // namespace eche_app diff --git a/ash/webui/eche_app_ui/eche_notification_click_handler.cc b/ash/webui/eche_app_ui/eche_notification_click_handler.cc index 6987a623ae1b9..a95bbbc3dcab8 100644 --- a/ash/webui/eche_app_ui/eche_notification_click_handler.cc +++ b/ash/webui/eche_app_ui/eche_notification_click_handler.cc @@ -6,6 +6,7 @@ #include "ash/root_window_controller.h" #include "ash/shell.h" +#include "ash/webui/eche_app_ui/apps_launch_info_provider.h" #include "ash/webui/eche_app_ui/launch_app_helper.h" #include "base/metrics/histogram_functions.h" #include "chromeos/ash/components/multidevice/logging/logging.h" @@ -17,9 +18,11 @@ namespace eche_app { EcheNotificationClickHandler::EcheNotificationClickHandler( phonehub::PhoneHubManager* phone_hub_manager, FeatureStatusProvider* feature_status_provider, - LaunchAppHelper* launch_app_helper) + LaunchAppHelper* launch_app_helper, + AppsLaunchInfoProvider* apps_launch_info_provider) : feature_status_provider_(feature_status_provider), - launch_app_helper_(launch_app_helper) { + launch_app_helper_(launch_app_helper), + apps_launch_info_provider_(apps_launch_info_provider) { handler_ = phone_hub_manager->GetNotificationInteractionHandler(); phone_model_ = phone_hub_manager->GetPhoneModel(); feature_status_provider_->AddObserver(this); @@ -49,6 +52,8 @@ void EcheNotificationClickHandler::HandleNotificationClick( base::UmaHistogramEnumeration( "Eche.AppStream.LaunchAttempt", mojom::AppStreamLaunchEntryPoint::NOTIFICATION); + apps_launch_info_provider_->SetEntryPoint( + mojom::AppStreamLaunchEntryPoint::NOTIFICATION); launch_app_helper_->LaunchEcheApp( notification_id, app_metadata.package_name, app_metadata.visible_app_name, app_metadata.user_id, diff --git a/ash/webui/eche_app_ui/eche_notification_click_handler.h b/ash/webui/eche_app_ui/eche_notification_click_handler.h index f0b4fba367b4a..a9c450ba10623 100644 --- a/ash/webui/eche_app_ui/eche_notification_click_handler.h +++ b/ash/webui/eche_app_ui/eche_notification_click_handler.h @@ -22,14 +22,17 @@ class PhoneHubManager; namespace eche_app { class LaunchAppHelper; +class AppsLaunchInfoProvider; // Handles notification clicks originating from Phone Hub notifications. class EcheNotificationClickHandler : public phonehub::NotificationClickHandler, public FeatureStatusProvider::Observer { public: - EcheNotificationClickHandler(phonehub::PhoneHubManager* phone_hub_manager, - FeatureStatusProvider* feature_status_provider, - LaunchAppHelper* launch_app_helper); + EcheNotificationClickHandler( + phonehub::PhoneHubManager* phone_hub_manager, + FeatureStatusProvider* feature_status_provider, + LaunchAppHelper* launch_app_helper, + AppsLaunchInfoProvider* apps_launch_info_provider); ~EcheNotificationClickHandler() override; EcheNotificationClickHandler(const EcheNotificationClickHandler&) = delete; @@ -51,6 +54,7 @@ class EcheNotificationClickHandler : public phonehub::NotificationClickHandler, phonehub::PhoneModel* phone_model_; FeatureStatusProvider* feature_status_provider_; LaunchAppHelper* launch_app_helper_; + AppsLaunchInfoProvider* apps_launch_info_provider_; bool is_click_handler_set_ = false; }; diff --git a/ash/webui/eche_app_ui/eche_notification_click_handler_unittest.cc b/ash/webui/eche_app_ui/eche_notification_click_handler_unittest.cc index 05ef6ead0c555..8203f4c2cdb6d 100644 --- a/ash/webui/eche_app_ui/eche_notification_click_handler_unittest.cc +++ b/ash/webui/eche_app_ui/eche_notification_click_handler_unittest.cc @@ -7,6 +7,8 @@ #include <string> #include "ash/constants/ash_features.h" +#include "ash/webui/eche_app_ui/apps_launch_info_provider.h" +#include "ash/webui/eche_app_ui/eche_connection_status_handler.h" #include "ash/webui/eche_app_ui/fake_feature_status_provider.h" #include "ash/webui/eche_app_ui/fake_launch_app_helper.h" #include "ash/webui/eche_app_ui/launch_app_helper.h" @@ -50,12 +52,18 @@ class EcheNotificationClickHandlerTest : public testing::Test { base::BindRepeating( &EcheNotificationClickHandlerTest::FakeCloseNotificationFunction, base::Unretained(this))); + connection_status_handler_ = + std::make_unique<eche_app::EcheConnectionStatusHandler>(); + apps_launch_info_provider_ = std::make_unique<AppsLaunchInfoProvider>( + connection_status_handler_.get()); handler_ = std::make_unique<EcheNotificationClickHandler>( &fake_phone_hub_manager_, &fake_feature_status_provider_, - launch_app_helper_.get()); + launch_app_helper_.get(), apps_launch_info_provider_.get()); } void TearDown() override { + connection_status_handler_.reset(); + apps_launch_info_provider_.reset(); launch_app_helper_.reset(); handler_.reset(); } @@ -116,6 +124,9 @@ class EcheNotificationClickHandlerTest : public testing::Test { base::test::ScopedFeatureList scoped_feature_list_; FakeFeatureStatusProvider fake_feature_status_provider_; std::unique_ptr<FakeLaunchAppHelper> launch_app_helper_; + std::unique_ptr<eche_app::EcheConnectionStatusHandler> + connection_status_handler_; + std::unique_ptr<AppsLaunchInfoProvider> apps_launch_info_provider_; size_t num_notifications_shown_ = 0; size_t num_app_launch_ = 0; }; diff --git a/ash/webui/eche_app_ui/eche_recent_app_click_handler.cc b/ash/webui/eche_app_ui/eche_recent_app_click_handler.cc index 11bcd4a292b6f..6ee72051b4217 100644 --- a/ash/webui/eche_app_ui/eche_recent_app_click_handler.cc +++ b/ash/webui/eche_app_ui/eche_recent_app_click_handler.cc @@ -8,6 +8,7 @@ #include "ash/shell.h" #include "ash/system/eche/eche_tray.h" #include "ash/system/phonehub/phone_hub_ui_controller.h" +#include "ash/webui/eche_app_ui/apps_launch_info_provider.h" #include "ash/webui/eche_app_ui/launch_app_helper.h" #include "base/metrics/histogram_functions.h" #include "chromeos/ash/components/phonehub/phone_hub_manager.h" @@ -19,11 +20,13 @@ EcheRecentAppClickHandler::EcheRecentAppClickHandler( phonehub::PhoneHubManager* phone_hub_manager, FeatureStatusProvider* feature_status_provider, LaunchAppHelper* launch_app_helper, - EcheStreamStatusChangeHandler* stream_status_change_handler) + EcheStreamStatusChangeHandler* stream_status_change_handler, + AppsLaunchInfoProvider* apps_launch_info_provider) : phone_hub_manager_(phone_hub_manager), feature_status_provider_(feature_status_provider), launch_app_helper_(launch_app_helper), - stream_status_change_handler_(stream_status_change_handler) { + stream_status_change_handler_(stream_status_change_handler), + apps_launch_info_provider_(apps_launch_info_provider) { notification_handler_ = phone_hub_manager->GetNotificationInteractionHandler(); recent_apps_handler_ = phone_hub_manager->GetRecentAppsInteractionHandler(); @@ -84,6 +87,7 @@ void EcheRecentAppClickHandler::OnRecentAppClicked( base::UmaHistogramEnumeration("Eche.AppStream.LaunchAttempt", entrypoint); to_stream_apps_.emplace_back(app_metadata); + apps_launch_info_provider_->SetEntryPoint(entrypoint); launch_app_helper_->LaunchEcheApp( /*notification_id=*/absl::nullopt, app_metadata.package_name, app_metadata.visible_app_name, app_metadata.user_id, diff --git a/ash/webui/eche_app_ui/eche_recent_app_click_handler.h b/ash/webui/eche_app_ui/eche_recent_app_click_handler.h index 2116e7733153d..bea65217f4865 100644 --- a/ash/webui/eche_app_ui/eche_recent_app_click_handler.h +++ b/ash/webui/eche_app_ui/eche_recent_app_click_handler.h @@ -24,6 +24,7 @@ class PhoneHubManager; namespace eche_app { class LaunchAppHelper; +class AppsLaunchInfoProvider; // Handles recent app clicks originating from Phone Hub recent apps. class EcheRecentAppClickHandler @@ -36,7 +37,8 @@ class EcheRecentAppClickHandler phonehub::PhoneHubManager* phone_hub_manager, FeatureStatusProvider* feature_status_provider, LaunchAppHelper* launch_app_helper, - EcheStreamStatusChangeHandler* stream_status_change_handler); + EcheStreamStatusChangeHandler* stream_status_change_handler, + AppsLaunchInfoProvider* apps_launch_info_provider); ~EcheRecentAppClickHandler() override; EcheRecentAppClickHandler(const EcheRecentAppClickHandler&) = delete; @@ -70,6 +72,7 @@ class EcheRecentAppClickHandler LaunchAppHelper* launch_app_helper_; EcheStreamStatusChangeHandler* stream_status_change_handler_; std::vector<phonehub::Notification::AppMetadata> to_stream_apps_; + AppsLaunchInfoProvider* apps_launch_info_provider_; bool is_click_handler_set_ = false; bool is_stream_started_ = false; }; diff --git a/ash/webui/eche_app_ui/eche_recent_app_click_handler_unittest.cc b/ash/webui/eche_app_ui/eche_recent_app_click_handler_unittest.cc index 106d8062292b7..3407f3f727499 100644 --- a/ash/webui/eche_app_ui/eche_recent_app_click_handler_unittest.cc +++ b/ash/webui/eche_app_ui/eche_recent_app_click_handler_unittest.cc @@ -4,9 +4,12 @@ #include "ash/webui/eche_app_ui/eche_recent_app_click_handler.h" +#include <memory> #include <string> #include "ash/constants/ash_features.h" +#include "ash/webui/eche_app_ui/apps_launch_info_provider.h" +#include "ash/webui/eche_app_ui/eche_connection_status_handler.h" #include "ash/webui/eche_app_ui/eche_stream_status_change_handler.h" #include "ash/webui/eche_app_ui/fake_feature_status_provider.h" #include "ash/webui/eche_app_ui/fake_launch_app_helper.h" @@ -50,14 +53,21 @@ class EcheRecentAppClickHandlerTest : public testing::Test { base::BindRepeating( &EcheRecentAppClickHandlerTest::FakeCloseNotificationFunction, base::Unretained(this))); + connection_status_handler_ = + std::make_unique<eche_app::EcheConnectionStatusHandler>(); + apps_launch_info_provider_ = std::make_unique<AppsLaunchInfoProvider>( + connection_status_handler_.get()); stream_status_change_handler_ = std::make_unique<EcheStreamStatusChangeHandler>(); handler_ = std::make_unique<EcheRecentAppClickHandler>( &fake_phone_hub_manager_, &fake_feature_status_provider_, - launch_app_helper_.get(), stream_status_change_handler_.get()); + launch_app_helper_.get(), stream_status_change_handler_.get(), + apps_launch_info_provider_.get()); } void TearDown() override { + apps_launch_info_provider_.reset(); + connection_status_handler_.reset(); launch_app_helper_.reset(); handler_.reset(); stream_status_change_handler_.reset(); @@ -137,6 +147,9 @@ class EcheRecentAppClickHandlerTest : public testing::Test { std::unique_ptr<FakeLaunchAppHelper> launch_app_helper_; std::unique_ptr<EcheStreamStatusChangeHandler> stream_status_change_handler_; std::unique_ptr<EcheRecentAppClickHandler> handler_; + std::unique_ptr<eche_app::EcheConnectionStatusHandler> + connection_status_handler_; + std::unique_ptr<AppsLaunchInfoProvider> apps_launch_info_provider_; std::string package_name_; std::u16string visible_name_; int64_t user_id_;