Convert offscreen canvas to use FrameSinkManagerHost.

This CL switches the content/browser/ part of offscreen canvas to use
FrameSinkManagerHost instead of directly accessing SurfaceMananger.

OffscreenCanvasProvider(Impl) exists for the renderer to request other
interfaces from the browser. The renderer uses it create both a
OffscreenCanvasSurface and MojoCompositorFrameSink. This is a
simplification of OffscreenCanvasCompositorFrameSinkProvider and
OffscreenCanvasSurfaceFactory interfaces.

RenderProcessHostImpl creates a single OffscreenCanvasProviderImpl on
demand and uses it for all offscreen canvas requests from the renderer.

The renderer will first request a OffscreenCanvasSurface and specify the
FrameSinkId. This always happens from the main renderer thread. A
OffscreenCanvasSurfaceImpl will be created for the browser side of this
connection.

The renderer will then likely request MojoCompositorFrameSink for the
FrameSinkId, from either the main thread or a worker thread. This
request is forwarded to MojoFrameSinkManager. This sets up two
connections. There is a MojoCompositorFrameSink from
MojoFrameSinkManager to the renderer. This is used to submit
CompositorFrames. There is MojoCompositorFrameSinkPrivate from
OffscreenCanvasSurfaceImpl to MojoFrameSinkManager. This gives the
browser control over the CompositorFrameSink created in
MojoFrameSinkManager.

The render can close the OffscreenCanvasSurface and
MojoCompositorFrameSink connections in any order. The assumption is they
will both be closed at approximately the same time.

The remaining direct access to SurfaceManager by offscreen canvas code
is blocked on other features being completed.

BUG=664547,686861
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_site_isolation

Review-Url: https://codereview.chromium.org/2789753002
Cr-Commit-Position: refs/heads/master@{#464381}
19 files changed