The Wayland protocol documentation does not define when wl_data_source::cancelled events will be sent. They are only sent for the selection data source, and never for drag sources, but the documentation does not provide any indication of this. Failure to heed this leads to issues like bug #91943.
"- The data source has been replaced by another data source. - The drag-and-drop operation was performed, but the drop destination did not accept any of the mimetypes offered through wl_data_source.target. - The drag-and-drop operation was performed, but the drop destination did not select any of the actions present in the mask offered through wl_data_source.action. - The drag-and-drop operation was performed but didn't happen over a surface. - The compositor cancelled the drag-and-drop operation (e.g. compositor dependent timeouts to avoid stale drag-and-drop transfers)."