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

# FIXME: factor out bindings_core http://crbug.com/358074
import("//third_party/WebKit/Source/bindings/bindings.gni")
import("//third_party/WebKit/Source/modules/modules.gni")

bindings_modules_output_dir = "$bindings_output_dir/modules"

modules_core_global_constructors_original_interfaces = [
  "ServiceWorkerGlobalScope",
]

modules_global_constructors_original_interfaces = [
  "Window",
  "SharedWorkerGlobalScope",
  "DedicatedWorkerGlobalScope",
  "ServiceWorkerGlobalScope",
]

modules_core_global_constructors_generated_idl_files = []
foreach (interface, modules_core_global_constructors_original_interfaces) {
  modules_core_global_constructors_generated_idl_files += [
    "$blink_modules_output_dir/${interface}CoreConstructors.idl"
  ]
}

modules_global_constructors_generated_idl_files = []
foreach (interface, modules_global_constructors_original_interfaces) {
  modules_global_constructors_generated_idl_files += [
    "$blink_modules_output_dir/${interface}ModulesConstructors.idl"
  ]
}

