# Copyright 2015 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.

action("field_trial_testing_config_action") {
  visibility = [ ":field_trial_config" ]
  script = "//tools/variations/fieldtrial_to_struct.py"

  source = "//testing/variations/fieldtrial_testing_config.json"
  inputs = [
    "//tools/json_to_struct/element_generator.py",
    "//tools/json_to_struct/json_to_struct.py",
    "//tools/json_to_struct/struct_generator.py",
    source,
  ]
  out_name = "fieldtrial_testing_config"
  outputs = [
    "$target_gen_dir/$out_name.cc",
    "$target_gen_dir/$out_name.h",
  ]

  if (current_os == "win") {
    platform = "windows"
  } else {
    platform = current_os
  }

  args = [
    rebase_path(source, root_build_dir),
    "--destbase=" + rebase_path(target_gen_dir, root_build_dir),
    "--namespace=variations",
    "--schema=" +
        rebase_path("field_trial_testing_config_schema.json", root_build_dir),
    "--platform=" + platform,
    "--output=$out_name",
  ]

  # At build-time, Android Chrome and WebView both use platform "android", but
  # at run-time, variations has separate platforms "android" and
  # "android_webview". So if building "android", also include WebView.
  if (platform == "android") {
    args += [ "--platform=android_webview" ]
  }
}

static_library("field_trial_config") {
  sources = [
    "field_trial_util.cc",
    "field_trial_util.h",
  ]

  sources += get_target_outputs(":field_trial_testing_config_action")

  deps = [
    ":field_trial_testing_config_action",
    "//base",
    "//components/variations",
    "//components/variations/proto:proto",
    "//net",
  ]

  public_deps = [ "//third_party/protobuf:protobuf_lite" ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "field_trial_util_unittest.cc",
  ]
  deps = [
    ":field_trial_config",
    "//base",
    "//base/test:test_support",
    "//components/variations",
    "//testing/gtest",
  ]
}
