# TODO(timurrrr) investigate the failures and enable these tests one-by-one.
RSA*
GmockTest.*
EtwTrace*
StatsTableTest.*
ProcessMemoryTest.EnableLFH
ScopedNativeLibrary.Basic
# TODO(zhaoqin) investigate the failures and enable it later, 106043
ConditionVariableTest.LargeFastTaskTest
# Next test creates a child that crashes, which naturally generates an
# unaddressable report as well as a handful of leak reports that we don't need
# to see.
ProcessUtilTest.GetTerminationStatusCrash
# See crbug.com/130668
ProcessUtilTest.GetTerminationStatusKill
ProcessUtilTest.KillSlowChild
ProcessUtilTest.SpawnChild
ScopedProcessInformationTest.Duplicate
ScopedProcessInformationTest.Swap
ScopedProcessInformationTest.TakeBoth
ScopedProcessInformationTest.TakeProcess
ScopedProcessInformationTest.TakeWholeStruct
SharedMemoryProcessTest.Tasks

# crbug/144018
StartupInformationTest.InheritStdOut

# http://crbug.com/308273
# This only fails occasionally under full mode -- we perturb it enough that
# it hits deadlocks that it also hits under tsan?
TraceEventTestFixture.TraceContinuousSampling

# http://crbug.com/93843
# This fails only under full mode.
# TODO(bruening): add a gtest_exclude distinction for light vs full mode
# so we can avoid excluding this for light mode.
MessageLoopTestTypeUI.RecursiveDenial3
