Ensure the Mac app_list's initial NSCollectionView layouts obey frameForItemAtIndex:

AppKit's NSCollectionView will delay layout of items it contains until
the view is visible on screen and needs a display. The Mac App Launcher
populates collection views for all pages when created, leading to some
pages having their layout delayed. Sometimes, the first display (and
subsequent layout) is triggered during a scroll animation provided by an
NSScrollView.

In these cases, I've traced down AppKit attempting to set the frame of
the collection items to a non-integral origin. Furthermore, it's an
NSRect that differs from the view's self-reported -[NSCollectionView
frameForItemAtIndex:] from when the item cell was first created. These
non-integer coordinates lead to drawing and animation glitches because
the grid items are no longer properly pixel-aligned.

This CL intercepts the -[NSView setFrame:] call that NSCollectionView
attempts in its sometimes-delayed layout, and ensures that it matches
the value that would be given by [NSCollectionView frameForItemAtIndex:]
when no animations are running. We need to provide our own
implementation of frameForItemAtIndex because the grid view can create
new views when dragging items between pages, which can also be triggered
during a scroll animation.

BUG=329454

Review URL: https://codereview.chromium.org/116183004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@243075 0039d316-1c4b-4281-b951-d872f2087c98
SVN changes up to revision 243075