# Copyright 2018 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("//components/gwp_asan/buildflags/buildflags.gni")
import("//third_party/protobuf/proto_library.gni")

static_library("crash_handler") {
  sources = [
    "crash_analyzer.cc",
    "crash_analyzer.h",
    "crash_handler.cc",
    "crash_handler.h",
  ]

  deps = [
    ":crash_proto",
    "//base",
    "//components/gwp_asan/common",
    "//third_party/crashpad/crashpad/client",
    "//third_party/crashpad/crashpad/handler",
    "//third_party/crashpad/crashpad/minidump",
    "//third_party/crashpad/crashpad/snapshot",
    "//third_party/crashpad/crashpad/util",
    "//third_party/protobuf:protobuf_lite",
  ]
}

proto_library("crash_proto") {
  sources = [
    "crash.proto",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "crash_analyzer_unittest.cc",
  ]

  deps = [
    ":crash_handler",
    ":crash_proto",
    "//base/test:test_support",
    "//components/gwp_asan/client",
    "//components/gwp_asan/common",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/crashpad/crashpad/client",
    "//third_party/crashpad/crashpad/snapshot",
    "//third_party/crashpad/crashpad/snapshot:test_support",
    "//third_party/crashpad/crashpad/test",
    "//third_party/crashpad/crashpad/util",
    "//third_party/protobuf:protobuf_lite",
  ]

  if (!is_android || enable_gwp_asan) {
    sources += [ "crash_handler_unittest.cc" ]
    deps += [
      "//third_party/crashpad/crashpad/handler",
      "//third_party/crashpad/crashpad/minidump",
      "//third_party/crashpad/crashpad/tools:tool_support",
    ]

    if (is_android) {
      metadata = {
        shared_libraries = [ "$root_out_dir/libchrome_crashpad_handler.so" ]
      }
      deps += [
        "//components/crash/content/app:chrome_crashpad_handler_named_as_so",
      ]
    }
  }
}
