media: Support MojoAudioDecoder.

Details:
- Support mojo audio decoder in gn args.
- Add DecoderFactory to help create external decoders.
- Add MojoDecoderFactory that can create MojoAudioDecoder.
- When mojo audio decoder is enabled, enable MojoDecoderFactory.

In the next CL we'll add mojo audio decoder interface and services.
We'll also add real implementation of MojoAudioDecoder.

To test this on Desktop, set the following gn arguments:

enable_mojo_media = true
mojo_media_services = [ "audio_decoder" ]

Then in DecoderSelector, manually disable DecryptingAudioDecoder and
DecryptingDemuxerStream. Now try to play an encrypted audio,
MojoAudioDecoder should be selected. But it'll fail immediately in the
first Decode() call.

BUG=542910
TEST=See above.

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

Cr-Commit-Position: refs/heads/master@{#376878}
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 05beb6d..bf873ed 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -93,6 +93,7 @@
 
 namespace media {
 class CdmFactory;
+class DecoderFactory;
 class MediaPermission;
 class MediaServiceProvider;
 class RendererWebMediaPlayerDelegate;
@@ -949,6 +950,7 @@
 #endif
 
   media::CdmFactory* GetCdmFactory();
+  media::DecoderFactory* GetDecoderFactory();
 
   void RegisterMojoServices();
 
@@ -1126,8 +1128,9 @@
   RendererCdmManager* cdm_manager_;
 #endif
 
-  // The CDM factory attached to this frame, lazily initialized.
+  // The CDM and decoder factory attached to this frame, lazily initialized.
   scoped_ptr<media::CdmFactory> cdm_factory_;
+  scoped_ptr<media::DecoderFactory> decoder_factory_;
 
   // Media resource cache, lazily initialized.
   linked_ptr<media::UrlIndex> url_index_;