xref: /aosp_15_r20/external/webrtc/pc/peer_connection_message_handler.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright 2020 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "pc/peer_connection_message_handler.h"
12 
13 #include <utility>
14 
15 #include "api/jsep.h"
16 #include "api/legacy_stats_types.h"
17 #include "api/media_stream_interface.h"
18 #include "api/peer_connection_interface.h"
19 #include "api/scoped_refptr.h"
20 #include "api/sequence_checker.h"
21 #include "api/task_queue/pending_task_safety_flag.h"
22 #include "pc/legacy_stats_collector_interface.h"
23 #include "rtc_base/checks.h"
24 
25 namespace webrtc {
26 namespace {
27 
28 template <typename T>
WrapScoped(T * ptr)29 rtc::scoped_refptr<T> WrapScoped(T* ptr) {
30   return rtc::scoped_refptr<T>(ptr);
31 }
32 
33 }  // namespace
34 
PostSetSessionDescriptionSuccess(SetSessionDescriptionObserver * observer)35 void PeerConnectionMessageHandler::PostSetSessionDescriptionSuccess(
36     SetSessionDescriptionObserver* observer) {
37   signaling_thread_->PostTask(
38       SafeTask(safety_.flag(),
39                [observer = WrapScoped(observer)] { observer->OnSuccess(); }));
40 }
41 
PostSetSessionDescriptionFailure(SetSessionDescriptionObserver * observer,RTCError && error)42 void PeerConnectionMessageHandler::PostSetSessionDescriptionFailure(
43     SetSessionDescriptionObserver* observer,
44     RTCError&& error) {
45   RTC_DCHECK(!error.ok());
46   signaling_thread_->PostTask(SafeTask(
47       safety_.flag(),
48       [observer = WrapScoped(observer), error = std::move(error)]() mutable {
49         observer->OnFailure(std::move(error));
50       }));
51 }
52 
PostCreateSessionDescriptionFailure(CreateSessionDescriptionObserver * observer,RTCError error)53 void PeerConnectionMessageHandler::PostCreateSessionDescriptionFailure(
54     CreateSessionDescriptionObserver* observer,
55     RTCError error) {
56   RTC_DCHECK(!error.ok());
57   // Do not protect this task with the safety_.flag() to ensure
58   // observer is invoked even if the PeerConnection is destroyed early.
59   signaling_thread_->PostTask(
60       [observer = WrapScoped(observer), error = std::move(error)]() mutable {
61         observer->OnFailure(std::move(error));
62       });
63 }
64 
PostGetStats(StatsObserver * observer,LegacyStatsCollectorInterface * legacy_stats,MediaStreamTrackInterface * track)65 void PeerConnectionMessageHandler::PostGetStats(
66     StatsObserver* observer,
67     LegacyStatsCollectorInterface* legacy_stats,
68     MediaStreamTrackInterface* track) {
69   signaling_thread_->PostTask(
70       SafeTask(safety_.flag(), [observer = WrapScoped(observer), legacy_stats,
71                                 track = WrapScoped(track)] {
72         StatsReports reports;
73         legacy_stats->GetStats(track.get(), &reports);
74         observer->OnComplete(reports);
75       }));
76 }
77 
RequestUsagePatternReport(std::function<void ()> func,int delay_ms)78 void PeerConnectionMessageHandler::RequestUsagePatternReport(
79     std::function<void()> func,
80     int delay_ms) {
81   signaling_thread_->PostDelayedTask(SafeTask(safety_.flag(), std::move(func)),
82                                      TimeDelta::Millis(delay_ms));
83 }
84 
85 }  // namespace webrtc
86