# 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"
  content_shell_major_version = "99"
}

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_messages") {
  testonly = true
  sources = [
    # Note that if this target becomes jumbofied, it should use
    # jumbo_excluded_sources to exclude the messages.cc files.
    # 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/blink_test_messages.cc",
    "common/web_test/blink_test_messages.h",
    "common/web_test/web_test_messages.cc",
    "common/web_test/web_test_messages.h",
  ]

  deps = [
    "//content/public/common",
    "//ipc",
    "//net",
    "//skia",
    "//url/ipc:url_ipc",
  ]
}

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_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_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",
    "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",
  ]

  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\"",
    "CONTENT_SHELL_MAJOR_VERSION=\"$content_shell_major_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",
    "//services/network:network_service",
  ]
  deps = [
    ":resources",
    ":web_test_messages",
    ":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/keyed_service/core:test_support",
    "//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/public/cpp:manifest",
    "//services/test/echo/public/mojom",
    "//skia",
    "//skia:test_fonts",
    "//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/init",
    "//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) {
    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",
      "//ui/android",
    ]
  }

  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",
  ]
}

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",
    ]
    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/chrome_crashpad_handler",
    ]
    outputs = [
      "{{bundle_contents_dir}}/Helpers/{{source_file_part}}",
    ]
    public_deps = [
      "//components/crash/content/app:chrome_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",
    ]
  }
}
