# 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("//build/config/features.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//build/config/win/console_app.gni")
import("//build/config/win/manifest.gni")
import("//media/media_options.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/grit/repack.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
if (is_android) {
  import("//build/config/android/config.gni")
} else if (is_mac) {
  import("//build/config/mac/rules.gni")
  import("//build/mac/tweak_info_plist.gni")
  import("//third_party/icu/config.gni")
  import("//ui/gl/features.gni")
  import("//v8/gni/v8.gni")
}

declare_args() {
  content_shell_product_name = "Content Shell"
  content_shell_version = "99.77.34.5"
}

config("content_shell_lib_warnings") {
  if (is_clang) {
    # TODO(thakis): Remove this once http://crbug.com/383820 is figured out
    cflags = [ "-Wno-nonnull" ]
  }
}

source_set("android_shell_descriptors") {
  testonly = true
  sources = [
    "android/shell_descriptors.h",
  ]
  public_deps = [
    "//content/public/common:content_descriptors",
  ]
}

source_set("web_test_switches") {
  testonly = true
  sources = [
    "common/web_test/web_test_switches.cc",
    "common/web_test/web_test_switches.h",
  ]
}

source_set("web_test_utils") {
  testonly = true
  sources = [
    "common/web_test/web_test_utils.cc",
    "common/web_test/web_test_utils.h",
  ]
  deps = [
    "//cc/paint:paint",
    "//skia",
    "//third_party/blink/public:blink_headers",
  ]
}

jumbo_static_library("content_shell_lib") {
  testonly = true
  sources = [
    "android/shell_manager.cc",
    "android/shell_manager.h",
    "app/blink_test_platform_support.h",
    "app/blink_test_platform_support_android.cc",
    "app/blink_test_platform_support_linux.cc",
    "app/blink_test_platform_support_mac.mm",
    "app/blink_test_platform_support_win.cc",
    "app/paths_mac.h",
    "app/paths_mac.mm",
    "app/shell_crash_reporter_client.cc",
    "app/shell_crash_reporter_client.h",
    "app/shell_main_delegate.cc",
    "app/shell_main_delegate.h",
    "app/shell_main_delegate_mac.h",
    "app/shell_main_delegate_mac.mm",
    "browser/renderer_host/shell_render_widget_host_view_mac_delegate.h",
    "browser/renderer_host/shell_render_widget_host_view_mac_delegate.mm",
    "browser/shell.cc",
    "browser/shell.h",
    "browser/shell_android.cc",
    "browser/shell_application_mac.h",
    "browser/shell_application_mac.mm",
    "browser/shell_browser_context.cc",
    "browser/shell_browser_context.h",
    "browser/shell_browser_main.cc",
    "browser/shell_browser_main.h",
    "browser/shell_browser_main_parts.cc",
    "browser/shell_browser_main_parts.h",
    "browser/shell_browser_main_parts_mac.mm",
    "browser/shell_content_browser_client.cc",
    "browser/shell_content_browser_client.h",
    "browser/shell_devtools_bindings.cc",
    "browser/shell_devtools_bindings.h",
    "browser/shell_devtools_frontend.cc",
    "browser/shell_devtools_frontend.h",
    "browser/shell_devtools_manager_delegate.cc",
    "browser/shell_devtools_manager_delegate.h",
    "browser/shell_download_manager_delegate.cc",
    "browser/shell_download_manager_delegate.h",
    "browser/shell_javascript_dialog.h",
    "browser/shell_javascript_dialog_mac.mm",
    "browser/shell_javascript_dialog_manager.cc",
    "browser/shell_javascript_dialog_manager.h",
    "browser/shell_javascript_dialog_win.cc",
    "browser/shell_login_dialog.cc",
    "browser/shell_login_dialog.h",
    "browser/shell_login_dialog_mac.mm",
    "browser/shell_mac.mm",
    "browser/shell_net_log.cc",
    "browser/shell_net_log.h",
    "browser/shell_network_delegate.cc",
    "browser/shell_network_delegate.h",
    "browser/shell_permission_manager.cc",
    "browser/shell_permission_manager.h",
    "browser/shell_platform_data_aura.cc",
    "browser/shell_platform_data_aura.h",
    "browser/shell_plugin_service_filter.cc",
    "browser/shell_plugin_service_filter.h",
    "browser/shell_quota_permission_context.cc",
    "browser/shell_quota_permission_context.h",
    "browser/shell_speech_recognition_manager_delegate.cc",
    "browser/shell_speech_recognition_manager_delegate.h",
    "browser/shell_url_request_context_getter.cc",
    "browser/shell_url_request_context_getter.h",
    "browser/shell_web_contents_view_delegate.h",
    "browser/shell_web_contents_view_delegate_android.cc",
    "browser/shell_web_contents_view_delegate_creator.h",
    "browser/shell_web_contents_view_delegate_mac.mm",
    "browser/web_test/blink_test_controller.cc",
    "browser/web_test/blink_test_controller.h",
    "browser/web_test/devtools_protocol_test_bindings.cc",
    "browser/web_test/devtools_protocol_test_bindings.h",
    "browser/web_test/fake_bluetooth_chooser.cc",
    "browser/web_test/fake_bluetooth_chooser.h",
    "browser/web_test/leak_detector.cc",
    "browser/web_test/leak_detector.h",
    "browser/web_test/mojo_web_test_helper.cc",
    "browser/web_test/mojo_web_test_helper.h",
    "browser/web_test/secondary_test_window_observer.cc",
    "browser/web_test/secondary_test_window_observer.h",
    "browser/web_test/test_info_extractor.cc",
    "browser/web_test/test_info_extractor.h",
    "browser/web_test/web_test_background_fetch_delegate.cc",
    "browser/web_test/web_test_background_fetch_delegate.h",
    "browser/web_test/web_test_bluetooth_adapter_provider.cc",
    "browser/web_test/web_test_bluetooth_adapter_provider.h",
    "browser/web_test/web_test_bluetooth_chooser_factory.cc",
    "browser/web_test/web_test_bluetooth_chooser_factory.h",
    "browser/web_test/web_test_bluetooth_fake_adapter_setter_impl.cc",
    "browser/web_test/web_test_bluetooth_fake_adapter_setter_impl.h",
    "browser/web_test/web_test_browser_context.cc",
    "browser/web_test/web_test_browser_context.h",
    "browser/web_test/web_test_browser_main.cc",
    "browser/web_test/web_test_browser_main.h",
    "browser/web_test/web_test_browser_main_parts.cc",
    "browser/web_test/web_test_browser_main_parts.h",
    "browser/web_test/web_test_content_browser_client.cc",
    "browser/web_test/web_test_content_browser_client.h",
    "browser/web_test/web_test_devtools_bindings.cc",
    "browser/web_test/web_test_devtools_bindings.h",
    "browser/web_test/web_test_download_manager_delegate.cc",
    "browser/web_test/web_test_download_manager_delegate.h",
    "browser/web_test/web_test_first_device_bluetooth_chooser.cc",
    "browser/web_test/web_test_first_device_bluetooth_chooser.h",
    "browser/web_test/web_test_javascript_dialog_manager.cc",
    "browser/web_test/web_test_javascript_dialog_manager.h",
    "browser/web_test/web_test_message_filter.cc",
    "browser/web_test/web_test_message_filter.h",
    "browser/web_test/web_test_permission_manager.cc",
    "browser/web_test/web_test_permission_manager.h",
    "browser/web_test/web_test_push_messaging_service.cc",
    "browser/web_test/web_test_push_messaging_service.h",
    "browser/web_test/web_test_url_request_context_getter.cc",
    "browser/web_test/web_test_url_request_context_getter.h",
    "common/power_monitor_test_impl.cc",
    "common/power_monitor_test_impl.h",
    "common/shell_content_client.cc",
    "common/shell_content_client.h",
    "common/shell_messages.cc",
    "common/shell_messages.h",
    "common/shell_origin_trial_policy.cc",
    "common/shell_origin_trial_policy.h",
    "common/shell_switches.cc",
    "common/shell_switches.h",
    "common/web_test/web_test_content_client.cc",
    "common/web_test/web_test_content_client.h",
    "common/web_test/web_test_messages.cc",
    "common/web_test/web_test_messages.h",
    "gpu/shell_content_gpu_client.cc",
    "gpu/shell_content_gpu_client.h",
    "renderer/shell_content_renderer_client.cc",
    "renderer/shell_content_renderer_client.h",
    "renderer/shell_render_view_observer.cc",
    "renderer/shell_render_view_observer.h",
    "renderer/web_test/blink_test_helpers.cc",
    "renderer/web_test/blink_test_helpers.h",
    "renderer/web_test/blink_test_runner.cc",
    "renderer/web_test/blink_test_runner.h",
    "renderer/web_test/test_media_stream_renderer_factory.cc",
    "renderer/web_test/test_media_stream_renderer_factory.h",
    "renderer/web_test/test_media_stream_video_renderer.cc",
    "renderer/web_test/test_media_stream_video_renderer.h",
    "renderer/web_test/test_websocket_handshake_throttle_provider.cc",
    "renderer/web_test/test_websocket_handshake_throttle_provider.h",
    "renderer/web_test/web_test_content_renderer_client.cc",
    "renderer/web_test/web_test_content_renderer_client.h",
    "renderer/web_test/web_test_render_frame_observer.cc",
    "renderer/web_test/web_test_render_frame_observer.h",
    "renderer/web_test/web_test_render_thread_observer.cc",
    "renderer/web_test/web_test_render_thread_observer.h",
    "utility/shell_content_utility_client.cc",
    "utility/shell_content_utility_client.h",
  ]

  jumbo_excluded_sources = [
    # IPC uses multiple inclusions in different macro contexts to
    # generate the code. This is not compatible with jumbo
    # compilations since all other files need the "clean" version of
    # the message headers.
    "common/web_test/web_test_messages.cc",
    "common/shell_messages.cc",
  ]

  configs += [
    ":content_shell_lib_warnings",
    "//build/config:precompiled_headers",

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]

  defines = [ "CONTENT_SHELL_VERSION=\"$content_shell_version\"" ]

  public_deps = [
    ":android_shell_descriptors",

    # #include'ed by renderer/web_test/blink_test_runner.h
    ":mojo_bindings",

    # This exposes all public content APIs.
    "//content/public/app:both",
    "//content/public/browser",
    "//content/public/child",
    "//content/public/common",
    "//content/public/gpu",
    "//content/public/renderer",
    "//content/public/utility",
    "//ipc",
    "//services/network:network_service",
  ]
  deps = [
    ":resources",
    ":web_test_switches",
    ":web_test_utils",
    "//base",
    "//base:base_static",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//components/cdm/renderer",
    "//components/crash/content/app",
    "//components/crash/content/app:test_support",
    "//components/crash/content/browser",
    "//components/crash/core/common:crash_key",
    "//components/download/content/factory",
    "//components/download/public/background_service:public",
    "//components/download/public/common:public",
    "//components/keyed_service/content",
    "//components/network_session_configurator/browser",
    "//components/plugins/renderer",
    "//components/url_formatter",
    "//components/web_cache/renderer",
    "//content:resources",
    "//content/app/resources",
    "//content/app/strings",
    "//content/gpu",
    "//content/public/common",
    "//content/public/common:service_names",
    "//content/shell/test_runner:test_runner",
    "//content/test:content_test_mojo_bindings",
    "//content/test:mojo_web_test_bindings",
    "//content/test:test_support",
    "//content/test:web_test_support",
    "//device/bluetooth",
    "//device/bluetooth:fake_bluetooth",
    "//device/bluetooth:mocks",
    "//device/bluetooth/public/mojom:fake_bluetooth_interfaces",
    "//gin",
    "//gpu",
    "//media",
    "//media/capture",
    "//media/mojo:buildflags",
    "//net",
    "//net:net_resources",
    "//net:test_support",
    "//ppapi/buildflags",
    "//sandbox",
    "//services/device/public/cpp/test:test_support",
    "//services/device/public/mojom",
    "//services/network/public/cpp",
    "//services/service_manager/embedder:embedder_result_codes",
    "//services/service_manager/public/cpp",
    "//services/test/echo:lib",
    "//services/test/echo:manifest",
    "//services/test/echo/public/mojom",
    "//skia",
    "//storage/browser",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/blink/public:blink",
    "//third_party/blink/public:buildflags",
    "//third_party/blink/public:image_resources",
    "//third_party/blink/public:resources",
    "//third_party/blink/public:test_support",
    "//third_party/icu",
    "//ui/base",
    "//ui/base/clipboard",
    "//ui/base/ime",
    "//ui/display",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gfx/ipc",
    "//ui/gfx/ipc/geometry",
    "//ui/gfx/ipc/skia",
    "//ui/gl",
    "//ui/platform_window",
    "//url",
    "//v8",
  ]

  if (is_fuchsia) {
    sources += [ "app/blink_test_platform_support_fuchsia.cc" ]
    deps -= [
      "//components/crash/content/app",
      "//components/crash/content/app:test_support",
      "//components/crash/content/browser",
    ]
    deps += [ "//third_party/fuchsia-sdk/sdk:ui_policy" ]
  }

  # Annoyingly, this target and web_test_support have circular includes.
  allow_circular_includes_from = [ "//content/test:web_test_support" ]

  if (enable_plugins) {
    deps += [
      "//cc/paint",
      "//content/ppapi_plugin",
      "//ppapi:blink_deprecated_test_plugin",
      "//ppapi:blink_test_plugin",
      "//ppapi/shared_impl",
    ]
  }
  if (mojo_media_host == "browser") {
    deps += [
      "//media/mojo/interfaces:constants",
      "//media/mojo/services",
    ]
  }

  if (is_win) {
    sources += [
      "common/v8_crashpad_support_win.cc",
      "common/v8_crashpad_support_win.h",
    ]
  }

  if (is_linux) {
    deps += [
      "//third_party/fontconfig",
      "//ui/gfx:test_support",
    ]
  }

  if (use_x11) {
    # Some tests rely on this tool at runtime. Note: it might be better if
    # the tests that needed it had this as a dep instead of adding it here.
    deps += [ "//ui/events/devices/x11" ]
  }

  if (is_android) {
    sources += [
      "browser/web_test/scoped_android_configuration.cc",
      "browser/web_test/scoped_android_configuration.h",
    ]
    deps += [
      "//base/test:test_support",
      "//components/embedder_support/android:view",
      "//content/shell/android:content_shell_jni_headers",
      "//mojo/public/java/system:test_support",
    ]
  }

  if (toolkit_views) {
    deps += [ "//ui/views" ]
  }

  if (use_aura) {
    deps += [
      "//ui/aura",
      "//ui/aura:test_support",
      "//ui/events",
      "//ui/strings",
      "//ui/wm",
    ]

    if (toolkit_views) {
      sources += [
        "browser/shell_views.cc",
        "browser/shell_web_contents_view_delegate_views.cc",
      ]
      deps += [
        "//ui/resources",
        "//ui/views:test_support",
        "//ui/views/controls/webview",
        "//ui/wm:test_support",
      ]
    } else {
      sources += [
        "browser/shell_aura.cc",
        "browser/shell_web_contents_view_delegate_aura.cc",
      ]
    }
  } else {
    sources -= [
      "browser/shell_platform_data_aura.cc",
      "browser/shell_platform_data_aura.h",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chromeos/dbus",
      "//services/ws/test_ws:lib",
      "//services/ws/test_ws:manifest",
      "//services/ws/test_ws:mojom",
      "//ui/wm:test_support",
    ]
  }

  if (is_linux) {
    deps += [ "//build/config/freetype" ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }

  if (!enable_plugins) {
    sources -= [
      "browser/shell_plugin_service_filter.cc",
      "browser/shell_plugin_service_filter.h",
    ]
  }
}

grit("content_shell_resources_grit") {
  testonly = true

  # External code should depend on ":resources" instead.
  visibility = [ ":*" ]
  source = "shell_resources.grd"
  outputs = [
    "grit/shell_resources.h",
    "shell_resources.pak",
  ]
}

copy("copy_shell_resources") {
  testonly = true

  sources = [
    "$target_gen_dir/shell_resources.pak",
  ]
  outputs = [
    "$root_out_dir/shell_resources.pak",
  ]

  public_deps = [
    ":content_shell_resources_grit",
  ]
}

group("resources") {
  testonly = true

  public_deps = [
    ":copy_shell_resources",
  ]
  deps = [
    "//content/shell/test_runner:resources",
  ]
  data_deps = [
    "//content/shell/test_runner:resources",
  ]
}

repack("pak") {
  testonly = true

  sources = [
    "$root_gen_dir/content/app/resources/content_resources_100_percent.pak",
    "$root_gen_dir/content/app/strings/content_strings_en-US.pak",
    "$root_gen_dir/content/browser/tracing/tracing_resources.pak",
    "$root_gen_dir/content/content_resources.pak",
    "$root_gen_dir/content/shell/shell_resources.pak",
    "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak",
    "$root_gen_dir/net/net_resources.pak",
    "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak",
    "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_100_percent.pak",
    "$root_gen_dir/ui/resources/ui_resources_100_percent.pak",
    "$root_gen_dir/ui/resources/webui_resources.pak",
    "$root_gen_dir/ui/strings/app_locale_settings_en-US.pak",
    "$root_gen_dir/ui/strings/ui_strings_en-US.pak",
  ]

  deps = [
    ":resources",
    "//content:resources",
    "//content/app/resources",
    "//content/app/strings",
    "//content/browser/tracing:resources",
    "//mojo/public/js:resources",
    "//net:net_resources",
    "//third_party/blink/public:resources",
    "//third_party/blink/public:scaled_resources_100_percent",
    "//ui/resources",
    "//ui/strings",
  ]

  if (toolkit_views) {
    deps += [ "//ui/views/resources" ]
    sources +=
        [ "$root_gen_dir/ui/views/resources/views_resources_100_percent.pak" ]
  }
  if (!is_android) {
    sources +=
        [ "$root_gen_dir/content/browser/devtools/devtools_resources.pak" ]
    deps += [ "//content/browser/devtools:resources" ]
  }
  output = "$root_out_dir/content_shell.pak"
}

if (is_android) {
  group("content_shell") {
    testonly = true
    deps = [
      "//content/shell/android:content_shell_apk",
    ]
  }
} else if (is_mac) {
  tweak_info_plist("content_shell_plist") {
    testonly = true
    info_plist = "app/app-Info.plist"
    args = [
      "--scm=1",
      "--version",
      content_shell_version,
    ]
  }
  mac_app_bundle("content_shell") {
    testonly = true
    output_name = content_shell_product_name
    sources = [
      "app/shell_main_mac.cc",
    ]
    defines = [ "SHELL_PRODUCT_NAME=\"$content_shell_product_name\"" ]
    deps = [
      ":content_shell_framework_bundle_data",
      ":content_shell_resources_bundle_data",

      # TODO(rsesek): Remove this after GYP is gone, since it only needs to
      # be here per the comment in blink_test_platform_support_mac.mm about
      # the bundle structure.
      "//content/shell/test_runner:resources",
    ]
    info_plist_target = ":content_shell_plist"
    data_deps = [
      ":content_shell_lib",
    ]
  }
} else {
  executable("content_shell") {
    testonly = true

    sources = [
      "app/shell_main.cc",
    ]

    if (is_win) {
      sources += [ "app/shell.rc" ]
    }

    defines = []

    deps = [
      ":content_shell_lib",
      ":pak",
      "//build/win:default_exe_manifest",
    ]

    data_deps = [
      ":pak",
      "//tools/v8_context_snapshot:v8_context_snapshot",
    ]

    if (is_win) {
      deps += [ "//sandbox" ]

      # This is a large module that can't do incremental linking in some cases.
      configs -= [ "//build/config/win:default_incremental_linking" ]
      configs +=
          [ "//build/config/win:default_large_module_incremental_linking" ]
      if (win_console_app) {
        defines += [ "WIN_CONSOLE_APP" ]
      } else {
        # Set /SUBSYSTEM:WINDOWS unless a console build has been requested.
        configs -= [ "//build/config/win:console" ]
        configs += [ "//build/config/win:windowed" ]
      }

      data_deps +=
          [ "//third_party/crashpad/crashpad/handler:crashpad_handler" ]
    }

    if (is_linux && !is_component_build) {
      # Set rpath to find our own libfreetype even in a non-component build.
      configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
    }
  }

  if (is_fuchsia) {
    fuchsia_package("content_shell_pkg") {
      testonly = true
      binary = ":content_shell"
      package_name_override = "content_shell"
    }

    fuchsia_package_runner("content_shell_fuchsia") {
      testonly = true
      package = ":content_shell_pkg"
      package_name_override = "content_shell"
    }
  }
}

if (is_mac) {
  bundle_data("content_shell_framework_helpers") {
    testonly = true
    sources = [
      "$root_out_dir/crashpad_handler",
    ]
    outputs = [
      "{{bundle_contents_dir}}/Helpers/{{source_file_part}}",
    ]
    public_deps = [
      "//third_party/crashpad/crashpad/handler:crashpad_handler",
    ]
  }

  mac_xib_bundle_data("content_shell_framework_xibs") {
    sources = [
      "app/English.lproj/HttpAuth.xib",
      "app/English.lproj/MainMenu.xib",
    ]
    output_path = "{{bundle_resources_dir}}/English.lproj"
  }

  bundle_data("content_shell_framework_resources") {
    testonly = true
    sources = [
      "$root_out_dir/content_shell.pak",
      "resources/missingImage.png",
    ]

    public_deps = [
      ":pak",
    ]

    if (icu_use_data_file) {
      sources += [ "$root_out_dir/icudtl.dat" ]
      deps = [
        "//third_party/icu:icudata",
      ]
    }

    if (v8_use_external_startup_data) {
      sources += [ "$root_out_dir/natives_blob.bin" ]
      public_deps += [ "//v8" ]
      if (use_v8_context_snapshot) {
        sources += [ "$root_out_dir/v8_context_snapshot.bin" ]
        public_deps += [ "//tools/v8_context_snapshot" ]
      } else {
        sources += [ "$root_out_dir/snapshot_blob.bin" ]
      }
    }

    outputs = [
      "{{bundle_resources_dir}}/{{source_file_part}}",
    ]
  }

  if (enable_plugins) {
    bundle_data("content_shell_framework_plugins") {
      sources = [
        "$root_out_dir/blink_deprecated_test_plugin.plugin",
        "$root_out_dir/blink_test_plugin.plugin",
      ]

      outputs = [
        "{{bundle_contents_dir}}/{{source_file_part}}",
      ]

      public_deps = [
        "//ppapi:blink_deprecated_test_plugin",
        "//ppapi:blink_test_plugin",
      ]
    }
  }

  content_shell_framework_name = "$content_shell_product_name Framework"
  content_shell_helper_name = "$content_shell_product_name Helper"

  tweak_info_plist("content_shell_framework_plist") {
    testonly = true
    info_plist = "app/framework-Info.plist"
    args = [
      "--breakpad=0",
      "--keystone=0",
      "--scm=1",
      "--version",
      content_shell_version,
      "--branding",
      content_shell_product_name,
    ]
  }

  mac_framework_bundle("content_shell_framework") {
    testonly = true

    output_name = content_shell_framework_name

    framework_version = "C"

    framework_contents = [
      "Helpers",
      "Resources",
    ]

    sources = [
      "app/shell_content_main.cc",
      "app/shell_content_main.h",
    ]

    public_deps = [
      ":content_shell_lib",
    ]
    deps = [
      ":content_shell_angle_library",
      ":content_shell_framework_helpers",
      ":content_shell_framework_resources",
      ":content_shell_framework_xibs",
      ":content_shell_swiftshader_library",
      "//third_party/icu:icudata",
    ]

    if (enable_plugins) {
      deps += [ ":content_shell_framework_plugins" ]
    }

    # Both the main :content_shell and :content_shell_helper_app executables
    # need to link the framework. Because they are at different directory
    # depths, using @executable_path as the install_name would require using
    # install_name_tool on one of the executables. However install_name_tool
    # only operates in-place, which is problematic to express in GN. Instead,
    # use rpath-based loading.
    ldflags = [ "-Wl,-install_name,@executable_path/../Frameworks/$output_name.framework/$output_name" ]

    if (is_component_build) {
      # Set up the rpath for the framework so that it can find dylibs in the
      # root output directory. The framework is at
      # Content Shell.app/Contents/Frameworks/Content Shell Framework.framework/Versions/C/Content Shell Framework
      # so use loader_path to go back to the root output directory.
      ldflags += [
        "-rpath",
        "@loader_path/../../../../../..",
      ]
    }

    info_plist_target = ":content_shell_framework_plist"
  }

  tweak_info_plist("content_shell_helper_plist") {
    testonly = true
    info_plist = "app/helper-Info.plist"
    args = [
      "--breakpad=0",
      "--keystone=0",
      "--scm=0",
      "--version",
      content_shell_version,
    ]
  }

  mac_app_bundle("content_shell_helper_app") {
    testonly = true
    output_name = content_shell_helper_name
    sources = [
      "app/shell_main_mac.cc",
    ]
    defines = [
      "HELPER_EXECUTABLE",
      "SHELL_PRODUCT_NAME=\"$content_shell_product_name\"",
    ]
    deps = [
      "//sandbox/mac:seatbelt",
    ]
    ldflags = [
      # The helper is in Content Shell.app/Contents/Frameworks/Content Shell Helper.app/Contents/MacOS/
      # so set rpath up to the base.
      "-rpath",
      "@executable_path/../../../../../..",
    ]
    info_plist_target = ":content_shell_helper_plist"
  }

  bundle_data("content_shell_framework_bundle_data") {
    testonly = true
    sources = [
      "$root_out_dir/$content_shell_framework_name.framework",
      "$root_out_dir/$content_shell_helper_name.app",
    ]
    outputs = [
      "{{bundle_contents_dir}}/Frameworks/{{source_file_part}}",
    ]
    public_deps = [
      ":content_shell_framework",
      ":content_shell_helper_app",
    ]
  }

  bundle_data("content_shell_resources_bundle_data") {
    testonly = true
    sources = [
      "app/app.icns",
    ]
    outputs = [
      "{{bundle_resources_dir}}/{{source_file_part}}",
    ]
  }

  if (use_egl) {
    # Add the ANGLE .dylibs in the MODULE_DIR of Chromium.app
    bundle_data("content_shell_angle_binaries") {
      sources = [
        "$root_out_dir/egl_intermediates/libEGL.dylib",
        "$root_out_dir/egl_intermediates/libGLESv2.dylib",
      ]
      outputs = [
        "{{bundle_contents_dir}}/Libraries/{{source_file_part}}",
      ]
      public_deps = [
        "//ui/gl:angle_library_copy",
      ]
    }

    # Add the SwiftShader .dylibs in the MODULE_DIR of Chromium.app
    bundle_data("content_shell_swiftshader_binaries") {
      sources = [
        "$root_out_dir/egl_intermediates/libswiftshader_libEGL.dylib",
        "$root_out_dir/egl_intermediates/libswiftshader_libGLESv2.dylib",
      ]
      outputs = [
        "{{bundle_contents_dir}}/Libraries/{{source_file_part}}",
      ]
      public_deps = [
        "//ui/gl:swiftshader_library_copy",
      ]
    }
  }

  group("content_shell_angle_library") {
    if (use_egl) {
      deps = [
        ":content_shell_angle_binaries",
      ]
    }
  }

  group("content_shell_swiftshader_library") {
    if (use_egl) {
      deps = [
        ":content_shell_swiftshader_binaries",
      ]
    }
  }
}

mojom("mojo_bindings") {
  sources = [
    "common/power_monitor_test.mojom",
    "common/web_test.mojom",
    "common/web_test/fake_bluetooth_chooser.mojom",
    "common/web_test/web_test_bluetooth_fake_adapter_setter.mojom",
  ]
  public_deps = [
    "//mojo/public/mojom/base",
    "//skia/public/interfaces",
    "//ui/gfx/geometry/mojo",
    "//url/mojom:url_mojom_gurl",
  ]
}

group("content_shell_crash_test") {
  testonly = true
  data_deps = [
    ":content_shell",
    "//third_party/mesa_headers",
  ]
  data = [
    "//content/shell/tools/breakpad_integration_test.py",
    "//testing/scripts/common.py",
    "//testing/scripts/content_shell_crash_test.py",
    "//testing/xvfb.py",
  ]
  if (is_posix) {
    data += [
      "//components/crash/content/tools/generate_breakpad_symbols.py",
      "//components/crash/content/tools/dmp2minidump.py",
    ]
  }
  if (is_win) {
    data_deps += [ "//build/win:copy_cdb_to_output" ]
  }
  if (is_posix && !is_android) {
    data_deps += [
      "//third_party/breakpad:dump_syms($host_toolchain)",
      "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
    ]
  }
  if (is_android) {
    data_deps += [
      "//third_party/breakpad:dump_syms",
      "//third_party/breakpad:microdump_stackwalk",
      "//third_party/breakpad:minidump_dump",
      "//third_party/breakpad:minidump_stackwalk",
      "//third_party/breakpad:symupload",
      "//tools/android/forwarder2",
    ]
  }
}
