Both WEBPImageDecoder and PNGImageDecoder only report frames for which we have received all the data, except for the first frame. This is because the client (i.e. BitmapImage) never wants to show a frame after the first unless it's complete.
Showing a partial frame that depends on another frame would result in tearing, where we display the top part of the new frame and the bottom part of the old frame.
If GIFImageDecoder only reported complete frames, this would match the other multi-frame decoders and potentially provide the opportunity to simplify BitmapImage (which would now know that all frames reported were received).
(I think there's still an opportunity to show torn frames though; see issue 745819.)
Comment 1 by cblume@chromium.org
, Jul 18 2017