Update //media to unconditionally support mp3 and mp4

Update mime parsing, eme, and unit tests to unconditionally expect support
for MP4 and MP3. Proprietary codecs in MP4 (e.g. H264) are still guarded by
the proprietary_codecs GN flag.

Also, return "probably" for <video>.canPlayType('video/ogg; codecs="vp8"')
VP8 in Ogg has been supported for a while, we just aren't making the right
claims from the API.

Bug: 327115,746579
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: Ib05468150a1b39a6bae25d4219f827b5b542e839
Reviewed-on: https://chromium-review.googlesource.com/745529
Commit-Queue: Chrome Cunningham <chcunningham@chromium.org>
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#522918}
diff --git a/content/browser/media/media_canplaytype_browsertest.cc b/content/browser/media/media_canplaytype_browsertest.cc
index 15bd97d..db8a7fe 100644
--- a/content/browser/media/media_canplaytype_browsertest.cc
+++ b/content/browser/media/media_canplaytype_browsertest.cc
@@ -324,10 +324,6 @@
     EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"1\"'"));
     EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"theora, 1\"'"));
 
-    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8\"'"));
-    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8.0\"'"));
-    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8, opus\"'"));
-    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8, vorbis\"'"));
     EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp08\"'"));
     EXPECT_EQ(kNot,
               CanPlay("'" + mime + "; codecs=\"vp08.00.01.08.02.01.01.00\"'"));
@@ -599,7 +595,7 @@
   // by default. This test needs to be merged into the existing mp4 and webm
   // before release as well. http://crbug.com/784607
   EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"av1\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"av1\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'video/mp4; codecs=\"av1\"'"));
 }
 #endif  // BUILDFLAG(ENABLE_AV1_DECODER)
 
@@ -676,6 +672,10 @@
             CanPlay("'video/ogg; codecs=\"theora, vorbis\"'"));
   EXPECT_EQ(kOggVideoProbably,
             CanPlay("'video/ogg; codecs=\"flac, opus, vorbis\"'"));
+  EXPECT_EQ(kOggVideoProbably, CanPlay("'video/ogg; codecs=\"vp8\"'"));
+  EXPECT_EQ(kOggVideoProbably, CanPlay("'video/ogg; codecs=\"vp8.0\"'"));
+  EXPECT_EQ(kOggVideoProbably, CanPlay("'video/ogg; codecs=\"vp8, opus\"'"));
+  EXPECT_EQ(kOggVideoProbably, CanPlay("'video/ogg; codecs=\"vp8, vorbis\"'"));
 
   TestOGGUnacceptableCombinations("video/ogg");
 
@@ -714,8 +714,8 @@
   EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"flac\"'"));
 
   // See CodecSupportTest_mp4 for more flac combos.
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"flac\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"flac\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mp4; codecs=\"flac\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'video/mp4; codecs=\"flac\"'"));
 
   EXPECT_EQ(kNot, CanPlay("'video/flac'"));
   EXPECT_EQ(kNot, CanPlay("'video/x-flac'"));
@@ -744,11 +744,11 @@
   EXPECT_EQ(kNot, CanPlay("'video/x-mp3'"));
 
   // audio/mpeg without a codecs parameter (RFC 3003 compliant)
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mpeg'"));
 
   // audio/mpeg with mp3 in codecs parameter. (Not RFC compliant, but
   // very common in the wild so it is a defacto standard).
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'"));
 
   EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'"));
   EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'"));
@@ -760,8 +760,8 @@
   EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.67\"'"));
   EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.68\"'"));
   // The next two results are wrong due to https://crbug.com/592889.
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp4a.69\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp4a.6B\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mpeg; codecs=\"mp4a.69\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mpeg; codecs=\"mp4a.6B\"'"));
   EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'"));
   EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.02\"'"));
 
@@ -770,7 +770,7 @@
   TestMPEGUnacceptableCombinations("audio/mpeg");
 
   // audio/mp3 does not allow any codecs parameter
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mp3'"));
 
   EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'"));
   EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'"));
@@ -792,7 +792,7 @@
   EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp3\"'"));
 
   // audio/x-mp3 does not allow any codecs parameter
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/x-mp3'"));
 
   EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'"));
   EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'"));
@@ -815,7 +815,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
-  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'"));
+  EXPECT_EQ(kMaybe, CanPlay("'video/mp4'"));
 
   EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'"));
   EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3\"'"));
@@ -838,8 +838,8 @@
   EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.66\"'"));
   EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.67\"'"));
   EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.68\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.69\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.6B\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'video/mp4; codecs=\"mp4a.69\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'video/mp4; codecs=\"mp4a.6B\"'"));
 
   EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.40.2\"'"));
   EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.40.02\"'"));
@@ -890,8 +890,8 @@
   EXPECT_EQ(kHevcSupported,
             CanPlay("'video/mp4; codecs=\"hvc1.1.6.L93.B0, mp4a.40.5\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"vp09.00.10.08\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"flac\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'video/mp4; codecs=\"vp09.00.10.08\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'video/mp4; codecs=\"flac\"'"));
   EXPECT_EQ(kPropProbably,
             CanPlay("'video/mp4; codecs=\"avc1.4D401E, flac\"'"));
   EXPECT_EQ(kPropProbably,
@@ -899,7 +899,7 @@
 
   TestMPEGUnacceptableCombinations("video/mp4");
   // This result is incorrect. See https://crbug.com/592889.
-  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp3\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'video/mp4; codecs=\"mp3\"'"));
 
   EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v'"));
 
@@ -973,12 +973,12 @@
 
   TestMPEGUnacceptableCombinations("video/x-m4v");
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4'"));
+  EXPECT_EQ(kMaybe, CanPlay("'audio/mp4'"));
   EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.66\"'"));
   EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.67\"'"));
   EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.68\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'"));
 
   EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'"));
   EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'"));
@@ -987,7 +987,7 @@
   EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'"));
   EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"flac\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mp4; codecs=\"flac\"'"));
 
   EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1\"'"));
   EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3\"'"));
@@ -1013,7 +1013,7 @@
 
   TestMPEGUnacceptableCombinations("audio/mp4");
   // This result is incorrect. See https://crbug.com/592889.
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp3\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mp4; codecs=\"mp3\"'"));
 
   EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a'"));
 
