Commit d7c4f56d authored by Takumi Fujimoto's avatar Takumi Fujimoto Committed by Commit Bot

[Cast MRP] Instantiate MirroringActivityRecord for non-local sessions

Prior to this CL, CastActivityManager instantiated CastActivityRecord
for non-local routes, regardless of whether it's for flinging or
mirroring. This CL fixes that issue, instantiating a no-op
MirroringActivityRecord instead.

Bug: 1037967
Change-Id: Icfd45c150be9f9de107ca8a62487cfe1cd80a283
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2033656Reviewed-by: default avatarBrandon Tolsch <btolsch@chromium.org>
Commit-Queue: Takumi Fujimoto <takumif@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738333}
parent 88764eb9
...@@ -562,8 +562,14 @@ void CastActivityManager::AddNonLocalActivityRecord( ...@@ -562,8 +562,14 @@ void CastActivityManager::AddNonLocalActivityRecord(
/* is_local */ false, /* for_display */ true); /* is_local */ false, /* for_display */ true);
route.set_media_sink_name(sink.sink().name()); route.set_media_sink_name(sink.sink().name());
auto* activity_ptr = AddCastActivityRecord(route, app_id); if (cast_source->ContainsStreamingApp()) {
activity_ptr->SetOrUpdateSession(session, sink, hash_token_); route.set_controller_type(RouteControllerType::kMirroring);
AddMirroringActivityRecord(route, app_id, -1, sink.cast_data());
} else {
route.set_controller_type(RouteControllerType::kGeneric);
auto* activity_ptr = AddCastActivityRecord(route, app_id);
activity_ptr->SetOrUpdateSession(session, sink, hash_token_);
}
} }
const MediaRoute* CastActivityManager::GetRoute( const MediaRoute* CastActivityManager::GetRoute(
......
...@@ -25,9 +25,7 @@ CastActivityRecord::CastActivityRecord( ...@@ -25,9 +25,7 @@ CastActivityRecord::CastActivityRecord(
const std::string& app_id, const std::string& app_id,
cast_channel::CastMessageHandler* message_handler, cast_channel::CastMessageHandler* message_handler,
CastSessionTracker* session_tracker) CastSessionTracker* session_tracker)
: ActivityRecord(route, app_id, message_handler, session_tracker) { : ActivityRecord(route, app_id, message_handler, session_tracker) {}
route_.set_controller_type(RouteControllerType::kGeneric);
}
CastActivityRecord::~CastActivityRecord() = default; CastActivityRecord::~CastActivityRecord() = default;
......
...@@ -44,6 +44,8 @@ namespace media_router { ...@@ -44,6 +44,8 @@ namespace media_router {
namespace { namespace {
using MirroringType = MirroringActivityRecord::MirroringType;
const std::string GetMirroringNamespace(const base::Value& message) { const std::string GetMirroringNamespace(const base::Value& message) {
const base::Value* const type_value = const base::Value* const type_value =
message.FindKeyOfType("type", base::Value::Type::STRING); message.FindKeyOfType("type", base::Value::Type::STRING);
...@@ -58,6 +60,12 @@ const std::string GetMirroringNamespace(const base::Value& message) { ...@@ -58,6 +60,12 @@ const std::string GetMirroringNamespace(const base::Value& message) {
} }
} }
MirroringType GetMirroringType(const MediaRoute& route, int tab_id) {
if (!route.is_local())
return MirroringType::kNonLocal;
return tab_id == -1 ? MirroringType::kDesktop : MirroringType::kTab;
}
} // namespace } // namespace
MirroringActivityRecord::MirroringActivityRecord( MirroringActivityRecord::MirroringActivityRecord(
...@@ -73,8 +81,7 @@ MirroringActivityRecord::MirroringActivityRecord( ...@@ -73,8 +81,7 @@ MirroringActivityRecord::MirroringActivityRecord(
channel_id_(cast_data.cast_channel_id), channel_id_(cast_data.cast_channel_id),
// TODO(jrw): MirroringType::kOffscreenTab should be a possible value here // TODO(jrw): MirroringType::kOffscreenTab should be a possible value here
// once the Presentation API 1UA mode is supported. // once the Presentation API 1UA mode is supported.
mirroring_type_(target_tab_id == -1 ? MirroringType::kDesktop mirroring_type_(GetMirroringType(route, target_tab_id)),
: MirroringType::kTab),
on_stop_(std::move(callback)) { on_stop_(std::move(callback)) {
// TODO(jrw): Detect and report errors. // TODO(jrw): Detect and report errors.
...@@ -93,6 +100,10 @@ MirroringActivityRecord::MirroringActivityRecord( ...@@ -93,6 +100,10 @@ MirroringActivityRecord::MirroringActivityRecord(
media_router->GetMirroringServiceHostForTab( media_router->GetMirroringServiceHostForTab(
target_tab_id, host_.BindNewPipeAndPassReceiver()); target_tab_id, host_.BindNewPipeAndPassReceiver());
break; break;
case MirroringType::kNonLocal:
// Non-local activity doesn't need to handle messages, so return without
// setting up Mojo bindings.
return;
default: default:
NOTREACHED(); NOTREACHED();
} }
...@@ -155,6 +166,8 @@ void MirroringActivityRecord::Send(mirroring::mojom::CastMessagePtr message) { ...@@ -155,6 +166,8 @@ void MirroringActivityRecord::Send(mirroring::mojom::CastMessagePtr message) {
void MirroringActivityRecord::OnAppMessage( void MirroringActivityRecord::OnAppMessage(
const cast::channel::CastMessage& message) { const cast::channel::CastMessage& message) {
if (!route_.is_local())
return;
if (message.namespace_() != mirroring::mojom::kWebRtcNamespace && if (message.namespace_() != mirroring::mojom::kWebRtcNamespace &&
message.namespace_() != mirroring::mojom::kRemotingNamespace) { message.namespace_() != mirroring::mojom::kRemotingNamespace) {
// Ignore message with wrong namespace. // Ignore message with wrong namespace.
...@@ -175,6 +188,8 @@ void MirroringActivityRecord::OnAppMessage( ...@@ -175,6 +188,8 @@ void MirroringActivityRecord::OnAppMessage(
void MirroringActivityRecord::OnInternalMessage( void MirroringActivityRecord::OnInternalMessage(
const cast_channel::InternalMessage& message) { const cast_channel::InternalMessage& message) {
if (!route_.is_local())
return;
DVLOG(2) << "Relaying internal message from receiver: " << message.message; DVLOG(2) << "Relaying internal message from receiver: " << message.message;
mirroring::mojom::CastMessagePtr ptr = mirroring::mojom::CastMessage::New(); mirroring::mojom::CastMessagePtr ptr = mirroring::mojom::CastMessage::New();
ptr->message_namespace = message.message_namespace; ptr->message_namespace = message.message_namespace;
......
...@@ -33,6 +33,14 @@ class MirroringActivityRecord : public ActivityRecord, ...@@ -33,6 +33,14 @@ class MirroringActivityRecord : public ActivityRecord,
public: public:
using OnStopCallback = base::OnceClosure; using OnStopCallback = base::OnceClosure;
enum class MirroringType {
kTab, // Mirror a single tab.
kDesktop, // Mirror the whole desktop.
kOffscreenTab, // Used for Presentation API 1UA mode.
kNonLocal, // Activity started by other sender devices.
kMaxValue = kNonLocal,
};
MirroringActivityRecord(const MediaRoute& route, MirroringActivityRecord(const MediaRoute& route,
const std::string& app_id, const std::string& app_id,
cast_channel::CastMessageHandler* message_handler, cast_channel::CastMessageHandler* message_handler,
...@@ -61,13 +69,6 @@ class MirroringActivityRecord : public ActivityRecord, ...@@ -61,13 +69,6 @@ class MirroringActivityRecord : public ActivityRecord,
mojo::PendingRemote<mojom::MediaStatusObserver> observer) override; mojo::PendingRemote<mojom::MediaStatusObserver> observer) override;
private: private:
enum class MirroringType {
kTab, // Mirror a single tab.
kDesktop, // Mirror the whole desktop.
kOffscreenTab, // Used for Presentation API 1UA mode.
kMaxValue = kOffscreenTab,
};
void HandleParseJsonResult(const std::string& route_id, void HandleParseJsonResult(const std::string& route_id,
data_decoder::DataDecoder::ValueOrError result); data_decoder::DataDecoder::ValueOrError result);
......
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