# 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("//services/service_manager/public/service_manifest.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("//ui/gl/features.gni")
  import("//third_party/icu/config.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("layout_test_switches") {
  testonly = true
  sources = [
    "common/layout_test/layout_test_switches.cc",
    "common/layout_test/layout_test_switches.h",
  ]
}

source_set("layout_test_utils") {
  testonly = true
  sources = [
    "common/layout_test/layout_test_utils.cc",
    "common/layout_test/layout_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/layout_test/blink_test_controller.cc",
    "browser/layout_test/blink_test_controller.h",
    "browser/layout_test/devtools_protocol_test_bindings.cc",
    "browser/layout_test/devtools_protocol_test_bindings.h",
    "browser/layout_test/fake_bluetooth_chooser.cc",
    "browser/layout_test/fake_bluetooth_chooser.h",
    "browser/layout_test/layout_test_background_fetch_delegate.cc",
    "browser/layout_test/layout_test_background_fetch_delegate.h",
    "browser/layout_test/layout_test_bluetooth_adapter_provider.cc",
    "browser/layout_test/layout_test_bluetooth_adapter_provider.h",
    "browser/layout_test/layout_test_bluetooth_chooser_factory.cc",
    "browser/layout_test/layout_test_bluetooth_chooser_factory.h",
    "browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.cc",
    "browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.h",
    "browser/layout_test/layout_test_browser_context.cc",
    "browser/layout_test/layout_test_browser_context.h",
    "browser/layout_test/layout_test_browser_main.cc",
    "browser/layout_test/layout_test_browser_main.h",
    "browser/layout_test/layout_test_browser_main_parts.cc",
    "browser/layout_test/layout_test_browser_main_parts.h",
    "browser/layout_test/layout_test_content_browser_client.cc",
    "browser/layout_test/layout_test_content_browser_client.h",
    "browser/layout_test/layout_test_devtools_bindings.cc",
    "browser/layout_test/layout_test_devtools_bindings.h",
    "browser/layout_test/layout_test_download_manager_delegate.cc",
    "browser/layout_test/layout_test_download_manager_delegate.h",
    "browser/layout_test/layout_test_first_device_bluetooth_chooser.cc",
    "browser/layout_test/layout_test_first_device_bluetooth_chooser.h",
    "browser/layout_test/layout_test_javascript_dialog_manager.cc",
    "browser/layout_test/layout_test_javascript_dialog_manager.h",
    "browser/layout_test/layout_test_message_filter.cc",
    "browser/layout_test/layout_test_message_filter.h",
    "browser/layout_test/layout_test_permission_manager.cc",
    "browser/layout_test/layout_test_permission_manager.h",
    "browser/layout_test/layout_test_push_messaging_service.cc",
    "browser/layout_test/layout_test_push_messaging_service.h",
    "browser/layout_test/layout_test_url_request_context_getter.cc",
    "browser/layout_test/layout_test_url_request_context_getter.h",
    "browser/layout_test/leak_detector.cc",
    "browser/layout_test/leak_detector.h",
    "browser/layout_test/mojo_layout_test_helper.cc",
    "browser/layout_test/mojo_layout_test_helper.h",
    "browser/layout_test/secondary_test_window_observer.cc",
    "browser/layout_test/secondary_test_window_observer.h",
    "browser/layout_test/test_info_extractor.cc",
    "browser/layout_test/test_info_extractor.h",
    "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",
    "common/layout_test/layout_test_content_client.cc",
    "common/layout_test/layout_test_content_client.h",
    "common/layout_test/layout_test_messages.cc",
    "common/layout_test/layout_test_messages.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",
    "gpu/shell_content_gpu_client.cc",
    "gpu/shell_content_gpu_client.h",
    "renderer/layout_test/blink_test_helpers.cc",
    "renderer/layout_test/blink_test_helpers.h",
    "renderer/layout_test/blink_test_runner.cc",
    "renderer/layout_test/blink_test_runner.h",
    "renderer/layout_test/layout_test_content_renderer_client.cc",
    "renderer/layout_test/layout_test_content_renderer_client.h",
    "renderer/layout_test/layout_test_render_frame_observer.cc",
    "renderer/layout_test/layout_test_render_frame_observer.h",
    "renderer/layout_test/layout_test_render_thread_observer.cc",
    "renderer/layout_test/layout_test_render_thread_observer.h",
    "renderer/layout_test/test_media_stream_renderer_factory.cc",
    "renderer/layout_test/test_media_stream_renderer_factory.h",
    "renderer/layout_test/test_media_stream_video_renderer.cc",
    "renderer/layout_test/test_media_stream_video_renderer.h",
    "renderer/layout_test/test_websocket_handshake_throttle_provider.cc",
    "renderer/layout_test/test_websocket_handshake_throttle_provider.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",
    "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/layout_test/layout_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",

    # 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 = [
    ":content_shell_packaged_services_manifest_overlay",
    ":layout_test_switches",
    ":layout_test_utils",
    ":mojo_bindings",
    ":resources",
    "//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:layouttest_support",
    "//content/test:mojo_layouttest_bindings",
    "//content/test:test_support",
    "//device/bluetooth",
    "//device/bluetooth:fake_bluetooth",
    "//device/bluetooth:mocks",
    "//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/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/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:policy" ]
  }

  # Annoyingly, this target and layouttest_support have circular includes.
  allow_circular_includes_from = [ "//content/test:layouttest_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_breakpad_support_win.cc",
      "common/v8_breakpad_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/layout_test/scoped_android_configuration.cc",
      "browser/layout_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",
      "//services/ws/test_ws:lib",
      "//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",
  ]

  # Mojo manifest overlays are generated.
  source_is_generated = true
  grit_flags = [
    "-E",
    "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
  ]
  deps = [
    ":content_shell_packaged_services_manifest_overlay",
  ]
}

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/layout_test.mojom",
    "common/layout_test/fake_bluetooth_chooser.mojom",
    "common/layout_test/layout_test_bluetooth_fake_adapter_setter.mojom",
    "common/power_monitor_test.mojom",
  ]
  public_deps = [
    "//mojo/public/mojom/base",
    "//skia/public/interfaces",
    "//ui/gfx/geometry/mojo",
    "//url/mojom:url_mojom_gurl",
  ]
}

service_manifest("content_shell_packaged_services_manifest_overlay") {
  testonly = true

  source = "//content/shell/browser/content_shell_packaged_services_manifest_overlay.json"
  packaged_services = [ "//services/test/echo:manifest" ]

  if (is_chromeos) {
    packaged_services += [ "//services/ws/test_ws:manifest" ]
  }
}

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