# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

static_library("websocket") {
  has_pedantic_warnings = true

  sources = [
    "buffered_amount_tracker.cc",
    "buffered_amount_tracker.h",
    "close_event.h",
    "cobalt_web_socket_event_handler.cc",
    "cobalt_web_socket_event_handler.h",
    "sec_web_socket_key.h",
    "web_socket.cc",
    "web_socket.h",
    "web_socket_impl.cc",
    "web_socket_impl.h",
  ]
  deps = [
    "//cobalt/base",
    "//cobalt/browser:generated_type_conversion",
    "//cobalt/dom",
    "//cobalt/network",
    "//cobalt/script",
    "//cobalt/web:dom_exception",
    "//net",
    "//starboard:starboard_group",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]
}

target(gtest_target_type, "websocket_test") {
  testonly = true
  has_pedantic_warnings = true
  sources = [
    "mock_websocket_channel.cc",
    "mock_websocket_channel.h",
    "web_socket_impl_test.cc",
    "web_socket_test.cc",
  ]
  deps = [
    ":websocket",
    "//cobalt/base",
    "//cobalt/dom",
    "//cobalt/dom/testing:dom_testing",
    "//cobalt/network",
    "//cobalt/script",
    "//cobalt/test:run_all_unittests",
    "//cobalt/web:dom_exception",
    "//cobalt/web/testing:web_testing",
    "//testing/gmock",
    "//testing/gtest",
    "//url",

    # TODO: Remove the dependency below, it works around the fact that
    #       ScriptValueFactory has non-virtual method CreatePromise().
    "//cobalt/script:engine",
  ]

  if (!is_gold) {
    deps += [ "//cobalt/debug" ]
  }
}
