Commit bed81479 authored by John Williams's avatar John Williams Committed by Commit Bot

[Cast MRP] Don't automatically terminate non-local mirroring activities.

Bug: 1138469
Change-Id: Idcb06541f74c1795abef7725176aa87b7cab0337
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2472206Reviewed-by: default avatarTakumi Fujimoto <takumif@chromium.org>
Commit-Queue: John Williams <jrw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#817257}
parent 198d53d8
...@@ -73,7 +73,7 @@ CastActivityManager::~CastActivityManager() { ...@@ -73,7 +73,7 @@ CastActivityManager::~CastActivityManager() {
// browser shuts down. This works when the browser is closed through its UI, // browser shuts down. This works when the browser is closed through its UI,
// or when it is given an opportunity to shut down gracefully, e.g. with // or when it is given an opportunity to shut down gracefully, e.g. with
// SIGINT on Linux, but not SIGTERM. // SIGINT on Linux, but not SIGTERM.
TerminateAllMirroringActivities(); TerminateAllLocalMirroringActivities();
message_handler_->RemoveObserver(this); message_handler_->RemoveObserver(this);
session_tracker_->RemoveObserver(this); session_tracker_->RemoveObserver(this);
...@@ -910,15 +910,17 @@ std::string CastActivityManager::ChooseAppId( ...@@ -910,15 +910,17 @@ std::string CastActivityManager::ChooseAppId(
return source.app_infos()[0].app_id; return source.app_infos()[0].app_id;
} }
void CastActivityManager::TerminateAllMirroringActivities() { void CastActivityManager::TerminateAllLocalMirroringActivities() {
// Save all route IDs so we aren't iterating over |activities_| when it's // Save all route IDs so we aren't iterating over |activities_| when it's
// modified. // modified.
std::vector<MediaRoute::Id> route_ids; std::vector<MediaRoute::Id> route_ids;
for (const auto& pair : activities_) { for (const auto& pair : activities_) {
if (pair.second->route().is_local() &&
// Anything that isn't an app activity is a mirroring activity. // Anything that isn't an app activity is a mirroring activity.
if (app_activities_.find(pair.first) == app_activities_.end()) app_activities_.find(pair.first) == app_activities_.end()) {
route_ids.push_back(pair.first); route_ids.push_back(pair.first);
} }
}
// Terminate the activities. // Terminate the activities.
for (const auto& id : route_ids) { for (const auto& id : route_ids) {
......
...@@ -273,7 +273,7 @@ class CastActivityManager : public CastActivityManagerBase, ...@@ -273,7 +273,7 @@ class CastActivityManager : public CastActivityManagerBase,
std::string ChooseAppId(const CastMediaSource& source, std::string ChooseAppId(const CastMediaSource& source,
const MediaSinkInternal& sink) const; const MediaSinkInternal& sink) const;
void TerminateAllMirroringActivities(); void TerminateAllLocalMirroringActivities();
static CastActivityFactoryForTest* cast_activity_factory_for_test_; static CastActivityFactoryForTest* cast_activity_factory_for_test_;
......
...@@ -325,10 +325,20 @@ class CastActivityManagerTest : public testing::Test, ...@@ -325,10 +325,20 @@ class CastActivityManagerTest : public testing::Test,
DCHECK(mirroring_activity_); DCHECK(mirroring_activity_);
} }
void ExpectMirroringActivityStopped() { void AddRemoteMirroringSession() {
auto session =
CastSession::From(sink2_, MakeReceiverStatus(kCastStreamingAppId));
manager_->OnSessionAddedOrUpdated(sink2_, *session);
SetSessionForTest(sink2_.id(), std::move(session));
DCHECK(mirroring_activity_); DCHECK(mirroring_activity_);
EXPECT_CALL(message_handler_, StopSession).Times(1); DCHECK(!mirroring_activity_->route().is_local());
EXPECT_CALL(*mirroring_activity_, SendStopSessionMessageToClients).Times(1); }
void ExpectMirroringActivityStoppedTimes(int times) {
DCHECK(mirroring_activity_);
EXPECT_CALL(message_handler_, StopSession).Times(times);
EXPECT_CALL(*mirroring_activity_, SendStopSessionMessageToClients)
.Times(times);
} }
void TerminateSession(bool expect_success) { void TerminateSession(bool expect_success) {
...@@ -444,7 +454,7 @@ TEST_F(CastActivityManagerTest, LaunchSiteInitiatedMirroringSession) { ...@@ -444,7 +454,7 @@ TEST_F(CastActivityManagerTest, LaunchSiteInitiatedMirroringSession) {
TEST_F(CastActivityManagerTest, MirroringSessionStopped) { TEST_F(CastActivityManagerTest, MirroringSessionStopped) {
LaunchMirroringSession(); LaunchMirroringSession();
ExpectMirroringActivityStopped(); ExpectMirroringActivityStoppedTimes(1);
mirroring_activity_->DidStop(); mirroring_activity_->DidStop();
} }
...@@ -613,9 +623,15 @@ TEST_F(CastActivityManagerTest, TerminateSessionFails) { ...@@ -613,9 +623,15 @@ TEST_F(CastActivityManagerTest, TerminateSessionFails) {
TerminateSession(false); TerminateSession(false);
} }
TEST_F(CastActivityManagerTest, DestructorClosesMirroringSession) { TEST_F(CastActivityManagerTest, DestructorClosesLocalMirroringSession) {
LaunchMirroringSession(); LaunchMirroringSession();
ExpectMirroringActivityStopped(); ExpectMirroringActivityStoppedTimes(1);
manager_.reset();
}
TEST_F(CastActivityManagerTest, DestructorIgnoresNonlocalMirroringSession) {
AddRemoteMirroringSession();
ExpectMirroringActivityStoppedTimes(0);
manager_.reset(); manager_.reset();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment