files/en-us/web/api/rtcpeerconnection/icegatheringstatechange_event/index.md
{{APIRef("WebRTC")}}
The icegatheringstatechange event is sent to the onicegatheringstatechange event handler on an {{domxref("RTCPeerConnection")}} when the state of the {{Glossary("ICE")}} candidate gathering process changes.
This signifies that the value of the connection's {{domxref("RTCPeerConnection.iceGatheringState", "iceGatheringState")}} property has changed.
When ICE first starts to gather connection candidates, the value changes from new to gathering to indicate that the process of collecting candidate configurations for the connection has begun. When the value changes to complete, all of the transports that make up the RTCPeerConnection have finished gathering ICE candidates.
[!NOTE] While you can determine that ICE candidate gathering is complete by watching for
icegatheringstatechangeevents and checking for the value of {{domxref("RTCPeerConnection.iceGatheringState", "iceGatheringState")}} to becomecomplete, you can also have your handler for the {{domxref("RTCPeerConnection.icecandidate_event", "icecandidate")}} event look to see if its {{domxref("RTCPeerConnectionIceEvent.candidate", "candidate")}} property isnull. This also indicates that collection of candidates is finished.
This event is not cancelable and does not bubble.
Use the event name in methods like {{domxref("EventTarget.addEventListener", "addEventListener()")}}, or set an event handler property.
addEventListener("icegatheringstatechange", (event) => { })
onicegatheringstatechange = (event) => { }
A generic {{domxref("Event")}}.
This example creates a handler for icegatheringstatechange events.
pc.onicegatheringstatechange = (ev) => {
let connection = ev.target;
switch (connection.iceGatheringState) {
case "gathering":
/* collection of candidates has begun */
break;
case "complete":
/* collection of candidates is finished */
break;
}
};
Likewise, you can use {{domxref("EventTarget.addEventListener", "addEventListener()")}} to add a listener for icegatheringstatechange events:
pc.addEventListener("icegatheringstatechange", (ev) => {
let connection = ev.target;
switch (connection.iceGatheringState) {
case "gathering":
// collection of candidates has begun
break;
case "complete":
// collection of candidates is finished
break;
}
});
{{Specifications}}
{{Compat}}