# Copyright 2016 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.
#
# This is a .pyl, or "Python Literal", file. You can treat it just like a
# .json file, with the following exceptions:
# * all keys must be quoted (use single quotes, please);
# * comments are allowed, using '#' syntax; and
# * trailing commas are allowed.
#
# List of files that are known to be _not_ deterministic. This is a "temporary"
# workaround to find regression on the deterministic builders.
#
# TODO(sebmarchand): Remove this once all the files are deterministic.
{
  # https://crbug.com/383340
  'android': [
  ],

  # https://crbug.com/330263
  'linux': [
    # https://crbug.com/908463
    'fontconfig_caches/df1acc8c-39d5-4a8b-8507-b1a7396ac3ac-le64.cache-7',

    # nacl stuff, https://crbug.com/429358
    'nacl_helper_nonsfi',
    'nacl_helper_nonsfi_unittests_main',
    'nacl_test_data/nonsfi/irt_exception_test_pnacl_newlib_x32_nonsfi.nexe',
    'nacl_test_data/nonsfi/irt_manifest_file_pnacl_newlib_x32_nonsfi.nexe',
    'ppapi_nacl_tests_pnacl_newlib_x32_nonsfi.nexe',
    'test_data/ppapi/tests/extensions/packaged_app/nonsfi/ppapi_tests_extensions_packaged_app_pnacl_newlib_x32_nonsfi.nexe',

  ],

  'linux_component': [
    # https://crbug.com/900696
    'remoting-webapp.v2.zip',

    # https://crbug.com/908474
    'app_shell_unittests',
    'browser_tests',
    'chrome',
    'chrome_app_unittests',
    'components_browsertests',
    'components_unittests',
    'content_browsertests',
    'content_shell',
    'crashpad_tests',
    'extensions_browsertests',
    'extensions_unittests',
    'headless_browsertests',
    'headless_unittests',
    'interactive_ui_tests',
    'libboringssl.so',
    'libcrashpad_snapshot_test_module.so',
    'libcrashpad_snapshot_test_module_large.so',
    'libcrashpad_snapshot_test_module_small.so',
    'libheadless.so',
    'performance_browser_tests',
    'sync_integration_tests',
    'unit_tests',

    # additional nacl stuff, https://crbug.com/429358
    'nacl_helper',
    'nacl_helper_bootstrap',
    'nacl_loader_unittests',

    # https://crbug.com/913204
    'captured_sites_interactive_tests',

    # https://crbug.com/914776
    'libboringssl_fuzzer.so',
    'libboringssl_fuzzer_no_fuzzer_mode.so',
    'merkle_integrity_source_stream_fuzzer',
    'renderer_fuzzer',
    'renderer_proto_tree_fuzzer',
    'renderer_tree_fuzzer',
  ],

  # https://crbug.com/330262
  'mac': [
    # ld64 in current Xcode versions is not deterministic. Most smaller binaries
    # are fine, but larger binaries often get different outputs.
    # To reduce flakiness, list most binaries here.
    # TODO(erikchen): Once our fix for this has made it into Xcode and that
    # is on all the bots, remove most binaries.
    'accelerated_widget_mac_unittests',
    'accessibility_unittests',
    'angle_end2end_tests',
    'angle_unittests',
    'angle_white_box_tests',
    'App Shell',
    'app_shell_unittests',
    'ar_sample_test_driver',
    'audio_unittests',
    'base_unittests',
    'blink_heap_unittests',
    'blink_platform_perftests',
    'blink_platform_unittests',
    'bluetooth_metrics_hash',
    'browser_tests',
    'cacheinvalidation_unittests',
    'capture_unittests',
    'cast_benchmarks',
    'cast_receiver_app',
    'cast_sender_app',
    'cast_simulator',
    'cast_unittests',
    'cc_perftests',
    'cc_unittests',
    'chrome_app_unittests',
    'chromedriver',
    'chromedriver_tests',
    'chromedriver_unittests',
    'chromoting_test_driver',
    'command_buffer_gles2_tests',
    'components_browsertests',
    'components_perftests',
    'components_unittests',
    'compositor_unittests',
    'content_browsertests',
    'content_perftests',
    'content_unittests',
    'courgette_unittests',
    'crashpad_handler',
    'crypto_unittests',
    'device_unittests',
    'display_compositor_benchmark',
    'display_unittests',
    'events_unittests',
    'extensions_browsertests',
    'extensions_unittests',
    'ffmpeg_regression_tests',
    'filesystem_service_unittests',
    'filter_fuzz_stub',
    'gcm_unit_tests',
    'generate_barcode_video',
    'generate_timecode_audio',
    'gfx_unittests',
    'gin_unittests',
    'gles2_conform_support',
    'gles2_conform_test',
    'gl_tests',
    'gl_unittests',
    'gn_unittests',
    'google_apis_unittests',
    'gpu_ipc_service_unittests',
    'gpu_perftests',
    'gpu_unittests',
    'interactive_ui_tests',
    'ipc_fuzzer',
    'ipc_fuzzer_replay',
    'ipc_message_dump.so',
    'ipc_message_list',
    'ipc_message_util',
    'ipc_tests',
    'it2me_standalone_host_main',
    'jingle_unittests',
    'khronos_glcts_test',
    'latency_unittests',
    'leveldb_service_unittests',
    'libaddressinput_unittests',
    'libapp_shell_framework.dylib',
    'libcommand_buffer_gles2.dylib',
    'libmedia_library.dylib',
    'libphonenumber_unittests',
    'mac_installer_unittests',
    'macviews_interactive_ui_tests',
    'media_blink_unittests',
    'media_service_unittests',
    'media_mojo_unittests',
    'media_perftests',
    'media_pipeline_integration_unittests',
    'media_unittests',
    'message_center_unittests',
    'midi_unittests',
    'mojo_unittests',
    'nacl_loader_unittests',
    'native_theme_unittests',
    'net_unittests',
    'performance_browser_tests',
    'ppapi_perftests',
    'ppapi_unittests',
    'printing_unittests',
    'proximity_auth_unittests',
    'remoting_perftests',
    'remoting_start_host',
    'remoting_unittests',
    'sandbox_mac_unittests',
    'service_manager_unittests',
    'shell_dialogs_unittests',
    'skia_unittests',
    'snapshot_unittests',
    'sql_unittests',
    'storage_unittests',
    'sync_client',
    'sync_integration_tests',
    'sync_listen_notifications',
    'sync_performance_tests',
    'sync_unit_tests',
    'udp_proxy',
    'ui_base_unittests',
    'ui_touch_selection_unittests',
    'unit_tests',
    'url_ipc_unittests',
    'url_unittests',
    'video_encode_accelerator_unittest',
    'views_examples_exe',
    'views_examples_with_content_exe',
    'views_unittests',
    'viz_benchmark',
    'webkit_unit_tests',
    'wtf_unittests',
  ],

  # https://crbug.com/330260
  'win': [
    # TODO(thakis): Figure out what's up with these three (and their isolate).
    'mini_installer.exe',
    'mini_installer.exe.pdb',
    'previous_version_mini_installer.exe',

    # These probably have mtimes in the zip headers and the scripts creating
    # them probably should use build_utils.ZipDir() instead.
    'mini_installer_tests.zip',
    'policy_templates.zip',

    # These two started being non-deterministic days 2 out of 3 builds days
    # after we switched to using two distinct build dirs, for no apparent
    # reason.
    'nacl_irt_x86_32.nexe',
    'nacl_irt_x86_32.nexe.debug',
  ],
}
