# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/buildflag_header.gni")

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

_protocol_generated = [
  "css.cc",
  "css.h",
  "dom.cc",
  "dom.h",
  "forward.h",
  "overlay.cc",
  "overlay.h",
  "page.cc",
  "page.h",
  "protocol.h",
  "tracing.h",
  "tracing.cc",
]

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",
  ]
  use_embedder_types = true

  outputs = _protocol_generated
}

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

  defines = [ "UI_DEVTOOLS_IMPLEMENTATION" ]

  deps = [
    ":features",
    ":protocol_generated_sources",
    "//base",
    "//content/public/common",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//net",
    "//third_party/inspector_protocol:crdtp",
    "//ui/base/interaction",
    "//ui/gfx",
  ]

  public_deps = [
    "//content/public/browser",
    "//services/service_manager/public/cpp",
    "//services/tracing/public/cpp",
    "//services/tracing/public/mojom",
  ]
}

component("features") {
  output_name = "ui_devtools_features"

  defines = [ "IS_UI_DEVTOOLS_FEATURES_IMPL" ]

  sources = [
    "ui_devtools_features.cc",
    "ui_devtools_features.h",
  ]

  deps = [ "//base" ]
}

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

source_set("unit_tests") {
  testonly = true

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

  sources = [
    "css_agent_unittest.cc",
    "devtools_server_unittest.cc",
    "ui_element_unittest.cc",
  ]

  data = [ "//components/test/data/ui_devtools/test_file.cc" ]

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

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