# Copyright 2014 The Chromium Authors # 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") if (is_ios) { import("//build/config/ios/bundle_data_from_filelist.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" ] } if (is_chromeos) { deps += [ "//ui/gfx/linux:gbm" ] } } 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 if (media_use_ffmpeg) { 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 "//testing/gmock", "//third_party/opus", "//url", ] } } 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/gmock", "//testing/gtest", "//testing/perf", ] } } # 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", "//testing/gmock", "//testing/gtest", "//ui/gfx:test_support", ] defines = [ "PIPELINE_FUZZER_VARIANT=${variant}" ] seed_corpus = "//media/test/data/" } } if (is_ios) { bundle_data_from_filelist("media_bundle_data") { testonly = true filelist_name = "media_bundle_data.filelist" } }