# Copyright 2019 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/android/rules.gni")
import("//mojo/public/tools/bindings/mojom.gni")

source_set("common") {
  sources = [
    "aw_content_client.cc",
    "aw_content_client.h",
    "aw_descriptors.h",
    "aw_features.cc",
    "aw_features.h",
    "aw_media_drm_bridge_client.cc",
    "aw_media_drm_bridge_client.h",
    "aw_paths.cc",
    "aw_paths.h",
    "aw_resource.cc",
    "aw_resource.h",
    "aw_resource_bundle.cc",
    "aw_resource_bundle.h",
    "aw_switches.cc",
    "aw_switches.h",
    "components/aw_apps_package_names_allowlist_component_utils.cc",
    "components/aw_apps_package_names_allowlist_component_utils.h",
    "crash_reporter/aw_crash_reporter_client.cc",
    "crash_reporter/aw_crash_reporter_client.h",
    "crash_reporter/crash_keys.cc",
    "crash_reporter/crash_keys.h",
    "devtools_instrumentation.h",
    "metrics/app_package_name_logging_rule.cc",
    "metrics/app_package_name_logging_rule.h",
    "url_constants.cc",
    "url_constants.h",
  ]
  deps = [
    "//android_webview:common_jni_headers",
    "//base",
    "//components/cdm/common",
    "//components/crash/core/app",
    "//components/crash/core/common:crash_key",
    "//components/embedder_support/origin_trials",
    "//components/gwp_asan/common",
    "//components/services/heap_profiling/public/cpp",
    "//components/version_info",
    "//components/version_info:generate_version_info",
    "//components/version_info/android:channel_getter",
    "//content/public/common",
    "//gpu/config",
    "//ipc",
    "//mojo/public/cpp/bindings",
    "//skia",
    "//ui/base",
    "//ui/gfx/geometry",
    "//ui/gfx/ipc/geometry",
    "//ui/gfx/ipc/skia",
    "//url",
  ]
}

mojom("mojom") {
  # We don't want Blink variants of bindings to be generated.
  disable_variants = true

  sources = [
    "mojom/frame.mojom",
    "mojom/render_message_filter.mojom",
    "mojom/renderer.mojom",
  ]

  public_deps = [
    "//mojo/public/mojom/base",
    "//skia/public/mojom",
    "//ui/gfx/geometry/mojom",
    "//url/mojom:url_mojom_gurl",
  ]
}

source_set("tests") {
  testonly = true

  sources = [ "metrics/app_package_name_logging_rule_unittests.cc" ]
  deps = [
    ":common",
    "//base",
    "//base/test:test_support",
  ]
}
