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

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

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

  deps = [
    "//base",
    "//components/resources",
    "//components/strings",
    "//ui/base",
  ]

  if (target_os == "android") {
    sources += [
      "supervised_user_error_page_android.cc",
      "supervised_user_error_page_android.h",
    ]
    deps += [ "//components/web_restrictions:interfaces" ]
  }
}

if (target_os == "android") {
  source_set("gin") {
    sources = [
      "gin_wrapper.cc",
      "gin_wrapper.h",
    ]
    deps = [
      "//cc/paint",
      "//components/web_restrictions:interfaces",
      "//content/public/renderer",
      "//gin",
      "//third_party/blink/public:blink_headers",
      "//url",
    ]
  }
}

if (is_android) {
  java_cpp_enum("enums_srcjar") {
    sources = [
      "supervised_user_error_page.h",
    ]
  }
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "supervised_user_error_page_unittest.cc",
  ]
  deps = [
    ":supervised_user_error_page",
    "//base",
    "//base/test:test_support",
    "//components/resources",
    "//components/strings",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base",
  ]
}
