The flow is something like:
1. NTP Created
2. TileGroup Created
3. MostVisitedData received (callback) -> Tiles built and rendered
4. Large icon fetch completes (callback) -> Tile data updated and rerender
3 and 4 are asynchronous and the way we build tiles makes us keep the views while we discard the model. Rendering is based on the data the view keep internally, so if 3 happens a second time before 4, the fetched large icons are applied on the new instances of our tile model while the render is based on the old model, that doesn't have the large icons. And then we can't render it.
Comment 1 by tschumann@chromium.org
, Feb 21 2017