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

assert(!is_android && !is_ios)

static_library("web_modal") {
  sources = [
    "modal_dialog_host.cc",
    "modal_dialog_host.h",
    "single_web_contents_dialog_manager.h",
    "web_contents_modal_dialog_host.cc",
    "web_contents_modal_dialog_host.h",
    "web_contents_modal_dialog_manager.cc",
    "web_contents_modal_dialog_manager.h",
    "web_contents_modal_dialog_manager_delegate.cc",
    "web_contents_modal_dialog_manager_delegate.h",
  ]

  public_deps = [
    "//base",
    "//content/public/browser",
    "//ui/gfx",
  ]

  deps = [
    "//net",
    "//skia",
    "//ui/gfx/geometry",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "test_web_contents_modal_dialog_host.cc",
    "test_web_contents_modal_dialog_host.h",
    "test_web_contents_modal_dialog_manager_delegate.cc",
    "test_web_contents_modal_dialog_manager_delegate.h",
  ]

  public_deps = [
    ":web_modal",
  ]
  deps = [
    "//base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "web_contents_modal_dialog_manager_unittest.cc",
  ]

  deps = [
    ":test_support",
    ":web_modal",
    "//base",
    "//content/test:test_support",
    "//testing/gtest",
  ]
}
