# Copyright 2015 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.

if (is_android) {
  import("//build/config/android/rules.gni")
}

# GYP version: components/safe_json.gypi:safe_json
source_set("safe_json") {
  sources = [
    "android/component_jni_registrar.cc",
    "android/component_jni_registrar.h",
    "json_sanitizer.cc",
    "json_sanitizer.h",
    "json_sanitizer_android.cc",
    "safe_json_parser.cc",
    "safe_json_parser.h",
    "safe_json_parser_android.cc",
    "safe_json_parser_android.h",
    "safe_json_parser_impl.cc",
    "safe_json_parser_impl.h",
  ]

  deps = [
    ":safe_json_parser_message_filter",
    "//base",
    "//components/strings",
    "//content/public/browser",
    "//ui/base",
  ]

  if (is_android) {
    sources -= [
      "json_sanitizer.cc",
      "safe_json_parser_impl.cc",
      "safe_json_parser_impl.h",
    ]
    deps += [ "android:safe_json_jni_headers" ]
  }
}

# GYP version: components/safe_json.gypi:safe_json_unittest_sources
source_set("unit_tests") {
  testonly = true
  sources = [
    "json_sanitizer_unittest.cc",
  ]

  deps = [
    ":safe_json",
    ":test_support",
    "//base",
    "//testing/gtest",
  ]
}

# GYP version: components/safe_json.gypi:safe_json_test_support
source_set("test_support") {
  testonly = true
  sources = [
    "testing_json_parser.cc",
    "testing_json_parser.h",
  ]

  deps = [
    ":safe_json",
    "//base",
  ]
}

# GYP version: components/safe_json.gypi:safe_json_parser_message_filter
source_set("safe_json_parser_message_filter") {
  sources = [
    "safe_json_parser_message_filter.cc",
    "safe_json_parser_message_filter.h",
    "safe_json_parser_messages.cc",
    "safe_json_parser_messages.h",
  ]

  deps = [
    "//base",
    "//content/public/common",
    "//content/public/utility",
    "//ipc",
  ]
}
