Enable Android SurfaceView fullscreen video with WMPI

This CL enables SurfaceView fullscreen video with the unified media pipeline
in cases where we use the AVDA deferred rendering strategy today.

* There's a new media interface called SurfaceManager with two methods:
  CreateFullscreenSurface() and NaturalSizeChanged().
* SurfaceManager is implemented by RendererSurfaceViewManager, which is a
  RenderFrameObserver, and BrowserSurfaceViewManager, which is created for
  each RenderFrame by MediaWebContentsObserverAndroid.
* BrowserSurfaceViewManager creates a ContentVideoView in response to a
  CreateFullscreenSurface message, and registers it in a surface map that the
  decoder can look up in the GPU process.
* WMPI interacts with SurfaceManager on behalf of the decoder. It passes
  GpuVideoDecoder a callback for requesting surfaces which it calls before
  initializing VDAs.
* In response to the callback, if the player is in fullscreen WMPI will pass
  the request to the SurfaceManager which will return the surface id to GVD. If
  the player is not in fullscreen WMPI will return a null surface id.
* When GVD gets a surface id back it completes its initialization by calling
  VDA::Initialize with the surface id and the VDA will render to the given
  surface.
* WMPI records that it got a surface request callback so that it knows that
  future fullscreen transitions will require a restart of the decoder in order
  to switch surfaces.
* A future CL will allow us to switch the surface dynamically without
  requiring a restart.

BUG=533630

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

Cr-Commit-Position: refs/heads/master@{#376068}
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 5c80884..09e743a 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -96,6 +96,7 @@
 class MediaPermission;
 class MediaServiceProvider;
 class RendererWebMediaPlayerDelegate;
+class SurfaceManager;
 class UrlIndex;
 class WebEncryptedMediaClientImpl;
 }
@@ -133,6 +134,7 @@
 class RendererMediaPlayerManager;
 class RendererMediaSessionManager;
 class RendererPpapiHost;
+class RendererSurfaceViewManager;
 class RenderFrameObserver;
 class RenderViewImpl;
 class RenderWidget;
@@ -1113,6 +1115,8 @@
   RendererMediaSessionManager* media_session_manager_;
 #endif
 
+  media::SurfaceManager* media_surface_manager_;
+
 #if defined(ENABLE_BROWSER_CDMS)
   // Manage all CDMs in this render frame for communicating with the real CDM in
   // the browser process. It's okay to use a raw pointer since it's a