# 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 = [
  "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",
    "string_util.cc",
    "string_util.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" ]
}
