This was broken because of the async hop introduced by should_dismiss. Change that API to instead be syncronous, and require that implementors (of which there is only one) to call dismiss again if they want to.