@@ -1366,10 +1366,10 @@
   EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.67\"'"));
   EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.68\"'"));
   // MP3.
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'"));
   EXPECT_EQ(kNot,          CanPlay("'audio/mp4; codecs=\"mp4a.6A\"'"));
   // MP3.
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'"));
+  EXPECT_EQ(kProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'"));
   EXPECT_EQ(kNot,          CanPlay("'audio/mp4; codecs=\"mp4a.6b\"'"));
   EXPECT_EQ(kNot,          CanPlay("'audio/mp4; codecs=\"mp4a.6C\"'"));
   EXPECT_EQ(kNot,          CanPlay("'audio/mp4; codecs=\"mp4a.6D\"'"));
@@ -1540,16 +1540,11 @@
 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_NewVp9Variants) {
   const std::string kSupportedMimeTypes[] = {"video/webm", "video/mp4"};
   for (const auto& mime_type : kSupportedMimeTypes) {
-    // MP4 support is conditional on supporting proprietary codecs.
-    const char* kTestProbably = kProbably;
-    if (base::EndsWith(mime_type, "mp4", base::CompareCase::SENSITIVE))
-      kTestProbably = kPropProbably;
-
 // Profile 2 and 3 support is currently disabled on ARM and MIPS.
 #if defined(ARCH_CPU_ARM_FAMILY) || defined(ARCH_CPU_MIPS_FAMILY)
     const char* kVP9Profile2And3Probably = kNot;
 #else
-    const char* kVP9Profile2And3Probably = kTestProbably;
+    const char* kVP9Profile2And3Probably = kProbably;
 #endif
 
     // E.g. "'video/webm; "
@@ -1559,15 +1554,15 @@
     EXPECT_EQ(kNot, CanPlay(prefix + "codecs=\"vp09.00.-1.08\"'"));
 
     // Test a few valid strings.
-    EXPECT_EQ(kTestProbably, CanPlay(prefix + "codecs=\"vp09.00.10.08\"'"));
-    EXPECT_EQ(kTestProbably,
+    EXPECT_EQ(kProbably, CanPlay(prefix + "codecs=\"vp09.00.10.08\"'"));
+    EXPECT_EQ(kProbably,
               CanPlay(prefix + "codecs=\"vp09.00.10.08.00.01.01.01.00\"'"));
-    EXPECT_EQ(kTestProbably,
+    EXPECT_EQ(kProbably,
               CanPlay(prefix + "codecs=\"vp09.00.10.08.01.02.02.02.00\"'"));
 
     // Profiles 0 and 1 are always supported supported. Profiles 2 and 3 are
     // only supported on certain architectures.
-    EXPECT_EQ(kTestProbably, CanPlay(prefix + "codecs=\"vp09.01.10.08\"'"));
+    EXPECT_EQ(kProbably, CanPlay(prefix + "codecs=\"vp09.01.10.08\"'"));
     EXPECT_EQ(kVP9Profile2And3Probably,
               CanPlay(prefix + "codecs=\"vp09.02.10.08\"'"));
     EXPECT_EQ(kVP9Profile2And3Probably,
diff --git a/content/browser/media/media_capabilities_browsertest.cc b/content/browser/media/media_capabilities_browsertest.cc
index e8084e8..3c3e816 100644
--- a/content/browser/media/media_capabilities_browsertest.cc
+++ b/content/browser/media/media_capabilities_browsertest.cc
@@ -133,6 +133,11 @@
       kSupported,
       CanDecodeVideo(config_type, "'video/webm; codecs=\"vp09.00.10.08\"'"));
 
+  // VP09 is available in MP4 container irrespective of USE_PROPRIETARY_CODECS.
+  EXPECT_EQ(
+      kSupported,
+      CanDecodeVideo(config_type, "'video/mp4; codecs=\"vp09.00.10.08\"'"));
+
   // Supported when built with USE_PROPRIETARY_CODECS
   EXPECT_EQ(kPropSupported,
             CanDecodeVideo(config_type, "'video/mp4; codecs=\"avc1.42E01E\"'"));
@@ -142,9 +147,6 @@
             CanDecodeVideo(config_type, "'video/mp4; codecs=\"avc1.42701E\"'"));
   EXPECT_EQ(kPropSupported,
             CanDecodeVideo(config_type, "'video/mp4; codecs=\"avc1.42F01E\"'"));
-  EXPECT_EQ(
-      kPropSupported,
-      CanDecodeVideo(config_type, "'video/mp4; codecs=\"vp09.00.10.08\"'"));
 
   // Test a handful of invalid strings.
   EXPECT_EQ(kUnsupported,
@@ -172,14 +174,14 @@
             CanDecodeAudio(config_type, "'audio/webm; codecs=\"opus\"'"));
   EXPECT_EQ(kSupported,
             CanDecodeAudio(config_type, "'audio/webm; codecs=\"vorbis\"'"));
+  EXPECT_EQ(kSupported,
+            CanDecodeAudio(config_type, "'audio/mp4; codecs=\"flac\"'"));
+  EXPECT_EQ(kSupported, CanDecodeAudio(config_type, "'audio/mpeg'"));
 
   // Supported when built with USE_PROPRIETARY_CODECS
   EXPECT_EQ(kPropSupported,
             CanDecodeAudio(config_type, "'audio/mp4; codecs=\"mp4a.40.02\"'"));
   EXPECT_EQ(kPropSupported, CanDecodeAudio(config_type, "'audio/aac'"));
-  EXPECT_EQ(kPropSupported,
-            CanDecodeAudio(config_type, "'audio/mp4; codecs=\"flac\"'"));
-  EXPECT_EQ(kPropSupported, CanDecodeAudio(config_type, "'audio/mpeg'"));
 
   // Test a handful of invalid strings.
   EXPECT_EQ(kUnsupported,
@@ -219,7 +221,7 @@
             CanDecodeAudio(config_type, "'audio/ogg; codecs=\"opus\"'"));
 
   // MP3 is only supported via audio/mpeg for MSE.
-  EXPECT_EQ(prop_type_supported,
+  EXPECT_EQ(type_supported,
             CanDecodeAudio(config_type, "'audio/mp4; codecs=\"mp4a.69\"'"));
 
   // Ogg not supported in MSE.
diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
index 850b909d5..9c929b21 100644
--- a/media/base/mime_util_internal.cc
+++ b/media/base/mime_util_internal.cc
@@ -261,7 +261,7 @@
   const CodecSet ogg_audio_codecs{FLAC, OPUS, VORBIS};
 
 #if !defined(OS_ANDROID)
-  CodecSet ogg_video_codecs{THEORA};
+  CodecSet ogg_video_codecs{THEORA, VP8};
 #else
   CodecSet ogg_video_codecs;
 #endif  // !defined(OS_ANDROID)
@@ -279,32 +279,38 @@
   CodecSet webm_codecs(webm_audio_codecs);
   webm_codecs.insert(webm_video_codecs.begin(), webm_video_codecs.end());
 
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
   const CodecSet mp3_codecs{MP3};
+
+  CodecSet mp4_audio_codecs;
+  mp4_audio_codecs.emplace(MP3);
+  mp4_audio_codecs.emplace(FLAC);
+
+  // Only VP9 with valid codec string vp09.xx.xx.xx.xx.xx.xx.xx is supported.
+  // See ParseVp9CodecID for details.
+  CodecSet mp4_video_codecs;
+  mp4_video_codecs.emplace(VP9);
+
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
   const CodecSet aac{MPEG2_AAC, MPEG4_AAC};
+  mp4_audio_codecs.insert(aac.begin(), aac.end());
 
   CodecSet avc_and_aac(aac);
   avc_and_aac.emplace(H264);
 
-  CodecSet mp4_audio_codecs(aac);
-  mp4_audio_codecs.emplace(MP3);
-  mp4_audio_codecs.emplace(FLAC);
 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
   mp4_audio_codecs.emplace(AC3);
   mp4_audio_codecs.emplace(EAC3);
 #endif  // BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
 
-  CodecSet mp4_video_codecs;
   mp4_video_codecs.emplace(H264);
 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
   mp4_video_codecs.emplace(HEVC);
 #endif  // BUILDFLAG(ENABLE_HEVC_DEMUXING)
-  // Only VP9 with valid codec string vp09.xx.xx.xx.xx.xx.xx.xx is supported.
-  // See ParseVp9CodecID for details.
-  mp4_video_codecs.emplace(VP9);
+
 #if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
   mp4_video_codecs.emplace(DOLBY_VISION);
 #endif  // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 #if BUILDFLAG(ENABLE_AV1_DECODER)
   if (base::FeatureList::IsEnabled(kAv1Decoder))
     mp4_video_codecs.emplace(AV1);
@@ -312,7 +318,6 @@
 
   CodecSet mp4_codecs(mp4_audio_codecs);
   mp4_codecs.insert(mp4_video_codecs.begin(), mp4_video_codecs.end());
-#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
   const CodecSet implicit_codec;
   AddContainerWithCodecs("audio/wav", wav_codecs, false);
@@ -328,15 +333,15 @@
   // TODO(ddorwin): Should the application type support Opus?
   AddContainerWithCodecs("application/ogg", ogg_codecs, false);
   AddContainerWithCodecs("audio/flac", implicit_codec, false);
+  AddContainerWithCodecs("audio/mpeg", mp3_codecs, false);  // Allow "mp3".
+  AddContainerWithCodecs("audio/mp3", implicit_codec, false);
+  AddContainerWithCodecs("audio/x-mp3", implicit_codec, false);
+  AddContainerWithCodecs("audio/mp4", mp4_audio_codecs, false);
+  DCHECK(!mp4_video_codecs.empty());
+  AddContainerWithCodecs("video/mp4", mp4_codecs, false);
 
 #if BUILDFLAG(USE_PROPRIETARY_CODECS)
-  AddContainerWithCodecs("audio/mpeg", mp3_codecs, true);  // Allow "mp3".
-  AddContainerWithCodecs("audio/mp3", implicit_codec, true);
-  AddContainerWithCodecs("audio/x-mp3", implicit_codec, true);
   AddContainerWithCodecs("audio/aac", implicit_codec, true);  // AAC / ADTS.
-  AddContainerWithCodecs("audio/mp4", mp4_audio_codecs, true);
-  DCHECK(!mp4_video_codecs.empty());
-  AddContainerWithCodecs("video/mp4", mp4_codecs, true);
   // These strings are supported for backwards compatibility only and thus only
   // support the codecs needed for compatibility.
   AddContainerWithCodecs("audio/x-m4a", aac, true);
@@ -516,6 +521,19 @@
 void MimeUtil::RemoveProprietaryMediaTypesAndCodecs() {
   for (const auto& container : proprietary_media_containers_)
     media_format_map_.erase(container);
+
+  // TODO(chcunningham): Delete this hack (really this whole test-only method).
+  // This is done as short term workaround for LayoutTests to pass. MP4 is no
+  // longer proprietary, but may still contain proprietary codecs (e.g. AVC).
+  // Many  layout tests only check for container support and may break (absent
+  // this  hack) if run on a non-proprietary build. This mess is being fixed in
+  // https://chromium-review.googlesource.com/c/chromium/src/+/807604
+  media_format_map_.erase("video/mp4");
+  media_format_map_.erase("audio/mp4");
+  media_format_map_.erase("audio/mpeg");
+  media_format_map_.erase("audio/mp3");
+  media_format_map_.erase("audio/x-mp3");
+
   allow_proprietary_codecs_ = false;
 }
 
@@ -970,7 +988,6 @@
     case INVALID_CODEC:
     case AC3:
     case EAC3:
-    case MP3:
     case MPEG2_AAC:
     case MPEG4_AAC:
     case H264:
@@ -978,6 +995,7 @@
     case DOLBY_VISION:
       return true;
 
+    case MP3:
     case PCM:
     case VORBIS:
     case OPUS:
diff --git a/media/base/mime_util_unittest.cc b/media/base/mime_util_unittest.cc
index a358d0a..e541c9c 100644
--- a/media/base/mime_util_unittest.cc
+++ b/media/base/mime_util_unittest.cc
@@ -172,32 +172,26 @@
       "application/vnd.apple.mpegurl"));
   EXPECT_EQ(kHlsSupported, IsSupportedMediaMimeType("audio/mpegurl"));
   EXPECT_EQ(kHlsSupported, IsSupportedMediaMimeType("audio/x-mpegurl"));
-
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
   EXPECT_TRUE(IsSupportedMediaMimeType("audio/mp4"));
-  EXPECT_TRUE(IsSupportedMediaMimeType("audio/x-m4a"));
-  EXPECT_TRUE(IsSupportedMediaMimeType("video/mp4"));
-  EXPECT_TRUE(IsSupportedMediaMimeType("video/x-m4v"));
-
   EXPECT_TRUE(IsSupportedMediaMimeType("audio/mp3"));
   EXPECT_TRUE(IsSupportedMediaMimeType("audio/x-mp3"));
   EXPECT_TRUE(IsSupportedMediaMimeType("audio/mpeg"));
+  EXPECT_TRUE(IsSupportedMediaMimeType("video/mp4"));
+
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+  EXPECT_TRUE(IsSupportedMediaMimeType("audio/x-m4a"));
+  EXPECT_TRUE(IsSupportedMediaMimeType("video/x-m4v"));
   EXPECT_TRUE(IsSupportedMediaMimeType("audio/aac"));
 
 #if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER)
   EXPECT_TRUE(IsSupportedMediaMimeType("video/mp2t"));
 #else
   EXPECT_FALSE(IsSupportedMediaMimeType("video/mp2t"));
-#endif
-#else
-  EXPECT_FALSE(IsSupportedMediaMimeType("audio/mp4"));
-  EXPECT_FALSE(IsSupportedMediaMimeType("audio/x-m4a"));
-  EXPECT_FALSE(IsSupportedMediaMimeType("video/mp4"));
-  EXPECT_FALSE(IsSupportedMediaMimeType("video/x-m4v"));
+#endif  // BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER)
 
-  EXPECT_FALSE(IsSupportedMediaMimeType("audio/mp3"));
-  EXPECT_FALSE(IsSupportedMediaMimeType("audio/x-mp3"));
-  EXPECT_FALSE(IsSupportedMediaMimeType("audio/mpeg"));
+#else
+  EXPECT_FALSE(IsSupportedMediaMimeType("audio/x-m4a"));
+  EXPECT_FALSE(IsSupportedMediaMimeType("video/x-m4v"));
   EXPECT_FALSE(IsSupportedMediaMimeType("audio/aac"));
 #endif  // USE_PROPRIETARY_CODECS
   EXPECT_FALSE(IsSupportedMediaMimeType("video/mp3"));
@@ -328,11 +322,9 @@
     EXPECT_EQ(kCodecAAC, out_codec);
   }
 
-  // Valid FLAC string when proprietary codecs are supported. FLAC-in-MP4
-  // currently requires proprietary codecs to demux mp4.
-  EXPECT_EQ(kUsePropCodecs,
-            ParseAudioCodecString("audio/mp4", "flac", &out_is_ambiguous,
-                                  &out_codec));
+  // Valid FLAC string with MP4. Neither decoding nor demuxing is proprietary.
+  EXPECT_TRUE(ParseAudioCodecString("audio/mp4", "flac", &out_is_ambiguous,
+                                    &out_codec));
   if (kUsePropCodecs) {
     EXPECT_FALSE(out_is_ambiguous);
     EXPECT_EQ(kCodecFLAC, out_codec);
diff --git a/media/base/test_helpers.h b/media/base/test_helpers.h
index 3df27b11..99940f4 100644
--- a/media/base/test_helpers.h
+++ b/media/base/test_helpers.h
@@ -241,6 +241,11 @@
          CONTAINS_STRING(arg, ", which is after the frame's PTS");
 }
 
+MATCHER_P2(CodecUnsupportedInContainer, codec, container, "") {
+  return CONTAINS_STRING(arg, std::string(codec) + "' is not supported for '" +
+                                  std::string(container));
+}
+
 MATCHER_P(FoundStream, stream_type_string, "") {
   return CONTAINS_STRING(
       arg, "found_" + std::string(stream_type_string) + "_stream\":true");
diff --git a/media/cdm/BUILD.gn b/media/cdm/BUILD.gn
index de39dee0..ddb8b07c 100644
--- a/media/cdm/BUILD.gn
+++ b/media/cdm/BUILD.gn
@@ -28,6 +28,8 @@
   sources = [
     "aes_decryptor.cc",
     "aes_decryptor.h",
+    "cenc_utils.cc",
+    "cenc_utils.h",
     "default_cdm_factory.cc",
     "default_cdm_factory.h",
     "json_web_key.cc",
@@ -49,13 +51,6 @@
 
   configs += [ "//media:subcomponent_config" ]
 
-  if (proprietary_codecs) {
-    sources += [
-      "cenc_utils.cc",
-      "cenc_utils.h",
-    ]
-  }
-
   if (enable_library_cdms) {
     deps += [
       ":cdm_api",
diff --git a/media/cdm/aes_decryptor.cc b/media/cdm/aes_decryptor.cc
index 067563c1..a4ff4e5 100644
--- a/media/cdm/aes_decryptor.cc
+++ b/media/cdm/aes_decryptor.cc
@@ -24,13 +24,10 @@
 #include "media/base/limits.h"
 #include "media/base/video_decoder_config.h"
 #include "media/base/video_frame.h"
+#include "media/cdm/cenc_utils.h"
 #include "media/cdm/json_web_key.h"
 #include "media/media_features.h"
 
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
-#include "media/cdm/cenc_utils.h"
-#endif
-
 namespace media {
 
 namespace {
@@ -319,7 +316,6 @@
       keys.push_back(init_data);
       break;
     case EmeInitDataType::CENC:
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
       // |init_data| is a set of 0 or more concatenated 'pssh' boxes.
       if (!GetKeyIdsForCommonSystemId(init_data, &keys)) {
         promise->reject(CdmPromise::Exception::NOT_SUPPORTED_ERROR, 0,
@@ -327,11 +323,6 @@
         return;
       }
       break;
-#else
-      promise->reject(CdmPromise::Exception::NOT_SUPPORTED_ERROR, 0,
-                      "Initialization data type CENC is not supported.");
-      return;
-#endif
     case EmeInitDataType::KEYIDS: {
       std::string init_data_string(init_data.begin(), init_data.end());
       std::string error_message;
diff --git a/media/cdm/aes_decryptor_unittest.cc b/media/cdm/aes_decryptor_unittest.cc
index d89a432..39b30f7 100644
--- a/media/cdm/aes_decryptor_unittest.cc
+++ b/media/cdm/aes_decryptor_unittest.cc
@@ -591,18 +591,11 @@
       0x00, 0x00, 0x00, 0x00  // datasize
   };
 
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
   EXPECT_CALL(cdm_client_, OnSessionMessage(NotEmpty(), _, IsJSONDictionary()));
   cdm_->CreateSessionAndGenerateRequest(
       CdmSessionType::TEMPORARY_SESSION, EmeInitDataType::CENC,
       std::vector<uint8_t>(init_data, init_data + arraysize(init_data)),
       CreateSessionPromise(RESOLVED));
-#else
-  cdm_->CreateSessionAndGenerateRequest(
-      CdmSessionType::TEMPORARY_SESSION, EmeInitDataType::CENC,
-      std::vector<uint8_t>(init_data, init_data + arraysize(init_data)),
-      CreateSessionPromise(REJECTED));
-#endif
 }
 
 TEST_P(AesDecryptorTest, CreateSessionWithKeyIdsInitData) {
diff --git a/media/cdm/cdm_adapter_unittest.cc b/media/cdm/cdm_adapter_unittest.cc
index 29771df7..c70fc59 100644
--- a/media/cdm/cdm_adapter_unittest.cc
+++ b/media/cdm/cdm_adapter_unittest.cc
@@ -295,11 +295,7 @@
 
   std::vector<uint8_t> key_id(kKeyIdAsPssh,
                               kKeyIdAsPssh + arraysize(kKeyIdAsPssh));
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
   CreateSessionAndExpect(EmeInitDataType::CENC, key_id, SUCCESS);
-#else
-  CreateSessionAndExpect(EmeInitDataType::CENC, key_id, FAILURE);
-#endif
 }
 
 TEST_F(CdmAdapterTest, CreateSessionWithBadData) {
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc
index e6b14732..01de632 100644
--- a/media/filters/chunk_demuxer_unittest.cc
+++ b/media/filters/chunk_demuxer_unittest.cc
@@ -3104,13 +3104,17 @@
   ChunkDemuxer::Status expected = ChunkDemuxer::kNotSupported;
 
 #if BUILDFLAG(USE_PROPRIETARY_CODECS)
+
 #if defined(OS_ANDROID)
   if (HasPlatformDecoderSupport())
     expected = ChunkDemuxer::kOk;
 #else
   expected = ChunkDemuxer::kOk;
-#endif
-#endif
+#endif  // defined(OS_ANDROID)
+
+#else
+  EXPECT_MEDIA_LOG(CodecUnsupportedInContainer("avc1.4D4041", "video/mp4"));
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
   EXPECT_EQ(AddId("source_id", "video/mp4", "avc1.4D4041"), expected);
 }
@@ -3120,9 +3124,6 @@
 TEST_P(ChunkDemuxerTest, CodecIDsThatAreNotRFC6381Compliant) {
   ChunkDemuxer::Status expected = ChunkDemuxer::kNotSupported;
 
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
-  expected = ChunkDemuxer::kOk;
-#endif
   const char* codec_ids[] = {
     // GPAC places leading zeros on the audio object type.
     "mp4a.40.02",
@@ -3130,6 +3131,12 @@
   };
 
   for (size_t i = 0; i < arraysize(codec_ids); ++i) {
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+    expected = ChunkDemuxer::kOk;
+#else
+    EXPECT_MEDIA_LOG(CodecUnsupportedInContainer(codec_ids[i], "audio/mp4"));
+#endif
+
     ChunkDemuxer::Status result = AddId("source_id", "audio/mp4", codec_ids[i]);
 
     EXPECT_EQ(result, expected)
@@ -4876,11 +4883,7 @@
 }
 
 TEST_P(ChunkDemuxerTest, Mp4Vp9CodecSupport) {
-  ChunkDemuxer::Status expected = ChunkDemuxer::kNotSupported;
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
-  expected = ChunkDemuxer::kOk;
-#endif
-
+  ChunkDemuxer::Status expected = ChunkDemuxer::kOk;
   EXPECT_EQ(AddId("source_id", "video/mp4", "vp09.00.10.08"), expected);
 }
 
diff --git a/media/filters/stream_parser_factory.cc b/media/filters/stream_parser_factory.cc
index 2effed7..c958632 100644
--- a/media/filters/stream_parser_factory.cc
+++ b/media/filters/stream_parser_factory.cc
@@ -16,6 +16,7 @@
 #include "build/build_config.h"
 #include "media/base/media.h"
 #include "media/base/media_switches.h"
+#include "media/formats/mp4/mp4_stream_parser.h"
 #include "media/formats/mpeg/adts_stream_parser.h"
 #include "media/formats/mpeg/mpeg1_audio_stream_parser.h"
 #include "media/formats/webm/webm_stream_parser.h"
@@ -27,11 +28,10 @@
 #endif
 
 #if BUILDFLAG(USE_PROPRIETARY_CODECS)
+#include "media/formats/mp4/es_descriptor.h"
 #if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER)
 #include "media/formats/mp2t/mp2t_stream_parser.h"
 #endif
-#include "media/formats/mp4/es_descriptor.h"
-#include "media/formats/mp4/mp4_stream_parser.h"
 #endif
 
 namespace media {
@@ -113,16 +113,6 @@
 }
 
 #if BUILDFLAG(USE_PROPRIETARY_CODECS)
-bool CheckIfMseFlacInIsobmffEnabled(const std::string& codec_id,
-                                    MediaLog* media_log) {
-  return base::FeatureList::IsEnabled(kMseFlacInIsobmff);
-}
-
-// AAC Object Type IDs that Chrome supports.
-static const int kAACLCObjectType = 2;
-static const int kAACSBRObjectType = 5;
-static const int kAACPSObjectType = 29;
-
 static int GetMP4AudioObjectType(const std::string& codec_id,
                                  MediaLog* media_log) {
   // From RFC 6381 section 3.3 (ISO Base Media File Format Name Space):
@@ -147,6 +137,11 @@
   return -1;
 }
 
+// AAC Object Type IDs that Chrome supports.
+static const int kAACLCObjectType = 2;
+static const int kAACSBRObjectType = 5;
+static const int kAACPSObjectType = 29;
+
 bool ValidateMP4ACodecID(const std::string& codec_id, MediaLog* media_log) {
   int audio_object_type = GetMP4AudioObjectType(codec_id, media_log);
   if (audio_object_type == kAACLCObjectType ||
@@ -165,12 +160,13 @@
     "avc1.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_H264};
 static const CodecInfo kH264AVC3CodecInfo = {
     "avc3.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_H264};
+
 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
 static const CodecInfo kHEVCHEV1CodecInfo = {
     "hev1.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_HEVC};
 static const CodecInfo kHEVCHVC1CodecInfo = {
     "hvc1.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_HEVC};
-#endif
+#endif  // BUILDFLAG(ENABLE_HEVC_DEMUXING)
 #if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
 static const CodecInfo kDolbyVisionAVCCodecInfo1 = {
     "dva1.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_DOLBYVISION};
@@ -181,18 +177,13 @@
     "dvh1.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_DOLBYVISION};
 static const CodecInfo kDolbyVisionHEVCCodecInfo2 = {
     "dvhe.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_DOLBYVISION};
-#endif
-#endif
-static const CodecInfo kMPEG4VP09CodecInfo = {
-    "vp09.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_VP9};
+#endif  // BUILDFLAG(ENABLE_HEVC_DEMUXING)
+#endif  // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
 static const CodecInfo kMPEG4AACCodecInfo = {"mp4a.40.*", CodecInfo::AUDIO,
                                              &ValidateMP4ACodecID,
                                              CodecInfo::HISTOGRAM_MPEG4AAC};
 static const CodecInfo kMPEG2AACLCCodecInfo = {
     "mp4a.67", CodecInfo::AUDIO, nullptr, CodecInfo::HISTOGRAM_MPEG2AAC};
-static const CodecInfo kMPEG4FLACCodecInfo = {"flac", CodecInfo::AUDIO,
-                                              &CheckIfMseFlacInIsobmffEnabled,
-                                              CodecInfo::HISTOGRAM_FLAC};
 
 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
 // The 'ac-3' and 'ec-3' are mime codec ids for AC3 and EAC3 according to
@@ -213,9 +204,34 @@
                                           CodecInfo::HISTOGRAM_EAC3};
 static const CodecInfo kEAC3CodecInfo3 = {"mp4a.A6", CodecInfo::AUDIO, nullptr,
                                           CodecInfo::HISTOGRAM_EAC3};
-#endif
+#endif  // BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
 
-static const CodecInfo* const kVideoMP4Codecs[] = {&kH264AVC1CodecInfo,
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
+
+static const CodecInfo kMP3CodecInfo = {nullptr, CodecInfo::AUDIO, nullptr,
+                                        CodecInfo::HISTOGRAM_MP3};
+static const CodecInfo* const kAudioMP3Codecs[] = {&kMP3CodecInfo, nullptr};
+
+static StreamParser* BuildMP3Parser(const std::vector<std::string>& codecs,
+                                    MediaLog* media_log) {
+  return new MPEG1AudioStreamParser();
+}
+
+bool CheckIfMseFlacInIsobmffEnabled(const std::string& codec_id,
+                                    MediaLog* media_log) {
+  return base::FeatureList::IsEnabled(kMseFlacInIsobmff);
+}
+
+static const CodecInfo kMPEG4VP09CodecInfo = {
+    "vp09.*", CodecInfo::VIDEO, nullptr, CodecInfo::HISTOGRAM_VP9};
+static const CodecInfo kMPEG4FLACCodecInfo = {"flac", CodecInfo::AUDIO,
+                                              &CheckIfMseFlacInIsobmffEnabled,
+                                              CodecInfo::HISTOGRAM_FLAC};
+
+static const CodecInfo* const kVideoMP4Codecs[] = {&kMPEG4FLACCodecInfo,
+                                                   &kMPEG4VP09CodecInfo,
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+                                                   &kH264AVC1CodecInfo,
                                                    &kH264AVC3CodecInfo,
 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
                                                    &kHEVCHEV1CodecInfo,
@@ -229,18 +245,19 @@
                                                    &kDolbyVisionHEVCCodecInfo2,
 #endif
 #endif
-                                                   &kMPEG4VP09CodecInfo,
                                                    &kMPEG4AACCodecInfo,
                                                    &kMPEG2AACLCCodecInfo,
-                                                   &kMPEG4FLACCodecInfo,
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 #if BUILDFLAG(ENABLE_AV1_DECODER)
                                                    &kAV1CodecInfo,
 #endif
                                                    nullptr};
 
-static const CodecInfo* const kAudioMP4Codecs[] = {&kMPEG4AACCodecInfo,
+static const CodecInfo* const kAudioMP4Codecs[] = {&kMPEG4FLACCodecInfo,
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+                                                   &kMPEG4AACCodecInfo,
                                                    &kMPEG2AACLCCodecInfo,
-                                                   &kMPEG4FLACCodecInfo,
+
 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
                                                    &kAC3CodecInfo1,
                                                    &kAC3CodecInfo2,
@@ -248,7 +265,8 @@
                                                    &kEAC3CodecInfo1,
                                                    &kEAC3CodecInfo2,
                                                    &kEAC3CodecInfo3,
-#endif
+#endif  // BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
                                                    nullptr};
 
 static StreamParser* BuildMP4Parser(const std::vector<std::string>& codecs,
@@ -266,7 +284,10 @@
 
   for (size_t i = 0; i < codecs.size(); ++i) {
     std::string codec_id = codecs[i];
-    if (base::MatchPattern(codec_id, kMPEG2AACLCCodecInfo.pattern)) {
+    if (base::MatchPattern(codec_id, kMPEG4FLACCodecInfo.pattern)) {
+      has_flac = true;
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+    } else if (base::MatchPattern(codec_id, kMPEG2AACLCCodecInfo.pattern)) {
       audio_object_types.insert(mp4::kISO_13818_7_AAC_LC);
     } else if (base::MatchPattern(codec_id, kMPEG4AACCodecInfo.pattern)) {
       int audio_object_type = GetMP4AudioObjectType(codec_id, media_log);
@@ -279,8 +300,6 @@
         has_sbr = true;
         break;
       }
-    } else if (base::MatchPattern(codec_id, kMPEG4FLACCodecInfo.pattern)) {
-      has_flac = true;
 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
     } else if (base::MatchPattern(codec_id, kAC3CodecInfo1.pattern) ||
                base::MatchPattern(codec_id, kAC3CodecInfo2.pattern) ||
@@ -290,23 +309,14 @@
                base::MatchPattern(codec_id, kEAC3CodecInfo2.pattern) ||
                base::MatchPattern(codec_id, kEAC3CodecInfo3.pattern)) {
       audio_object_types.insert(mp4::kEAC3);
-#endif
+#endif  // BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
     }
   }
 
   return new mp4::MP4StreamParser(audio_object_types, has_sbr, has_flac);
 }
-
-static const CodecInfo kMP3CodecInfo = {nullptr, CodecInfo::AUDIO, nullptr,
-                                        CodecInfo::HISTOGRAM_MP3};
-
-static const CodecInfo* const kAudioMP3Codecs[] = {&kMP3CodecInfo, nullptr};
-
-static StreamParser* BuildMP3Parser(const std::vector<std::string>& codecs,
-                                    MediaLog* media_log) {
-  return new MPEG1AudioStreamParser();
-}
-
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
 static const CodecInfo kADTSCodecInfo = {nullptr, CodecInfo::AUDIO, nullptr,
                                          CodecInfo::HISTOGRAM_MPEG4AAC};
 static const CodecInfo* const kAudioADTSCodecs[] = {&kADTSCodecInfo, nullptr};
@@ -351,17 +361,18 @@
 
   return new media::mp2t::Mp2tStreamParser(has_sbr);
 }
-#endif
-#endif
+#endif  // ENABLE_MSE_MPEG2TS_STREAM_PARSER
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
 static const SupportedTypeInfo kSupportedTypeInfo[] = {
     {"video/webm", &BuildWebMParser, kVideoWebMCodecs},
     {"audio/webm", &BuildWebMParser, kAudioWebMCodecs},
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
-    {"audio/aac", &BuildADTSParser, kAudioADTSCodecs},
     {"audio/mpeg", &BuildMP3Parser, kAudioMP3Codecs},
+    // NOTE: Including proprietary MP4 codecs is gated by build flags above.
     {"video/mp4", &BuildMP4Parser, kVideoMP4Codecs},
     {"audio/mp4", &BuildMP4Parser, kAudioMP4Codecs},
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+    {"audio/aac", &BuildADTSParser, kAudioADTSCodecs},
 #if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER)
     {"video/mp2t", &BuildMP2TParser, kVideoMP2TCodecs},
 #endif
diff --git a/media/formats/BUILD.gn b/media/formats/BUILD.gn
index 27254557..c38fa3e 100644
--- a/media/formats/BUILD.gn
+++ b/media/formats/BUILD.gn
@@ -20,6 +20,25 @@
     "ac3/ac3_util.h",
     "common/offset_byte_queue.cc",
     "common/offset_byte_queue.h",
+    "mp4/box_definitions.cc",
+    "mp4/box_definitions.h",
+    "mp4/box_reader.cc",
+    "mp4/box_reader.h",
+    "mp4/es_descriptor.cc",
+    "mp4/es_descriptor.h",
+    "mp4/fourccs.h",
+    "mp4/mp4_stream_parser.cc",
+    "mp4/mp4_stream_parser.h",
+    "mp4/parse_result.h",
+    "mp4/rcheck.h",
+    "mp4/sample_to_group_iterator.cc",
+    "mp4/sample_to_group_iterator.h",
+    "mp4/track_run_iterator.cc",
+    "mp4/track_run_iterator.h",
+    "mpeg/mpeg1_audio_stream_parser.cc",
+    "mpeg/mpeg1_audio_stream_parser.h",
+    "mpeg/mpeg_audio_stream_parser_base.cc",
+    "mpeg/mpeg_audio_stream_parser_base.h",
     "webm/webm_audio_client.cc",
     "webm/webm_audio_client.h",
     "webm/webm_cluster_parser.cc",
@@ -70,29 +89,10 @@
       "mp4/avc.h",
       "mp4/bitstream_converter.cc",
       "mp4/bitstream_converter.h",
-      "mp4/box_definitions.cc",
-      "mp4/box_definitions.h",
-      "mp4/box_reader.cc",
-      "mp4/box_reader.h",
-      "mp4/es_descriptor.cc",
-      "mp4/es_descriptor.h",
-      "mp4/fourccs.h",
-      "mp4/mp4_stream_parser.cc",
-      "mp4/mp4_stream_parser.h",
-      "mp4/parse_result.h",
-      "mp4/rcheck.h",
-      "mp4/sample_to_group_iterator.cc",
-      "mp4/sample_to_group_iterator.h",
-      "mp4/track_run_iterator.cc",
-      "mp4/track_run_iterator.h",
       "mpeg/adts_constants.cc",
       "mpeg/adts_constants.h",
       "mpeg/adts_stream_parser.cc",
       "mpeg/adts_stream_parser.h",
-      "mpeg/mpeg1_audio_stream_parser.cc",
-      "mpeg/mpeg1_audio_stream_parser.h",
-      "mpeg/mpeg_audio_stream_parser_base.cc",
-      "mpeg/mpeg_audio_stream_parser_base.h",
     ]
   }
 
diff --git a/media/formats/mp4/box_definitions.cc b/media/formats/mp4/box_definitions.cc
index ea6926ca..78c6b2d9 100644
--- a/media/formats/mp4/box_definitions.cc
+++ b/media/formats/mp4/box_definitions.cc
@@ -14,20 +14,23 @@
 #include "media/base/media_switches.h"
 #include "media/base/video_types.h"
 #include "media/base/video_util.h"
-#include "media/formats/mp4/avc.h"
 #include "media/formats/mp4/es_descriptor.h"
 #include "media/formats/mp4/rcheck.h"
 #include "media/media_features.h"
-#include "media/video/h264_parser.h"
 #include "third_party/libaom/av1_features.h"
 
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+#include "media/formats/mp4/avc.h"
+#include "media/video/h264_parser.h"  // nogncheck
+
 #if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
 #include "media/formats/mp4/dolby_vision.h"
-#endif
+#endif  // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
 
 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
 #include "media/formats/mp4/hevc.h"
-#endif
+#endif  // BUILDFLAG(ENABLE_HEVC_DEMUXING)
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
 namespace media {
 namespace mp4 {
@@ -577,6 +580,7 @@
   return true;
 }
 
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
 AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord()
     : version(0),
       profile_indication(0),
@@ -636,6 +640,7 @@
 
   return true;
 }
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
 VPCodecConfigurationRecord::VPCodecConfigurationRecord()
     : profile(VIDEO_CODEC_PROFILE_UNKNOWN) {}
@@ -731,6 +736,7 @@
   const FourCC actual_format =
       format == FOURCC_ENCV ? sinf.format.format : format;
   switch (actual_format) {
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
     case FOURCC_AVC1:
     case FOURCC_AVC3: {
       DVLOG(2) << __func__ << " reading AVCDecoderConfigurationRecord (avcC)";
@@ -813,6 +819,7 @@
     }
 #endif  // BUILDFLAG(ENABLE_HEVC_DEMUXING)
 #endif  // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
     case FOURCC_VP09: {
       DVLOG(2) << __func__ << " parsing VPCodecConfigurationRecord (vpcC)";
       std::unique_ptr<VPCodecConfigurationRecord> vp_config(
@@ -855,6 +862,7 @@
   const FourCC actual_format =
       format == FOURCC_ENCV ? sinf.format.format : format;
   switch (actual_format) {
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
     case FOURCC_AVC1:
     case FOURCC_AVC3:
 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
@@ -869,6 +877,7 @@
     case FOURCC_DVA1:
     case FOURCC_DVAV:
 #endif  // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
     case FOURCC_VP09:
       return true;
 #if BUILDFLAG(ENABLE_AV1_DECODER)
@@ -902,8 +911,13 @@
 
   object_type = es_desc.object_type();
 
-  if (es_desc.IsAAC(object_type))
+  if (es_desc.IsAAC(object_type)) {
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
     RCHECK(aac.Parse(es_desc.decoder_specific_info(), reader->media_log()));
+#else
+    return false;
+#endif
+  }
 
   return true;
 }
diff --git a/media/formats/mp4/box_definitions.h b/media/formats/mp4/box_definitions.h
index 9a0a711c0..62ec5eb 100644
--- a/media/formats/mp4/box_definitions.h
+++ b/media/formats/mp4/box_definitions.h
@@ -210,6 +210,7 @@
   std::string name;
 };
 
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
 struct MEDIA_EXPORT AVCDecoderConfigurationRecord : Box {
   DECLARE_BOX_METHODS(AVCDecoderConfigurationRecord);
 
@@ -235,6 +236,7 @@
  private:
   bool ParseInternal(BufferReader* reader, MediaLog* media_log);
 };
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
 struct MEDIA_EXPORT VPCodecConfigurationRecord : Box {
   DECLARE_BOX_METHODS(VPCodecConfigurationRecord);
@@ -272,7 +274,9 @@
   DECLARE_BOX_METHODS(ElementaryStreamDescriptor);
 
   uint8_t object_type;
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
   AAC aac;
+#endif
 };
 
 struct MEDIA_EXPORT FlacSpecificBox : Box {
diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc
index d93cebc..cb389ad 100644
--- a/media/formats/mp4/mp4_stream_parser.cc
+++ b/media/formats/mp4/mp4_stream_parser.cc
@@ -285,7 +285,6 @@
       if (desc_idx >= samp_descr.audio_entries.size())
         desc_idx = 0;
       const AudioSampleEntry& entry = samp_descr.audio_entries[desc_idx];
-      const AAC& aac = entry.esds.aac;
 
       // For encrypted audio streams entry.format is FOURCC_ENCA and actual
       // format is in entry.sinf.format.format.
@@ -324,6 +323,7 @@
         channel_layout = GuessChannelLayout(entry.channelcount);
         sample_per_second = entry.samplerate;
         extra_data = entry.dfla.stream_info;
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
       } else {
         uint8_t audio_type = entry.esds.object_type;
 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
@@ -346,6 +346,7 @@
         // Check if it is MPEG4 AAC defined in ISO 14496 Part 3 or
         // supported MPEG2 AAC varients.
         if (ESDescriptor::IsAAC(audio_type)) {
+          const AAC& aac = entry.esds.aac;
           codec = kCodecAAC;
           channel_layout = aac.GetChannelLayout(has_sbr_);
           sample_per_second = aac.GetOutputSamplesPerSecond(has_sbr_);
@@ -368,6 +369,7 @@
               << static_cast<int>(audio_type) << " in esds.";
           return false;
         }
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
       }
 
       SampleFormat sample_format;
@@ -596,6 +598,7 @@
   encrypted_media_init_data_cb_.Run(EmeInitDataType::CENC, init_data);
 }
 
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
 bool MP4StreamParser::PrepareAACBuffer(
     const AAC& aac_config,
     std::vector<uint8_t>* frame_buf,
@@ -613,6 +616,7 @@
   }
   return true;
 }
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
 ParseResult MP4StreamParser::EnqueueSample(BufferQueueMap* buffers) {
   DCHECK_EQ(state_, kEmittingSamples);
@@ -732,11 +736,17 @@
   }
 
   if (audio) {
-    if (ESDescriptor::IsAAC(runs_->audio_description().esds.object_type) &&
-        !PrepareAACBuffer(runs_->audio_description().esds.aac,
-                          &frame_buf, &subsamples)) {
-      MEDIA_LOG(ERROR, media_log_) << "Failed to prepare AAC sample for decode";
+    if (ESDescriptor::IsAAC(runs_->audio_description().esds.object_type)) {
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+      if (!PrepareAACBuffer(runs_->audio_description().esds.aac, &frame_buf,
+                            &subsamples)) {
+        MEDIA_LOG(ERROR, media_log_)
+            << "Failed to prepare AAC sample for decode";
+        return ParseResult::kError;
+      }
+#else
       return ParseResult::kError;
+#endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
     }
   }
 
diff --git a/media/formats/mp4/mp4_stream_parser.h b/media/formats/mp4/mp4_stream_parser.h
index ff1d84a..97bdfd6 100644
--- a/media/formats/mp4/mp4_stream_parser.h
+++ b/media/formats/mp4/mp4_stream_parser.h
@@ -20,6 +20,10 @@
 #include "media/formats/mp4/parse_result.h"
 #include "media/formats/mp4/track_run_iterator.h"
 
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+#include "media/formats/mp4/aac.h"
+#endif
+
 namespace media {
 namespace mp4 {
 
@@ -73,9 +77,11 @@
   void ChangeState(State new_state);
 
   bool EmitConfigs();
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
   bool PrepareAACBuffer(const AAC& aac_config,
                         std::vector<uint8_t>* frame_buf,
                         std::vector<SubsampleEntry>* subsamples) const;
+#endif
   ParseResult EnqueueSample(BufferQueueMap* buffers);
   bool SendAndFlushSamples(BufferQueueMap* buffers);
 
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc
index ec89f78..9f7d1846 100644
--- a/media/test/pipeline_integration_test.cc
+++ b/media/test/pipeline_integration_test.cc
@@ -114,24 +114,24 @@
 const char kAudioOnlyWebM[] = "video/webm; codecs=\"vorbis\"";
 const char kOpusAudioOnlyWebM[] = "video/webm; codecs=\"opus\"";
 const char kVideoOnlyWebM[] = "video/webm; codecs=\"vp8\"";
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
-const char kADTS[] = "audio/aac";
-const char kMP4[] = "video/mp4; codecs=\"avc1.4D4041,mp4a.40.2\"";
-const char kMP4VideoAVC3[] = "video/mp4; codecs=\"avc3.64001f\"";
 const char kMP4VideoVP9[] =
     "video/mp4; codecs=\"vp09.00.10.08.01.02.02.02.00\"";
-const char kMP4VideoHEVC1[] = "video/mp4; codecs=\"hvc1.1.6.L93.B0\"";
-const char kMP4VideoHEVC2[] = "video/mp4; codecs=\"hev1.1.6.L93.B0\"";
-const char kMP4Video[] = "video/mp4; codecs=\"avc1.4D4041\"";
-const char kMP4Audio[] = "audio/mp4; codecs=\"mp4a.40.2\"";
 const char kMP4AudioFlac[] = "audio/mp4; codecs=\"flac\"";
 const char kMP3[] = "audio/mpeg";
-const char kMP2AudioSBR[] = "video/mp2t; codecs=\"avc1.4D4041,mp4a.40.5\"";
 #if BUILDFLAG(ENABLE_AV1_DECODER)
 // TODO(dalecurtis): This is not the correct final string. Fix before enabling
 // by default. http://crbug.com/784607
 const char kMP4AV1[] = "video/mp4; codecs=\"av1\"";
 #endif  // BUILDFLAG(ENABLE_AV1_DECODER)
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+const char kADTS[] = "audio/aac";
+const char kMP4[] = "video/mp4; codecs=\"avc1.4D4041,mp4a.40.2\"";
+const char kMP4VideoAVC3[] = "video/mp4; codecs=\"avc3.64001f\"";
+const char kMP4VideoHEVC1[] = "video/mp4; codecs=\"hvc1.1.6.L93.B0\"";
+const char kMP4VideoHEVC2[] = "video/mp4; codecs=\"hev1.1.6.L93.B0\"";
+const char kMP4Video[] = "video/mp4; codecs=\"avc1.4D4041\"";
+const char kMP4Audio[] = "audio/mp4; codecs=\"mp4a.40.2\"";
+const char kMP2AudioSBR[] = "video/mp2t; codecs=\"avc1.4D4041,mp4a.40.5\"";
 #endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
 // Constants for the Media Source config change tests.
@@ -1537,31 +1537,6 @@
 }
 #endif
 
-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
-
-TEST_F(PipelineIntegrationTest, BasicPlaybackHi10P) {
-  ASSERT_EQ(PIPELINE_OK, Start("bear-320x180-hi10p.mp4"));
-
-  Play();
-
-  ASSERT_TRUE(WaitUntilOnEnded());
-}
-
-std::vector<std::unique_ptr<VideoDecoder>> CreateFailingVideoDecoder() {
-  std::vector<std::unique_ptr<VideoDecoder>> failing_video_decoder;
-  failing_video_decoder.push_back(base::MakeUnique<FailingVideoDecoder>());
-  return failing_video_decoder;
-}
-
-TEST_F(PipelineIntegrationTest, BasicFallback) {
-  ASSERT_EQ(PIPELINE_OK,
-            Start("bear.mp4", kNormal, base::Bind(&CreateFailingVideoDecoder)));
-
-  Play();
-
-  ASSERT_TRUE(WaitUntilOnEnded());
-};
-
 #if BUILDFLAG(ENABLE_AV1_DECODER)
 TEST_P(MSEPipelineIntegrationTest, BasicPlayback_AV1_MP4) {
   base::test::ScopedFeatureList scoped_feature_list_;
@@ -1603,55 +1578,6 @@
   EXPECT_HASH_EQ(kSfxLosslessHash, GetAudioHash());
 }
 
-TEST_P(MSEPipelineIntegrationTest, ADTS) {
-  MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile);
-  EXPECT_EQ(PIPELINE_OK,
-            StartPipelineWithMediaSource(&source, kHashed, nullptr));
-  source.EndOfStream();
-
-  EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
-  EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
-  EXPECT_EQ(325, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
-
-  Play();
-
-  EXPECT_TRUE(WaitUntilOnEnded());
-
-  // Verify that nothing was stripped.
-  EXPECT_HASH_EQ("0.46,1.72,4.26,4.57,3.39,1.53,", GetAudioHash());
-}
-
-TEST_P(MSEPipelineIntegrationTest, ADTS_TimestampOffset) {
-  MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile);
-  EXPECT_EQ(PIPELINE_OK,
-            StartPipelineWithMediaSource(&source, kHashed, nullptr));
-  EXPECT_EQ(325, source.last_timestamp_offset().InMilliseconds());
-
-  // Trim off multiple frames off the beginning of the segment which will cause
-  // the first decoded frame to be incorrect if preroll isn't implemented.
-  const base::TimeDelta adts_preroll_duration =
-      base::TimeDelta::FromSecondsD(2.5 * 1024 / 44100);
-  const base::TimeDelta append_time =
-      source.last_timestamp_offset() - adts_preroll_duration;
-
-  scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.adts");
-  source.AppendAtTimeWithWindow(
-      append_time, append_time + adts_preroll_duration, kInfiniteDuration,
-      second_file->data(), second_file->data_size());
-  source.EndOfStream();
-
-  Play();
-  EXPECT_TRUE(WaitUntilOnEnded());
-
-  EXPECT_EQ(592, source.last_timestamp_offset().InMilliseconds());
-  EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
-  EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
-  EXPECT_EQ(592, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
-
-  // Verify preroll is stripped.
-  EXPECT_HASH_EQ("-1.76,-1.35,-0.72,0.70,1.24,0.52,", GetAudioHash());
-}
-
 TEST_F(PipelineIntegrationTest, BasicPlaybackHashed_MP3) {
   ASSERT_EQ(PIPELINE_OK, Start("sfx.mp3", kHashed));
 
@@ -1663,17 +1589,6 @@
   EXPECT_HASH_EQ("1.30,2.72,4.56,5.08,3.74,2.03,", GetAudioHash());
 }
 
-TEST_F(PipelineIntegrationTest, BasicPlaybackHashed_ADTS) {
-  ASSERT_EQ(PIPELINE_OK, Start("sfx.adts", kHashed));
-
-  Play();
-
-  ASSERT_TRUE(WaitUntilOnEnded());
-
-  // Verify codec delay and preroll are stripped.
-  EXPECT_HASH_EQ("1.80,1.66,2.31,3.26,4.46,3.36,", GetAudioHash());
-}
-
 TEST_F(PipelineIntegrationTest, BasicPlaybackHashed_FlacInMp4) {
   ASSERT_EQ(PIPELINE_OK, Start("sfx-flac.mp4", kHashed));
   Play();
@@ -1814,6 +1729,91 @@
   EXPECT_TRUE(WaitUntilOnEnded());
 }
 
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+
+TEST_P(MSEPipelineIntegrationTest, ADTS) {
+  MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile);
+  EXPECT_EQ(PIPELINE_OK,
+            StartPipelineWithMediaSource(&source, kHashed, nullptr));
+  source.EndOfStream();
+
+  EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
+  EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
+  EXPECT_EQ(325, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
+
+  Play();
+
+  EXPECT_TRUE(WaitUntilOnEnded());
+
+  // Verify that nothing was stripped.
+  EXPECT_HASH_EQ("0.46,1.72,4.26,4.57,3.39,1.53,", GetAudioHash());
+}
+
+TEST_P(MSEPipelineIntegrationTest, ADTS_TimestampOffset) {
+  MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile);
+  EXPECT_EQ(PIPELINE_OK,
+            StartPipelineWithMediaSource(&source, kHashed, nullptr));
+  EXPECT_EQ(325, source.last_timestamp_offset().InMilliseconds());
+
+  // Trim off multiple frames off the beginning of the segment which will cause
+  // the first decoded frame to be incorrect if preroll isn't implemented.
+  const base::TimeDelta adts_preroll_duration =
+      base::TimeDelta::FromSecondsD(2.5 * 1024 / 44100);
+  const base::TimeDelta append_time =
+      source.last_timestamp_offset() - adts_preroll_duration;
+
+  scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.adts");
+  source.AppendAtTimeWithWindow(
+      append_time, append_time + adts_preroll_duration, kInfiniteDuration,
+      second_file->data(), second_file->data_size());
+  source.EndOfStream();
+
+  Play();
+  EXPECT_TRUE(WaitUntilOnEnded());
+
+  EXPECT_EQ(592, source.last_timestamp_offset().InMilliseconds());
+  EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
+  EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
+  EXPECT_EQ(592, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
+
+  // Verify preroll is stripped.
+  EXPECT_HASH_EQ("-1.76,-1.35,-0.72,0.70,1.24,0.52,", GetAudioHash());
+}
+
+TEST_F(PipelineIntegrationTest, BasicPlaybackHashed_ADTS) {
+  ASSERT_EQ(PIPELINE_OK, Start("sfx.adts", kHashed));
+
+  Play();
+
+  ASSERT_TRUE(WaitUntilOnEnded());
+
+  // Verify codec delay and preroll are stripped.
+  EXPECT_HASH_EQ("1.80,1.66,2.31,3.26,4.46,3.36,", GetAudioHash());
+}
+
+TEST_F(PipelineIntegrationTest, BasicPlaybackHi10P) {
+  ASSERT_EQ(PIPELINE_OK, Start("bear-320x180-hi10p.mp4"));
+
+  Play();
+
+  ASSERT_TRUE(WaitUntilOnEnded());
+}
+
+std::vector<std::unique_ptr<VideoDecoder>> CreateFailingVideoDecoder() {
+  std::vector<std::unique_ptr<VideoDecoder>> failing_video_decoder;
+  failing_video_decoder.push_back(base::MakeUnique<FailingVideoDecoder>());
+  return failing_video_decoder;
+}
+
+TEST_F(PipelineIntegrationTest, BasicFallback) {
+  ASSERT_EQ(PIPELINE_OK,
+            Start("bear.mp4", kNormal, base::Bind(&CreateFailingVideoDecoder)));
+
+  Play();
+
+  ASSERT_TRUE(WaitUntilOnEnded());
+};
+
 TEST_P(MSEPipelineIntegrationTest, ConfigChange_MP4) {
   MockMediaSource source("bear-640x360-av_frag.mp4", kMP4, kAppendWholeFile);
   EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source));
@@ -2051,6 +2051,37 @@
   Stop();
 }
 
+MAYBE_EME_TEST_P(MSEPipelineIntegrationTest,
+                 MAYBE_EME(EncryptedPlayback_MP4_VP9_CENC_VideoOnly)) {
+  MockMediaSource source("bear-320x240-v_frag-vp9-cenc.mp4", kMP4VideoVP9,
+                         kAppendWholeFile);
+  FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
+  EXPECT_EQ(PIPELINE_OK,
+            StartPipelineWithEncryptedMedia(&source, &encrypted_media));
+
+  source.EndOfStream();
+
+  Play();
+
+  ASSERT_TRUE(WaitUntilOnEnded());
+  source.Shutdown();
+  Stop();
+}
+
+TEST_P(MSEPipelineIntegrationTest, BasicPlayback_VideoOnly_MP4_VP9) {
+  MockMediaSource source("bear-320x240-v_frag-vp9.mp4", kMP4VideoVP9,
+                         kAppendWholeFile);
+  EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source));
+  source.EndOfStream();
+  ASSERT_EQ(PIPELINE_OK, pipeline_status_);
+
+  Play();
+
+  ASSERT_TRUE(WaitUntilOnEnded());
+  source.Shutdown();
+  Stop();
+}
+
 #if BUILDFLAG(USE_PROPRIETARY_CODECS)
 MAYBE_EME_TEST_P(MSEPipelineIntegrationTest,
                  MAYBE_EME(EncryptedPlayback_MP4_CENC_VideoOnly)) {
@@ -2246,23 +2277,6 @@
   Stop();
 }
 
-MAYBE_EME_TEST_P(MSEPipelineIntegrationTest,
-                 MAYBE_EME(EncryptedPlayback_MP4_VP9_CENC_VideoOnly)) {
-  MockMediaSource source("bear-320x240-v_frag-vp9-cenc.mp4", kMP4VideoVP9,
-                         kAppendWholeFile);
-  FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
-  EXPECT_EQ(PIPELINE_OK,
-            StartPipelineWithEncryptedMedia(&source, &encrypted_media));
-
-  source.EndOfStream();
-
-  Play();
-
-  ASSERT_TRUE(WaitUntilOnEnded());
-  source.Shutdown();
-  Stop();
-}
-
 TEST_P(MSEPipelineIntegrationTest, BasicPlayback_VideoOnly_MP4_AVC3) {
   MockMediaSource source("bear-1280x720-v_frag-avc3.mp4", kMP4VideoAVC3,
                          kAppendWholeFile);
@@ -2281,20 +2295,6 @@
   Stop();
 }
 
-TEST_P(MSEPipelineIntegrationTest, BasicPlayback_VideoOnly_MP4_VP9) {
-  MockMediaSource source("bear-320x240-v_frag-vp9.mp4", kMP4VideoVP9,
-                         kAppendWholeFile);
-  EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source));
-  source.EndOfStream();
-  ASSERT_EQ(PIPELINE_OK, pipeline_status_);
-
-  Play();
-
-  ASSERT_TRUE(WaitUntilOnEnded());
-  source.Shutdown();
-  Stop();
-}
-
 TEST_P(MSEPipelineIntegrationTest, BasicPlayback_VideoOnly_MP4_HEVC1) {
   // HEVC demuxing might be enabled even on platforms that don't support HEVC
   // decoding. For those cases we'll get DECODER_ERROR_NOT_SUPPORTED, which