mash: Support ShelfModel access in Chrome.

Sync ShelfModels between ShelfController and ChromeLauncherController.
(allows synchronous access to ShelfModel/ShelfItem in Ash and Chrome)
This brings us much closer to a functional Shelf in Mash.
Implements step (2Bd) of my Mash Shelf Model and Control plan:
  docs.google.com/document/d/1wD0W2VKAEyeslXxc4L-QpOxZlIyaSZ74oSMndmrF120

Extend ShelfController interface to support ShelfModel modifications.
Extend ShelfObserver interface to report ShelfModel modifications.

Add/restore old ash::ShelfModelObserver::ShelfItemDelegateChanged.
Make mojom::ShelfItem::image optional (for tests and async load).
Make ShelfController and ChromeLauncherController observe and sync.
Avoid cyclically reporting remote changes with a flag.

Add RemoteShelfItemDelegate; to delegate between Ash and Chrome.
(allows ShelfModel to own/use ash::ShelfItemDelegate instances)
Add a binding and helper function on ash::ShelfItemDelegate.

Remove Mash's workaround code in ShelfWindowWatcher.
Remove unused/deprecated ash::mojom::ShelfController functions.

Add AppList item in model ctor and its delegate in controller ctor.
(avoids item ordering problems on init, Ash owns item delegate)

Add missing type mapping for ash::ShelfID and ash.mojom.ShelfID.
Add a stream output operator for ShelfID testing/logging.

Change chromeos::GetAshConfig to support --mash and --mus flags.
(This allows unit_tests to run in simulated mus/mash configs).

Add and update shelf controller, model, and CLC tests.
Replace a CLC panel test with ShelfWindowWatcherTest.ItemIcon.

TODO: Fix context menus, AppList's PinToShelf, etc.
TODO: Ensure that windows like QuickLaunch get shelf items.

BUG=557406
TEST=No Chrome OS changes; mash shelf shows pinned items, etc.
[email protected],[email protected],[email protected],

Review-Url: https://codereview.chromium.org/2833173002
Cr-Commit-Position: refs/heads/master@{#476166}
31 files changed