canDrop is synchronous. It currently checks that we don't drop a container inside itself or a descendant container and to do that it has to walk the container hierarchy by doing main-thread I/O. Collecting the information on drag start is also not possible, because dragstart is a synchronous operation where we must synchronously fill the dataTransfer (there's some ongoing work to make this async but no ETA).
we could keep an up-to-date bookmarks hierarchy in a memory cache. The main issue would be a synchronous request before the cache has been populated, for which we could retain a synchronous fallback, or throw and let the consumer take the more pessimistic fallback.
You need to log in before you can comment on or make changes to this bug.