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

_inspector_protocol = "//third_party/inspector_protocol"
import("$_inspector_protocol/inspector_protocol.gni")

_protocol_generated = [
  "base_string_adapter.cc",
  "base_string_adapter.h",
  "CSS.cpp",
  "CSS.h",
  "DOM.cpp",
  "DOM.h",
  "Forward.h",
  "Overlay.cpp",
  "Overlay.h",
  "Protocol.cpp",
  "Protocol.h",
]

action("protocol_compatibility") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  script = "$_inspector_protocol/check_protocol_compatibility.py"
  inputs = [
    "protocol.json",
  ]

  _stamp = "$target_gen_dir/protocol.stamp"
  outputs = [
    _stamp,
  ]

  args = [
    "--stamp",
    rebase_path(_stamp, root_build_dir),
    rebase_path("protocol.json", root_build_dir),
  ]
}

inspector_protocol_generate("protocol_generated_sources") {
  inspector_protocol_dir = _inspector_protocol
  visibility = [ ":*" ]  # Only targets in this file can depend on this.

  deps = [
    ":protocol_compatibility",
  ]

  out_dir = target_gen_dir
  config_file = "inspector_protocol_config.json"
  inputs = [
    "protocol.json",
    "inspector_protocol_config.json",
  ]

  outputs = _protocol_generated
}

component("ui_devtools") {
  sources = rebase_path(_protocol_generated, ".", target_gen_dir)
  sources += [
    "css_agent.cc",
    "css_agent.h",
    "devtools_base_agent.h",
    "devtools_client.cc",
    "devtools_client.h",
    "devtools_export.h",
    "devtools_server.cc",
    "devtools_server.h",
    "dom_agent.cc",
    "dom_agent.h",
    "overlay_agent.cc",
    "overlay_agent.h",
    "root_element.cc",
    "root_element.h",
    "switches.cc",
    "switches.h",
    "ui_element.cc",
    "ui_element.h",
    "ui_element_delegate.h",
  ]

  defines = [ "UI_DEVTOOLS_IMPLEMENTATION" ]

  cflags = []
  if (is_win) {
    cflags += [ "/wd4800" ]  # Value forced to bool.
  }

  deps = [
    ":protocol_generated_sources",
    "//base",
    "//net",
    "//ui/gfx",
  ]

  public_deps = [
    "//services/network/public/cpp",
    "//services/network/public/mojom",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "ui_devtools_unittest_utils.cc",
    "ui_devtools_unittest_utils.h",
  ]
  public_deps = [
    ":ui_devtools",
    "//testing/gmock",
  ]
}

source_set("unit_tests") {
  testonly = true

  cflags = []
  if (is_win) {
    cflags += [ "/wd4800" ]  # Value forced to bool.
  }

  sources = [
    #TODO(lgrey,weili): fix and enable css agent tests.
    #"css_agent_unittest.cc",
    "devtools_server_unittest.cc",
  ]

  deps = [
    ":test_support",
    "//base/test:test_support",
    "//net:test_support",
    "//services/network:network_service",
    "//testing/gtest",
  ]

  configs += [ "//build/config:precompiled_headers" ]
}
