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

[Cast MRP] Implemented route termination for mirroring.

This implementation involves a lot of duplication of code from
CastActivityRecord that really should be cleaned up, but it works.

Change-Id: Ia286ef583d5b17d5982cf9babeccf28808b1ac33
Bug: 809249
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1925343
Commit-Queue: John Williams <jrw@chromium.org>
Reviewed-by: default avatarTakumi Fujimoto <takumif@chromium.org>
Cr-Commit-Position: refs/heads/master@{#717245}
parent ee8668e7
...@@ -440,7 +440,7 @@ ActivityRecord* CastActivityManager::AddMirroringActivityRecord( ...@@ -440,7 +440,7 @@ ActivityRecord* CastActivityManager::AddMirroringActivityRecord(
const CastSinkExtraData& cast_data) { const CastSinkExtraData& cast_data) {
auto activity = std::make_unique<MirroringActivityRecord>( auto activity = std::make_unique<MirroringActivityRecord>(
route, app_id, message_handler_, session_tracker_, tab_id, cast_data, route, app_id, message_handler_, session_tracker_, tab_id, cast_data,
media_router_, media_router_, media_sink_service_, this,
// We could theoretically use base::Unretained() below instead of // We could theoretically use base::Unretained() below instead of
// GetWeakPtr(), the that seems like an unnecessary optimization here. // GetWeakPtr(), the that seems like an unnecessary optimization here.
// --jrw // --jrw
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/media/router/data_decoder_util.h" #include "chrome/browser/media/router/data_decoder_util.h"
#include "chrome/browser/media/router/providers/cast/cast_activity_manager.h"
#include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h" #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h"
#include "chrome/common/media_router/discovery/media_sink_internal.h" #include "chrome/common/media_router/discovery/media_sink_internal.h"
#include "chrome/common/media_router/mojom/media_router.mojom.h" #include "chrome/common/media_router/mojom/media_router.mojom.h"
...@@ -48,6 +49,8 @@ MirroringActivityRecord::MirroringActivityRecord( ...@@ -48,6 +49,8 @@ MirroringActivityRecord::MirroringActivityRecord(
int target_tab_id, int target_tab_id,
const CastSinkExtraData& cast_data, const CastSinkExtraData& cast_data,
mojom::MediaRouter* media_router, mojom::MediaRouter* media_router,
MediaSinkServiceBase* media_sink_service,
CastActivityManagerBase* activity_manager,
OnStopCallback callback) OnStopCallback callback)
: ActivityRecord(route, app_id, message_handler, session_tracker), : ActivityRecord(route, app_id, message_handler, session_tracker),
channel_id_(cast_data.cast_channel_id), channel_id_(cast_data.cast_channel_id),
...@@ -55,6 +58,8 @@ MirroringActivityRecord::MirroringActivityRecord( ...@@ -55,6 +58,8 @@ MirroringActivityRecord::MirroringActivityRecord(
// 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_(target_tab_id == -1 ? MirroringType::kDesktop
: MirroringType::kTab), : MirroringType::kTab),
media_sink_service_(media_sink_service),
activity_manager_(activity_manager),
on_stop_(std::move(callback)) { on_stop_(std::move(callback)) {
// TODO(jrw): Detect and report errors. // TODO(jrw): Detect and report errors.
...@@ -191,8 +196,14 @@ void MirroringActivityRecord::SendStopSessionMessageToReceiver( ...@@ -191,8 +196,14 @@ void MirroringActivityRecord::SendStopSessionMessageToReceiver(
const base::Optional<std::string>& client_id, const base::Optional<std::string>& client_id,
const std::string& hash_token, const std::string& hash_token,
MediaRouteProvider::TerminateRouteCallback callback) { MediaRouteProvider::TerminateRouteCallback callback) {
// TODO(jrw): What, if anything, should happen here? const std::string& sink_id = route_.media_sink_id();
std::move(callback).Run(base::nullopt, RouteRequestResult::ResultCode::OK); const MediaSinkInternal* sink = media_sink_service_->GetSinkById(sink_id);
DCHECK(sink);
DCHECK(session_id_);
message_handler_->StopSession(
sink->cast_data().cast_channel_id, *session_id_, client_id,
activity_manager_->MakeResultCallbackForRoute(route_.media_route_id(),
std::move(callback)));
} }
void MirroringActivityRecord::HandleLeaveSession(const std::string& client_id) { void MirroringActivityRecord::HandleLeaveSession(const std::string& client_id) {
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
namespace media_router { namespace media_router {
struct CastSinkExtraData; struct CastSinkExtraData;
class CastActivityManagerBase;
class MirroringActivityRecord : public ActivityRecord, class MirroringActivityRecord : public ActivityRecord,
public mirroring::mojom::SessionObserver, public mirroring::mojom::SessionObserver,
...@@ -39,6 +40,8 @@ class MirroringActivityRecord : public ActivityRecord, ...@@ -39,6 +40,8 @@ class MirroringActivityRecord : public ActivityRecord,
int target_tab_id, int target_tab_id,
const CastSinkExtraData& cast_data, const CastSinkExtraData& cast_data,
mojom::MediaRouter* media_router, mojom::MediaRouter* media_router,
MediaSinkServiceBase* media_sink_service,
CastActivityManagerBase* activity_manager,
OnStopCallback callback); OnStopCallback callback);
~MirroringActivityRecord() override; ~MirroringActivityRecord() override;
...@@ -106,6 +109,8 @@ class MirroringActivityRecord : public ActivityRecord, ...@@ -106,6 +109,8 @@ class MirroringActivityRecord : public ActivityRecord,
const int channel_id_; const int channel_id_;
const MirroringType mirroring_type_; const MirroringType mirroring_type_;
MediaSinkServiceBase* const media_sink_service_;
CastActivityManagerBase* const activity_manager_;
OnStopCallback on_stop_; OnStopCallback on_stop_;
base::WeakPtrFactory<MirroringActivityRecord> weak_ptr_factory_{this}; base::WeakPtrFactory<MirroringActivityRecord> weak_ptr_factory_{this};
}; };
......
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