Commit c059c1b7 authored by Antonio Gomes's avatar Antonio Gomes Committed by Commit Bot

Onion soup content/renderer/media/webrtc/transceiver_state_surfacer.cc|h

... and the respective unittest, transceiver_state_surfacer_unittest.cc

This CL works out phase 7.4 on the design document [1].

[1] https://docs.google.com/document/d/1AJKVA5U4nDkyDB9p4ROrggWXadCxyy-grKaE9KS5vOU/

BUG=787254
R=guidou@chromium.org, haraken@chromium.org

Change-Id: I25384e38468cdfaf5e5fa2157f8f5993f1591f7a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1820062
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/master@{#705066}
parent def70c55
......@@ -204,8 +204,6 @@ target(link_target_type, "renderer") {
"media/webrtc/peer_connection_tracker.h",
"media/webrtc/rtc_peer_connection_handler.cc",
"media/webrtc/rtc_peer_connection_handler.h",
"media/webrtc/transceiver_state_surfacer.cc",
"media/webrtc/transceiver_state_surfacer.h",
"media/webrtc/webrtc_set_description_observer.cc",
"media/webrtc/webrtc_set_description_observer.h",
"menu_item_builder.cc",
......
......@@ -1129,8 +1129,8 @@ RTCPeerConnectionHandler::CreateOfferInternal(
peer_connection_tracker_,
PeerConnectionTracker::ACTION_CREATE_OFFER));
TransceiverStateSurfacer transceiver_state_surfacer(task_runner_,
signaling_thread());
blink::TransceiverStateSurfacer transceiver_state_surfacer(
task_runner_, signaling_thread());
RunSynchronousRepeatingClosureOnSignalingThread(
base::BindRepeating(
&RTCPeerConnectionHandler::CreateOfferOnSignalingThread,
......@@ -1152,7 +1152,7 @@ RTCPeerConnectionHandler::CreateOfferInternal(
void RTCPeerConnectionHandler::CreateOfferOnSignalingThread(
webrtc::CreateSessionDescriptionObserver* observer,
webrtc::PeerConnectionInterface::RTCOfferAnswerOptions offer_options,
TransceiverStateSurfacer* transceiver_state_surfacer) {
blink::TransceiverStateSurfacer* transceiver_state_surfacer) {
native_peer_connection_->CreateOffer(observer, offer_options);
std::vector<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>
transceivers =
......@@ -1605,8 +1605,8 @@ RTCPeerConnectionHandler::AddTransceiverWithTrack(
DCHECK(task_runner_->RunsTasksInCurrentSequence());
std::unique_ptr<blink::WebRtcMediaStreamTrackAdapterMap::AdapterRef>
track_ref = track_adapter_map_->GetOrCreateLocalTrackAdapter(web_track);
TransceiverStateSurfacer transceiver_state_surfacer(task_runner_,
signaling_thread());
blink::TransceiverStateSurfacer transceiver_state_surfacer(
task_runner_, signaling_thread());
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>
error_or_transceiver;
RunSynchronousRepeatingClosureOnSignalingThread(
......@@ -1634,7 +1634,7 @@ RTCPeerConnectionHandler::AddTransceiverWithTrack(
void RTCPeerConnectionHandler::AddTransceiverWithTrackOnSignalingThread(
rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track,
webrtc::RtpTransceiverInit init,
TransceiverStateSurfacer* transceiver_state_surfacer,
blink::TransceiverStateSurfacer* transceiver_state_surfacer,
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>*
error_or_transceiver) {
*error_or_transceiver =
......@@ -1659,8 +1659,8 @@ RTCPeerConnectionHandler::AddTransceiverWithKind(
DCHECK_EQ(kind, webrtc::MediaStreamTrackInterface::kVideoKind);
media_type = cricket::MEDIA_TYPE_VIDEO;
}
TransceiverStateSurfacer transceiver_state_surfacer(task_runner_,
signaling_thread());
blink::TransceiverStateSurfacer transceiver_state_surfacer(
task_runner_, signaling_thread());
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>
error_or_transceiver;
RunSynchronousRepeatingClosureOnSignalingThread(
......@@ -1689,7 +1689,7 @@ RTCPeerConnectionHandler::AddTransceiverWithKind(
void RTCPeerConnectionHandler::AddTransceiverWithMediaTypeOnSignalingThread(
cricket::MediaType media_type,
webrtc::RtpTransceiverInit init,
TransceiverStateSurfacer* transceiver_state_surfacer,
blink::TransceiverStateSurfacer* transceiver_state_surfacer,
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>*
error_or_transceiver) {
*error_or_transceiver =
......@@ -1718,8 +1718,8 @@ RTCPeerConnectionHandler::AddTrack(
// transceiver (Plan B: sender only).
// TODO(hbos): Implement and surface full transceiver support under Unified
// Plan. https://crbug.com/777617
TransceiverStateSurfacer transceiver_state_surfacer(task_runner_,
signaling_thread());
blink::TransceiverStateSurfacer transceiver_state_surfacer(
task_runner_, signaling_thread());
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpSenderInterface>>
error_or_sender;
RunSynchronousRepeatingClosureOnSignalingThread(
......@@ -1782,7 +1782,7 @@ RTCPeerConnectionHandler::AddTrack(
void RTCPeerConnectionHandler::AddTrackOnSignalingThread(
rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track,
std::vector<std::string> stream_ids,
TransceiverStateSurfacer* transceiver_state_surfacer,
blink::TransceiverStateSurfacer* transceiver_state_surfacer,
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpSenderInterface>>*
error_or_sender) {
*error_or_sender = native_peer_connection_->AddTrack(track, stream_ids);
......@@ -1790,7 +1790,7 @@ void RTCPeerConnectionHandler::AddTrackOnSignalingThread(
if (error_or_sender->ok()) {
auto sender = error_or_sender->value();
if (configuration_.sdp_semantics == webrtc::SdpSemantics::kPlanB) {
transceivers = {new SurfaceSenderStateOnly(sender)};
transceivers = {new blink::SurfaceSenderStateOnly(sender)};
} else {
DCHECK_EQ(configuration_.sdp_semantics,
webrtc::SdpSemantics::kUnifiedPlan);
......@@ -1873,8 +1873,8 @@ RTCPeerConnectionHandler::RemoveTrackUnifiedPlan(
const auto& sender = *it;
auto webrtc_sender = sender->state().webrtc_sender();
TransceiverStateSurfacer transceiver_state_surfacer(task_runner_,
signaling_thread());
blink::TransceiverStateSurfacer transceiver_state_surfacer(
task_runner_, signaling_thread());
bool result;
RunSynchronousRepeatingClosureOnSignalingThread(
base::BindRepeating(
......@@ -1912,7 +1912,7 @@ RTCPeerConnectionHandler::RemoveTrackUnifiedPlan(
void RTCPeerConnectionHandler::RemoveTrackUnifiedPlanOnSignalingThread(
rtc::scoped_refptr<webrtc::RtpSenderInterface> sender,
TransceiverStateSurfacer* transceiver_state_surfacer,
blink::TransceiverStateSurfacer* transceiver_state_surfacer,
bool* result) {
*result = native_peer_connection_->RemoveTrack(sender);
std::vector<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>> transceivers;
......
......@@ -20,7 +20,6 @@
#include "base/threading/thread.h"
#include "content/common/content_export.h"
#include "content/renderer/media/webrtc/media_stream_track_metrics.h"
#include "content/renderer/media/webrtc/transceiver_state_surfacer.h"
#include "third_party/blink/public/platform/web_media_stream_source.h"
#include "third_party/blink/public/platform/web_rtc_peer_connection_handler.h"
#include "third_party/blink/public/platform/web_rtc_peer_connection_handler_client.h"
......@@ -29,6 +28,7 @@
#include "third_party/blink/public/platform/web_rtc_stats_response.h"
#include "third_party/blink/public/web/modules/peerconnection/rtc_rtp_receiver_impl.h"
#include "third_party/blink/public/web/modules/peerconnection/rtc_rtp_sender_impl.h"
#include "third_party/blink/public/web/modules/peerconnection/transceiver_state_surfacer.h"
#include "third_party/blink/public/web/modules/peerconnection/webrtc_media_stream_track_adapter_map.h"
#include "third_party/webrtc/api/stats/rtc_stats.h"
#include "third_party/webrtc/api/stats/rtc_stats_collector_callback.h"
......@@ -289,19 +289,19 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
void AddTransceiverWithTrackOnSignalingThread(
rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track,
webrtc::RtpTransceiverInit init,
TransceiverStateSurfacer* transceiver_state_surfacer,
blink::TransceiverStateSurfacer* transceiver_state_surfacer,
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>*
error_or_transceiver);
void AddTransceiverWithMediaTypeOnSignalingThread(
cricket::MediaType media_type,
webrtc::RtpTransceiverInit init,
TransceiverStateSurfacer* transceiver_state_surfacer,
blink::TransceiverStateSurfacer* transceiver_state_surfacer,
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>*
error_or_transceiver);
void AddTrackOnSignalingThread(
rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track,
std::vector<std::string> stream_ids,
TransceiverStateSurfacer* transceiver_state_surfacer,
blink::TransceiverStateSurfacer* transceiver_state_surfacer,
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpSenderInterface>>*
error_or_sender);
bool RemoveTrackPlanB(blink::WebRTCRtpSender* web_sender);
......@@ -309,7 +309,7 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
RemoveTrackUnifiedPlan(blink::WebRTCRtpSender* web_sender);
void RemoveTrackUnifiedPlanOnSignalingThread(
rtc::scoped_refptr<webrtc::RtpSenderInterface> sender,
TransceiverStateSurfacer* transceiver_state_surfacer,
blink::TransceiverStateSurfacer* transceiver_state_surfacer,
bool* result);
std::vector<std::unique_ptr<blink::WebRTCRtpTransceiver>> CreateOfferInternal(
const blink::WebRTCSessionDescriptionRequest& request,
......@@ -317,7 +317,7 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
void CreateOfferOnSignalingThread(
webrtc::CreateSessionDescriptionObserver* observer,
webrtc::PeerConnectionInterface::RTCOfferAnswerOptions offer_options,
TransceiverStateSurfacer* transceiver_state_surfacer);
blink::TransceiverStateSurfacer* transceiver_state_surfacer);
std::vector<std::unique_ptr<blink::RTCRtpSenderImpl>>::iterator FindSender(
uintptr_t id);
std::vector<std::unique_ptr<blink::RTCRtpReceiverImpl>>::iterator
......
......@@ -60,19 +60,19 @@ void WebRtcSetDescriptionObserverHandlerImpl::OnSetDescriptionComplete(
// Only surface transceiver/receiver states if the peer connection is not
// closed. If the peer connection is closed, the peer connection handler may
// have been destroyed along with any track adapters that
// TransceiverStateSurfacer assumes exist. This is treated as a special case
// due to https://crbug.com/897251.
// blink::TransceiverStateSurfacer assumes exist. This is treated as a special
// case due to https://crbug.com/897251.
if (pc_->signaling_state() != webrtc::PeerConnectionInterface::kClosed) {
if (surface_receivers_only_) {
for (const auto& receiver : pc_->GetReceivers()) {
transceivers.push_back(new SurfaceReceiverStateOnly(receiver));
transceivers.push_back(new blink::SurfaceReceiverStateOnly(receiver));
}
} else {
transceivers = pc_->GetTransceivers();
}
}
TransceiverStateSurfacer transceiver_state_surfacer(main_task_runner_,
signaling_task_runner_);
blink::TransceiverStateSurfacer transceiver_state_surfacer(
main_task_runner_, signaling_task_runner_);
transceiver_state_surfacer.Initialize(pc_, track_adapter_map_,
std::move(transceivers));
main_task_runner_->PostTask(
......@@ -86,7 +86,7 @@ void WebRtcSetDescriptionObserverHandlerImpl::
OnSetDescriptionCompleteOnMainThread(
webrtc::RTCError error,
webrtc::PeerConnectionInterface::SignalingState signaling_state,
TransceiverStateSurfacer transceiver_state_surfacer) {
blink::TransceiverStateSurfacer transceiver_state_surfacer) {
CHECK(main_task_runner_->BelongsToCurrentThread());
WebRtcSetDescriptionObserver::States states;
states.signaling_state = signaling_state;
......
......@@ -14,10 +14,10 @@
#include "base/threading/thread_task_runner_handle.h"
#include "content/common/content_export.h"
#include "content/renderer/media/webrtc/rtc_peer_connection_handler.h"
#include "content/renderer/media/webrtc/transceiver_state_surfacer.h"
#include "third_party/blink/public/web/modules/peerconnection/rtc_rtp_receiver_impl.h"
#include "third_party/blink/public/web/modules/peerconnection/rtc_rtp_sender_impl.h"
#include "third_party/blink/public/web/modules/peerconnection/rtc_rtp_transceiver_impl.h"
#include "third_party/blink/public/web/modules/peerconnection/transceiver_state_surfacer.h"
#include "third_party/blink/public/web/modules/peerconnection/webrtc_media_stream_track_adapter_map.h"
#include "third_party/webrtc/api/jsep.h"
#include "third_party/webrtc/api/peer_connection_interface.h"
......@@ -104,7 +104,7 @@ class CONTENT_EXPORT WebRtcSetDescriptionObserverHandlerImpl
void OnSetDescriptionCompleteOnMainThread(
webrtc::RTCError error,
webrtc::PeerConnectionInterface::SignalingState signaling_state,
TransceiverStateSurfacer transceiver_state_surfacer);
blink::TransceiverStateSurfacer transceiver_state_surfacer);
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
scoped_refptr<base::SingleThreadTaskRunner> signaling_task_runner_;
......
......@@ -1945,7 +1945,6 @@ test("content_unittests") {
"../renderer/media/webrtc/peer_connection_tracker_unittest.cc",
"../renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc",
"../renderer/media/webrtc/task_queue_factory_unittest.cc",
"../renderer/media/webrtc/transceiver_state_surfacer_unittest.cc",
"../renderer/media/webrtc/webrtc_audio_renderer_unittest.cc",
"../renderer/media/webrtc/webrtc_set_description_observer_unittest.cc",
"../renderer/peripheral_content_heuristic_unittest.cc",
......
......@@ -389,6 +389,7 @@ source_set("blink_headers") {
"web/modules/peerconnection/rtc_rtp_receiver_impl.h",
"web/modules/peerconnection/rtc_rtp_sender_impl.h",
"web/modules/peerconnection/rtc_rtp_transceiver_impl.h",
"web/modules/peerconnection/transceiver_state_surfacer.h",
"web/modules/peerconnection/webrtc_media_stream_track_adapter.h",
"web/modules/peerconnection/webrtc_media_stream_track_adapter_map.h",
"web/modules/service_worker/web_service_worker_context_client.h",
......
......@@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_TRANSCEIVER_STATE_SURFACER_H_
#define CONTENT_RENDERER_MEDIA_WEBRTC_TRANSCEIVER_STATE_SURFACER_H_
#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_PEERCONNECTION_TRANSCEIVER_STATE_SURFACER_H_
#define THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_PEERCONNECTION_TRANSCEIVER_STATE_SURFACER_H_
#include "content/common/content_export.h"
#include "third_party/blink/public/platform/web_common.h"
#include "third_party/blink/public/platform/web_rtc_peer_connection_handler_client.h"
#include "third_party/blink/public/web/modules/peerconnection/rtc_rtp_transceiver_impl.h"
#include "third_party/blink/public/web/modules/peerconnection/webrtc_media_stream_track_adapter_map.h"
......@@ -14,7 +14,7 @@
#include "third_party/webrtc/rtc_base/ref_count.h"
#include "third_party/webrtc/rtc_base/ref_counted_object.h"
namespace content {
namespace blink {
// Takes care of creating and initializing transceiver states (including sender
// and receiver states). This is usable for both blocking and non-blocking calls
......@@ -23,7 +23,10 @@ namespace content {
// The surfacer is initialized on the signaling thread and states are obtained
// on the main thread. It is designed to be initialized and handed off; it is
// not thread safe for concurrent thread usage.
class CONTENT_EXPORT TransceiverStateSurfacer {
//
// TODO(crbug.com/787254): Move this class out of the Blink API when all its
// client get moved to Blink. Also move it away from using std::vector.
class BLINK_MODULES_EXPORT TransceiverStateSurfacer {
public:
TransceiverStateSurfacer(
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
......@@ -63,7 +66,7 @@ class CONTENT_EXPORT TransceiverStateSurfacer {
// A dummy implementation of a transceiver used to surface sender state
// information only. It is not thread safe, only designed to be passed on to
// TransceiverStateSurfacer::Initialize().
class CONTENT_EXPORT SurfaceSenderStateOnly
class BLINK_MODULES_EXPORT SurfaceSenderStateOnly
: public rtc::RefCountedObject<webrtc::RtpTransceiverInterface> {
public:
SurfaceSenderStateOnly(rtc::scoped_refptr<webrtc::RtpSenderInterface> sender);
......@@ -87,7 +90,7 @@ class CONTENT_EXPORT SurfaceSenderStateOnly
// A dummy implementation of a transceiver used to surface receiver state
// information only. It is not thread safe, only designed to be passed on to
// TransceiverStateSurfacer::Initialize().
class CONTENT_EXPORT SurfaceReceiverStateOnly
class BLINK_MODULES_EXPORT SurfaceReceiverStateOnly
: public rtc::RefCountedObject<webrtc::RtpTransceiverInterface> {
public:
SurfaceReceiverStateOnly(
......@@ -109,6 +112,6 @@ class CONTENT_EXPORT SurfaceReceiverStateOnly
rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver_;
};
} // namespace content
} // namespace blink
#endif // CONTENT_RENDERER_MEDIA_WEBRTC_TRANSCEIVER_STATE_SURFACER_H_
#endif // THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_PEERCONNECTION_TRANSCEIVER_STATE_SURFACER_H_
......@@ -394,6 +394,7 @@ jumbo_source_set("unit_tests") {
"peerconnection/rtc_rtp_sender_impl_test.cc",
"peerconnection/rtc_rtp_transceiver_impl_test.cc",
"peerconnection/rtc_sctp_transport_test.cc",
"peerconnection/transceiver_state_surfacer_test.cc",
"peerconnection/webrtc_media_stream_track_adapter_map_test.cc",
"peerconnection/webrtc_media_stream_track_adapter_test.cc",
"picture_in_picture/picture_in_picture_controller_test.cc",
......
......@@ -127,6 +127,7 @@ blink_modules_sources("peerconnection") {
"rtc_void_request_promise_impl.h",
"rtc_void_request_script_promise_resolver_impl.cc",
"rtc_void_request_script_promise_resolver_impl.h",
"transceiver_state_surfacer.cc",
"web_rtc_stats_report_callback_resolver.cc",
"web_rtc_stats_report_callback_resolver.h",
"webrtc_media_stream_track_adapter.cc",
......
......@@ -2,13 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/media/webrtc/transceiver_state_surfacer.h"
#include "third_party/blink/public/web/modules/peerconnection/transceiver_state_surfacer.h"
#include "third_party/blink/public/platform/modules/peerconnection/webrtc_util.h"
#include "third_party/webrtc/api/rtp_transceiver_interface.h"
#include "third_party/webrtc/api/sctp_transport_interface.h"
namespace content {
namespace blink {
TransceiverStateSurfacer::TransceiverStateSurfacer(
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
......@@ -237,4 +237,4 @@ void SurfaceReceiverStateOnly::Stop() {
NOTIMPLEMENTED();
}
} // namespace content
} // namespace blink
......@@ -2,18 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/media/webrtc/transceiver_state_surfacer.h"
#include "third_party/blink/public/web/modules/peerconnection/transceiver_state_surfacer.h"
#include <memory>
#include <tuple>
#include "base/bind.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_refptr.h"
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/synchronization/waitable_event.h"
#include "base/test/task_environment.h"
#include "content/child/child_process.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/modules/mediastream/media_stream_audio_source.h"
#include "third_party/blink/public/platform/modules/peerconnection/webrtc_util.h"
......@@ -28,7 +26,10 @@
using testing::AnyNumber;
using testing::Return;
namespace content {
namespace blink {
// To avoid name collision on jumbo builds.
namespace transceiver_state_surfacer_test {
class MockSctpTransport : public webrtc::SctpTransportInterface {
public:
......@@ -271,8 +272,6 @@ class TransceiverStateSurfacerTest : public ::testing::Test {
run_loop->Quit();
}
base::test::TaskEnvironment task_environment_;
protected:
scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
std::unique_ptr<blink::MockPeerConnectionDependencyFactory>
......@@ -385,4 +384,5 @@ TEST_F(TransceiverStateSurfacerTest, SurfaceTransceiverWithSctpTransport) {
ObtainStatesAndExpectInitialized(webrtc_transceiver);
}
} // namespace content
} // namespace transceiver_state_surfacer_test
} // namespace blink
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