# 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/jumbo.gni")

jumbo_component("web_dialogs") {
  sources = [
    "web_dialog_delegate.cc",
    "web_dialog_delegate.h",
    "web_dialog_ui.cc",
    "web_dialog_ui.h",
    "web_dialog_web_contents_delegate.cc",
    "web_dialog_web_contents_delegate.h",
    "web_dialogs_export.h",
  ]

  defines = [ "WEB_DIALOGS_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//content/public/browser",
    "//content/public/common",
    "//skia",
    "//ui/base",
    "//ui/webui",
    "//url",
  ]

  if (!is_ios) {
    deps += [ "//third_party/blink/public:blink_headers" ]
  }
}

jumbo_static_library("test_support") {
  sources = [
    "test/test_web_contents_handler.cc",
    "test/test_web_contents_handler.h",
    "test/test_web_dialog_delegate.cc",
    "test/test_web_dialog_delegate.h",
  ]

  public_deps = [
    ":web_dialogs",
  ]
  deps = [
    "//base",
    "//content/public/browser",
    "//skia",
    "//ui/gfx/geometry",
    "//url",
  ]
}

source_set("web_dialogs_unittests") {
  testonly = true

  sources = [
    "web_dialog_ui_unittest.cc",
  ]

  deps = [
    ":web_dialogs",
    "//base",
    "//base/test:test_support",
    "//content/test:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/boringssl",
  ]
}
