Make PeerConnectionInteface methods pure virtual. Bug: none Change-Id: I64fc23f5159bc6a5cd83c0b00b292641f4976513 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/340143 Commit-Queue: Per Kjellander <perkj@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41782}
diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h index 38699ec..ca6baac 100644 --- a/api/peer_connection_interface.h +++ b/api/peer_connection_interface.h
@@ -1003,8 +1003,6 @@ // for negotiation and subsequent CreateOffer() calls will act as if // RTCOfferAnswerOptions::ice_restart is true. // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-restartice - // TODO(hbos): Remove default implementation when downstream projects - // implement this. virtual void RestartIce() = 0; // Create a new offer. @@ -1075,9 +1073,7 @@ // sure that even if there was a delay (e.g. due to a PostTask) between the // event being generated and the time of firing, the Operations Chain is empty // and the event is still valid to be fired. - virtual bool ShouldFireNegotiationNeededEvent(uint32_t event_id) { - return true; - } + virtual bool ShouldFireNegotiationNeededEvent(uint32_t event_id) = 0; virtual PeerConnectionInterface::RTCConfiguration GetConfiguration() = 0; @@ -1139,7 +1135,7 @@ // Estimation starts when the first RTP packet is sent. // Estimation will be restarted if already started. virtual void ReconfigureBandwidthEstimation( - const BandwidthEstimationSettings& settings) {} + const BandwidthEstimationSettings& settings) = 0; // Enable/disable playout of received audio streams. Enabled by default. Note // that even if playout is enabled, streams will only be played out if the @@ -1147,12 +1143,12 @@ // playout of the underlying audio device but starts a task which will poll // for audio data every 10ms to ensure that audio processing happens and the // audio statistics are updated. - virtual void SetAudioPlayout(bool playout) {} + virtual void SetAudioPlayout(bool playout) = 0; // Enable/disable recording of transmitted audio streams. Enabled by default. // Note that even if recording is enabled, streams will only be recorded if // the appropriate SDP is also applied. - virtual void SetAudioRecording(bool recording) {} + virtual void SetAudioRecording(bool recording) = 0; // Looks up the DtlsTransport associated with a MID value. // In the Javascript API, DtlsTransport is a property of a sender, but @@ -1184,28 +1180,25 @@ // Returns the current state of canTrickleIceCandidates per // https://w3c.github.io/webrtc-pc/#attributes-1 - virtual absl::optional<bool> can_trickle_ice_candidates() { - // TODO(crbug.com/708484): Remove default implementation. - return absl::nullopt; - } + virtual absl::optional<bool> can_trickle_ice_candidates() = 0; // When a resource is overused, the PeerConnection will try to reduce the load // on the sysem, for example by reducing the resolution or frame rate of // encoded streams. The Resource API allows injecting platform-specific usage // measurements. The conditions to trigger kOveruse or kUnderuse are up to the // implementation. - // TODO(hbos): Make pure virtual when implemented by downstream projects. - virtual void AddAdaptationResource(rtc::scoped_refptr<Resource> resource) {} + virtual void AddAdaptationResource(rtc::scoped_refptr<Resource> resource) = 0; // Start RtcEventLog using an existing output-sink. Takes ownership of - // `output` and passes it on to Call, which will take the ownership. If the - // operation fails the output will be closed and deallocated. The event log - // will send serialized events to the output object every `output_period_ms`. - // Applications using the event log should generally make their own trade-off - // regarding the output period. A long period is generally more efficient, - // with potential drawbacks being more bursty thread usage, and more events - // lost in case the application crashes. If the `output_period_ms` argument is - // omitted, webrtc selects a default deemed to be workable in most cases. + // `output` and passes it on to Call, which will take the ownership. If + // the operation fails the output will be closed and deallocated. The + // event log will send serialized events to the output object every + // `output_period_ms`. Applications using the event log should generally + // make their own trade-off regarding the output period. A long period is + // generally more efficient, with potential drawbacks being more bursty + // thread usage, and more events lost in case the application crashes. If + // the `output_period_ms` argument is omitted, webrtc selects a default + // deemed to be workable in most cases. virtual bool StartRtcEventLog(std::unique_ptr<RtcEventLogOutput> output, int64_t output_period_ms) = 0; virtual bool StartRtcEventLog(std::unique_ptr<RtcEventLogOutput> output) = 0; @@ -1226,8 +1219,7 @@ // // Also the only thread on which it's safe to use SessionDescriptionInterface // pointers. - // TODO(deadbeef): Make pure virtual when all subclasses implement it. - virtual rtc::Thread* signaling_thread() const { return nullptr; } + virtual rtc::Thread* signaling_thread() const = 0; protected: // Dtor protected as objects shouldn't be deleted via this interface.
diff --git a/api/test/mock_peerconnectioninterface.h b/api/test/mock_peerconnectioninterface.h index 22a77d7..814d1b1 100644 --- a/api/test/mock_peerconnectioninterface.h +++ b/api/test/mock_peerconnectioninterface.h
@@ -160,6 +160,10 @@ (std::unique_ptr<SessionDescriptionInterface>, rtc::scoped_refptr<SetRemoteDescriptionObserverInterface>), (override)); + MOCK_METHOD(bool, + ShouldFireNegotiationNeededEvent, + (uint32_t event_id), + (override)); MOCK_METHOD(PeerConnectionInterface::RTCConfiguration, GetConfiguration, (), @@ -195,6 +199,10 @@ (override)); MOCK_METHOD(PeerConnectionState, peer_connection_state, (), (override)); MOCK_METHOD(IceGatheringState, ice_gathering_state, (), (override)); + MOCK_METHOD(void, + AddAdaptationResource, + (rtc::scoped_refptr<Resource>), + (override)); MOCK_METHOD(absl::optional<bool>, can_trickle_ice_candidates, (), (override)); MOCK_METHOD(bool, StartRtcEventLog, @@ -206,6 +214,7 @@ (override)); MOCK_METHOD(void, StopRtcEventLog, (), (override)); MOCK_METHOD(void, Close, (), (override)); + MOCK_METHOD(rtc::Thread*, signaling_thread, (), (const override)); }; static_assert(
diff --git a/pc/test/fake_peer_connection_base.h b/pc/test/fake_peer_connection_base.h index 9e4ed6d..8422f0b 100644 --- a/pc/test/fake_peer_connection_base.h +++ b/pc/test/fake_peer_connection_base.h
@@ -177,6 +177,8 @@ rtc::scoped_refptr<SetRemoteDescriptionObserverInterface> observer) override {} + bool ShouldFireNegotiationNeededEvent(uint32_t event_id) { return true; } + RTCConfiguration GetConfiguration() override { return RTCConfiguration(); } RTCError SetConfiguration( @@ -229,6 +231,8 @@ absl::optional<bool> can_trickle_ice_candidates() { return absl::nullopt; } + void AddAdaptationResource(rtc::scoped_refptr<Resource> resource) {} + bool StartRtcEventLog(std::unique_ptr<RtcEventLogOutput> output, int64_t output_period_ms) override { return false;
diff --git a/pc/test/mock_peer_connection_internal.h b/pc/test/mock_peer_connection_internal.h index b5f47cc..e586008 100644 --- a/pc/test/mock_peer_connection_internal.h +++ b/pc/test/mock_peer_connection_internal.h
@@ -153,6 +153,10 @@ (std::unique_ptr<SessionDescriptionInterface>, rtc::scoped_refptr<SetRemoteDescriptionObserverInterface>), (override)); + MOCK_METHOD(bool, + ShouldFireNegotiationNeededEvent, + (uint32_t event_id), + (override)); MOCK_METHOD(PeerConnectionInterface::RTCConfiguration, GetConfiguration, (), @@ -192,6 +196,10 @@ (override)); MOCK_METHOD(PeerConnectionState, peer_connection_state, (), (override)); MOCK_METHOD(IceGatheringState, ice_gathering_state, (), (override)); + MOCK_METHOD(void, + AddAdaptationResource, + (rtc::scoped_refptr<Resource>), + (override)); MOCK_METHOD(absl::optional<bool>, can_trickle_ice_candidates, (), (override)); MOCK_METHOD(bool, StartRtcEventLog,