blob: 7f05099736b155002f113a61dcc362bc12eb5ae5 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/cast_streaming/renderer/control/renderer_controller_proxy.h"
#include <utility>
#include "base/logging.h"
namespace cast_streaming {
RendererControllerProxy::RendererControllerProxy(
MojoDisconnectCB disconnection_handler)
: renderer_process_pending_receiver_(
renderer_process_remote_.InitWithNewPipeAndPassReceiver()),
browser_process_receiver_(this),
on_mojo_disconnection_(std::move(disconnection_handler)) {}
RendererControllerProxy::~RendererControllerProxy() = default;
void RendererControllerProxy::BindRendererController(
mojo::PendingAssociatedReceiver<mojom::RendererController>
pending_receiver) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(on_mojo_disconnection_);
browser_process_receiver_.Bind(std::move(pending_receiver));
browser_process_receiver_.set_disconnect_handler(
std::move(on_mojo_disconnection_));
}
mojo::PendingReceiver<media::mojom::Renderer>
RendererControllerProxy::GetReceiver() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(renderer_process_pending_receiver_);
if (set_playback_controller_cb_) {
std::move(set_playback_controller_cb_).Run();
}
return std::move(renderer_process_pending_receiver_);
}
void RendererControllerProxy::SetPlaybackController(
mojo::PendingReceiver<media::mojom::Renderer>
browser_process_renderer_controls,
SetPlaybackControllerCallback callback) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(!set_playback_controller_cb_);
set_playback_controller_cb_ = std::move(callback);
CHECK(mojo::FusePipes(std::move(browser_process_renderer_controls),
std::move(renderer_process_remote_)));
if (!renderer_process_pending_receiver_) {
std::move(set_playback_controller_cb_).Run();
}
}
} // namespace cast_streaming