# 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",
  ]
}
