Fire a state change event when clearing DtlsTransport

This will happen in normal operation when the PeerConnection is closed.
If it is already in the Closed state, do not fire an event.

Bug: chromium:907849
Change-Id: Icc7eaf487a287ed494d881b877a9b4e97b2a44b8
Reviewed-on: https://webrtc-review.googlesource.com/c/116485
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26167}
This commit is contained in:
Harald Alvestrand 2019-01-08 18:08:04 +01:00 committed by Commit Bot
parent 8bacf255d2
commit cdc3045973
2 changed files with 28 additions and 1 deletions

View File

@ -77,7 +77,15 @@ void DtlsTransport::UnregisterObserver() {
// Internal functions
void DtlsTransport::Clear() {
RTC_DCHECK(signaling_thread_->IsCurrent());
internal_dtls_transport_.reset();
RTC_DCHECK(internal());
if (internal()->dtls_state() != cricket::DTLS_TRANSPORT_CLOSED) {
internal_dtls_transport_.reset();
if (observer_) {
observer_->OnStateChange(Information());
}
} else {
internal_dtls_transport_.reset();
}
}
void DtlsTransport::OnInternalDtlsState(

View File

@ -35,6 +35,14 @@ class TestDtlsTransportObserver : public DtlsTransportObserverInterface {
void OnError(RTCError error) override {}
DtlsTransportState state() {
if (states_.size() > 0) {
return states_[states_.size() - 1];
} else {
return DtlsTransportState::kNew;
}
}
bool state_change_called_ = false;
std::vector<DtlsTransportState> states_;
};
@ -94,4 +102,15 @@ TEST_F(DtlsTransportTest, EventsObservedWhenConnecting) {
DtlsTransportState::kConnected));
}
TEST_F(DtlsTransportTest, CloseWhenClearing) {
CreateTransport();
transport()->RegisterObserver(observer());
CompleteDtlsHandshake();
ASSERT_TRUE_WAIT(observer_.state() == DtlsTransportState::kConnected,
kDefaultTimeout);
transport()->Clear();
ASSERT_TRUE_WAIT(observer_.state() == DtlsTransportState::kClosed,
kDefaultTimeout);
}
} // namespace webrtc