# 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("//extensions/buildflags/buildflags.gni")

if (!is_android) {
  import("//build/config/features.gni")
  import("//chrome/common/features.gni")
  import("//tools/grit/grit_rule.gni")
}

if (!is_android) {
  _inspector_protocol = "//third_party/inspector_protocol"
  import("$_inspector_protocol/inspector_protocol.gni")

  _protocol_generated = [
    "protocol/browser.cc",
    "protocol/browser.h",
    "protocol/forward.h",
    "protocol/page.cc",
    "protocol/page.h",
    "protocol/protocol.cc",
    "protocol/protocol.h",
    "protocol/target.cc",
    "protocol/target.h",
  ]

  if (is_chromeos) {
    _protocol_generated += [
      "protocol/window_manager.cc",
      "protocol/window_manager.h",
    ]
  }

  _concatenated_protocol_path =
      "$root_gen_dir/chrome/browser/devtools/protocol.json"
  action("concatenate_protocols") {
    script = _inspector_protocol + "/concatenate_protocols.py"

    deps = [
      "//third_party/blink/renderer/core/inspector:protocol_version",
    ]

    _blink_protocol_path =
        "$root_gen_dir/third_party/blink/renderer/core/inspector/protocol.json"
    inputs = [
      _blink_protocol_path,
    ]
    output_file = _concatenated_protocol_path
    outputs = [
      output_file,
    ]

    args = [ rebase_path(_blink_protocol_path, root_build_dir) ]
    if (is_chromeos) {
      inputs += [ "cros_protocol.pdl" ]
      args += [ rebase_path("cros_protocol.pdl", root_build_dir) ]
    }

    args += [ rebase_path(output_file, 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 = [
      ":concatenate_protocols",
    ]
    out_dir = target_gen_dir
    config_file = "inspector_protocol_config.json"

    protocol_path = rebase_path(_concatenated_protocol_path, root_build_dir)
    config_values = [ "protocol.path=$protocol_path" ]

    inputs = [
      _concatenated_protocol_path,
      "inspector_protocol_config.json",
    ]

    outputs = _protocol_generated
  }
}

static_library("devtools") {
  # Note: new sources and deps should be generally added in (!is_android) below.
  sources = []

  configs += [
    "//build/config/compiler:no_size_t_to_int_warning",
    "//build/config/compiler:wexit_time_destructors",
    "//build/config:precompiled_headers",
  ]

  deps = [
    "//base",
    "//content/public/browser",
    "//net",
    "//services/viz/privileged/interfaces/compositing",
    "//third_party/blink/public:buildflags",
    "//ui/events:dom_keycode_converter",
  ]

  if (!is_android) {
    deps += [
      "//chrome:extra_resources",
      "//chrome:resources",
      "//chrome:strings",
      "//chrome/app/theme:theme_resources",
      "//chrome/common",
      "//components/viz/host",
      "//net/server:http_server",
      "//skia",
      "//third_party/icu",
      "//third_party/leveldatabase",
    ]
    sources += [
      "chrome_devtools_manager_delegate.cc",
      "chrome_devtools_manager_delegate.h",
      "chrome_devtools_session.cc",
      "chrome_devtools_session.h",
      "device/adb/adb_client_socket.cc",
      "device/adb/adb_client_socket.h",
      "device/adb/adb_device_provider.cc",
      "device/adb/adb_device_provider.h",
      "device/android_device_info_query.cc",
      "device/android_device_manager.cc",
      "device/android_device_manager.h",
      "device/android_web_socket.cc",
      "device/devtools_android_bridge.cc",
      "device/devtools_android_bridge.h",
      "device/devtools_device_discovery.cc",
      "device/devtools_device_discovery.h",
      "device/port_forwarding_controller.cc",
      "device/port_forwarding_controller.h",
      "device/tcp_device_provider.cc",
      "device/tcp_device_provider.h",
      "device/usb/android_rsa.cc",
      "device/usb/android_rsa.h",
      "device/usb/android_usb_device.cc",
      "device/usb/android_usb_device.h",
      "device/usb/android_usb_socket.cc",
      "device/usb/android_usb_socket.h",
      "device/usb/usb_device_provider.cc",
      "device/usb/usb_device_provider.h",
      "devtools_auto_opener.cc",
      "devtools_auto_opener.h",
      "devtools_contents_resizing_strategy.cc",
      "devtools_contents_resizing_strategy.h",
      "devtools_embedder_message_dispatcher.cc",
      "devtools_embedder_message_dispatcher.h",
      "devtools_eye_dropper.cc",
      "devtools_eye_dropper.h",
      "devtools_file_helper.cc",
      "devtools_file_helper.h",
      "devtools_file_system_indexer.cc",
      "devtools_file_system_indexer.h",
      "devtools_file_watcher.cc",
      "devtools_file_watcher.h",
      "devtools_infobar_delegate.cc",
      "devtools_infobar_delegate.h",
      "devtools_targets_ui.cc",
      "devtools_targets_ui.h",
      "devtools_toggle_action.cc",
      "devtools_toggle_action.h",
      "devtools_ui_bindings.cc",
      "devtools_ui_bindings.h",
      "devtools_window.cc",
      "devtools_window.h",
      "global_confirm_info_bar.cc",
      "global_confirm_info_bar.h",
      "remote_debugging_server.cc",
      "remote_debugging_server.h",
      "serialize_host_descriptions.cc",
      "serialize_host_descriptions.h",
      "url_constants.cc",
      "url_constants.h",
    ]
    if (enable_service_discovery) {
      sources += [
        "device/cast_device_provider.cc",
        "device/cast_device_provider.h",
      ]
    }
  }

  if (!is_android) {
    deps += [ ":protocol_generated_sources" ]
    sources += [
      "protocol/browser_handler.cc",
      "protocol/browser_handler.h",
      "protocol/page_handler.cc",
      "protocol/page_handler.h",
      "protocol/target_handler.cc",
      "protocol/target_handler.h",
      "protocol_string.cc",
      "protocol_string.h",
    ]
    if (is_chromeos) {
      sources += [
        "protocol/window_manager_handler.cc",
        "protocol/window_manager_handler.h",
      ]
    }
    sources += rebase_path(_protocol_generated, ".", target_gen_dir)
  }

  if (enable_extensions) {
    deps += [ "//chrome/common/extensions/api" ]
  }
}

static_library("test_support") {
  sources = []
  deps = []

  if (!is_android) {
    deps += [
      "//base",
      "//chrome/browser/ui",
      "//content/public/browser",
    ]

    sources += [
      "devtools_window_testing.cc",
      "devtools_window_testing.h",
    ]
  }
}
