A tab can get out of sync with its underlying WebContents because some updates to the WebContentsImpl don't get sent out as notifications/delegate calls/observer calls. Previously the BrowserTabStripController would poll the WebContentsImpl at every frame of the animation, but I removed that in 896032108c97ec8e014f5b221af not realizing its importance.
The noticeable symptom of this bug is that the transition from "waiting" to "loading" may not be reflected right away when the state change comes from WebContentsImpl::UpdateTitle(). It wouldn't switch the direction of the throbber until the next LoadStateChanged().
Comment 1 by bugdroid1@chromium.org
, Aug 7 2017