# 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("//testing/test.gni")

group("common") {
  deps = [
    ":common_base",
    ":url_type_converters",
  ]
}

# GYP version: mojo/mojo_base.gyp:mojo_common_lib
component("common_base") {
  output_name = "mojo_common_lib"

  sources = [
    "common_type_converters.cc",
    "common_type_converters.h",
    "data_pipe_file_utils.cc",
    "data_pipe_utils.cc",
    "data_pipe_utils.h",
    "handle_watcher.cc",
    "handle_watcher.h",
    "message_pump_mojo.cc",
    "message_pump_mojo.h",
    "message_pump_mojo_handler.h",
    "time_helper.cc",
    "time_helper.h",
    "user_agent.cc",
    "user_agent.h",
    "weak_binding_set.h",
    "weak_interface_ptr_set.h",
  ]

  defines = [ "MOJO_COMMON_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//third_party/mojo/src/mojo/public/c/system:for_component",
  ]
}

# GYP version: mojo/mojo_base.gyp:mojo_url_type_converters
source_set("url_type_converters") {
  sources = [
    "url_type_converters.cc",
    "url_type_converters.h",
  ]

  include_dirs = [ "//third_party/mojo/src/" ]

  deps = [
    ":common_base",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//url",
  ]
}
