# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//media/media_options.gni") import("//testing/libfuzzer/fuzzer_test.gni") source_set("run_all_unittests") { testonly = true sources = [ "run_all_unittests.cc" ] configs += [ "//media:media_config" ] deps = [ "//base", "//base/test:test_support", "//media:test_support", "//mojo/core/embedder", ] if (is_android) { deps += [ "//ui/gl" ] } } source_set("pipeline_integration_test_base") { testonly = true if (media_use_ffmpeg) { sources = [ "fake_encrypted_media.cc", "fake_encrypted_media.h", "pipeline_integration_test_base.cc", "pipeline_integration_test_base.h", "test_media_source.cc", "test_media_source.h", ] configs += [ "//media:media_config" ] deps = [ "//base", "//base/test:test_support", "//media:media_buildflags", "//media:test_support", "//testing/gmock", "//testing/gtest", "//url", ] } } source_set("pipeline_integration_tests") { testonly = true # Even if FFmpeg is enabled on Android we don't want these. # TODO(watk): Refactor tests that could be made to run on Android. See # http://crbug.com/570762 if (media_use_ffmpeg && !is_android) { sources = [ "pipeline_integration_test.cc" ] deps = [ ":pipeline_integration_test_base", "//base", "//base/test:test_support", "//media:media_buildflags", "//media:test_support", "//media/mojo/clients", # Needed for the opus_config "//third_party/opus", "//url", # TODO(dalecurtis): Required since the gmock header is included in the # header for pipeline_integration_test_base.h. This should be moved # into the .cc file to avoid the extra dependency here. "//testing/gmock", ] } } source_set("pipeline_integration_perftests") { testonly = true if (media_use_ffmpeg) { sources = [ "pipeline_integration_perftest.cc" ] deps = [ ":pipeline_integration_test_base", "//media:test_support", "//testing/gtest", "//testing/perf", # TODO(dalecurtis): Required since the gmock header is included in the # header for pipeline_integration_test_base.h. This should be moved into # the .cc file to avoid the extra dependency here. "//testing/gmock", ] } } # Keep these aligned with FuzzerVariant in pipeline_integration_fuzzertest.c pipeline_integration_fuzzer_variants = [ "SRC", # A SRC= version (not MSE) pipeline fuzzer test # MSE pipeline fuzzer test variants. Note, while it would be nice to have one # generic MSE fuzzer, we use distinct fuzzers corresponding 1:1 to a set of # mimetype+codec strings for now because: # a) the SourceBuffer implementation must be constructed to expect a # particular bytestream type and (set of) codec(s); it does not # auto-detect those from the appended media, and # b) maintaining the association of a (mutated) corpus item with the same MSE # SourceBuffer configuration requires associating that item with the same # mimetype+codec string. The benefits are simpler fuzzers and the ability # to slice per-fuzzer coverage stats. The costs include more fuzzers, risk # of new bytestream types or codec fuzzing gaps, and more potential # duplicate bugs from different fuzzers for common issues exposed across # mimetype+codec string variants. "WEBM_OPUS", "WEBM_VORBIS", "WEBM_VP8", "WEBM_VP9", "WEBM_OPUS_VP9", "MP4_FLAC", "MP4_OPUS", "MP3", # See below for additional variants depending on build configuration. ] if (enable_av1_decoder) { pipeline_integration_fuzzer_variants += [ "MP4_AV1" ] } if (proprietary_codecs) { pipeline_integration_fuzzer_variants += [ "ADTS", "MP4_AACLC", "MP4_AACSBR", # Though neither StreamParserFactory, MP4StreamParser, nor # SourceBufferState::Init differentiate kinds of AVC, we use "AVC1" here to # retain corpus associated with this fuzzer target name. "MP4_AVC1", "MP4_AACLC_AVC", ] if (enable_mse_mpeg2ts_stream_parser) { pipeline_integration_fuzzer_variants += [ "MP2T_AACLC", "MP2T_AACSBR", "MP2T_AVC", "MP2T_MP3", "MP2T_AACLC_AVC", ] } } foreach(variant, pipeline_integration_fuzzer_variants) { if (variant == "SRC") { test_name = "media_pipeline_integration_fuzzer" } else { test_name = "mediasource_${variant}_pipeline_integration_fuzzer" } fuzzer_test(test_name) { sources = [ "pipeline_integration_fuzzertest.cc" ] deps = [ ":pipeline_integration_test_base", "//base", "//base/test:test_support", "//media", # TODO(dalecurtis): Required since the gmock header is included in the # header for pipeline_integration_test_base.h. This should be # moved into the .cc file to avoid the extra dependency here. "//testing/gmock", # TODO(https://crbug.com/1039559): Required for inclusion of # gtest-internal-inl.h. "//testing/gtest", "//ui/gfx:test_support", ] defines = [ "PIPELINE_FUZZER_VARIANT=${variant}" ] seed_corpus = "//media/test/data/" } }