# 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")
import("//build/config/ui.gni")
import("//testing/test.gni")

jumbo_component("native_theme") {
  sources = [
    "common_theme.cc",
    "common_theme.h",
    "native_theme.cc",
    "native_theme.h",
    "native_theme_android.cc",
    "native_theme_android.h",
    "native_theme_base.cc",
    "native_theme_base.h",
    "native_theme_export.h",
    "native_theme_features.cc",
    "native_theme_features.h",
    "native_theme_mac.h",
    "native_theme_mac.mm",
    "native_theme_observer.cc",
    "native_theme_observer.h",
  ]

  if (use_aura || toolkit_views) {
    sources += [
      "native_theme_aura.cc",
      "native_theme_aura.h",
      "native_theme_dark_aura.cc",
      "native_theme_dark_aura.h",
      "overlay_scrollbar_constants_aura.h",
    ]
  }

  defines = [ "NATIVE_THEME_IMPLEMENTATION" ]

  public_deps = [
    "//skia",
  ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//cc/paint",
    "//ui/base",
    "//ui/display",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/resources",
  ]

  if (is_mac) {
    libs = [
      "CoreGraphics.framework",
      "AppKit.framework",
    ]
  }
}

if (is_win) {
  jumbo_component("native_theme_browser") {
    defines = [ "NATIVE_THEME_IMPLEMENTATION" ]

    # These files cannot work in the renderer on Windows.
    sources = [
      "native_theme_win.cc",
      "native_theme_win.h",
    ]

    deps = [
      ":native_theme",
      "//base",
      "//cc/paint",
      "//ui/base",
      "//ui/display",
      "//ui/gfx",
    ]
  }
} else {
  jumbo_source_set("native_theme_browser") {
  }
}

jumbo_source_set("test_support") {
  testonly = true

  deps = [
    ":native_theme",
    "//base",
  ]

  sources = [
    "test_native_theme.cc",
    "test_native_theme.h",
  ]
}

test("native_theme_unittests") {
  sources = []

  if (use_aura) {
    sources += [ "native_theme_aura_unittest.cc" ]
  }

  if (is_mac) {
    sources += [ "native_theme_mac_unittest.cc" ]
  }

  deps = [
    ":native_theme",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/base",
    "//ui/gfx/geometry:geometry",
  ]
}
