Remove the dependency on json schema compiler.

BUG=None
TEST=None
R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/682493002
diff --git a/.gitignore b/.gitignore
index d72ad58..c04f7f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -407,7 +407,6 @@
 /tools/grit
 /tools/gyp
 /tools/histograms
-/tools/json_schema_compiler/test/json_schema_compiler_tests.xml
 /tools/metrics/histograms/histograms.before.pretty-print.xml
 /tools/page_cycler/acid3
 /tools/perf/data
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 799c534..1f2067d 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -1117,28 +1117,9 @@
   return None
 
 
-def _GetIDLParseError(input_api, filename):
-  try:
-    contents = input_api.ReadFile(filename)
-    idl_schema = input_api.os_path.join(
-        input_api.PresubmitLocalPath(),
-        'tools', 'json_schema_compiler', 'idl_schema.py')
-    process = input_api.subprocess.Popen(
-        [input_api.python_executable, idl_schema],
-        stdin=input_api.subprocess.PIPE,
-        stdout=input_api.subprocess.PIPE,
-        stderr=input_api.subprocess.PIPE,
-        universal_newlines=True)
-    (_, error) = process.communicate(input=contents)
-    return error or None
-  except ValueError as e:
-    return e
-
-
 def _CheckParseErrors(input_api, output_api):
-  """Check that IDL and JSON files do not contain syntax errors."""
+  """Check that JSON files do not contain syntax errors."""
   actions = {
-    '.idl': _GetIDLParseError,
     '.json': _GetJSONParseError,
   }
   # These paths contain test data and other known invalid JSON files.
@@ -1150,11 +1131,6 @@
   json_no_comments_patterns = [
     r'^testing[\\\/]',
   ]
-  # Only run IDL checker on files in these directories.
-  idl_included_patterns = [
-    r'^chrome[\\\/]common[\\\/]extensions[\\\/]api[\\\/]',
-    r'^extensions[\\\/]common[\\\/]api[\\\/]',
-  ]
 
   def get_action(affected_file):
     filename = affected_file.LocalPath()
@@ -1174,10 +1150,6 @@
 
     if MatchesFile(excluded_patterns, path):
       return False
-
-    if (action == _GetIDLParseError and
-        not MatchesFile(idl_included_patterns, path)):
-      return False
     return True
 
   results = []
diff --git a/build/json_schema_api.gni b/build/json_schema_api.gni
deleted file mode 100644
index 5857739..0000000
--- a/build/json_schema_api.gni
+++ /dev/null
@@ -1,209 +0,0 @@
-# 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.
-
-# Defines a static library corresponding to the output of schema compiler tools
-# over a set of extensions API schemas (IDL or JSON format.) The library target
-# has implicit hard dependencies on all schema files listed by the invoker and
-# is itself a hard dependency.
-#
-# Invocations of this template may use the following variables:
-#
-# sources [required] A list of schema files to be compiled.
-#
-# root_namespace [required]
-#     A Python string substituion pattern used to generate the C++
-#     namespace for each API. Use %(namespace)s to replace with the API
-#     namespace, like "toplevel::%(namespace)s_api".
-#
-# schema_include_rules [optional]
-#     A list of paths to include when searching for referenced objects,
-#     with the namespace separated by a :.
-#     Example:
-#       [ '/foo/bar:Foo::Bar::%(namespace)s' ]
-#
-# schemas [optional, default = false]
-#   Boolean indicating if the schema files should be generated.
-#
-# bundle [optional, default = false]
-#   Boolean indicating if the schema bundle files should be generated.
-#
-# bundle_registration [optional, default = false]
-#   Boolean indicating if the API registration bundle files should be generated.
-#
-# impl_dir [required if bundle_registration = true, otherwise unused]
-#   The path containing C++ implementations of API functions. This path is
-#   used as the root path when looking for {schema}/{schema}_api.h headers
-#   when generating API registration bundles. Such headers, if found, are
-#   automatically included by the generated code.
-#
-# uncompiled_sources [optional, only used when bundle = true or
-#     bundle_registration = true]
-#   A list of schema files which should not be compiled, but which should still
-#   be processed for API bundle generation.
-#
-# deps [optional]
-#   If any deps are specified they will be inherited by the static library
-#   target.
-#
-# The static library target also inherits the visibility and output_name
-# of its invoker.
-
-template("json_schema_api") {
-  assert(defined(invoker.sources),
-         "\"sources\" must be defined for the $target_name template.")
-  assert(defined(invoker.root_namespace),
-         "\"root_namespace\" must be defined for the $target_name template.")
-
-  schemas = defined(invoker.schemas) && invoker.schemas
-  bundle = defined(invoker.bundle) && invoker.bundle
-  bundle_registration = defined(invoker.bundle_registration) &&
-      invoker.bundle_registration
-
-  schema_include_rules = ""
-  if (defined(invoker.schema_include_rules)) {
-    schema_include_rules = invoker.schema_include_rules
-  }
-
-  # Keep a copy of the target_name here since it will be trampled
-  # in nested targets.
-  target_visibility = [ ":$target_name" ]
-
-  generated_config_name = target_name + "_generated_config"
-  config(generated_config_name) {
-    include_dirs = [ target_gen_dir ]
-    visibility = target_visibility
-  }
-
-  sources = invoker.sources
-  root_namespace = invoker.root_namespace
-
-  compiler_root = "//tools/json_schema_compiler"
-  compiler_script = "$compiler_root/compiler.py"
-  compiler_sources = [
-    "$compiler_root/cc_generator.py",
-    "$compiler_root/code.py",
-    "$compiler_root/compiler.py",
-    "$compiler_root/cpp_generator.py",
-    "$compiler_root/cpp_type_generator.py",
-    "$compiler_root/cpp_util.py",
-    "$compiler_root/h_generator.py",
-    "$compiler_root/idl_schema.py",
-    "$compiler_root/model.py",
-    "$compiler_root/util_cc_helper.py",
-  ]
-
-  if (schemas) {
-    schema_generator_name = target_name + "_schema_generator"
-    action_foreach(schema_generator_name) {
-      script = compiler_script
-      inputs = compiler_sources
-      outputs = [
-        "$target_gen_dir/{{source_name_part}}.cc",
-        "$target_gen_dir/{{source_name_part}}.h",
-      ]
-      args = [
-        "{{source}}",
-        "--root=" + rebase_path("//", root_build_dir),
-        "--destdir=" + rebase_path(root_gen_dir, root_build_dir),
-        "--namespace=$root_namespace",
-        "--generator=cpp",
-        "--include-rules=$schema_include_rules" ]
-
-      if (defined(invoker.visibility)) {
-        # If visibility is restricted, add our own target to it.
-        visibility = [ invoker.visibility, target_visibility ]
-      }
-    }
-  }
-
-  if (bundle) {
-    uncompiled_sources = []
-    if (defined(invoker.uncompiled_sources)) {
-     uncompiled_sources = invoker.uncompiled_sources
-    }
-
-    bundle_generator_schema_name = target_name + "_bundle_generator_schema"
-    action(bundle_generator_schema_name) {
-      script = compiler_script
-      inputs = compiler_sources + sources + uncompiled_sources
-      outputs = [
-        "$target_gen_dir/generated_schemas.cc",
-        "$target_gen_dir/generated_schemas.h",
-      ]
-      args = [
-        "--root=" + rebase_path("//", root_build_dir),
-        "--destdir=" + rebase_path(root_gen_dir, root_build_dir),
-        "--namespace=$root_namespace",
-        "--generator=cpp-bundle-schema",
-        "--include-rules=$schema_include_rules" ]
-        + rebase_path(sources, root_build_dir)
-        + rebase_path(uncompiled_sources, root_build_dir)
-    }
-  }
-
-  if (bundle_registration) {
-    uncompiled_sources = []
-    if (defined(invoker.uncompiled_sources)) {
-     uncompiled_sources = invoker.uncompiled_sources
-    }
-
-    assert(defined(invoker.impl_dir),
-           "\"impl_dir\" must be defined for the $target_name template.")
-    impl_dir = invoker.impl_dir
-
-    bundle_generator_registration_name = target_name +
-        "_bundle_generator_registration"
-    action(bundle_generator_registration_name) {
-      script = compiler_script
-      inputs = compiler_sources + sources + uncompiled_sources
-      outputs = [
-        "$root_gen_dir/$impl_dir/generated_api_registration.cc",
-        "$root_gen_dir/$impl_dir/generated_api_registration.h",
-      ]
-      args = [
-        "--root=" + rebase_path("//", root_build_dir),
-        "--destdir=" + rebase_path(root_gen_dir, root_build_dir),
-        "--namespace=$root_namespace",
-        "--generator=cpp-bundle-registration",
-        "--impl-dir=" + rebase_path(impl_dir, "//"),
-        "--include-rules=$schema_include_rules" ]
-        + rebase_path(sources, root_build_dir)
-        + rebase_path(uncompiled_sources, root_build_dir)
-    }
-  }
-
-  source_set(target_name) {
-    sources = []
-    deps = []
-    public_deps = []
-
-    if (schemas) {
-      sources += get_target_outputs(":$schema_generator_name")
-      public_deps += [ ":$schema_generator_name" ]
-      deps += [ "//tools/json_schema_compiler:generated_api_util" ]
-    }
-
-    if (bundle) {
-      sources += get_target_outputs(":$bundle_generator_schema_name")
-      deps += [ ":$bundle_generator_schema_name" ]
-    }
-
-    if (bundle_registration) {
-      sources += get_target_outputs(":$bundle_generator_registration_name")
-      deps += [ ":$bundle_generator_registration_name" ]
-    }
-
-    if (defined(invoker.deps)) {
-      deps += invoker.deps
-    }
-    public_configs = [ ":$generated_config_name" ]
-
-    if (defined(invoker.visibility)) {
-      visibility = invoker.visibility
-    }
-    if (defined(invoker.output_name)) {
-      output_name = invoker.output_name
-    }
-  }
-}
diff --git a/build/json_schema_bundle_compile.gypi b/build/json_schema_bundle_compile.gypi
deleted file mode 100644
index a302013..0000000
--- a/build/json_schema_bundle_compile.gypi
+++ /dev/null
@@ -1,83 +0,0 @@
-# Copyright (c) 2012 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.
-
-{
-  'variables': {
-    # When including this gypi, the following variables must be set:
-    #   schema_files:
-    #     An array of json or idl files that comprise the api model.
-    #   schema_include_rules (optional):
-    #     An array of paths to include when searching for referenced objects,
-    #     with the namespace separated by a :.
-    #     Example:
-    #       [ '/foo/bar:Foo::Bar::%(namespace)s' ]
-    #   cc_dir:
-    #     The directory to put the generated code in.
-    #   root_namespace:
-    #     A Python string substituion pattern used to generate the C++
-    #     namespace for each API. Use %(namespace)s to replace with the API
-    #     namespace, like "toplevel::%(namespace)s_api".
-    #
-    # Functions and namespaces can be excluded by setting "nocompile" to true.
-    # The default root path of API implementation sources is
-    # chrome/browser/extensions/api and can be overridden by setting "impl_dir".
-    'api_gen_dir': '<(DEPTH)/tools/json_schema_compiler',
-    'api_gen': '<(api_gen_dir)/compiler.py',
-    'generator_files': [
-      '<(api_gen_dir)/cc_generator.py',
-      '<(api_gen_dir)/code.py',
-      '<(api_gen_dir)/compiler.py',
-      '<(api_gen_dir)/cpp_bundle_generator.py',
-      '<(api_gen_dir)/cpp_type_generator.py',
-      '<(api_gen_dir)/cpp_util.py',
-      '<(api_gen_dir)/h_generator.py',
-      '<(api_gen_dir)/idl_schema.py',
-      '<(api_gen_dir)/json_schema.py',
-      '<(api_gen_dir)/model.py',
-      '<(api_gen_dir)/util_cc_helper.py',
-    ],
-    'schema_include_rules': [],
-  },
-  'actions': [
-    {
-      'action_name': 'genapi_bundle_schema',
-      'inputs': [
-        '<@(generator_files)',
-        '<@(schema_files)',
-        '<@(non_compiled_schema_files)',
-      ],
-      'outputs': [
-        '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/generated_schemas.h',
-        '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/generated_schemas.cc',
-      ],
-      'action': [
-        'python',
-        '<(api_gen)',
-        '--root=<(DEPTH)',
-        '--destdir=<(SHARED_INTERMEDIATE_DIR)',
-        '--namespace=<(root_namespace)',
-        '--generator=cpp-bundle-schema',
-        '--include-rules=<(schema_include_rules)',
-        '<@(schema_files)',
-        '<@(non_compiled_schema_files)',
-      ],
-      'message': 'Generating C++ API bundle code for schemas',
-      'process_outputs_as_sources': 1,
-      # Avoid running MIDL compiler on IDL input files.
-      'explicit_idl_action': 1,
-    },
-  ],
-  'include_dirs': [
-    '<(SHARED_INTERMEDIATE_DIR)',
-    '<(DEPTH)',
-  ],
-  'direct_dependent_settings': {
-    'include_dirs': [
-      '<(SHARED_INTERMEDIATE_DIR)',
-    ]
-  },
-  # This target exports a hard dependency because it generates header
-  # files.
-  'hard_dependency': 1,
-}
diff --git a/build/json_schema_bundle_registration_compile.gypi b/build/json_schema_bundle_registration_compile.gypi
deleted file mode 100644
index 8c5af4e..0000000
--- a/build/json_schema_bundle_registration_compile.gypi
+++ /dev/null
@@ -1,78 +0,0 @@
-# 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.
-
-{
-  'variables': {
-    # When including this gypi, the following variables must be set:
-    #   schema_files:
-    #     An array of json or idl files that comprise the api model.
-    #   impl_dir_:
-    #     The root path of API implementations; also used for the
-    #     output location. (N.B. Named as such to prevent gyp from
-    #     expanding it as a relative path.)
-    #   root_namespace:
-    #     A Python string substituion pattern used to generate the C++
-    #     namespace for each API. Use %(namespace)s to replace with the API
-    #     namespace, like "toplevel::%(namespace)s_api".
-    #
-    # Functions and namespaces can be excluded by setting "nocompile" to true.
-    'api_gen_dir': '<(DEPTH)/tools/json_schema_compiler',
-    'api_gen': '<(api_gen_dir)/compiler.py',
-    'generator_files': [
-      '<(api_gen_dir)/cc_generator.py',
-      '<(api_gen_dir)/code.py',
-      '<(api_gen_dir)/compiler.py',
-      '<(api_gen_dir)/cpp_bundle_generator.py',
-      '<(api_gen_dir)/cpp_type_generator.py',
-      '<(api_gen_dir)/cpp_util.py',
-      '<(api_gen_dir)/h_generator.py',
-      '<(api_gen_dir)/idl_schema.py',
-      '<(api_gen_dir)/json_schema.py',
-      '<(api_gen_dir)/model.py',
-      '<(api_gen_dir)/util_cc_helper.py',
-    ],
-  },
-  'actions': [
-    {
-      # GN version: json_schema_api.gni
-      'action_name': 'genapi_bundle_registration',
-      'inputs': [
-        '<@(generator_files)',
-        '<@(schema_files)',
-        '<@(non_compiled_schema_files)',
-      ],
-      'outputs': [
-        '<(SHARED_INTERMEDIATE_DIR)/<(impl_dir_)/generated_api_registration.h',
-        '<(SHARED_INTERMEDIATE_DIR)/<(impl_dir_)/generated_api_registration.cc',
-      ],
-      'action': [
-        'python',
-        '<(api_gen)',
-        '--root=<(DEPTH)',
-        '--destdir=<(SHARED_INTERMEDIATE_DIR)',
-        '--namespace=<(root_namespace)',
-        '--generator=cpp-bundle-registration',
-        '--impl-dir=<(impl_dir_)',
-        '<@(schema_files)',
-        '<@(non_compiled_schema_files)',
-      ],
-      'message': 'Generating C++ API bundle code for function registration',
-      'process_outputs_as_sources': 1,
-      # Avoid running MIDL compiler on IDL input files.
-      'explicit_idl_action': 1,
-    },
-  ],
-  'include_dirs': [
-    '<(SHARED_INTERMEDIATE_DIR)',
-    '<(DEPTH)',
-  ],
-  'direct_dependent_settings': {
-    'include_dirs': [
-      '<(SHARED_INTERMEDIATE_DIR)',
-    ]
-  },
-  # This target exports a hard dependency because it generates header
-  # files.
-  'hard_dependency': 1,
-}
diff --git a/build/json_schema_compile.gypi b/build/json_schema_compile.gypi
deleted file mode 100644
index 6e5727a..0000000
--- a/build/json_schema_compile.gypi
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (c) 2012 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.
-
-{
-  'variables': {
-    # When including this gypi, the following variables must be set:
-    #   schema_files:
-    #     An array of json or idl files that comprise the api model.
-    #   schema_include_rules (optional):
-    #     An array of paths to include when searching for referenced objects,
-    #     with the namespace separated by a :.
-    #     Example:
-    #       [ '/foo/bar:Foo::Bar::%(namespace)s' ]
-    #   cc_dir:
-    #     The directory to put the generated code in.
-    #   root_namespace:
-    #     A Python string substituion pattern used to generate the C++
-    #     namespace for each API. Use %(namespace)s to replace with the API
-    #     namespace, like "toplevel::%(namespace)s_api".
-    #
-    # Functions and namespaces can be excluded by setting "nocompile" to true.
-    'api_gen_dir': '<(DEPTH)/tools/json_schema_compiler',
-    'api_gen': '<(api_gen_dir)/compiler.py',
-    'schema_include_rules': [],
-  },
-  'rules': [
-    {
-      # GN version: json_schema_api.gni
-      'rule_name': 'genapi',
-      'msvs_external_rule': 1,
-      'extension': 'json',
-      'inputs': [
-        '<(api_gen_dir)/cc_generator.py',
-        '<(api_gen_dir)/code.py',
-        '<(api_gen_dir)/compiler.py',
-        '<(api_gen_dir)/cpp_generator.py',
-        '<(api_gen_dir)/cpp_type_generator.py',
-        '<(api_gen_dir)/cpp_util.py',
-        '<(api_gen_dir)/h_generator.py',
-        '<(api_gen_dir)/json_schema.py',
-        '<(api_gen_dir)/model.py',
-        '<(api_gen_dir)/util.cc',
-        '<(api_gen_dir)/util.h',
-        '<(api_gen_dir)/util_cc_helper.py',
-        # TODO(calamity): uncomment this when gyp on windows behaves like other
-        # platforms. List expansions of filepaths in inputs expand to different
-        # things.
-        # '<@(schema_files)',
-      ],
-      'outputs': [
-        '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).cc',
-        '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).h',
-      ],
-      'action': [
-        'python',
-        '<(api_gen)',
-        '<(RULE_INPUT_PATH)',
-        '--root=<(DEPTH)',
-        '--destdir=<(SHARED_INTERMEDIATE_DIR)',
-        '--namespace=<(root_namespace)',
-        '--generator=cpp',
-        '--include-rules=<(schema_include_rules)'
-      ],
-      'message': 'Generating C++ code from <(RULE_INPUT_PATH) json files',
-      'process_outputs_as_sources': 1,
-    },
-    {
-      'rule_name': 'genapi_idl',
-      'msvs_external_rule': 1,
-      'extension': 'idl',
-      'inputs': [
-        '<(api_gen_dir)/cc_generator.py',
-        '<(api_gen_dir)/code.py',
-        '<(api_gen_dir)/compiler.py',
-        '<(api_gen_dir)/cpp_generator.py',
-        '<(api_gen_dir)/cpp_type_generator.py',
-        '<(api_gen_dir)/cpp_util.py',
-        '<(api_gen_dir)/h_generator.py',
-        '<(api_gen_dir)/idl_schema.py',
-        '<(api_gen_dir)/model.py',
-        '<(api_gen_dir)/util.cc',
-        '<(api_gen_dir)/util.h',
-        '<(api_gen_dir)/util_cc_helper.py',
-        # TODO(calamity): uncomment this when gyp on windows behaves like other
-        # platforms. List expansions of filepaths in inputs expand to different
-        # things.
-        # '<@(schema_files)',
-      ],
-      'outputs': [
-        '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).cc',
-        '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).h',
-      ],
-      'action': [
-        'python',
-        '<(api_gen)',
-        '<(RULE_INPUT_PATH)',
-        '--root=<(DEPTH)',
-        '--destdir=<(SHARED_INTERMEDIATE_DIR)',
-        '--namespace=<(root_namespace)',
-        '--generator=cpp',
-        '--include-rules=<(schema_include_rules)'
-      ],
-      'message': 'Generating C++ code from <(RULE_INPUT_PATH) IDL files',
-      'process_outputs_as_sources': 1,
-    },
-  ],
-  'include_dirs': [
-    '<(SHARED_INTERMEDIATE_DIR)',
-    '<(DEPTH)',
-  ],
-  'dependencies':[
-    '<(DEPTH)/tools/json_schema_compiler/api_gen_util.gyp:api_gen_util',
-  ],
-  'direct_dependent_settings': {
-    'include_dirs': [
-      '<(SHARED_INTERMEDIATE_DIR)',
-    ]
-  },
-  # This target exports a hard dependency because it generates header
-  # files.
-  'hard_dependency': 1,
-}
diff --git a/build/json_to_struct.gypi b/build/json_to_struct.gypi
deleted file mode 100644
index 57271c8..0000000
--- a/build/json_to_struct.gypi
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2012 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.
-
-{
-  'variables': {
-    # When including this gypi, the following variables must be set:
-    #   schema_file: a json file that comprise the structure model.
-    #   namespace: the C++ namespace that all generated files go under
-    #   cc_dir: path to generated files
-    # Functions and namespaces can be excluded by setting "nocompile" to true.
-    'struct_gen_dir': '<(DEPTH)/tools/json_to_struct',
-    'struct_gen': '<(struct_gen_dir)/json_to_struct.py',
-  },
-  'rules': [
-    {
-      # GN version: //tools/json_to_struct/json_to_struct.gni
-      'rule_name': 'genstaticinit',
-      'extension': 'json',
-      'inputs': [
-        '<(struct_gen_dir)/element_generator.py',
-        '<(struct_gen_dir)/json_to_struct.py',
-        '<(struct_gen_dir)/struct_generator.py',
-        '<(schema_file)',
-      ],
-      'outputs': [
-        '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_ROOT).cc',
-        '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_ROOT).h',
-      ],
-      'action': [
-        'python',
-        '<(struct_gen)',
-        '<(RULE_INPUT_PATH)',
-        '--destbase=<(SHARED_INTERMEDIATE_DIR)',
-        '--destdir=<(cc_dir)',
-        '--namespace=<(namespace)',
-        '--schema=<(schema_file)',
-      ],
-      'message': 'Generating C++ static initializers from <(RULE_INPUT_PATH)',
-      'process_outputs_as_sources': 1,
-    },
-  ],
-  'include_dirs': [
-    '<(SHARED_INTERMEDIATE_DIR)',
-    '<(DEPTH)',
-  ],
-  # This target exports a hard dependency because it generates header
-  # files.
-  'hard_dependency': 1,
-}
diff --git a/mojo/tools/roll/rev.py b/mojo/tools/roll/rev.py
index 242818f..3efbec5 100755
--- a/mojo/tools/roll/rev.py
+++ b/mojo/tools/roll/rev.py
@@ -59,7 +59,6 @@
     "tools/gritsettings",
     "tools/idl_parser",
     "tools/json_comment_eater",
-    "tools/json_schema_compiler",
     "tools/linux",
     "tools/lsan",
     "tools/msan",
diff --git a/tools/json_schema_compiler/BUILD.gn b/tools/json_schema_compiler/BUILD.gn
deleted file mode 100644
index 2d7c183..0000000
--- a/tools/json_schema_compiler/BUILD.gn
+++ /dev/null
@@ -1,13 +0,0 @@
-# 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.
-
-# Utility sources against which generated API modules should be linked.
-source_set("generated_api_util") {
-  sources = [
-    "util.cc",
-    "util.h"
-  ]
-  deps = [ "//base" ]
-}
-
diff --git a/tools/json_schema_compiler/PRESUBMIT.py b/tools/json_schema_compiler/PRESUBMIT.py
deleted file mode 100644
index b98649b..0000000
--- a/tools/json_schema_compiler/PRESUBMIT.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Presubmit script for changes affecting tools/json_schema_compiler/
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details about the presubmit API built into gcl.
-"""
-
-WHITELIST = [ r'.+_test.py$' ]
-
-def CheckChangeOnUpload(input_api, output_api):
-  return input_api.canned_checks.RunUnitTestsInDirectory(
-      input_api, output_api, '.', whitelist=WHITELIST)
-
-
-def CheckChangeOnCommit(input_api, output_api):
-  return input_api.canned_checks.RunUnitTestsInDirectory(
-      input_api, output_api, '.', whitelist=WHITELIST)
diff --git a/tools/json_schema_compiler/api_gen_util.gyp b/tools/json_schema_compiler/api_gen_util.gyp
deleted file mode 100644
index 54966cc..0000000
--- a/tools/json_schema_compiler/api_gen_util.gyp
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2012 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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'targets': [{
-    'target_name': 'api_gen_util',
-    'type': 'static_library',
-    'sources': [
-        'util.cc',
-    ],
-    'dependencies': ['<(DEPTH)/base/base.gyp:base'],
-    'include_dirs': [
-      '<(DEPTH)',
-    ],
-  }],
-}
diff --git a/tools/json_schema_compiler/cc_generator.py b/tools/json_schema_compiler/cc_generator.py
deleted file mode 100644
index 1d243f0..0000000
--- a/tools/json_schema_compiler/cc_generator.py
+++ /dev/null
@@ -1,1070 +0,0 @@
-# Copyright (c) 2012 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.
-
-from code import Code
-from model import PropertyType
-import cpp_util
-import schema_util
-import util_cc_helper
-from cpp_namespace_environment import CppNamespaceEnvironment
-
-class CCGenerator(object):
-  def __init__(self, type_generator):
-    self._type_generator = type_generator
-
-  def Generate(self, namespace):
-    return _Generator(namespace, self._type_generator).Generate()
-
-
-class _Generator(object):
-  """A .cc generator for a namespace.
-  """
-  def __init__(self, namespace, cpp_type_generator):
-    assert type(namespace.environment) is CppNamespaceEnvironment
-    self._namespace = namespace
-    self._type_helper = cpp_type_generator
-    self._util_cc_helper = (
-        util_cc_helper.UtilCCHelper(self._type_helper))
-    self._generate_error_messages = namespace.compiler_options.get(
-        'generate_error_messages', False)
-
-  def Generate(self):
-    """Generates a Code object with the .cc for a single namespace.
-    """
-    cpp_namespace = cpp_util.GetCppNamespace(
-        self._namespace.environment.namespace_pattern,
-        self._namespace.unix_name)
-
-    c = Code()
-    (c.Append(cpp_util.CHROMIUM_LICENSE)
-      .Append()
-      .Append(cpp_util.GENERATED_FILE_MESSAGE % self._namespace.source_file)
-      .Append()
-      .Append(self._util_cc_helper.GetIncludePath())
-      .Append('#include "base/logging.h"')
-      .Append('#include "base/strings/string_number_conversions.h"')
-      .Append('#include "base/strings/utf_string_conversions.h"')
-      .Append('#include "%s/%s.h"' %
-              (self._namespace.source_file_dir, self._namespace.short_filename))
-      .Append('#include <set>')
-      .Cblock(self._type_helper.GenerateIncludes(include_soft=True))
-      .Append()
-      .Append('using base::UTF8ToUTF16;')
-      .Append()
-      .Concat(cpp_util.OpenNamespace(cpp_namespace))
-    )
-    if self._namespace.properties:
-      (c.Append('//')
-        .Append('// Properties')
-        .Append('//')
-        .Append()
-      )
-      for property in self._namespace.properties.values():
-        property_code = self._type_helper.GeneratePropertyValues(
-            property,
-            'const %(type)s %(name)s = %(value)s;',
-            nodoc=True)
-        if property_code:
-          c.Cblock(property_code)
-    if self._namespace.types:
-      (c.Append('//')
-        .Append('// Types')
-        .Append('//')
-        .Append()
-        .Cblock(self._GenerateTypes(None, self._namespace.types.values()))
-      )
-    if self._namespace.functions:
-      (c.Append('//')
-        .Append('// Functions')
-        .Append('//')
-        .Append()
-      )
-    for function in self._namespace.functions.values():
-      c.Cblock(self._GenerateFunction(function))
-    if self._namespace.events:
-      (c.Append('//')
-        .Append('// Events')
-        .Append('//')
-        .Append()
-      )
-      for event in self._namespace.events.values():
-        c.Cblock(self._GenerateEvent(event))
-    c.Cblock(cpp_util.CloseNamespace(cpp_namespace))
-    c.Append()
-    return c
-
-  def _GenerateType(self, cpp_namespace, type_):
-    """Generates the function definitions for a type.
-    """
-    classname = cpp_util.Classname(schema_util.StripNamespace(type_.name))
-    c = Code()
-
-    if type_.functions:
-      # Wrap functions within types in the type's namespace.
-      (c.Append('namespace %s {' % classname)
-        .Append())
-      for function in type_.functions.values():
-        c.Cblock(self._GenerateFunction(function))
-      c.Append('}  // namespace %s' % classname)
-    elif type_.property_type == PropertyType.ARRAY:
-      c.Cblock(self._GenerateType(cpp_namespace, type_.item_type))
-    elif type_.property_type in (PropertyType.CHOICES,
-                                 PropertyType.OBJECT):
-      if cpp_namespace is None:
-        classname_in_namespace = classname
-      else:
-        classname_in_namespace = '%s::%s' % (cpp_namespace, classname)
-
-      if type_.property_type == PropertyType.OBJECT:
-        c.Cblock(self._GeneratePropertyFunctions(classname_in_namespace,
-                                                 type_.properties.values()))
-      else:
-        c.Cblock(self._GenerateTypes(classname_in_namespace, type_.choices))
-
-      (c.Append('%s::%s()' % (classname_in_namespace, classname))
-        .Cblock(self._GenerateInitializersAndBody(type_))
-        .Append('%s::~%s() {}' % (classname_in_namespace, classname))
-        .Append()
-      )
-      if type_.origin.from_json:
-        c.Cblock(self._GenerateTypePopulate(classname_in_namespace, type_))
-        if cpp_namespace is None:  # only generate for top-level types
-          c.Cblock(self._GenerateTypeFromValue(classname_in_namespace, type_))
-      if type_.origin.from_client:
-        c.Cblock(self._GenerateTypeToValue(classname_in_namespace, type_))
-    elif type_.property_type == PropertyType.ENUM:
-      (c.Cblock(self._GenerateEnumToString(cpp_namespace, type_))
-        .Cblock(self._GenerateEnumFromString(cpp_namespace, type_))
-      )
-
-    return c
-
-  def _GenerateInitializersAndBody(self, type_):
-    items = []
-    for prop in type_.properties.values():
-      t = prop.type_
-
-      real_t = self._type_helper.FollowRef(t)
-      if real_t.property_type == PropertyType.ENUM:
-        items.append('%s(%s)' % (
-            prop.unix_name,
-            self._type_helper.GetEnumNoneValue(t)))
-      elif prop.optional:
-        continue
-      elif t.property_type == PropertyType.INTEGER:
-        items.append('%s(0)' % prop.unix_name)
-      elif t.property_type == PropertyType.DOUBLE:
-        items.append('%s(0.0)' % prop.unix_name)
-      elif t.property_type == PropertyType.BOOLEAN:
-        items.append('%s(false)' % prop.unix_name)
-      elif (t.property_type == PropertyType.ANY or
-            t.property_type == PropertyType.ARRAY or
-            t.property_type == PropertyType.BINARY or  # mapped to std::string
-            t.property_type == PropertyType.CHOICES or
-            t.property_type == PropertyType.OBJECT or
-            t.property_type == PropertyType.FUNCTION or
-            t.property_type == PropertyType.REF or
-            t.property_type == PropertyType.STRING):
-        # TODO(miket): It would be nice to initialize CHOICES, but we
-        # don't presently have the semantics to indicate which one of a set
-        # should be the default.
-        continue
-      else:
-        raise TypeError(t)
-
-    if items:
-      s = ': %s' % (', '.join(items))
-    else:
-      s = ''
-    s = s + ' {}'
-    return Code().Append(s)
-
-  def _GenerateTypePopulate(self, cpp_namespace, type_):
-    """Generates the function for populating a type given a pointer to it.
-
-    E.g for type "Foo", generates Foo::Populate()
-    """
-    classname = cpp_util.Classname(schema_util.StripNamespace(type_.name))
-    c = Code()
-    (c.Append('// static')
-      .Append('bool %(namespace)s::Populate(')
-      .Sblock('    %s) {' % self._GenerateParams(
-          ('const base::Value& value', '%(name)s* out'))))
-
-    if self._generate_error_messages:
-      c.Append('DCHECK(error);')
-
-    if type_.property_type == PropertyType.CHOICES:
-      for choice in type_.choices:
-        (c.Sblock('if (%s) {' % self._GenerateValueIsTypeExpression('value',
-                                                                    choice))
-            .Concat(self._GeneratePopulateVariableFromValue(
-                choice,
-                '(&value)',
-                'out->as_%s' % choice.unix_name,
-                'false',
-                is_ptr=True))
-            .Append('return true;')
-          .Eblock('}')
-        )
-      (c.Concat(self._GenerateError(
-          '"expected %s, got " +  %s' %
-              (" or ".join(choice.name for choice in type_.choices),
-              self._util_cc_helper.GetValueTypeString('value'))))
-        .Append('return false;'))
-    elif type_.property_type == PropertyType.OBJECT:
-      (c.Sblock('if (!value.IsType(base::Value::TYPE_DICTIONARY)) {')
-        .Concat(self._GenerateError(
-          '"expected dictionary, got " + ' +
-          self._util_cc_helper.GetValueTypeString('value')))
-        .Append('return false;')
-        .Eblock('}'))
-
-      if type_.properties or type_.additional_properties is not None:
-        c.Append('const base::DictionaryValue* dict = '
-                     'static_cast<const base::DictionaryValue*>(&value);')
-        if self._generate_error_messages:
-            c.Append('std::set<std::string> keys;')
-      for prop in type_.properties.itervalues():
-        c.Concat(self._InitializePropertyToDefault(prop, 'out'))
-      for prop in type_.properties.itervalues():
-        if self._generate_error_messages:
-          c.Append('keys.insert("%s");' % (prop.name))
-        c.Concat(self._GenerateTypePopulateProperty(prop, 'dict', 'out'))
-      # Check for extra values.
-      if self._generate_error_messages:
-        (c.Sblock('for (base::DictionaryValue::Iterator it(*dict); '
-                       '!it.IsAtEnd(); it.Advance()) {')
-          .Sblock('if (!keys.count(it.key())) {')
-          .Concat(self._GenerateError('"found unexpected key \'" + '
-                                          'it.key() + "\'"'))
-          .Eblock('}')
-          .Eblock('}')
-        )
-      if type_.additional_properties is not None:
-        if type_.additional_properties.property_type == PropertyType.ANY:
-          c.Append('out->additional_properties.MergeDictionary(dict);')
-        else:
-          cpp_type = self._type_helper.GetCppType(type_.additional_properties,
-                                                  is_in_container=True)
-          (c.Append('for (base::DictionaryValue::Iterator it(*dict);')
-            .Sblock('     !it.IsAtEnd(); it.Advance()) {')
-              .Append('%s tmp;' % cpp_type)
-              .Concat(self._GeneratePopulateVariableFromValue(
-                  type_.additional_properties,
-                  '(&it.value())',
-                  'tmp',
-                  'false'))
-              .Append('out->additional_properties[it.key()] = tmp;')
-            .Eblock('}')
-          )
-      c.Append('return true;')
-    (c.Eblock('}')
-      .Substitute({'namespace': cpp_namespace, 'name': classname}))
-    return c
-
-  def _GenerateValueIsTypeExpression(self, var, type_):
-    real_type = self._type_helper.FollowRef(type_)
-    if real_type.property_type is PropertyType.CHOICES:
-      return '(%s)' % ' || '.join(self._GenerateValueIsTypeExpression(var,
-                                                                      choice)
-                                  for choice in real_type.choices)
-    return '%s.IsType(%s)' % (var, cpp_util.GetValueType(real_type))
-
-  def _GenerateTypePopulateProperty(self, prop, src, dst):
-    """Generate the code to populate a single property in a type.
-
-    src: base::DictionaryValue*
-    dst: Type*
-    """
-    c = Code()
-    value_var = prop.unix_name + '_value'
-    c.Append('const base::Value* %(value_var)s = NULL;')
-    if prop.optional:
-      (c.Sblock(
-          'if (%(src)s->GetWithoutPathExpansion("%(key)s", &%(value_var)s)) {')
-        .Concat(self._GeneratePopulatePropertyFromValue(
-            prop, value_var, dst, 'false')))
-      underlying_type = self._type_helper.FollowRef(prop.type_)
-      if underlying_type.property_type == PropertyType.ENUM:
-        (c.Append('} else {')
-          .Append('%%(dst)s->%%(name)s = %s;' %
-              self._type_helper.GetEnumNoneValue(prop.type_)))
-      c.Eblock('}')
-    else:
-      (c.Sblock(
-          'if (!%(src)s->GetWithoutPathExpansion("%(key)s", &%(value_var)s)) {')
-        .Concat(self._GenerateError('"\'%%(key)s\' is required"'))
-        .Append('return false;')
-        .Eblock('}')
-        .Concat(self._GeneratePopulatePropertyFromValue(
-            prop, value_var, dst, 'false'))
-      )
-    c.Append()
-    c.Substitute({
-      'value_var': value_var,
-      'key': prop.name,
-      'src': src,
-      'dst': dst,
-      'name': prop.unix_name
-    })
-    return c
-
-  def _GenerateTypeFromValue(self, cpp_namespace, type_):
-    classname = cpp_util.Classname(schema_util.StripNamespace(type_.name))
-    c = Code()
-    (c.Append('// static')
-      .Append('scoped_ptr<%s> %s::FromValue(%s) {' % (classname,
-        cpp_namespace, self._GenerateParams(('const base::Value& value',))))
-    )
-    if self._generate_error_messages:
-      c.Append('DCHECK(error);')
-    (c.Append('  scoped_ptr<%s> out(new %s());' % (classname, classname))
-      .Append('  if (!Populate(%s))' % self._GenerateArgs(
-          ('value', 'out.get()')))
-      .Append('    return scoped_ptr<%s>();' % classname)
-      .Append('  return out.Pass();')
-      .Append('}')
-    )
-    return c
-
-  def _GenerateTypeToValue(self, cpp_namespace, type_):
-    """Generates a function that serializes the type into a base::Value.
-    E.g. for type "Foo" generates Foo::ToValue()
-    """
-    if type_.property_type == PropertyType.OBJECT:
-      return self._GenerateObjectTypeToValue(cpp_namespace, type_)
-    elif type_.property_type == PropertyType.CHOICES:
-      return self._GenerateChoiceTypeToValue(cpp_namespace, type_)
-    else:
-      raise ValueError("Unsupported property type %s" % type_.type_)
-
-  def _GenerateObjectTypeToValue(self, cpp_namespace, type_):
-    """Generates a function that serializes an object-representing type
-    into a base::DictionaryValue.
-    """
-    c = Code()
-    (c.Sblock('scoped_ptr<base::DictionaryValue> %s::ToValue() const {' %
-          cpp_namespace)
-        .Append('scoped_ptr<base::DictionaryValue> value('
-                    'new base::DictionaryValue());')
-        .Append()
-    )
-
-    for prop in type_.properties.values():
-      prop_var = 'this->%s' % prop.unix_name
-      if prop.optional:
-        # Optional enum values are generated with a NONE enum value.
-        underlying_type = self._type_helper.FollowRef(prop.type_)
-        if underlying_type.property_type == PropertyType.ENUM:
-          c.Sblock('if (%s != %s) {' %
-              (prop_var,
-               self._type_helper.GetEnumNoneValue(prop.type_)))
-        else:
-          c.Sblock('if (%s.get()) {' % prop_var)
-
-      # ANY is a base::Value which is abstract and cannot be a direct member, so
-      # it will always be a pointer.
-      is_ptr = prop.optional or prop.type_.property_type == PropertyType.ANY
-      c.Cblock(self._CreateValueFromType(
-          'value->SetWithoutPathExpansion("%s", %%s);' % prop.name,
-          prop.name,
-          prop.type_,
-          prop_var,
-          is_ptr=is_ptr))
-
-      if prop.optional:
-        c.Eblock('}')
-
-    if type_.additional_properties is not None:
-      if type_.additional_properties.property_type == PropertyType.ANY:
-        c.Append('value->MergeDictionary(&additional_properties);')
-      else:
-        # Non-copyable types will be wrapped in a linked_ptr for inclusion in
-        # maps, so we need to unwrap them.
-        needs_unwrap = (
-            not self._type_helper.IsCopyable(type_.additional_properties))
-        cpp_type = self._type_helper.GetCppType(type_.additional_properties,
-                                                is_in_container=True)
-        (c.Sblock('for (std::map<std::string, %s>::const_iterator it =' %
-                      cpp_util.PadForGenerics(cpp_type))
-          .Append('       additional_properties.begin();')
-          .Append('   it != additional_properties.end(); ++it) {')
-          .Cblock(self._CreateValueFromType(
-              'value->SetWithoutPathExpansion(it->first, %s);',
-              type_.additional_properties.name,
-              type_.additional_properties,
-              '%sit->second' % ('*' if needs_unwrap else '')))
-          .Eblock('}')
-        )
-
-    return (c.Append()
-             .Append('return value.Pass();')
-           .Eblock('}'))
-
-  def _GenerateChoiceTypeToValue(self, cpp_namespace, type_):
-    """Generates a function that serializes a choice-representing type
-    into a base::Value.
-    """
-    c = Code()
-    c.Sblock('scoped_ptr<base::Value> %s::ToValue() const {' % cpp_namespace)
-    c.Append('scoped_ptr<base::Value> result;')
-    for choice in type_.choices:
-      choice_var = 'as_%s' % choice.unix_name
-      (c.Sblock('if (%s) {' % choice_var)
-          .Append('DCHECK(!result) << "Cannot set multiple choices for %s";' %
-                      type_.unix_name)
-          .Cblock(self._CreateValueFromType('result.reset(%s);',
-                                            choice.name,
-                                            choice,
-                                            '*%s' % choice_var))
-        .Eblock('}')
-      )
-    (c.Append('DCHECK(result) << "Must set at least one choice for %s";' %
-                  type_.unix_name)
-      .Append('return result.Pass();')
-      .Eblock('}')
-    )
-    return c
-
-  def _GenerateFunction(self, function):
-    """Generates the definitions for function structs.
-    """
-    c = Code()
-
-    # TODO(kalman): use function.unix_name not Classname.
-    function_namespace = cpp_util.Classname(function.name)
-    # Windows has a #define for SendMessage, so to avoid any issues, we need
-    # to not use the name.
-    if function_namespace == 'SendMessage':
-      function_namespace = 'PassMessage'
-    (c.Append('namespace %s {' % function_namespace)
-      .Append()
-    )
-
-    # Params::Populate function
-    if function.params:
-      c.Concat(self._GeneratePropertyFunctions('Params', function.params))
-      (c.Append('Params::Params() {}')
-        .Append('Params::~Params() {}')
-        .Append()
-        .Cblock(self._GenerateFunctionParamsCreate(function))
-      )
-
-    # Results::Create function
-    if function.callback:
-      c.Concat(self._GenerateCreateCallbackArguments(function_namespace,
-                                                     'Results',
-                                                     function.callback))
-
-    c.Append('}  // namespace %s' % function_namespace)
-    return c
-
-  def _GenerateEvent(self, event):
-    # TODO(kalman): use event.unix_name not Classname.
-    c = Code()
-    event_namespace = cpp_util.Classname(event.name)
-    (c.Append('namespace %s {' % event_namespace)
-      .Append()
-      .Cblock(self._GenerateEventNameConstant(None, event))
-      .Cblock(self._GenerateCreateCallbackArguments(event_namespace,
-                                                    None,
-                                                    event))
-      .Append('}  // namespace %s' % event_namespace)
-    )
-    return c
-
-  def _CreateValueFromType(self, code, prop_name, type_, var, is_ptr=False):
-    """Creates a base::Value given a type. Generated code passes ownership
-    to caller.
-
-    var: variable or variable*
-
-    E.g for std::string, generate new base::StringValue(var)
-    """
-    c = Code()
-    underlying_type = self._type_helper.FollowRef(type_)
-    if underlying_type.property_type == PropertyType.ARRAY:
-      # Enums are treated specially because C++ templating thinks that they're
-      # ints, but really they're strings. So we create a vector of strings and
-      # populate it with the names of the enum in the array. The |ToString|
-      # function of the enum can be in another namespace when the enum is
-      # referenced. Templates can not be used here because C++ templating does
-      # not support passing a namespace as an argument.
-      item_type = self._type_helper.FollowRef(underlying_type.item_type)
-      if item_type.property_type == PropertyType.ENUM:
-        vardot = '(%s)%s' % (var, '->' if is_ptr else '.')
-
-        maybe_namespace = ''
-        if type_.item_type.property_type == PropertyType.REF:
-          maybe_namespace = '%s::' % item_type.namespace.unix_name
-
-        enum_list_var = '%s_list' % prop_name
-        # Scope the std::vector variable declaration inside braces.
-        (c.Sblock('{')
-          .Append('std::vector<std::string> %s;' % enum_list_var)
-          .Append('for (std::vector<%s>::const_iterator it = %sbegin();'
-              % (self._type_helper.GetCppType(item_type), vardot))
-          .Sblock('    it != %send(); ++it) {' % vardot)
-          .Append('%s.push_back(%sToString(*it));' % (enum_list_var,
-                                                      maybe_namespace))
-          .Eblock('}'))
-
-        # Because the std::vector above is always created for both required and
-        # optional enum arrays, |is_ptr| is set to false and uses the
-        # std::vector to create the values.
-        (c.Append(code %
-            self._GenerateCreateValueFromType(type_, enum_list_var, False))
-          .Eblock('}'))
-        return c
-
-    c.Append(code % self._GenerateCreateValueFromType(type_, var, is_ptr))
-    return c
-
-  def _GenerateCreateValueFromType(self, type_, var, is_ptr):
-    """Generates the statement to create a base::Value given a type.
-
-    type_:  The type of the values being converted.
-    var:    The name of the variable.
-    is_ptr: Whether |type_| is optional.
-    """
-    underlying_type = self._type_helper.FollowRef(type_)
-    if (underlying_type.property_type == PropertyType.CHOICES or
-        underlying_type.property_type == PropertyType.OBJECT):
-      if is_ptr:
-        return '(%s)->ToValue().release()' % var
-      else:
-        return '(%s).ToValue().release()' % var
-    elif (underlying_type.property_type == PropertyType.ANY or
-          underlying_type.property_type == PropertyType.FUNCTION):
-      if is_ptr:
-        vardot = '(%s)->' % var
-      else:
-        vardot = '(%s).' % var
-      return '%sDeepCopy()' % vardot
-    elif underlying_type.property_type == PropertyType.ENUM:
-      maybe_namespace = ''
-      if type_.property_type == PropertyType.REF:
-        maybe_namespace = '%s::' % underlying_type.namespace.unix_name
-      return 'new base::StringValue(%sToString(%s))' % (maybe_namespace, var)
-    elif underlying_type.property_type == PropertyType.BINARY:
-      if is_ptr:
-        vardot = var + '->'
-      else:
-        vardot = var + '.'
-      return ('base::BinaryValue::CreateWithCopiedBuffer(%sdata(), %ssize())' %
-              (vardot, vardot))
-    elif underlying_type.property_type == PropertyType.ARRAY:
-      return '%s.release()' % self._util_cc_helper.CreateValueFromArray(
-          var,
-          is_ptr)
-    elif underlying_type.property_type.is_fundamental:
-      if is_ptr:
-        var = '*%s' % var
-      if underlying_type.property_type == PropertyType.STRING:
-        return 'new base::StringValue(%s)' % var
-      else:
-        return 'new base::FundamentalValue(%s)' % var
-    else:
-      raise NotImplementedError('Conversion of %s to base::Value not '
-                                'implemented' % repr(type_.type_))
-
-  def _GenerateParamsCheck(self, function, var):
-    """Generates a check for the correct number of arguments when creating
-    Params.
-    """
-    c = Code()
-    num_required = 0
-    for param in function.params:
-      if not param.optional:
-        num_required += 1
-    if num_required == len(function.params):
-      c.Sblock('if (%(var)s.GetSize() != %(total)d) {')
-    elif not num_required:
-      c.Sblock('if (%(var)s.GetSize() > %(total)d) {')
-    else:
-      c.Sblock('if (%(var)s.GetSize() < %(required)d'
-          ' || %(var)s.GetSize() > %(total)d) {')
-    (c.Concat(self._GenerateError(
-        '"expected %%(total)d arguments, got " '
-        '+ base::IntToString(%%(var)s.GetSize())'))
-      .Append('return scoped_ptr<Params>();')
-      .Eblock('}')
-      .Substitute({
-        'var': var,
-        'required': num_required,
-        'total': len(function.params),
-    }))
-    return c
-
-  def _GenerateFunctionParamsCreate(self, function):
-    """Generate function to create an instance of Params. The generated
-    function takes a base::ListValue of arguments.
-
-    E.g for function "Bar", generate Bar::Params::Create()
-    """
-    c = Code()
-    (c.Append('// static')
-      .Sblock('scoped_ptr<Params> Params::Create(%s) {' % self._GenerateParams(
-        ['const base::ListValue& args']))
-    )
-    if self._generate_error_messages:
-      c.Append('DCHECK(error);')
-    (c.Concat(self._GenerateParamsCheck(function, 'args'))
-      .Append('scoped_ptr<Params> params(new Params());')
-    )
-
-    for param in function.params:
-      c.Concat(self._InitializePropertyToDefault(param, 'params'))
-
-    for i, param in enumerate(function.params):
-      # Any failure will cause this function to return. If any argument is
-      # incorrect or missing, those following it are not processed. Note that
-      # for optional arguments, we allow missing arguments and proceed because
-      # there may be other arguments following it.
-      failure_value = 'scoped_ptr<Params>()'
-      c.Append()
-      value_var = param.unix_name + '_value'
-      (c.Append('const base::Value* %(value_var)s = NULL;')
-        .Append('if (args.Get(%(i)s, &%(value_var)s) &&')
-        .Sblock('    !%(value_var)s->IsType(base::Value::TYPE_NULL)) {')
-        .Concat(self._GeneratePopulatePropertyFromValue(
-            param, value_var, 'params', failure_value))
-        .Eblock('}')
-      )
-      if not param.optional:
-        (c.Sblock('else {')
-          .Concat(self._GenerateError('"\'%%(key)s\' is required"'))
-          .Append('return %s;' % failure_value)
-          .Eblock('}'))
-      c.Substitute({'value_var': value_var, 'i': i, 'key': param.name})
-    (c.Append()
-      .Append('return params.Pass();')
-      .Eblock('}')
-      .Append()
-    )
-
-    return c
-
-  def _GeneratePopulatePropertyFromValue(self,
-                                         prop,
-                                         src_var,
-                                         dst_class_var,
-                                         failure_value):
-    """Generates code to populate property |prop| of |dst_class_var| (a
-    pointer) from a Value*. See |_GeneratePopulateVariableFromValue| for
-    semantics.
-    """
-    return self._GeneratePopulateVariableFromValue(prop.type_,
-                                                   src_var,
-                                                   '%s->%s' % (dst_class_var,
-                                                               prop.unix_name),
-                                                   failure_value,
-                                                   is_ptr=prop.optional)
-
-  def _GeneratePopulateVariableFromValue(self,
-                                         type_,
-                                         src_var,
-                                         dst_var,
-                                         failure_value,
-                                         is_ptr=False):
-    """Generates code to populate a variable |dst_var| of type |type_| from a
-    Value* at |src_var|. The Value* is assumed to be non-NULL. In the generated
-    code, if |dst_var| fails to be populated then Populate will return
-    |failure_value|.
-    """
-    c = Code()
-
-    underlying_type = self._type_helper.FollowRef(type_)
-
-    if underlying_type.property_type.is_fundamental:
-      if is_ptr:
-        (c.Append('%(cpp_type)s temp;')
-          .Sblock('if (!%s) {' % cpp_util.GetAsFundamentalValue(
-                      self._type_helper.FollowRef(type_), src_var, '&temp'))
-          .Concat(self._GenerateError(
-            '"\'%%(key)s\': expected ' + '%s, got " + %s' % (
-                type_.name,
-                self._util_cc_helper.GetValueTypeString(
-                    '%%(src_var)s', True)))))
-        c.Append('%(dst_var)s.reset();')
-        if not self._generate_error_messages:
-          c.Append('return %(failure_value)s;')
-        (c.Eblock('}')
-          .Append('else')
-          .Append('  %(dst_var)s.reset(new %(cpp_type)s(temp));')
-        )
-      else:
-        (c.Sblock('if (!%s) {' % cpp_util.GetAsFundamentalValue(
-                      self._type_helper.FollowRef(type_),
-                      src_var,
-                      '&%s' % dst_var))
-          .Concat(self._GenerateError(
-            '"\'%%(key)s\': expected ' + '%s, got " + %s' % (
-                type_.name,
-                self._util_cc_helper.GetValueTypeString(
-                    '%%(src_var)s', True))))
-          .Append('return %(failure_value)s;')
-          .Eblock('}')
-        )
-    elif underlying_type.property_type == PropertyType.OBJECT:
-      if is_ptr:
-        (c.Append('const base::DictionaryValue* dictionary = NULL;')
-          .Sblock('if (!%(src_var)s->GetAsDictionary(&dictionary)) {')
-          .Concat(self._GenerateError(
-            '"\'%%(key)s\': expected dictionary, got " + ' +
-            self._util_cc_helper.GetValueTypeString('%%(src_var)s', True))))
-        # If an optional property fails to populate, the population can still
-        # succeed with a warning. If no error messages are generated, this
-        # warning is not set and we fail out instead.
-        if not self._generate_error_messages:
-          c.Append('return %(failure_value)s;')
-        (c.Eblock('}')
-          .Sblock('else {')
-          .Append('scoped_ptr<%(cpp_type)s> temp(new %(cpp_type)s());')
-          .Append('if (!%%(cpp_type)s::Populate(%s)) {' % self._GenerateArgs(
-            ('*dictionary', 'temp.get()')))
-          .Append('  return %(failure_value)s;')
-        )
-        (c.Append('}')
-          .Append('else')
-          .Append('  %(dst_var)s = temp.Pass();')
-          .Eblock('}')
-        )
-      else:
-        (c.Append('const base::DictionaryValue* dictionary = NULL;')
-          .Sblock('if (!%(src_var)s->GetAsDictionary(&dictionary)) {')
-          .Concat(self._GenerateError(
-            '"\'%%(key)s\': expected dictionary, got " + ' +
-            self._util_cc_helper.GetValueTypeString('%%(src_var)s', True)))
-          .Append('return %(failure_value)s;')
-          .Eblock('}')
-          .Append('if (!%%(cpp_type)s::Populate(%s)) {' % self._GenerateArgs(
-            ('*dictionary', '&%(dst_var)s')))
-          .Append('  return %(failure_value)s;')
-          .Append('}')
-        )
-    elif underlying_type.property_type == PropertyType.FUNCTION:
-      if is_ptr:
-        c.Append('%(dst_var)s.reset(new base::DictionaryValue());')
-    elif underlying_type.property_type == PropertyType.ANY:
-      c.Append('%(dst_var)s.reset(%(src_var)s->DeepCopy());')
-    elif underlying_type.property_type == PropertyType.ARRAY:
-      # util_cc_helper deals with optional and required arrays
-      (c.Append('const base::ListValue* list = NULL;')
-        .Sblock('if (!%(src_var)s->GetAsList(&list)) {')
-          .Concat(self._GenerateError(
-            '"\'%%(key)s\': expected list, got " + ' +
-            self._util_cc_helper.GetValueTypeString('%%(src_var)s', True)))
-      )
-      if is_ptr and self._generate_error_messages:
-        c.Append('%(dst_var)s.reset();')
-      else:
-        c.Append('return %(failure_value)s;')
-      c.Eblock('}')
-      c.Sblock('else {')
-      item_type = self._type_helper.FollowRef(underlying_type.item_type)
-      if item_type.property_type == PropertyType.ENUM:
-        c.Concat(self._GenerateListValueToEnumArrayConversion(
-                     item_type,
-                     'list',
-                     dst_var,
-                     failure_value,
-                     is_ptr=is_ptr))
-      else:
-        (c.Sblock('if (!%s) {' % self._util_cc_helper.PopulateArrayFromList(
-              'list',
-              dst_var,
-              is_ptr)))
-        c.Concat(self._GenerateError(
-            '"unable to populate array \'%%(parent_key)s\'"'))
-        if is_ptr and self._generate_error_messages:
-          c.Append('%(dst_var)s.reset();')
-        else:
-          c.Append('return %(failure_value)s;')
-        c.Eblock('}')
-      c.Eblock('}')
-    elif underlying_type.property_type == PropertyType.CHOICES:
-      if is_ptr:
-        (c.Append('scoped_ptr<%(cpp_type)s> temp(new %(cpp_type)s());')
-          .Append('if (!%%(cpp_type)s::Populate(%s))' % self._GenerateArgs(
-            ('*%(src_var)s', 'temp.get()')))
-          .Append('  return %(failure_value)s;')
-          .Append('%(dst_var)s = temp.Pass();')
-        )
-      else:
-        (c.Append('if (!%%(cpp_type)s::Populate(%s))' % self._GenerateArgs(
-            ('*%(src_var)s', '&%(dst_var)s')))
-          .Append('  return %(failure_value)s;'))
-    elif underlying_type.property_type == PropertyType.ENUM:
-      c.Concat(self._GenerateStringToEnumConversion(underlying_type,
-                                                    src_var,
-                                                    dst_var,
-                                                    failure_value))
-    elif underlying_type.property_type == PropertyType.BINARY:
-      (c.Append('const base::BinaryValue* binary_value = NULL;')
-        .Sblock('if (!%(src_var)s->IsType(base::Value::TYPE_BINARY)) {')
-        .Concat(self._GenerateError(
-          '"\'%%(key)s\': expected binary, got " + ' +
-          self._util_cc_helper.GetValueTypeString('%%(src_var)s', True)))
-      )
-      if not self._generate_error_messages:
-        c.Append('return %(failure_value)s;')
-      (c.Eblock('}')
-        .Sblock('else {')
-        .Append(' binary_value =')
-        .Append('   static_cast<const base::BinaryValue*>(%(src_var)s);')
-      )
-      if is_ptr:
-        (c.Append('%(dst_var)s.reset(')
-          .Append('    new std::string(binary_value->GetBuffer(),')
-          .Append('                    binary_value->GetSize()));')
-        )
-      else:
-        (c.Append('%(dst_var)s.assign(binary_value->GetBuffer(),')
-          .Append('                   binary_value->GetSize());')
-        )
-      c.Eblock('}')
-    else:
-      raise NotImplementedError(type_)
-    if c.IsEmpty():
-      return c
-    return Code().Sblock('{').Concat(c.Substitute({
-      'cpp_type': self._type_helper.GetCppType(type_),
-      'src_var': src_var,
-      'dst_var': dst_var,
-      'failure_value': failure_value,
-      'key': type_.name,
-      'parent_key': type_.parent.name,
-    })).Eblock('}')
-
-  def _GenerateListValueToEnumArrayConversion(self,
-                                              item_type,
-                                              src_var,
-                                              dst_var,
-                                              failure_value,
-                                              is_ptr=False):
-    """Returns Code that converts a ListValue of string constants from
-    |src_var| into an array of enums of |type_| in |dst_var|. On failure,
-    returns |failure_value|.
-    """
-    c = Code()
-    accessor = '.'
-    if is_ptr:
-      accessor = '->'
-      cpp_type = self._type_helper.GetCppType(item_type, is_in_container=True)
-      c.Append('%s.reset(new std::vector<%s>);' %
-                   (dst_var, cpp_util.PadForGenerics(cpp_type)))
-    (c.Sblock('for (base::ListValue::const_iterator it = %s->begin(); '
-                   'it != %s->end(); ++it) {' % (src_var, src_var))
-      .Append('%s tmp;' % self._type_helper.GetCppType(item_type))
-      .Concat(self._GenerateStringToEnumConversion(item_type,
-                                                   '(*it)',
-                                                   'tmp',
-                                                   failure_value))
-      .Append('%s%spush_back(tmp);' % (dst_var, accessor))
-      .Eblock('}')
-    )
-    return c
-
-  def _GenerateStringToEnumConversion(self,
-                                      type_,
-                                      src_var,
-                                      dst_var,
-                                      failure_value):
-    """Returns Code that converts a string type in |src_var| to an enum with
-    type |type_| in |dst_var|. In the generated code, if |src_var| is not
-    a valid enum name then the function will return |failure_value|.
-    """
-    if type_.property_type != PropertyType.ENUM:
-      raise TypeError(type_)
-    c = Code()
-    enum_as_string = '%s_as_string' % type_.unix_name
-    cpp_type_namespace = ''
-    if type_.namespace != self._namespace:
-      cpp_type_namespace = '%s::' % type_.namespace.unix_name
-    cpp_type_name = self._type_helper.GetCppType(type_)
-    (c.Append('std::string %s;' % enum_as_string)
-      .Sblock('if (!%s->GetAsString(&%s)) {' % (src_var, enum_as_string))
-      .Concat(self._GenerateError(
-        '"\'%%(key)s\': expected string, got " + ' +
-        self._util_cc_helper.GetValueTypeString('%%(src_var)s', True)))
-      .Append('return %s;' % failure_value)
-      .Eblock('}')
-      .Append('%s = %sParse%s(%s);' % (dst_var,
-                                       cpp_type_namespace,
-                                       cpp_util.Classname(type_.name),
-                                       enum_as_string))
-      .Sblock('if (%s == %s%s) {' % (dst_var,
-                                     cpp_type_namespace,
-                                     self._type_helper.GetEnumNoneValue(type_)))
-      .Concat(self._GenerateError(
-        '\"\'%%(key)s\': expected \\"' +
-        '\\" or \\"'.join(
-            enum_value.name
-            for enum_value in self._type_helper.FollowRef(type_).enum_values) +
-        '\\", got \\"" + %s + "\\""' % enum_as_string))
-      .Append('return %s;' % failure_value)
-      .Eblock('}')
-      .Substitute({'src_var': src_var, 'key': type_.name})
-    )
-    return c
-
-  def _GeneratePropertyFunctions(self, namespace, params):
-    """Generates the member functions for a list of parameters.
-    """
-    return self._GenerateTypes(namespace, (param.type_ for param in params))
-
-  def _GenerateTypes(self, namespace, types):
-    """Generates the member functions for a list of types.
-    """
-    c = Code()
-    for type_ in types:
-      c.Cblock(self._GenerateType(namespace, type_))
-    return c
-
-  def _GenerateEnumToString(self, cpp_namespace, type_):
-    """Generates ToString() which gets the string representation of an enum.
-    """
-    c = Code()
-    classname = cpp_util.Classname(schema_util.StripNamespace(type_.name))
-
-    if cpp_namespace is not None:
-      c.Append('// static')
-    maybe_namespace = '' if cpp_namespace is None else '%s::' % cpp_namespace
-
-    c.Sblock('std::string %sToString(%s enum_param) {' %
-                 (maybe_namespace, classname))
-    c.Sblock('switch (enum_param) {')
-    for enum_value in self._type_helper.FollowRef(type_).enum_values:
-      name = enum_value.name
-      if 'camel_case_enum_to_string' in self._namespace.compiler_options:
-        name = enum_value.CamelName()
-      (c.Append('case %s: ' % self._type_helper.GetEnumValue(type_, enum_value))
-        .Append('  return "%s";' % name))
-    (c.Append('case %s:' % self._type_helper.GetEnumNoneValue(type_))
-      .Append('  return "";')
-      .Eblock('}')
-      .Append('NOTREACHED();')
-      .Append('return "";')
-      .Eblock('}')
-    )
-    return c
-
-  def _GenerateEnumFromString(self, cpp_namespace, type_):
-    """Generates FromClassNameString() which gets an enum from its string
-    representation.
-    """
-    c = Code()
-    classname = cpp_util.Classname(schema_util.StripNamespace(type_.name))
-
-    if cpp_namespace is not None:
-      c.Append('// static')
-    maybe_namespace = '' if cpp_namespace is None else '%s::' % cpp_namespace
-
-    c.Sblock('%s%s %sParse%s(const std::string& enum_string) {' %
-                 (maybe_namespace, classname, maybe_namespace, classname))
-    for i, enum_value in enumerate(
-          self._type_helper.FollowRef(type_).enum_values):
-      # This is broken up into all ifs with no else ifs because we get
-      # "fatal error C1061: compiler limit : blocks nested too deeply"
-      # on Windows.
-      (c.Append('if (enum_string == "%s")' % enum_value.name)
-        .Append('  return %s;' %
-            self._type_helper.GetEnumValue(type_, enum_value)))
-    (c.Append('return %s;' % self._type_helper.GetEnumNoneValue(type_))
-      .Eblock('}')
-    )
-    return c
-
-  def _GenerateCreateCallbackArguments(self,
-                                       cpp_namespace,
-                                       function_scope,
-                                       callback):
-    """Generate all functions to create Value parameters for a callback.
-
-    E.g for function "Bar", generate Bar::Results::Create
-    E.g for event "Baz", generate Baz::Create
-
-    function_scope: the function scope path, e.g. Foo::Bar for the function
-                    Foo::Bar::Baz(). May be None if there is no function scope.
-    callback: the Function object we are creating callback arguments for.
-    """
-    c = Code()
-    params = callback.params
-    c.Concat(self._GeneratePropertyFunctions(function_scope, params))
-
-    (c.Sblock('scoped_ptr<base::ListValue> %(function_scope)s'
-                  'Create(%(declaration_list)s) {')
-      .Append('scoped_ptr<base::ListValue> create_results('
-              'new base::ListValue());')
-    )
-    declaration_list = []
-    for param in params:
-      declaration_list.append(cpp_util.GetParameterDeclaration(
-          param, self._type_helper.GetCppType(param.type_)))
-      c.Cblock(self._CreateValueFromType('create_results->Append(%s);',
-                                         param.name,
-                                         param.type_,
-                                         param.unix_name))
-    c.Append('return create_results.Pass();')
-    c.Eblock('}')
-    c.Substitute({
-        'function_scope': ('%s::' % function_scope) if function_scope else '',
-        'declaration_list': ', '.join(declaration_list),
-        'param_names': ', '.join(param.unix_name for param in params)
-    })
-    return c
-
-  def _GenerateEventNameConstant(self, function_scope, event):
-    """Generates a constant string array for the event name.
-    """
-    c = Code()
-    c.Append('const char kEventName[] = "%s.%s";' % (
-                 self._namespace.name, event.name))
-    return c
-
-  def _InitializePropertyToDefault(self, prop, dst):
-    """Initialize a model.Property to its default value inside an object.
-
-    E.g for optional enum "state", generate dst->state = STATE_NONE;
-
-    dst: Type*
-    """
-    c = Code()
-    underlying_type = self._type_helper.FollowRef(prop.type_)
-    if (underlying_type.property_type == PropertyType.ENUM and
-        prop.optional):
-      c.Append('%s->%s = %s;' % (
-        dst,
-        prop.unix_name,
-        self._type_helper.GetEnumNoneValue(prop.type_)))
-    return c
-
-  def _GenerateError(self, body):
-    """Generates an error message pertaining to population failure.
-
-    E.g 'expected bool, got int'
-    """
-    c = Code()
-    if not self._generate_error_messages:
-      return c
-    (c.Append('if (error->length())')
-      .Append('  error->append(UTF8ToUTF16("; "));')
-      .Append('error->append(UTF8ToUTF16(%s));' % body))
-    return c
-
-  def _GenerateParams(self, params):
-    """Builds the parameter list for a function, given an array of parameters.
-    """
-    if self._generate_error_messages:
-      params = list(params) + ['base::string16* error']
-    return ', '.join(str(p) for p in params)
-
-  def _GenerateArgs(self, args):
-    """Builds the argument list for a function, given an array of arguments.
-    """
-    if self._generate_error_messages:
-      args = list(args) + ['error']
-    return ', '.join(str(a) for a in args)
diff --git a/tools/json_schema_compiler/code.py b/tools/json_schema_compiler/code.py
deleted file mode 100644
index 8ce6afa..0000000
--- a/tools/json_schema_compiler/code.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# Copyright (c) 2012 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.
-
-class Code(object):
-  """A convenience object for constructing code.
-
-  Logically each object should be a block of code. All methods except |Render|
-  and |IsEmpty| return self.
-  """
-  def __init__(self, indent_size=2, comment_length=80):
-    self._code = []
-    self._indent_level = 0
-    self._indent_size = indent_size
-    self._comment_length = comment_length
-
-  def Append(self, line='', substitute=True, indent_level=None):
-    """Appends a line of code at the current indent level or just a newline if
-    line is not specified. Trailing whitespace is stripped.
-
-    substitute: indicated whether this line should be affected by
-    code.Substitute().
-    """
-    if indent_level is None:
-      indent_level = self._indent_level
-    self._code.append(Line(((' ' * indent_level) + line).rstrip(),
-                      substitute=substitute))
-    return self
-
-  def IsEmpty(self):
-    """Returns True if the Code object is empty.
-    """
-    return not bool(self._code)
-
-  def Concat(self, obj):
-    """Concatenate another Code object onto this one. Trailing whitespace is
-    stripped.
-
-    Appends the code at the current indent level. Will fail if there are any
-    un-interpolated format specifiers eg %s, %(something)s which helps
-    isolate any strings that haven't been substituted.
-    """
-    if not isinstance(obj, Code):
-      raise TypeError(type(obj))
-    assert self is not obj
-    for line in obj._code:
-      try:
-        # line % () will fail if any substitution tokens are left in line
-        if line.substitute:
-          line.value %= ()
-      except TypeError:
-        raise TypeError('Unsubstituted value when concatting\n' + line.value)
-      except ValueError:
-        raise ValueError('Stray % character when concatting\n' + line.value)
-      self.Append(line.value, line.substitute)
-
-    return self
-
-  def Cblock(self, code):
-    """Concatenates another Code object |code| onto this one followed by a
-    blank line, if |code| is non-empty."""
-    if not code.IsEmpty():
-      self.Concat(code).Append()
-    return self
-
-  def Sblock(self, line=None):
-    """Starts a code block.
-
-    Appends a line of code and then increases the indent level.
-    """
-    if line is not None:
-      self.Append(line)
-    self._indent_level += self._indent_size
-    return self
-
-  def Eblock(self, line=None):
-    """Ends a code block by decreasing and then appending a line (or a blank
-    line if not given).
-    """
-    # TODO(calamity): Decide if type checking is necessary
-    #if not isinstance(line, basestring):
-    #  raise TypeError
-    self._indent_level -= self._indent_size
-    if line is not None:
-      self.Append(line)
-    return self
-
-  def Comment(self, comment, comment_prefix='// '):
-    """Adds the given string as a comment.
-
-    Will split the comment if it's too long. Use mainly for variable length
-    comments. Otherwise just use code.Append('// ...') for comments.
-
-    Unaffected by code.Substitute().
-    """
-    max_len = self._comment_length - self._indent_level - len(comment_prefix)
-    while len(comment) >= max_len:
-      line = comment[0:max_len]
-      last_space = line.rfind(' ')
-      if last_space != -1:
-        line = line[0:last_space]
-        comment = comment[last_space + 1:]
-      else:
-        comment = comment[max_len:]
-      self.Append(comment_prefix + line, substitute=False)
-    self.Append(comment_prefix + comment, substitute=False)
-    return self
-
-  def Substitute(self, d):
-    """Goes through each line and interpolates using the given dict.
-
-    Raises type error if passed something that isn't a dict
-
-    Use for long pieces of code using interpolation with the same variables
-    repeatedly. This will reduce code and allow for named placeholders which
-    are more clear.
-    """
-    if not isinstance(d, dict):
-      raise TypeError('Passed argument is not a dictionary: ' + d)
-    for i, line in enumerate(self._code):
-      if self._code[i].substitute:
-        # Only need to check %s because arg is a dict and python will allow
-        # '%s %(named)s' but just about nothing else
-        if '%s' in self._code[i].value or '%r' in self._code[i].value:
-          raise TypeError('"%s" or "%r" found in substitution. '
-                          'Named arguments only. Use "%" to escape')
-        self._code[i].value = line.value % d
-        self._code[i].substitute = False
-    return self
-
-  def Render(self):
-    """Renders Code as a string.
-    """
-    return '\n'.join([l.value for l in self._code])
-
-
-class Line(object):
-  """A line of code.
-  """
-  def __init__(self, value, substitute=True):
-    self.value = value
-    self.substitute = substitute
diff --git a/tools/json_schema_compiler/code_test.py b/tools/json_schema_compiler/code_test.py
deleted file mode 100755
index ca36524..0000000
--- a/tools/json_schema_compiler/code_test.py
+++ /dev/null
@@ -1,165 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-from code import Code
-import unittest
-
-class CodeTest(unittest.TestCase):
-  def testAppend(self):
-    c = Code()
-    c.Append('line')
-    self.assertEquals('line', c.Render())
-
-  def testBlock(self):
-    c = Code()
-    (c.Append('line')
-      .Sblock('sblock')
-        .Append('inner')
-        .Append('moreinner')
-        .Sblock('moresblock')
-          .Append('inner')
-        .Eblock('out')
-        .Append('inner')
-      .Eblock('out')
-    )
-    self.assertEquals(
-      'line\n'
-      'sblock\n'
-      '  inner\n'
-      '  moreinner\n'
-      '  moresblock\n'
-      '    inner\n'
-      '  out\n'
-      '  inner\n'
-      'out',
-      c.Render())
-
-  def testConcat(self):
-    b = Code()
-    (b.Sblock('2')
-        .Append('2')
-      .Eblock('2')
-    )
-    c = Code()
-    (c.Sblock('1')
-        .Concat(b)
-        .Append('1')
-      .Eblock('1')
-    )
-    self.assertEquals(
-      '1\n'
-      '  2\n'
-      '    2\n'
-      '  2\n'
-      '  1\n'
-      '1',
-      c.Render())
-    d = Code()
-    a = Code()
-    a.Concat(d)
-    self.assertEquals('', a.Render())
-    a.Concat(c)
-    self.assertEquals(
-      '1\n'
-      '  2\n'
-      '    2\n'
-      '  2\n'
-      '  1\n'
-      '1',
-      a.Render())
-
-  def testConcatErrors(self):
-    c = Code()
-    d = Code()
-    d.Append('%s')
-    self.assertRaises(TypeError, c.Concat, d)
-    d = Code()
-    d.Append('%(classname)s')
-    self.assertRaises(TypeError, c.Concat, d)
-    d = 'line of code'
-    self.assertRaises(TypeError, c.Concat, d)
-
-  def testSubstitute(self):
-    c = Code()
-    c.Append('%(var1)s %(var2)s %(var1)s')
-    c.Substitute({'var1': 'one', 'var2': 'two'})
-    self.assertEquals('one two one', c.Render())
-    c.Append('%(var1)s %(var2)s %(var3)s')
-    c.Append('%(var2)s %(var1)s %(var3)s')
-    c.Substitute({'var1': 'one', 'var2': 'two', 'var3': 'three'})
-    self.assertEquals(
-        'one two one\n'
-        'one two three\n'
-        'two one three',
-        c.Render())
-
-  def testSubstituteErrors(self):
-    # No unnamed placeholders allowed when substitute is run
-    c = Code()
-    c.Append('%s %s')
-    self.assertRaises(TypeError, c.Substitute, ('var1', 'one'))
-    c = Code()
-    c.Append('%s %(var1)s')
-    self.assertRaises(TypeError, c.Substitute, {'var1': 'one'})
-    c = Code()
-    c.Append('%s %(var1)s')
-    self.assertRaises(TypeError, c.Substitute, {'var1': 'one'})
-    c = Code()
-    c.Append('%(var1)s')
-    self.assertRaises(KeyError, c.Substitute, {'clearlynotvar1': 'one'})
-
-  def testIsEmpty(self):
-    c = Code()
-    self.assertTrue(c.IsEmpty())
-    c.Append('asdf')
-    self.assertFalse(c.IsEmpty())
-
-  def testComment(self):
-    long_comment = ('This comment is eighty nine characters in longness, '
-        'that is, to use another word, length')
-    c = Code()
-    c.Comment(long_comment)
-    self.assertEquals(
-        '// This comment is eighty nine characters '
-        'in longness, that is, to use another\n'
-        '// word, length',
-        c.Render())
-    c = Code()
-    c.Sblock('sblock')
-    c.Comment(long_comment)
-    c.Eblock('eblock')
-    c.Comment(long_comment)
-    self.assertEquals(
-        'sblock\n'
-        '  // This comment is eighty nine characters '
-        'in longness, that is, to use\n'
-        '  // another word, length\n'
-        'eblock\n'
-        '// This comment is eighty nine characters in '
-        'longness, that is, to use another\n'
-        '// word, length',
-        c.Render())
-    long_word = 'x' * 100
-    c = Code()
-    c.Comment(long_word)
-    self.assertEquals(
-        '// ' + 'x' * 77 + '\n'
-        '// ' + 'x' * 23,
-        c.Render())
-
-  def testCommentWithSpecialCharacters(self):
-    c = Code()
-    c.Comment('20% of 80%s')
-    c.Substitute({})
-    self.assertEquals('// 20% of 80%s', c.Render())
-    d = Code()
-    d.Append('90')
-    d.Concat(c)
-    self.assertEquals('90\n'
-        '// 20% of 80%s',
-        d.Render())
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/tools/json_schema_compiler/compiler.py b/tools/json_schema_compiler/compiler.py
deleted file mode 100755
index 7a2e4dd..0000000
--- a/tools/json_schema_compiler/compiler.py
+++ /dev/null
@@ -1,198 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-"""Generator for C++ structs from api json files.
-
-The purpose of this tool is to remove the need for hand-written code that
-converts to and from base::Value types when receiving javascript api calls.
-Originally written for generating code for extension apis. Reference schemas
-are in chrome/common/extensions/api.
-
-Usage example:
-  compiler.py --root /home/Work/src --namespace extensions windows.json
-    tabs.json
-  compiler.py --destdir gen --root /home/Work/src
-    --namespace extensions windows.json tabs.json
-"""
-
-import optparse
-import os
-import shlex
-import sys
-
-from cpp_bundle_generator import CppBundleGenerator
-from cpp_generator import CppGenerator
-from cpp_type_generator import CppTypeGenerator
-from dart_generator import DartGenerator
-import json_schema
-from cpp_namespace_environment import CppNamespaceEnvironment
-from model import Model
-from schema_loader import SchemaLoader
-
-# Names of supported code generators, as specified on the command-line.
-# First is default.
-GENERATORS = ['cpp', 'cpp-bundle-registration', 'cpp-bundle-schema', 'dart']
-
-def GenerateSchema(generator_name,
-                   file_paths,
-                   root,
-                   destdir,
-                   cpp_namespace_pattern,
-                   dart_overrides_dir,
-                   impl_dir,
-                   include_rules):
-  # Merge the source files into a single list of schemas.
-  api_defs = []
-  for file_path in file_paths:
-    schema = os.path.relpath(file_path, root)
-    schema_loader = SchemaLoader(
-        root,
-        os.path.dirname(schema),
-        include_rules,
-        cpp_namespace_pattern)
-    api_def = schema_loader.LoadSchema(schema)
-
-    # If compiling the C++ model code, delete 'nocompile' nodes.
-    if generator_name == 'cpp':
-      api_def = json_schema.DeleteNodes(api_def, 'nocompile')
-    api_defs.extend(api_def)
-
-  api_model = Model()
-
-  # For single-schema compilation make sure that the first (i.e. only) schema
-  # is the default one.
-  default_namespace = None
-
-  # If we have files from multiple source paths, we'll use the common parent
-  # path as the source directory.
-  src_path = None
-
-  # Load the actual namespaces into the model.
-  for target_namespace, file_path in zip(api_defs, file_paths):
-    relpath = os.path.relpath(os.path.normpath(file_path), root)
-    namespace = api_model.AddNamespace(target_namespace,
-                                       relpath,
-                                       include_compiler_options=True,
-                                       environment=CppNamespaceEnvironment(
-                                           cpp_namespace_pattern))
-
-    if default_namespace is None:
-      default_namespace = namespace
-
-    if src_path is None:
-      src_path = namespace.source_file_dir
-    else:
-      src_path = os.path.commonprefix((src_path, namespace.source_file_dir))
-
-    path, filename = os.path.split(file_path)
-    filename_base, _ = os.path.splitext(filename)
-
-  # Construct the type generator with all the namespaces in this model.
-  type_generator = CppTypeGenerator(api_model,
-                                    schema_loader,
-                                    default_namespace)
-  if generator_name in ('cpp-bundle-registration', 'cpp-bundle-schema'):
-    cpp_bundle_generator = CppBundleGenerator(root,
-                                              api_model,
-                                              api_defs,
-                                              type_generator,
-                                              cpp_namespace_pattern,
-                                              src_path,
-                                              impl_dir)
-    if generator_name == 'cpp-bundle-registration':
-      generators = [
-        ('generated_api_registration.cc',
-         cpp_bundle_generator.api_cc_generator),
-        ('generated_api_registration.h', cpp_bundle_generator.api_h_generator),
-      ]
-    elif generator_name == 'cpp-bundle-schema':
-      generators = [
-        ('generated_schemas.cc', cpp_bundle_generator.schemas_cc_generator),
-        ('generated_schemas.h', cpp_bundle_generator.schemas_h_generator)
-      ]
-  elif generator_name == 'cpp':
-    cpp_generator = CppGenerator(type_generator)
-    generators = [
-      ('%s.h' % filename_base, cpp_generator.h_generator),
-      ('%s.cc' % filename_base, cpp_generator.cc_generator)
-    ]
-  elif generator_name == 'dart':
-    generators = [
-      ('%s.dart' % namespace.unix_name, DartGenerator(
-          dart_overrides_dir))
-    ]
-  else:
-    raise Exception('Unrecognised generator %s' % generator)
-
-  output_code = []
-  for filename, generator in generators:
-    code = generator.Generate(namespace).Render()
-    if destdir:
-      if generator_name == 'cpp-bundle-registration':
-        # Function registrations must be output to impl_dir, since they link in
-        # API implementations.
-        output_dir = os.path.join(destdir, impl_dir)
-      else:
-        output_dir = os.path.join(destdir, src_path)
-      if not os.path.exists(output_dir):
-        os.makedirs(output_dir)
-      with open(os.path.join(output_dir, filename), 'w') as f:
-        f.write(code)
-    output_code += [filename, '', code, '']
-
-  return '\n'.join(output_code)
-
-
-if __name__ == '__main__':
-  parser = optparse.OptionParser(
-      description='Generates a C++ model of an API from JSON schema',
-      usage='usage: %prog [option]... schema')
-  parser.add_option('-r', '--root', default='.',
-      help='logical include root directory. Path to schema files from specified'
-      ' dir will be the include path.')
-  parser.add_option('-d', '--destdir',
-      help='root directory to output generated files.')
-  parser.add_option('-n', '--namespace', default='generated_api_schemas',
-      help='C++ namespace for generated files. e.g extensions::api.')
-  parser.add_option('-g', '--generator', default=GENERATORS[0],
-      choices=GENERATORS,
-      help='The generator to use to build the output code. Supported values are'
-      ' %s' % GENERATORS)
-  parser.add_option('-D', '--dart-overrides-dir', dest='dart_overrides_dir',
-      help='Adds custom dart from files in the given directory (Dart only).')
-  parser.add_option('-i', '--impl-dir', dest='impl_dir',
-      help='The root path of all API implementations')
-  parser.add_option('-I', '--include-rules',
-      help='A list of paths to include when searching for referenced objects,'
-      ' with the namespace separated by a \':\'. Example: '
-      '/foo/bar:Foo::Bar::%(namespace)s')
-
-  (opts, file_paths) = parser.parse_args()
-
-  if not file_paths:
-    sys.exit(0) # This is OK as a no-op
-
-  # Unless in bundle mode, only one file should be specified.
-  if (opts.generator not in ('cpp-bundle-registration', 'cpp-bundle-schema') and
-      len(file_paths) > 1):
-    # TODO(sashab): Could also just use file_paths[0] here and not complain.
-    raise Exception(
-        "Unless in bundle mode, only one file can be specified at a time.")
-
-  def split_path_and_namespace(path_and_namespace):
-    if ':' not in path_and_namespace:
-      raise ValueError('Invalid include rule "%s". Rules must be of '
-                       'the form path:namespace' % path_and_namespace)
-    return path_and_namespace.split(':', 1)
-
-  include_rules = []
-  if opts.include_rules:
-    include_rules = map(split_path_and_namespace,
-                        shlex.split(opts.include_rules))
-
-  result = GenerateSchema(opts.generator, file_paths, opts.root, opts.destdir,
-                          opts.namespace, opts.dart_overrides_dir,
-                          opts.impl_dir, include_rules)
-  if not opts.destdir:
-    print result
diff --git a/tools/json_schema_compiler/cpp_bundle_generator.py b/tools/json_schema_compiler/cpp_bundle_generator.py
deleted file mode 100644
index 0a4f9a6..0000000
--- a/tools/json_schema_compiler/cpp_bundle_generator.py
+++ /dev/null
@@ -1,322 +0,0 @@
-# Copyright (c) 2012 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 code
-import cpp_util
-from model import Platforms
-from schema_util import CapitalizeFirstLetter
-from schema_util import JsFunctionNameToClassName
-
-import json
-import os
-import re
-
-
-def _RemoveDescriptions(node):
-  """Returns a copy of |schema| with "description" fields removed.
-  """
-  if isinstance(node, dict):
-    result = {}
-    for key, value in node.items():
-      # Some schemas actually have properties called "description", so only
-      # remove descriptions that have string values.
-      if key == 'description' and isinstance(value, basestring):
-        continue
-      result[key] = _RemoveDescriptions(value)
-    return result
-  if isinstance(node, list):
-    return [_RemoveDescriptions(v) for v in node]
-  return node
-
-
-class CppBundleGenerator(object):
-  """This class contains methods to generate code based on multiple schemas.
-  """
-
-  def __init__(self,
-               root,
-               model,
-               api_defs,
-               cpp_type_generator,
-               cpp_namespace_pattern,
-               source_file_dir,
-               impl_dir):
-    self._root = root
-    self._model = model
-    self._api_defs = api_defs
-    self._cpp_type_generator = cpp_type_generator
-    self._source_file_dir = source_file_dir
-    self._impl_dir = impl_dir
-
-    # Hack: assume that the C++ namespace for the bundle is the namespace of the
-    # files without the last component of the namespace. A cleaner way to do
-    # this would be to make it a separate variable in the gyp file.
-    self._cpp_namespace = cpp_namespace_pattern.rsplit('::', 1)[0]
-
-    self.api_cc_generator = _APICCGenerator(self)
-    self.api_h_generator = _APIHGenerator(self)
-    self.schemas_cc_generator = _SchemasCCGenerator(self)
-    self.schemas_h_generator = _SchemasHGenerator(self)
-
-  def _GenerateHeader(self, file_base, body_code):
-    """Generates a code.Code object for a header file
-
-    Parameters:
-    - |file_base| - the base of the filename, e.g. 'foo' (for 'foo.h')
-    - |body_code| - the code to put in between the multiple inclusion guards"""
-    c = code.Code()
-    c.Append(cpp_util.CHROMIUM_LICENSE)
-    c.Append()
-    c.Append(cpp_util.GENERATED_BUNDLE_FILE_MESSAGE % self._source_file_dir)
-    ifndef_name = cpp_util.GenerateIfndefName(
-        '%s/%s.h' % (self._source_file_dir, file_base))
-    c.Append()
-    c.Append('#ifndef %s' % ifndef_name)
-    c.Append('#define %s' % ifndef_name)
-    c.Append()
-    c.Concat(body_code)
-    c.Append()
-    c.Append('#endif  // %s' % ifndef_name)
-    c.Append()
-    return c
-
-  def _GetPlatformIfdefs(self, model_object):
-    """Generates the "defined" conditional for an #if check if |model_object|
-    has platform restrictions. Returns None if there are no restrictions.
-    """
-    if model_object.platforms is None:
-      return None
-    ifdefs = []
-    for platform in model_object.platforms:
-      if platform == Platforms.CHROMEOS:
-        ifdefs.append('defined(OS_CHROMEOS)')
-      elif platform == Platforms.LINUX:
-        ifdefs.append('defined(OS_LINUX)')
-      elif platform == Platforms.MAC:
-        ifdefs.append('defined(OS_MACOSX)')
-      elif platform == Platforms.WIN:
-        ifdefs.append('defined(OS_WIN)')
-      else:
-        raise ValueError("Unsupported platform ifdef: %s" % platform.name)
-    return ' || '.join(ifdefs)
-
-  def _GenerateRegisterFunctions(self, namespace_name, function):
-    c = code.Code()
-    function_ifdefs = self._GetPlatformIfdefs(function)
-    if function_ifdefs is not None:
-      c.Append("#if %s" % function_ifdefs, indent_level=0)
-
-    function_name = JsFunctionNameToClassName(namespace_name, function.name)
-    c.Append("registry->RegisterFunction<%sFunction>();" % (
-        function_name))
-
-    if function_ifdefs is not None:
-      c.Append("#endif  // %s" % function_ifdefs, indent_level=0)
-    return c
-
-  def _GenerateFunctionRegistryRegisterAll(self):
-    c = code.Code()
-    c.Append('// static')
-    c.Sblock('void GeneratedFunctionRegistry::RegisterAll('
-                 'ExtensionFunctionRegistry* registry) {')
-    for namespace in self._model.namespaces.values():
-      namespace_ifdefs = self._GetPlatformIfdefs(namespace)
-      if namespace_ifdefs is not None:
-        c.Append("#if %s" % namespace_ifdefs, indent_level=0)
-
-      namespace_name = CapitalizeFirstLetter(namespace.name.replace(
-          "experimental.", ""))
-      for function in namespace.functions.values():
-        if function.nocompile:
-          continue
-        c.Concat(self._GenerateRegisterFunctions(namespace.name, function))
-
-      for type_ in namespace.types.values():
-        for function in type_.functions.values():
-          if function.nocompile:
-            continue
-          namespace_types_name = JsFunctionNameToClassName(
-                namespace.name, type_.name)
-          c.Concat(self._GenerateRegisterFunctions(namespace_types_name,
-                                                   function))
-
-      if namespace_ifdefs is not None:
-        c.Append("#endif  // %s" % namespace_ifdefs, indent_level=0)
-    c.Eblock("}")
-    return c
-
-
-class _APIHGenerator(object):
-  """Generates the header for API registration / declaration"""
-  def __init__(self, cpp_bundle):
-    self._bundle = cpp_bundle
-
-  def Generate(self, _):  # namespace not relevant, this is a bundle
-    c = code.Code()
-
-    c.Append('#include <string>')
-    c.Append()
-    c.Append('#include "base/basictypes.h"')
-    c.Append()
-    c.Append("class ExtensionFunctionRegistry;")
-    c.Append()
-    c.Concat(cpp_util.OpenNamespace(self._bundle._cpp_namespace))
-    c.Append()
-    c.Append('class GeneratedFunctionRegistry {')
-    c.Sblock(' public:')
-    c.Append('static void RegisterAll('
-                 'ExtensionFunctionRegistry* registry);')
-    c.Eblock('};')
-    c.Append()
-    c.Concat(cpp_util.CloseNamespace(self._bundle._cpp_namespace))
-    return self._bundle._GenerateHeader('generated_api', c)
-
-
-class _APICCGenerator(object):
-  """Generates a code.Code object for the generated API .cc file"""
-
-  def __init__(self, cpp_bundle):
-    self._bundle = cpp_bundle
-
-  def Generate(self, _):  # namespace not relevant, this is a bundle
-    c = code.Code()
-    c.Append(cpp_util.CHROMIUM_LICENSE)
-    c.Append()
-    c.Append('#include "%s"' % (
-        os.path.join(self._bundle._impl_dir,
-                     'generated_api_registration.h')))
-    c.Append()
-    for namespace in self._bundle._model.namespaces.values():
-      namespace_name = namespace.unix_name.replace("experimental_", "")
-      implementation_header = namespace.compiler_options.get(
-          "implemented_in",
-          "%s/%s/%s_api.h" % (self._bundle._impl_dir,
-                              namespace_name,
-                              namespace_name))
-      if not os.path.exists(
-          os.path.join(self._bundle._root,
-                       os.path.normpath(implementation_header))):
-        if "implemented_in" in namespace.compiler_options:
-          raise ValueError('Header file for namespace "%s" specified in '
-                          'compiler_options not found: %s' %
-                          (namespace.unix_name, implementation_header))
-        continue
-      ifdefs = self._bundle._GetPlatformIfdefs(namespace)
-      if ifdefs is not None:
-        c.Append("#if %s" % ifdefs, indent_level=0)
-
-      c.Append('#include "%s"' % implementation_header)
-
-      if ifdefs is not None:
-        c.Append("#endif  // %s" % ifdefs, indent_level=0)
-    c.Append()
-    c.Append('#include '
-                 '"extensions/browser/extension_function_registry.h"')
-    c.Append()
-    c.Concat(cpp_util.OpenNamespace(self._bundle._cpp_namespace))
-    c.Append()
-    c.Concat(self._bundle._GenerateFunctionRegistryRegisterAll())
-    c.Append()
-    c.Concat(cpp_util.CloseNamespace(self._bundle._cpp_namespace))
-    c.Append()
-    return c
-
-
-class _SchemasHGenerator(object):
-  """Generates a code.Code object for the generated schemas .h file"""
-  def __init__(self, cpp_bundle):
-    self._bundle = cpp_bundle
-
-  def Generate(self, _):  # namespace not relevant, this is a bundle
-    c = code.Code()
-    c.Append('#include <map>')
-    c.Append('#include <string>')
-    c.Append()
-    c.Append('#include "base/strings/string_piece.h"')
-    c.Append()
-    c.Concat(cpp_util.OpenNamespace(self._bundle._cpp_namespace))
-    c.Append()
-    c.Append('class GeneratedSchemas {')
-    c.Sblock(' public:')
-    c.Append('// Determines if schema named |name| is generated.')
-    c.Append('static bool IsGenerated(std::string name);')
-    c.Append()
-    c.Append('// Gets the API schema named |name|.')
-    c.Append('static base::StringPiece Get(const std::string& name);')
-    c.Eblock('};')
-    c.Append()
-    c.Concat(cpp_util.CloseNamespace(self._bundle._cpp_namespace))
-    return self._bundle._GenerateHeader('generated_schemas', c)
-
-
-def _FormatNameAsConstant(name):
-  """Formats a name to be a C++ constant of the form kConstantName"""
-  name = '%s%s' % (name[0].upper(), name[1:])
-  return 'k%s' % re.sub('_[a-z]',
-                        lambda m: m.group(0)[1].upper(),
-                        name.replace('.', '_'))
-
-
-class _SchemasCCGenerator(object):
-  """Generates a code.Code object for the generated schemas .cc file"""
-
-  def __init__(self, cpp_bundle):
-    self._bundle = cpp_bundle
-
-  def Generate(self, _):  # namespace not relevant, this is a bundle
-    c = code.Code()
-    c.Append(cpp_util.CHROMIUM_LICENSE)
-    c.Append()
-    c.Append('#include "%s"' % (os.path.join(self._bundle._source_file_dir,
-                                             'generated_schemas.h')))
-    c.Append()
-    c.Append('#include "base/lazy_instance.h"')
-    c.Append()
-    c.Append('namespace {')
-    for api in self._bundle._api_defs:
-      namespace = self._bundle._model.namespaces[api.get('namespace')]
-      # JSON parsing code expects lists of schemas, so dump a singleton list.
-      json_content = json.dumps([_RemoveDescriptions(api)],
-                                separators=(',', ':'))
-      # Escape all double-quotes and backslashes. For this to output a valid
-      # JSON C string, we need to escape \ and ". Note that some schemas are
-      # too large to compile on windows. Split the JSON up into several
-      # strings, since apparently that helps.
-      max_length = 8192
-      segments = [json_content[i:i + max_length].replace('\\', '\\\\')
-                                                .replace('"', '\\"')
-                  for i in xrange(0, len(json_content), max_length)]
-      c.Append('const char %s[] = "%s";' %
-          (_FormatNameAsConstant(namespace.name), '" "'.join(segments)))
-    c.Append('}')
-    c.Concat(cpp_util.OpenNamespace(self._bundle._cpp_namespace))
-    c.Append()
-    c.Sblock('struct Static {')
-    c.Sblock('Static() {')
-    for api in self._bundle._api_defs:
-      namespace = self._bundle._model.namespaces[api.get('namespace')]
-      c.Append('schemas["%s"] = %s;' % (namespace.name,
-                                        _FormatNameAsConstant(namespace.name)))
-    c.Eblock('}')
-    c.Append()
-    c.Append('std::map<std::string, const char*> schemas;')
-    c.Eblock('};')
-    c.Append()
-    c.Append('base::LazyInstance<Static> g_lazy_instance;')
-    c.Append()
-    c.Append('// static')
-    c.Sblock('base::StringPiece GeneratedSchemas::Get('
-                  'const std::string& name) {')
-    c.Append('return IsGenerated(name) ? '
-             'g_lazy_instance.Get().schemas[name] : "";')
-    c.Eblock('}')
-    c.Append()
-    c.Append('// static')
-    c.Sblock('bool GeneratedSchemas::IsGenerated(std::string name) {')
-    c.Append('return g_lazy_instance.Get().schemas.count(name) > 0;')
-    c.Eblock('}')
-    c.Append()
-    c.Concat(cpp_util.CloseNamespace(self._bundle._cpp_namespace))
-    c.Append()
-    return c
diff --git a/tools/json_schema_compiler/cpp_generator.py b/tools/json_schema_compiler/cpp_generator.py
deleted file mode 100644
index 5521ea9..0000000
--- a/tools/json_schema_compiler/cpp_generator.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2012 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.
-
-from cc_generator import CCGenerator
-from h_generator import HGenerator
-
-class CppGenerator(object):
-  def __init__(self, type_generator):
-    self.h_generator = HGenerator(type_generator)
-    self.cc_generator = CCGenerator(type_generator)
diff --git a/tools/json_schema_compiler/cpp_namespace_environment.py b/tools/json_schema_compiler/cpp_namespace_environment.py
deleted file mode 100644
index 20e77bb..0000000
--- a/tools/json_schema_compiler/cpp_namespace_environment.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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.
-
-class CppNamespaceEnvironment(object):
-  def __init__(self, namespace_pattern):
-    self.namespace_pattern = namespace_pattern
diff --git a/tools/json_schema_compiler/cpp_type_generator.py b/tools/json_schema_compiler/cpp_type_generator.py
deleted file mode 100644
index 6bec67e..0000000
--- a/tools/json_schema_compiler/cpp_type_generator.py
+++ /dev/null
@@ -1,273 +0,0 @@
-# Copyright (c) 2012 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.
-
-from code import Code
-from model import PropertyType
-import cpp_util
-from json_parse import OrderedDict
-import schema_util
-
-class _TypeDependency(object):
-  """Contains information about a dependency a namespace has on a type: the
-  type's model, and whether that dependency is "hard" meaning that it cannot be
-  forward declared.
-  """
-  def __init__(self, type_, hard=False):
-    self.type_ = type_
-    self.hard = hard
-
-  def GetSortKey(self):
-    return '%s.%s' % (self.type_.namespace.name, self.type_.name)
-
-
-class CppTypeGenerator(object):
-  """Manages the types of properties and provides utilities for getting the
-  C++ type out of a model.Property
-  """
-  def __init__(self, model, schema_loader, default_namespace=None):
-    """Creates a cpp_type_generator. The given root_namespace should be of the
-    format extensions::api::sub. The generator will generate code suitable for
-    use in the given model's namespace.
-    """
-    self._default_namespace = default_namespace
-    if self._default_namespace is None:
-      self._default_namespace = model.namespaces.values()[0]
-    self._schema_loader = schema_loader
-
-  def GetEnumNoneValue(self, type_):
-    """Gets the enum value in the given model.Property indicating no value has
-    been set.
-    """
-    return '%s_NONE' % self.FollowRef(type_).unix_name.upper()
-
-  def GetEnumLastValue(self, type_):
-    """Gets the enum value in the given model.Property indicating the last value
-    for the type.
-    """
-    return '%s_LAST' % self.FollowRef(type_).unix_name.upper()
-
-  def GetEnumValue(self, type_, enum_value):
-    """Gets the enum value of the given model.Property of the given type.
-
-    e.g VAR_STRING
-    """
-    value = cpp_util.Classname(enum_value.name.upper())
-    prefix = (type_.cpp_enum_prefix_override or
-              self.FollowRef(type_).unix_name)
-    value = '%s_%s' % (prefix.upper(), value)
-    # To avoid collisions with built-in OS_* preprocessor definitions, we add a
-    # trailing slash to enum names that start with OS_.
-    if value.startswith("OS_"):
-      value += "_"
-    return value
-
-  def GetCppType(self, type_, is_ptr=False, is_in_container=False):
-    """Translates a model.Property or model.Type into its C++ type.
-
-    If REF types from different namespaces are referenced, will resolve
-    using self._schema_loader.
-
-    Use |is_ptr| if the type is optional. This will wrap the type in a
-    scoped_ptr if possible (it is not possible to wrap an enum).
-
-    Use |is_in_container| if the type is appearing in a collection, e.g. a
-    std::vector or std::map. This will wrap it in the correct type with spacing.
-    """
-    cpp_type = None
-    if type_.property_type == PropertyType.REF:
-      ref_type = self._FindType(type_.ref_type)
-      if ref_type is None:
-        raise KeyError('Cannot find referenced type: %s' % type_.ref_type)
-      cpp_type = self.GetCppType(ref_type)
-    elif type_.property_type == PropertyType.BOOLEAN:
-      cpp_type = 'bool'
-    elif type_.property_type == PropertyType.INTEGER:
-      cpp_type = 'int'
-    elif type_.property_type == PropertyType.INT64:
-      cpp_type = 'int64'
-    elif type_.property_type == PropertyType.DOUBLE:
-      cpp_type = 'double'
-    elif type_.property_type == PropertyType.STRING:
-      cpp_type = 'std::string'
-    elif type_.property_type in (PropertyType.ENUM,
-                                 PropertyType.OBJECT,
-                                 PropertyType.CHOICES):
-      if self._default_namespace is type_.namespace:
-        cpp_type = cpp_util.Classname(type_.name)
-      else:
-        cpp_namespace = cpp_util.GetCppNamespace(
-            type_.namespace.environment.namespace_pattern,
-            type_.namespace.unix_name)
-        cpp_type = '%s::%s' % (cpp_namespace,
-                               cpp_util.Classname(type_.name))
-    elif type_.property_type == PropertyType.ANY:
-      cpp_type = 'base::Value'
-    elif type_.property_type == PropertyType.FUNCTION:
-      # Functions come into the json schema compiler as empty objects. We can
-      # record these as empty DictionaryValues so that we know if the function
-      # was passed in or not.
-      cpp_type = 'base::DictionaryValue'
-    elif type_.property_type == PropertyType.ARRAY:
-      item_cpp_type = self.GetCppType(type_.item_type, is_in_container=True)
-      cpp_type = 'std::vector<%s>' % cpp_util.PadForGenerics(item_cpp_type)
-    elif type_.property_type == PropertyType.BINARY:
-      cpp_type = 'std::string'
-    else:
-      raise NotImplementedError('Cannot get type of %s' % type_.property_type)
-
-    # HACK: optional ENUM is represented elsewhere with a _NONE value, so it
-    # never needs to be wrapped in pointer shenanigans.
-    # TODO(kalman): change this - but it's an exceedingly far-reaching change.
-    if not self.FollowRef(type_).property_type == PropertyType.ENUM:
-      if is_in_container and (is_ptr or not self.IsCopyable(type_)):
-        cpp_type = 'linked_ptr<%s>' % cpp_util.PadForGenerics(cpp_type)
-      elif is_ptr:
-        cpp_type = 'scoped_ptr<%s>' % cpp_util.PadForGenerics(cpp_type)
-
-    return cpp_type
-
-  def IsCopyable(self, type_):
-    return not (self.FollowRef(type_).property_type in (PropertyType.ANY,
-                                                        PropertyType.ARRAY,
-                                                        PropertyType.OBJECT,
-                                                        PropertyType.CHOICES))
-
-  def GenerateForwardDeclarations(self):
-    """Returns the forward declarations for self._default_namespace.
-    """
-    c = Code()
-    for namespace, deps in self._NamespaceTypeDependencies().iteritems():
-      filtered_deps = [
-        dep for dep in deps
-        # Add more ways to forward declare things as necessary.
-        if (not dep.hard and
-            dep.type_.property_type in (PropertyType.CHOICES,
-                                        PropertyType.OBJECT))]
-      if not filtered_deps:
-        continue
-
-      cpp_namespace = cpp_util.GetCppNamespace(
-          namespace.environment.namespace_pattern,
-          namespace.unix_name)
-      c.Concat(cpp_util.OpenNamespace(cpp_namespace))
-      for dep in filtered_deps:
-        c.Append('struct %s;' % dep.type_.name)
-      c.Concat(cpp_util.CloseNamespace(cpp_namespace))
-    return c
-
-  def GenerateIncludes(self, include_soft=False):
-    """Returns the #include lines for self._default_namespace.
-    """
-    c = Code()
-    for namespace, dependencies in self._NamespaceTypeDependencies().items():
-      for dependency in dependencies:
-        if dependency.hard or include_soft:
-          c.Append('#include "%s/%s.h"' % (namespace.source_file_dir,
-                                           namespace.unix_name))
-    return c
-
-  def _FindType(self, full_name):
-    """Finds the model.Type with name |qualified_name|. If it's not from
-    |self._default_namespace| then it needs to be qualified.
-    """
-    namespace = self._schema_loader.ResolveType(full_name,
-                                                self._default_namespace)
-    if namespace is None:
-      raise KeyError('Cannot resolve type %s. Maybe it needs a prefix '
-                     'if it comes from another namespace?' % full_name)
-    return namespace.types[schema_util.StripNamespace(full_name)]
-
-  def FollowRef(self, type_):
-    """Follows $ref link of types to resolve the concrete type a ref refers to.
-
-    If the property passed in is not of type PropertyType.REF, it will be
-    returned unchanged.
-    """
-    if type_.property_type != PropertyType.REF:
-      return type_
-    return self.FollowRef(self._FindType(type_.ref_type))
-
-  def _NamespaceTypeDependencies(self):
-    """Returns a dict ordered by namespace name containing a mapping of
-    model.Namespace to every _TypeDependency for |self._default_namespace|,
-    sorted by the type's name.
-    """
-    dependencies = set()
-    for function in self._default_namespace.functions.values():
-      for param in function.params:
-        dependencies |= self._TypeDependencies(param.type_,
-                                               hard=not param.optional)
-      if function.callback:
-        for param in function.callback.params:
-          dependencies |= self._TypeDependencies(param.type_,
-                                                 hard=not param.optional)
-    for type_ in self._default_namespace.types.values():
-      for prop in type_.properties.values():
-        dependencies |= self._TypeDependencies(prop.type_,
-                                               hard=not prop.optional)
-    for event in self._default_namespace.events.values():
-      for param in event.params:
-        dependencies |= self._TypeDependencies(param.type_,
-                                               hard=not param.optional)
-
-    # Make sure that the dependencies are returned in alphabetical order.
-    dependency_namespaces = OrderedDict()
-    for dependency in sorted(dependencies, key=_TypeDependency.GetSortKey):
-      namespace = dependency.type_.namespace
-      if namespace is self._default_namespace:
-        continue
-      if namespace not in dependency_namespaces:
-        dependency_namespaces[namespace] = []
-      dependency_namespaces[namespace].append(dependency)
-
-    return dependency_namespaces
-
-  def _TypeDependencies(self, type_, hard=False):
-    """Gets all the type dependencies of a property.
-    """
-    deps = set()
-    if type_.property_type == PropertyType.REF:
-      deps.add(_TypeDependency(self._FindType(type_.ref_type), hard=hard))
-    elif type_.property_type == PropertyType.ARRAY:
-      # Non-copyable types are not hard because they are wrapped in linked_ptrs
-      # when generated. Otherwise they're typedefs, so they're hard (though we
-      # could generate those typedefs in every dependent namespace, but that
-      # seems weird).
-      deps = self._TypeDependencies(type_.item_type,
-                                    hard=self.IsCopyable(type_.item_type))
-    elif type_.property_type == PropertyType.CHOICES:
-      for type_ in type_.choices:
-        deps |= self._TypeDependencies(type_, hard=self.IsCopyable(type_))
-    elif type_.property_type == PropertyType.OBJECT:
-      for p in type_.properties.values():
-        deps |= self._TypeDependencies(p.type_, hard=not p.optional)
-    return deps
-
-  def GeneratePropertyValues(self, property, line, nodoc=False):
-    """Generates the Code to display all value-containing properties.
-    """
-    c = Code()
-    if not nodoc:
-      c.Comment(property.description)
-
-    if property.value is not None:
-      c.Append(line % {
-          "type": self.GetCppType(property.type_),
-          "name": property.name,
-          "value": property.value
-        })
-    else:
-      has_child_code = False
-      c.Sblock('namespace %s {' % property.name)
-      for child_property in property.type_.properties.values():
-        child_code = self.GeneratePropertyValues(child_property,
-                                                 line,
-                                                 nodoc=nodoc)
-        if child_code:
-          has_child_code = True
-          c.Concat(child_code)
-      c.Eblock('}  // namespace %s' % property.name)
-      if not has_child_code:
-        c = None
-    return c
diff --git a/tools/json_schema_compiler/cpp_type_generator_test.py b/tools/json_schema_compiler/cpp_type_generator_test.py
deleted file mode 100755
index 51fcfe9..0000000
--- a/tools/json_schema_compiler/cpp_type_generator_test.py
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-from cpp_namespace_environment import CppNamespaceEnvironment
-from cpp_type_generator import CppTypeGenerator
-from json_schema import CachedLoad
-import model
-import unittest
-
-from collections import defaultdict
-
-class _FakeSchemaLoader(object):
-  def __init__(self, model):
-    self._model = model
-
-  def ResolveType(self, type_name, default):
-    parts = type_name.rsplit('.', 1)
-    if len(parts) == 1:
-      return default if type_name in default.types else None
-    return self._model.namespaces[parts[0]]
-
-class CppTypeGeneratorTest(unittest.TestCase):
-  def setUp(self):
-    self.models = defaultdict(model.Model)
-
-    self.forbidden_json = CachedLoad('test/forbidden.json')
-    self.forbidden = self.models['forbidden'].AddNamespace(
-        self.forbidden_json[0], 'path/to/forbidden.json')
-    self.permissions_json = CachedLoad('test/permissions.json')
-    self.permissions = self.models['permissions'].AddNamespace(
-        self.permissions_json[0], 'path/to/permissions.json')
-    self.windows_json = CachedLoad('test/windows.json')
-    self.windows = self.models['windows'].AddNamespace(self.windows_json[0],
-                                                       'path/to/window.json')
-    self.tabs_json = CachedLoad('test/tabs.json')
-    self.tabs = self.models['tabs'].AddNamespace(self.tabs_json[0],
-                                                 'path/to/tabs.json')
-    self.browser_action_json = CachedLoad('test/browser_action.json')
-    self.browser_action = self.models['browser_action'].AddNamespace(
-        self.browser_action_json[0], 'path/to/browser_action.json')
-    self.font_settings_json = CachedLoad('test/font_settings.json')
-    self.font_settings = self.models['font_settings'].AddNamespace(
-        self.font_settings_json[0], 'path/to/font_settings.json')
-    self.dependency_tester_json = CachedLoad('test/dependency_tester.json')
-    self.dependency_tester = self.models['dependency_tester'].AddNamespace(
-        self.dependency_tester_json[0], 'path/to/dependency_tester.json')
-    self.content_settings_json = CachedLoad('test/content_settings.json')
-    self.content_settings = self.models['content_settings'].AddNamespace(
-        self.content_settings_json[0], 'path/to/content_settings.json')
-
-  def testGenerateIncludesAndForwardDeclarations(self):
-    m = model.Model()
-    m.AddNamespace(self.windows_json[0],
-                   'path/to/windows.json',
-                   environment=CppNamespaceEnvironment('%(namespace)s'))
-    m.AddNamespace(self.tabs_json[0],
-                   'path/to/tabs.json',
-                   environment=CppNamespaceEnvironment('%(namespace)s'))
-    manager = CppTypeGenerator(m, _FakeSchemaLoader(m))
-
-    self.assertEquals('', manager.GenerateIncludes().Render())
-    self.assertEquals('#include "path/to/tabs.h"',
-                      manager.GenerateIncludes(include_soft=True).Render())
-    self.assertEquals(
-        'namespace tabs {\n'
-        'struct Tab;\n'
-        '}  // namespace tabs',
-        manager.GenerateForwardDeclarations().Render())
-
-    m = model.Model()
-    m.AddNamespace(self.windows_json[0],
-                   'path/to/windows.json',
-                   environment=CppNamespaceEnvironment(
-                       'foo::bar::%(namespace)s'))
-    m.AddNamespace(self.tabs_json[0],
-                   'path/to/tabs.json',
-                   environment=CppNamespaceEnvironment(
-                       'foo::bar::%(namespace)s'))
-    manager = CppTypeGenerator(m, _FakeSchemaLoader(m))
-    self.assertEquals(
-        'namespace foo {\n'
-        'namespace bar {\n'
-        'namespace tabs {\n'
-        'struct Tab;\n'
-        '}  // namespace tabs\n'
-        '}  // namespace bar\n'
-        '}  // namespace foo',
-        manager.GenerateForwardDeclarations().Render())
-    manager = CppTypeGenerator(self.models.get('permissions'),
-                               _FakeSchemaLoader(m))
-    self.assertEquals('', manager.GenerateIncludes().Render())
-    self.assertEquals('', manager.GenerateIncludes().Render())
-    self.assertEquals('', manager.GenerateForwardDeclarations().Render())
-    manager = CppTypeGenerator(self.models.get('content_settings'),
-                               _FakeSchemaLoader(m))
-    self.assertEquals('', manager.GenerateIncludes().Render())
-
-  def testGenerateIncludesAndForwardDeclarationsDependencies(self):
-    m = model.Model()
-    # Insert 'font_settings' before 'browser_action' in order to test that
-    # CppTypeGenerator sorts them properly.
-    m.AddNamespace(self.font_settings_json[0], 'path/to/font_settings.json')
-    m.AddNamespace(self.browser_action_json[0], 'path/to/browser_action.json')
-    dependency_tester = m.AddNamespace(self.dependency_tester_json[0],
-                                       'path/to/dependency_tester.json')
-    manager = CppTypeGenerator(m,
-                               _FakeSchemaLoader(m),
-                               default_namespace=dependency_tester)
-    self.assertEquals('#include "path/to/browser_action.h"\n'
-                      '#include "path/to/font_settings.h"',
-                      manager.GenerateIncludes().Render())
-    self.assertEquals('', manager.GenerateForwardDeclarations().Render())
-
-  def testGetCppTypeSimple(self):
-    manager = CppTypeGenerator(self.models.get('tabs'), _FakeSchemaLoader(None))
-    self.assertEquals(
-        'int',
-        manager.GetCppType(self.tabs.types['Tab'].properties['id'].type_))
-    self.assertEquals(
-        'std::string',
-        manager.GetCppType(self.tabs.types['Tab'].properties['status'].type_))
-    self.assertEquals(
-        'bool',
-        manager.GetCppType(self.tabs.types['Tab'].properties['selected'].type_))
-
-  def testStringAsType(self):
-    manager = CppTypeGenerator(self.models.get('font_settings'),
-                               _FakeSchemaLoader(None))
-    self.assertEquals(
-        'std::string',
-        manager.GetCppType(self.font_settings.types['FakeStringType']))
-
-  def testArrayAsType(self):
-    manager = CppTypeGenerator(self.models.get('browser_action'),
-                               _FakeSchemaLoader(None))
-    self.assertEquals(
-        'std::vector<int>',
-        manager.GetCppType(self.browser_action.types['ColorArray']))
-
-  def testGetCppTypeArray(self):
-    manager = CppTypeGenerator(self.models.get('windows'),
-                                _FakeSchemaLoader(None))
-    self.assertEquals(
-        'std::vector<linked_ptr<Window> >',
-        manager.GetCppType(
-            self.windows.functions['getAll'].callback.params[0].type_))
-    manager = CppTypeGenerator(self.models.get('permissions'),
-                               _FakeSchemaLoader(None))
-    self.assertEquals(
-        'std::vector<std::string>',
-        manager.GetCppType(
-            self.permissions.types['Permissions'].properties['origins'].type_))
-
-  def testGetCppTypeLocalRef(self):
-    manager = CppTypeGenerator(self.models.get('tabs'), _FakeSchemaLoader(None))
-    self.assertEquals(
-        'Tab',
-        manager.GetCppType(self.tabs.functions['get'].callback.params[0].type_))
-
-  def testGetCppTypeIncludedRef(self):
-    m = model.Model()
-    m.AddNamespace(self.windows_json[0],
-                   'path/to/windows.json',
-                   environment=CppNamespaceEnvironment('%(namespace)s'))
-    m.AddNamespace(self.tabs_json[0],
-                   'path/to/tabs.json',
-                   environment=CppNamespaceEnvironment('%(namespace)s'))
-    manager = CppTypeGenerator(m, _FakeSchemaLoader(m))
-    self.assertEquals(
-        'std::vector<linked_ptr<tabs::Tab> >',
-        manager.GetCppType(
-            self.windows.types['Window'].properties['tabs'].type_))
-
-  def testGetCppTypeWithPadForGeneric(self):
-    manager = CppTypeGenerator(self.models.get('permissions'),
-                               _FakeSchemaLoader(None))
-    self.assertEquals('std::vector<std::string>',
-        manager.GetCppType(
-            self.permissions.types['Permissions'].properties['origins'].type_,
-            is_in_container=False))
-    self.assertEquals('linked_ptr<std::vector<std::string> >',
-        manager.GetCppType(
-            self.permissions.types['Permissions'].properties['origins'].type_,
-            is_in_container=True))
-    self.assertEquals('bool',
-        manager.GetCppType(
-            self.permissions.functions['contains'].callback.params[0].type_,
-        is_in_container=True))
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/tools/json_schema_compiler/cpp_util.py b/tools/json_schema_compiler/cpp_util.py
deleted file mode 100644
index 187d99f..0000000
--- a/tools/json_schema_compiler/cpp_util.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Utilies and constants specific to Chromium C++ code.
-"""
-
-from code import Code
-from datetime import datetime
-from model import PropertyType
-import os
-import re
-
-CHROMIUM_LICENSE = (
-"""// Copyright (c) %d 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.""" % datetime.now().year
-)
-GENERATED_FILE_MESSAGE = """// GENERATED FROM THE API DEFINITION IN
-//   %s
-// DO NOT EDIT.
-"""
-GENERATED_BUNDLE_FILE_MESSAGE = """// GENERATED FROM THE API DEFINITIONS IN
-//   %s
-// DO NOT EDIT.
-"""
-GENERATED_FEATURE_MESSAGE = """// GENERATED FROM THE FEATURE DEFINITIONS IN
-//   %s
-// DO NOT EDIT.
-"""
-
-def Classname(s):
-  """Translates a namespace name or function name into something more
-  suited to C++.
-
-  eg experimental.downloads -> Experimental_Downloads
-  updateAll -> UpdateAll.
-  """
-  return '_'.join([x[0].upper() + x[1:] for x in re.split('\W', s)])
-
-
-def GetAsFundamentalValue(type_, src, dst):
-  """Returns the C++ code for retrieving a fundamental type from a
-  Value into a variable.
-
-  src: Value*
-  dst: Property*
-  """
-  return {
-      PropertyType.BOOLEAN: '%s->GetAsBoolean(%s)',
-      PropertyType.DOUBLE: '%s->GetAsDouble(%s)',
-      PropertyType.INTEGER: '%s->GetAsInteger(%s)',
-      PropertyType.STRING: '%s->GetAsString(%s)',
-  }[type_.property_type] % (src, dst)
-
-
-def GetValueType(type_):
-  """Returns the Value::Type corresponding to the model.Type.
-  """
-  return {
-      PropertyType.ARRAY: 'base::Value::TYPE_LIST',
-      PropertyType.BINARY: 'base::Value::TYPE_BINARY',
-      PropertyType.BOOLEAN: 'base::Value::TYPE_BOOLEAN',
-      # PropertyType.CHOICES can be any combination of types.
-      PropertyType.DOUBLE: 'base::Value::TYPE_DOUBLE',
-      PropertyType.ENUM: 'base::Value::TYPE_STRING',
-      PropertyType.FUNCTION: 'base::Value::TYPE_DICTIONARY',
-      PropertyType.INTEGER: 'base::Value::TYPE_INTEGER',
-      PropertyType.OBJECT: 'base::Value::TYPE_DICTIONARY',
-      PropertyType.STRING: 'base::Value::TYPE_STRING',
-  }[type_.property_type]
-
-
-def GetParameterDeclaration(param, type_):
-  """Gets a parameter declaration of a given model.Property and its C++
-  type.
-  """
-  if param.type_.property_type in (PropertyType.ANY,
-                                   PropertyType.ARRAY,
-                                   PropertyType.CHOICES,
-                                   PropertyType.OBJECT,
-                                   PropertyType.REF,
-                                   PropertyType.STRING):
-    arg = 'const %(type)s& %(name)s'
-  else:
-    arg = '%(type)s %(name)s'
-  return arg % {
-    'type': type_,
-    'name': param.unix_name,
-  }
-
-
-def GenerateIfndefName(file_path):
-  """Formats |file_path| as a #define name. Presumably |file_path| is a header
-  file, or there's little point in generating a #define for it.
-
-  e.g chrome/extensions/gen/file.h becomes CHROME_EXTENSIONS_GEN_FILE_H__.
-  """
-  return (('%s__' % file_path).upper()
-      .replace('\\', '_')
-      .replace('/', '_')
-      .replace('.', '_'))
-
-
-def PadForGenerics(var):
-  """Appends a space to |var| if it ends with a >, so that it can be compiled
-  within generic types.
-  """
-  return ('%s ' % var) if var.endswith('>') else var
-
-
-
-def OpenNamespace(cpp_namespace):
-  """Get opening root namespace declarations.
-  """
-  c = Code()
-  for component in cpp_namespace.split('::'):
-    c.Append('namespace %s {' % component)
-  return c
-
-
-def CloseNamespace(cpp_namespace):
-  """Get closing root namespace declarations.
-  """
-  c = Code()
-  for component in reversed(cpp_namespace.split('::')):
-    c.Append('}  // namespace %s' % component)
-  return c
-
-
-def ConstantName(feature_name):
-  """Returns a kName for a feature's name.
-  """
-  return ('k' + ''.join(word[0].upper() + word[1:]
-      for word in feature_name.replace('.', ' ').split()))
-
-
-def CamelCase(unix_name):
-  return ''.join(word.capitalize() for word in unix_name.split('_'))
-
-
-def ClassName(filepath):
-  return CamelCase(os.path.split(filepath)[1])
-
-
-def GetCppNamespace(pattern, namespace):
-  '''Returns the C++ namespace given |pattern| which includes a %(namespace)s
-  substitution, and the |namespace| to substitute. It is expected that |pattern|
-  has been passed as a flag to compiler.py from GYP/GN.
-  '''
-  # For some reason Windows builds escape the % characters, so unescape them.
-  # This means that %% can never appear legitimately within a pattern, but
-  # that's ok. It should never happen.
-  cpp_namespace = pattern.replace('%%', '%') % { 'namespace': namespace }
-  assert '%' not in cpp_namespace, \
-         ('Did not manage to fully substitute namespace "%s" into pattern "%s"'
-           % (namespace, pattern))
-  return cpp_namespace
diff --git a/tools/json_schema_compiler/cpp_util_test.py b/tools/json_schema_compiler/cpp_util_test.py
deleted file mode 100755
index eef4c55..0000000
--- a/tools/json_schema_compiler/cpp_util_test.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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 unittest
-
-from cpp_util import (
-    Classname, CloseNamespace, GenerateIfndefName, OpenNamespace)
-
-class CppUtilTest(unittest.TestCase):
-  def testClassname(self):
-    self.assertEquals('Permissions', Classname('permissions'))
-    self.assertEquals('UpdateAllTheThings',
-        Classname('updateAllTheThings'))
-    self.assertEquals('Aa_Bb_Cc', Classname('aa.bb.cc'))
-
-  def testNamespaceDeclaration(self):
-    self.assertEquals('namespace foo {',
-                      OpenNamespace('foo').Render())
-    self.assertEquals('}  // namespace foo',
-                      CloseNamespace('foo').Render())
-
-    self.assertEquals(
-        'namespace extensions {\n'
-        'namespace foo {',
-        OpenNamespace('extensions::foo').Render())
-    self.assertEquals(
-        '}  // namespace foo\n'
-        '}  // namespace extensions',
-        CloseNamespace('extensions::foo').Render())
-
-    self.assertEquals(
-        'namespace extensions {\n'
-        'namespace gen {\n'
-        'namespace api {',
-        OpenNamespace('extensions::gen::api').Render())
-    self.assertEquals(
-        '}  // namespace api\n'
-        '}  // namespace gen\n'
-        '}  // namespace extensions',
-        CloseNamespace('extensions::gen::api').Render())
-
-    self.assertEquals(
-        'namespace extensions {\n'
-        'namespace gen {\n'
-        'namespace api {\n'
-        'namespace foo {',
-        OpenNamespace('extensions::gen::api::foo').Render())
-    self.assertEquals(
-        '}  // namespace foo\n'
-        '}  // namespace api\n'
-        '}  // namespace gen\n'
-        '}  // namespace extensions',
-        CloseNamespace('extensions::gen::api::foo').Render())
-
-  def testGenerateIfndefName(self):
-    self.assertEquals('FOO_BAR_BAZ_H__', GenerateIfndefName('foo\\bar\\baz.h'))
-    self.assertEquals('FOO_BAR_BAZ_H__', GenerateIfndefName('foo/bar/baz.h'))
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/tools/json_schema_compiler/dart_generator.py b/tools/json_schema_compiler/dart_generator.py
deleted file mode 100644
index a9ba0d6..0000000
--- a/tools/json_schema_compiler/dart_generator.py
+++ /dev/null
@@ -1,763 +0,0 @@
-# Copyright (c) 2012 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.
-"""
-Generator language component for compiler.py that adds Dart language support.
-"""
-
-from code import Code
-from model import Function, PropertyType
-from schema_util import StripNamespace
-
-import os
-from datetime import datetime
-
-LICENSE = (
-"""// Copyright (c) %s, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.""" %
-    datetime.now().year)
-
-class DartGenerator(object):
-  def __init__(self, dart_overrides_dir=None):
-    self._dart_overrides_dir = dart_overrides_dir
-
-  def Generate(self, namespace):
-    return _Generator(namespace, self._dart_overrides_dir).Generate()
-
-
-class _Generator(object):
-  """A .dart generator for a namespace.
-  """
-
-  def __init__(self, namespace, dart_overrides_dir=None):
-    self._namespace = namespace
-    # TODO(sashab): Once inline type definitions start being added to
-    # self._types, make a _FindType(self, type_) function that looks at
-    # self._namespace.types.
-    self._types = namespace.types
-
-    # Build a dictionary of Type Name --> Custom Dart code.
-    self._type_overrides = {}
-    if dart_overrides_dir is not None:
-      for filename in os.listdir(dart_overrides_dir):
-        if filename.startswith(namespace.unix_name):
-          with open(os.path.join(dart_overrides_dir, filename)) as f:
-            # Split off the namespace and file extension, leaving just the type.
-            type_path = '.'.join(filename.split('.')[1:-1])
-            self._type_overrides[type_path] = f.read()
-
-    # TODO(sashab): Add all inline type definitions to the global Types
-    # dictionary here, so they have proper names, and are implemented along with
-    # all other types. Also update the parameters/members with these types
-    # to reference these new types instead.
-
-  def Generate(self):
-    """Generates a Code object with the .dart for the entire namespace.
-    """
-    c = Code()
-    (c.Append(LICENSE)
-      .Append()
-      .Append('// Generated from namespace: %s' % self._namespace.name)
-      .Append()
-      .Append('part of chrome;'))
-
-    if self._types:
-      (c.Append()
-        .Append('/**')
-        .Append(' * Types')
-        .Append(' */')
-        .Append()
-      )
-    for type_ in self._types.values():
-      # Check for custom dart for this whole type.
-      override = self._GetOverride([type_.name], document_with=type_)
-      c.Cblock(override if override is not None else self._GenerateType(type_))
-
-    if self._namespace.events:
-      (c.Append('/**')
-        .Append(' * Events')
-        .Append(' */')
-        .Append()
-      )
-    for event_name in self._namespace.events:
-      c.Cblock(self._GenerateEvent(self._namespace.events[event_name]))
-
-    (c.Append('/**')
-      .Append(' * Functions')
-      .Append(' */')
-      .Append()
-    )
-    c.Cblock(self._GenerateMainClass())
-
-    return c
-
-  def _GenerateType(self, type_):
-    """Given a Type object, returns the Code with the .dart for this
-    type's definition.
-
-    Assumes this type is a Parameter Type (creatable by user), and creates an
-    object that extends ChromeObject. All parameters are specifiable as named
-    arguments in the constructor, and all methods are wrapped with getters and
-    setters that hide the JS() implementation.
-    """
-    c = Code()
-
-    # Since enums are just treated as strings for now, don't generate their
-    # type.
-    # TODO(sashab): Find a nice way to wrap enum objects.
-    if type_.property_type is PropertyType.ENUM:
-      return c
-
-    (c.Concat(self._GenerateDocumentation(type_))
-      .Sblock('class %(type_name)s extends ChromeObject {')
-    )
-
-    # Check whether this type has function members. If it does, don't allow
-    # public construction.
-    add_public_constructor = all(not self._IsFunction(p.type_)
-                                 for p in type_.properties.values())
-    constructor_fields = [self._GeneratePropertySignature(p)
-                          for p in type_.properties.values()]
-
-    if add_public_constructor:
-      (c.Append('/*')
-        .Append(' * Public constructor')
-        .Append(' */')
-        .Sblock('%(type_name)s({%(constructor_fields)s}) {')
-      )
-
-      for prop_name in type_.properties:
-        (c.Sblock('if (%s != null)' % prop_name)
-          .Append('this.%s = %s;' % (prop_name, prop_name))
-          .Eblock()
-        )
-      (c.Eblock('}')
-        .Append()
-      )
-
-    (c.Append('/*')
-      .Append(' * Private constructor')
-      .Append(' */')
-      .Append('%(type_name)s._proxy(_jsObject) : super._proxy(_jsObject);')
-    )
-
-    # Add an accessor (getter & setter) for each property.
-    properties = [p for p in type_.properties.values()
-                  if not self._IsFunction(p.type_)]
-    if properties:
-      (c.Append()
-        .Append('/*')
-        .Append(' * Public accessors')
-        .Append(' */')
-      )
-    for prop in properties:
-      override = self._GetOverride([type_.name, prop.name], document_with=prop)
-      c.Concat(override if override is not None
-               else self._GenerateGetterAndSetter(type_, prop))
-
-    # Now add all the methods.
-    methods = [t for t in type_.properties.values()
-               if self._IsFunction(t.type_)]
-    if methods:
-      (c.Append()
-        .Append('/*')
-        .Append(' * Methods')
-        .Append(' */')
-      )
-    for prop in methods:
-      # Check if there's an override for this method.
-      override = self._GetOverride([type_.name, prop.name], document_with=prop)
-      c.Cblock(override if override is not None
-               else self._GenerateFunction(prop.type_.function))
-
-    (c.Eblock('}')
-      .Substitute({
-        'type_name': self._AddPrefix(type_.simple_name),
-        'constructor_fields': ', '.join(constructor_fields)
-      })
-    )
-
-    return c
-
-  def _GenerateGetterAndSetter(self, type_, prop):
-    """Given a Type and Property, returns the Code object for the getter and
-    setter for that property.
-    """
-    c = Code()
-    override = self._GetOverride([type_.name, prop.name, '.get'],
-                                 document_with=prop)
-    c.Cblock(override if override is not None
-             else self._GenerateGetter(type_, prop))
-    override = self._GetOverride([type_.name, prop.name, '.set'])
-    c.Cblock(override if override is not None
-             else self._GenerateSetter(type_, prop))
-    return c
-
-  def _GenerateGetter(self, type_, prop):
-    """Given a Type and Property, returns the Code object for the getter for
-    that property.
-
-    Also adds the documentation for this property before the method.
-    """
-    c = Code()
-    c.Concat(self._GenerateDocumentation(prop))
-
-    type_name = self._GetDartType(prop.type_)
-    if (self._IsBaseType(prop.type_)):
-      c.Append("%s get %s => JS('%s', '#.%s', this._jsObject);" %
-          (type_name, prop.name, type_name, prop.name))
-    elif self._IsSerializableObjectType(prop.type_):
-      c.Append("%s get %s => new %s._proxy(JS('', '#.%s', "
-               "this._jsObject));" %
-          (type_name, prop.name, type_name, prop.name))
-    elif self._IsListOfSerializableObjects(prop.type_):
-      (c.Sblock('%s get %s {' % (type_name, prop.name))
-        .Append('%s __proxy_%s = new %s();' % (type_name, prop.name,
-                                               type_name))
-        .Append("int count = JS('int', '#.%s.length', this._jsObject);" %
-            prop.name)
-        .Sblock("for (int i = 0; i < count; i++) {")
-        .Append("var item = JS('', '#.%s[#]', this._jsObject, i);" % prop.name)
-        .Append('__proxy_%s.add(new %s._proxy(item));' % (prop.name,
-            self._GetDartType(prop.type_.item_type)))
-        .Eblock('}')
-        .Append('return __proxy_%s;' % prop.name)
-        .Eblock('}')
-      )
-    elif self._IsObjectType(prop.type_):
-      # TODO(sashab): Think of a way to serialize generic Dart objects.
-      if type_name in self._types:
-        c.Append("%s get %s => new %s._proxy(JS('%s', '#.%s', "
-                 "this._jsObject));" %
-            (type_name, prop.name, type_name, type_name, prop.name))
-      else:
-        c.Append("%s get %s => JS('%s', '#.%s', this._jsObject);" %
-            (type_name, prop.name, type_name, prop.name))
-    else:
-      raise Exception(
-          "Could not generate wrapper for %s.%s: unserializable type %s" %
-          (type_.name, prop.name, type_name)
-      )
-    return c
-
-  def _GenerateSetter(self, type_, prop):
-    """Given a Type and Property, returns the Code object for the setter for
-    that property.
-    """
-    c = Code()
-    type_name = self._GetDartType(prop.type_)
-    wrapped_name = prop.name
-    if not self._IsBaseType(prop.type_):
-      wrapped_name = 'convertArgument(%s)' % prop.name
-
-    (c.Sblock("void set %s(%s %s) {" % (prop.name, type_name, prop.name))
-      .Append("JS('void', '#.%s = #', this._jsObject, %s);" %
-        (prop.name, wrapped_name))
-      .Eblock("}")
-    )
-    return c
-
-  def _GenerateDocumentation(self, prop):
-    """Given an object, generates the documentation for this object (as a
-    code string) and returns the Code object.
-
-    Returns an empty code object if the object has no documentation.
-
-    Uses triple-quotes for the string.
-    """
-    c = Code()
-    if prop.description is not None:
-      for line in prop.description.split('\n'):
-        c.Comment(line, comment_prefix='/// ')
-    return c
-
-  def _GenerateFunction(self, f):
-    """Returns the Code object for the given function.
-    """
-    c = Code()
-    c.Concat(self._GenerateDocumentation(f))
-
-    if not self._NeedsProxiedCallback(f):
-      c.Append("%s => %s;" % (self._GenerateFunctionSignature(f),
-                              self._GenerateProxyCall(f)))
-      return c
-
-    (c.Sblock("%s {" % self._GenerateFunctionSignature(f))
-      .Concat(self._GenerateProxiedFunction(f.callback, f.callback.name))
-      .Append('%s;' % self._GenerateProxyCall(f))
-      .Eblock('}')
-    )
-
-    return c
-
-  def _GenerateProxiedFunction(self, f, callback_name):
-    """Given a function (assumed to be a callback), generates the proxied
-    version of this function, which calls |callback_name| if it is defined.
-
-    Returns a Code object.
-    """
-    c = Code()
-    proxied_params = []
-    # A list of Properties, containing List<*> objects that need proxying for
-    # their members (by copying out each member and proxying it).
-    lists_to_proxy = []
-    for p in f.params:
-      if self._IsBaseType(p.type_):
-        proxied_params.append(p.name)
-      elif self._IsSerializableObjectType(p.type_):
-        proxied_params.append('new %s._proxy(%s)' % (
-            self._GetDartType(p.type_), p.name))
-      elif self._IsListOfSerializableObjects(p.type_):
-        proxied_params.append('__proxy_%s' % p.name)
-        lists_to_proxy.append(p)
-      elif self._IsObjectType(p.type_):
-        # TODO(sashab): Find a way to build generic JS objects back in Dart.
-        proxied_params.append('%s' % p.name)
-      elif p.type_.property_type is PropertyType.ARRAY:
-        # TODO(sashab): This might be okay - what if this is a list of
-        # FileEntry elements? In this case, a basic list will proxy the objects
-        # fine.
-        proxied_params.append('%s' % p.name)
-      else:
-        raise Exception(
-            "Cannot automatically create proxy; can't wrap %s, type %s" % (
-                self._GenerateFunctionSignature(f), self._GetDartType(p.type_)))
-
-    (c.Sblock("void __proxy_callback(%s) {" % ', '.join(p.name for p in
-                                               f.params))
-      .Sblock('if (%s != null) {' % callback_name)
-    )
-
-    # Add the proxied lists.
-    for list_to_proxy in lists_to_proxy:
-      (c.Append("%s __proxy_%s = new %s();" % (
-                    self._GetDartType(list_to_proxy.type_),
-                    list_to_proxy.name,
-                    self._GetDartType(list_to_proxy.type_)))
-        .Sblock("for (var o in %s) {" % list_to_proxy.name)
-        .Append('__proxy_%s.add(new %s._proxy(o));' % (list_to_proxy.name,
-            self._GetDartType(list_to_proxy.type_.item_type)))
-        .Eblock("}")
-      )
-
-    (c.Append("%s(%s);" % (callback_name, ', '.join(proxied_params)))
-      .Eblock('}')
-      .Eblock('}')
-    )
-    return c
-
-  def _NeedsProxiedCallback(self, f):
-    """Given a function, returns True if this function's callback needs to be
-    proxied, False if not.
-
-    Function callbacks need to be proxied if they have at least one
-    non-base-type parameter.
-    """
-    return f.callback and self._NeedsProxy(f.callback)
-
-  def _NeedsProxy(self, f):
-    """Given a function, returns True if it needs to be proxied, False if not.
-
-    A function needs to be proxied if any of its members are non-base types.
-    This means that, when the function object is passed to Javascript, it
-    needs to be wrapped in a "proxied" call that converts the JS inputs to Dart
-    objects explicitly, before calling the real function with these new objects.
-    """
-    return any(not self._IsBaseType(p.type_) for p in f.params)
-
-  def _GenerateProxyCall(self, function, call_target='this._jsObject'):
-    """Given a function, generates the code to call that function via JS().
-    Returns a string.
-
-    |call_target| is the name of the object to call the function on. The default
-    is this._jsObject.
-
-    e.g.
-        JS('void', '#.resizeTo(#, #)', this._jsObject, width, height)
-        JS('void', '#.setBounds(#)', this._jsObject, convertArgument(bounds))
-    """
-    n_params = len(function.params)
-    if function.callback:
-      n_params += 1
-
-    return_type_str = self._GetDartType(function.returns)
-    params = []
-
-    # If this object is serializable, don't convert the type from JS - pass the
-    # JS object straight into the proxy.
-    if self._IsSerializableObjectType(function.returns):
-      params.append("''")
-    else:
-      params.append("'%s'" % return_type_str)
-
-    params.append("'#.%s(%s)'" % (function.name, ', '.join(['#'] * n_params)))
-    params.append(call_target)
-
-    for param in function.params:
-      if not self._IsBaseType(param.type_):
-        params.append('convertArgument(%s)' % param.name)
-      else:
-        params.append(param.name)
-    if function.callback:
-      # If this isn't a base type, we need a proxied callback.
-      callback_name = function.callback.name
-      if self._NeedsProxiedCallback(function):
-        callback_name = "__proxy_callback"
-      params.append('convertDartClosureToJS(%s, %s)' % (callback_name,
-                    len(function.callback.params)))
-
-    # If the object is serializable, call the proxy constructor for this type.
-    proxy_call = 'JS(%s)' % ', '.join(params)
-    if self._IsSerializableObjectType(function.returns):
-      proxy_call = 'new %s._proxy(%s)' % (return_type_str, proxy_call)
-
-    return proxy_call
-
-  def _GenerateEvent(self, event):
-    """Given a Function object, returns the Code with the .dart for this event,
-    represented by the function.
-
-    All events extend the Event base type.
-    """
-    c = Code()
-
-    # Add documentation for this event.
-    (c.Concat(self._GenerateDocumentation(event))
-      .Sblock('class Event_%(event_name)s extends Event {')
-    )
-
-    # If this event needs a proxy, all calls need to be proxied.
-    needs_proxy = self._NeedsProxy(event)
-
-    # Override Event callback type definitions.
-    for ret_type, event_func in (('void', 'addListener'),
-                                 ('void', 'removeListener'),
-                                 ('bool', 'hasListener')):
-      param_list = self._GenerateParameterList(event.params, event.callback,
-                                               convert_optional=True)
-      if needs_proxy:
-        (c.Sblock('%s %s(void callback(%s)) {' % (ret_type, event_func,
-                                                 param_list))
-          .Concat(self._GenerateProxiedFunction(event, 'callback'))
-          .Append('super.%s(__proxy_callback);' % event_func)
-          .Eblock('}')
-        )
-      else:
-        c.Append('%s %s(void callback(%s)) => super.%s(callback);' %
-            (ret_type, event_func, param_list, event_func))
-      c.Append()
-
-    # Generate the constructor.
-    (c.Append('Event_%(event_name)s(jsObject) : '
-              'super._(jsObject, %(param_num)d);')
-      .Eblock('}')
-      .Substitute({
-        'event_name': self._namespace.unix_name + '_' + event.name,
-        'param_num': len(event.params)
-      })
-    )
-
-    return c
-
-  def _GenerateMainClass(self):
-    """Generates the main class for this file, which links to all functions
-    and events.
-
-    Returns a code object.
-    """
-    c = Code()
-    (c.Sblock('class API_%s {' % self._namespace.unix_name)
-      .Append('/*')
-      .Append(' * API connection')
-      .Append(' */')
-      .Append('Object _jsObject;')
-    )
-
-    # Add events.
-    if self._namespace.events:
-      (c.Append()
-        .Append('/*')
-        .Append(' * Events')
-        .Append(' */')
-      )
-    for event_name in self._namespace.events:
-      c.Append('Event_%s_%s %s;' % (self._namespace.unix_name, event_name,
-                                    event_name))
-
-    # Add functions.
-    if self._namespace.functions:
-      (c.Append()
-        .Append('/*')
-        .Append(' * Functions')
-        .Append(' */')
-      )
-    for function in self._namespace.functions.values():
-      # Check for custom dart for this whole property.
-      override = self._GetOverride([function.name], document_with=function)
-      c.Cblock(override if override is not None
-               else self._GenerateFunction(function))
-
-    # Add the constructor.
-    c.Sblock('API_%s(this._jsObject) {' % self._namespace.unix_name)
-
-    # Add events to constructor.
-    for event_name in self._namespace.events:
-      c.Append("%s = new Event_%s_%s(JS('', '#.%s', this._jsObject));" %
-        (event_name, self._namespace.unix_name, event_name, event_name))
-
-    (c.Eblock('}')
-      .Eblock('}')
-    )
-    return c
-
-  def _GeneratePropertySignature(self, prop):
-    """Given a property, returns a signature for that property.
-    Recursively generates the signature for callbacks.
-    Returns a String for the given property.
-
-    e.g.
-      bool x
-      void onClosed()
-      void doSomething(bool x, void callback([String x]))
-    """
-    if self._IsFunction(prop.type_):
-      return self._GenerateFunctionSignature(prop.type_.function)
-    return '%(type)s %(name)s' % {
-               'type': self._GetDartType(prop.type_),
-               'name': prop.simple_name
-           }
-
-  def _GenerateFunctionSignature(self, function, convert_optional=False):
-    """Given a function object, returns the signature for that function.
-    Recursively generates the signature for callbacks.
-    Returns a String for the given function.
-
-    If convert_optional is True, changes optional parameters to be required.
-
-    e.g.
-      void onClosed()
-      bool isOpen([String type])
-      void doSomething(bool x, void callback([String x]))
-    """
-    sig = '%(return_type)s %(name)s(%(params)s)'
-
-    if function.returns:
-      return_type = self._GetDartType(function.returns)
-    else:
-      return_type = 'void'
-
-    return sig % {
-        'return_type': return_type,
-        'name': function.simple_name,
-        'params': self._GenerateParameterList(function.params,
-                                              function.callback,
-                                              convert_optional=convert_optional)
-    }
-
-  def _GenerateParameterList(self,
-                             params,
-                             callback=None,
-                             convert_optional=False):
-    """Given a list of function parameters, generates their signature (as a
-    string).
-
-    e.g.
-      [String type]
-      bool x, void callback([String x])
-
-    If convert_optional is True, changes optional parameters to be required.
-    Useful for callbacks, where optional parameters are treated as required.
-    """
-    # Params lists (required & optional), to be joined with commas.
-    # TODO(sashab): Don't assume optional params always come after required
-    # ones.
-    params_req = []
-    params_opt = []
-    for param in params:
-      p_sig = self._GeneratePropertySignature(param)
-      if param.optional and not convert_optional:
-        params_opt.append(p_sig)
-      else:
-        params_req.append(p_sig)
-
-    # Add the callback, if it exists.
-    if callback:
-      c_sig = self._GenerateFunctionSignature(callback, convert_optional=True)
-      if callback.optional:
-        params_opt.append(c_sig)
-      else:
-        params_req.append(c_sig)
-
-    # Join the parameters with commas.
-    # Optional parameters have to be in square brackets, e.g.:
-    #
-    #  required params | optional params |     output
-    #        []        |        []       |       ''
-    #      [x, y]      |        []       |     'x, y'
-    #        []        |      [a, b]     |    '[a, b]'
-    #      [x, y]      |      [a, b]     | 'x, y, [a, b]'
-    if params_opt:
-      params_opt[0] = '[%s' % params_opt[0]
-      params_opt[-1] = '%s]' % params_opt[-1]
-    param_sets = [', '.join(params_req), ', '.join(params_opt)]
-
-    # The 'if p' part here is needed to prevent commas where there are no
-    # parameters of a certain type.
-    # If there are no optional parameters, this prevents a _trailing_ comma,
-    # e.g. '(x, y,)'. Similarly, if there are no required parameters, this
-    # prevents a leading comma, e.g. '(, [a, b])'.
-    return ', '.join(p for p in param_sets if p)
-
-  def _GetOverride(self, key_chain, document_with=None):
-    """Given a list of keys, joins them with periods and searches for them in
-    the custom dart overrides.
-    If there is an override for that key, finds the override code and returns
-    the Code object. If not, returns None.
-
-    If document_with is not None, adds the documentation for this property
-    before the override code.
-    """
-    c = Code()
-    contents = self._type_overrides.get('.'.join(key_chain))
-    if contents is None:
-      return None
-
-    if document_with is not None:
-      c.Concat(self._GenerateDocumentation(document_with))
-    for line in contents.strip('\n').split('\n'):
-      c.Append(line)
-    return c
-
-  def _AddPrefix(self, name):
-    """Given the name of a type, prefixes the namespace (as camelcase) and
-    returns the new name.
-    """
-    # TODO(sashab): Split the dart library into multiple files, avoiding the
-    # need for this prefixing.
-    return ('%s%s' % (
-        ''.join(s.capitalize() for s in self._namespace.name.split('.')),
-        name))
-
-  def _IsFunction(self, type_):
-    """Given a model.Type, returns whether this type is a function.
-    """
-    return type_.property_type == PropertyType.FUNCTION
-
-  def _IsSerializableObjectType(self, type_):
-    """Given a model.Type, returns whether this type is a serializable object.
-    Serializable objects are custom types defined in this namespace.
-
-    If this object is a reference to something not in this namespace, assumes
-    its a serializable object.
-    """
-    if type_ is None:
-      return False
-    if type_.property_type is PropertyType.CHOICES:
-      return all(self._IsSerializableObjectType(c) for c in type_.choices)
-    if type_.property_type is PropertyType.REF:
-      if type_.ref_type in self._types:
-        return self._IsObjectType(self._types[type_.ref_type])
-      return True
-    if (type_.property_type == PropertyType.OBJECT
-        and type_.instance_of in self._types):
-      return self._IsObjectType(self._types[type_.instance_of])
-    return False
-
-  def _IsObjectType(self, type_):
-    """Given a model.Type, returns whether this type is an object.
-    """
-    return (self._IsSerializableObjectType(type_)
-            or type_.property_type in [PropertyType.OBJECT, PropertyType.ANY])
-
-  def _IsListOfSerializableObjects(self, type_):
-    """Given a model.Type, returns whether this type is a list of serializable
-    objects (or regular objects, if this list is treated as a type - in this
-    case, the item type was defined inline).
-
-    If this type is a reference to something not in this namespace, assumes
-    it is not a list of serializable objects.
-    """
-    if type_.property_type is PropertyType.CHOICES:
-      return all(self._IsListOfSerializableObjects(c) for c in type_.choices)
-    if type_.property_type is PropertyType.REF:
-      if type_.ref_type in self._types:
-        return self._IsListOfSerializableObjects(self._types[type_.ref_type])
-      return False
-    return (type_.property_type is PropertyType.ARRAY and
-        (self._IsSerializableObjectType(type_.item_type)))
-
-  def _IsListOfBaseTypes(self, type_):
-    """Given a model.Type, returns whether this type is a list of base type
-    objects (PropertyType.REF types).
-    """
-    if type_.property_type is PropertyType.CHOICES:
-      return all(self._IsListOfBaseTypes(c) for c in type_.choices)
-    return (type_.property_type is PropertyType.ARRAY and
-            self._IsBaseType(type_.item_type))
-
-  def _IsBaseType(self, type_):
-    """Given a model.type_, returns whether this type is a base type
-    (string, number, boolean, or a list of these).
-
-    If type_ is a Choices object, returns True if all possible choices are base
-    types.
-    """
-    # TODO(sashab): Remove 'Choices' as a base type once they are wrapped in
-    # native Dart classes.
-    if type_.property_type is PropertyType.CHOICES:
-      return all(self._IsBaseType(c) for c in type_.choices)
-    return (
-        (self._GetDartType(type_) in ['bool', 'num', 'int', 'double', 'String'])
-        or (type_.property_type is PropertyType.ARRAY
-            and self._IsBaseType(type_.item_type))
-    )
-
-  def _GetDartType(self, type_):
-    """Given a model.Type object, returns its type as a Dart string.
-    """
-    if type_ is None:
-      return 'void'
-
-    prop_type = type_.property_type
-    if prop_type is PropertyType.REF:
-      if type_.ref_type in self._types:
-        return self._GetDartType(self._types[type_.ref_type])
-      # TODO(sashab): If the type is foreign, it might have to be imported.
-      return StripNamespace(type_.ref_type)
-    elif prop_type is PropertyType.BOOLEAN:
-      return 'bool'
-    elif prop_type is PropertyType.INTEGER:
-      return 'int'
-    elif prop_type is PropertyType.INT64:
-      return 'num'
-    elif prop_type is PropertyType.DOUBLE:
-      return 'double'
-    elif prop_type is PropertyType.STRING:
-      return 'String'
-    elif prop_type is PropertyType.ENUM:
-      return 'String'
-    elif prop_type is PropertyType.CHOICES:
-      # TODO(sashab): Think of a nice way to generate code for Choices objects
-      # in Dart.
-      return 'Object'
-    elif prop_type is PropertyType.ANY:
-      return 'Object'
-    elif prop_type is PropertyType.OBJECT:
-      # TODO(sashab): type_.name is the name of the function's parameter for
-      # inline types defined in functions. Think of a way to generate names
-      # for this, or remove all inline type definitions at the start.
-      if type_.instance_of is not None:
-        return type_.instance_of
-      if not isinstance(type_.parent, Function):
-        return self._AddPrefix(type_.name)
-      return 'Object'
-    elif prop_type is PropertyType.FUNCTION:
-      return 'Function'
-    elif prop_type is PropertyType.ARRAY:
-      return 'List<%s>' % self._GetDartType(type_.item_type)
-    elif prop_type is PropertyType.BINARY:
-      return 'String'
-    else:
-      raise NotImplementedError(prop_type)
-
diff --git a/tools/json_schema_compiler/dart_generator_test.py b/tools/json_schema_compiler/dart_generator_test.py
deleted file mode 100755
index 2005e7e..0000000
--- a/tools/json_schema_compiler/dart_generator_test.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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 os
-import sys
-import unittest
-
-from compiler import GenerateSchema
-
-# If --rebase is passed to this test, this is set to True, indicating the test
-# output should be re-generated for each test (rather than running the tests
-# themselves).
-REBASE_MODE = False
-
-# The directory containing the input and expected output files corresponding
-# to each test name.
-TESTS_DIR = 'dart_test'
-
-class DartTest(unittest.TestCase):
-
-  def _RunTest(self, test_filename):
-    '''Given the name of a test, runs compiler.py on the file:
-      TESTS_DIR/test_filename.idl
-    and compares it to the output in the file:
-      TESTS_DIR/test_filename.dart
-    '''
-    file_rel = os.path.join(TESTS_DIR, test_filename)
-
-    output_dir = None
-    if REBASE_MODE:
-      output_dir = TESTS_DIR
-    output_code = GenerateSchema('dart', ['%s.idl' % file_rel], TESTS_DIR,
-                                 output_dir, '', None, None, [])
-
-    if not REBASE_MODE:
-      with open('%s.dart' % file_rel) as f:
-        expected_output = f.read()
-      # Remove the first line of the output code (as it contains the filename).
-      # Also remove all blank lines, ignoring them from the comparison.
-      # Compare with lists instead of strings for clearer diffs (especially with
-      # whitespace) when a test fails.
-      self.assertEqual([l for l in expected_output.split('\n') if l],
-                       [l for l in output_code.split('\n')[1:] if l])
-
-  def setUp(self):
-    # Increase the maximum diff amount to see the full diff on a failed test.
-    self.maxDiff = 2000
-
-  def testComments(self):
-    self._RunTest('comments')
-
-  def testDictionaries(self):
-    self._RunTest('dictionaries')
-
-  def testEmptyNamespace(self):
-    self._RunTest('empty_namespace')
-
-  def testEmptyType(self):
-    self._RunTest('empty_type')
-
-  def testEvents(self):
-    self._RunTest('events')
-
-  def testBasicFunction(self):
-    self._RunTest('functions')
-
-  def testOpratableType(self):
-    self._RunTest('operatable_type')
-
-  def testTags(self):
-    self._RunTest('tags')
-
-
-if __name__ == '__main__':
-  if '--rebase' in sys.argv:
-    print "Running in rebase mode."
-    REBASE_MODE = True
-    sys.argv.remove('--rebase')
-  unittest.main()
diff --git a/tools/json_schema_compiler/dart_test/comments.dart b/tools/json_schema_compiler/dart_test/comments.dart
deleted file mode 100644
index 6c30bb7..0000000
--- a/tools/json_schema_compiler/dart_test/comments.dart
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Generated from namespace: comments
-
-part of chrome;
-/**
- * Functions
- */
-
-class API_comments {
-  /*
-   * API connection
-   */
-  Object _jsObject;
-
-  /*
-   * Functions
-   */
-  /// <p>There's a blank line at the start of this comment.</p><p>Documentation
-  /// for basicFunction. BasicFunction() is a great function. There is a newline
-  /// after this.</p><p>It works like so:        +-----+        |     |     +--+
-  ///       |     |     |  |        +-----+ --> +--+</p><p>Some other stuff here.
-  ///    This paragraph starts with whitespace.    Overall, its a great function.
-  /// There's also a blank line at the end of this comment.</p>
-  void basicFunction() => JS('void', '#.basicFunction()', this._jsObject);
-
-  API_comments(this._jsObject) {
-  }
-}
diff --git a/tools/json_schema_compiler/dart_test/comments.idl b/tools/json_schema_compiler/dart_test/comments.idl
deleted file mode 100644
index 7ac1474..0000000
--- a/tools/json_schema_compiler/dart_test/comments.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2012 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.
-
-// This comment is for the comments namespace.
-namespace comments {
-  // This comments the "Functions" block, and should be ignored.
-  interface Functions {
-    // This comment is separated by at least one blank line from the start of
-    // the function, and should be ignored.
-  
-    //
-    // There's a blank line at the start of this comment.
-    //
-    // Documentation for basicFunction.
-    // BasicFunction() is a great function.
-    // There is a newline after this.
-    //
-    // It works like so:
-    //        +-----+
-    //        |     |     +--+
-    //        |     |     |  |
-    //        +-----+ --> +--+
-    //
-    // Some other stuff here.
-    //    This paragraph starts with whitespace.
-    //    Overall, its a great function.
-    // There's also a blank line at the end of this comment.
-    //
-    static void basicFunction();
-  };
-};
diff --git a/tools/json_schema_compiler/dart_test/dictionaries.dart b/tools/json_schema_compiler/dart_test/dictionaries.dart
deleted file mode 100644
index d6b6874..0000000
--- a/tools/json_schema_compiler/dart_test/dictionaries.dart
+++ /dev/null
@@ -1,235 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Generated from namespace: dictionaries
-
-part of chrome;
-
-/**
- * Types
- */
-
-class DictionariesInnerType extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  DictionariesInnerType({String s, int b, int i, int l, double d, FileEntry f, String os, int ob, int oi, int ol, double od, FileEntry of}) {
-    if (s != null)
-      this.s = s;
-    if (b != null)
-      this.b = b;
-    if (i != null)
-      this.i = i;
-    if (l != null)
-      this.l = l;
-    if (d != null)
-      this.d = d;
-    if (f != null)
-      this.f = f;
-    if (os != null)
-      this.os = os;
-    if (ob != null)
-      this.ob = ob;
-    if (oi != null)
-      this.oi = oi;
-    if (ol != null)
-      this.ol = ol;
-    if (od != null)
-      this.od = od;
-    if (of != null)
-      this.of = of;
-  }
-
-  /*
-   * Private constructor
-   */
-  DictionariesInnerType._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  /// Documentation for the String s.
-  String get s => JS('String', '#.s', this._jsObject);
-
-  void set s(String s) {
-    JS('void', '#.s = #', this._jsObject, s);
-  }
-
-  /// Documentation for the boolean b.
-  int get b => JS('int', '#.b', this._jsObject);
-
-  void set b(int b) {
-    JS('void', '#.b = #', this._jsObject, b);
-  }
-
-  /// Documentation for the int i.
-  int get i => JS('int', '#.i', this._jsObject);
-
-  void set i(int i) {
-    JS('void', '#.i = #', this._jsObject, i);
-  }
-
-  /// Documentation for the long l.
-  int get l => JS('int', '#.l', this._jsObject);
-
-  void set l(int l) {
-    JS('void', '#.l = #', this._jsObject, l);
-  }
-
-  /// Documentation for the double d.
-  double get d => JS('double', '#.d', this._jsObject);
-
-  void set d(double d) {
-    JS('void', '#.d = #', this._jsObject, d);
-  }
-
-  /// Documentation for the file entry f.
-  FileEntry get f => JS('FileEntry', '#.f', this._jsObject);
-
-  void set f(FileEntry f) {
-    JS('void', '#.f = #', this._jsObject, convertArgument(f));
-  }
-
-  /// Documentation for the optional String s.
-  String get os => JS('String', '#.os', this._jsObject);
-
-  void set os(String os) {
-    JS('void', '#.os = #', this._jsObject, os);
-  }
-
-  /// Documentation for the optional boolean ob.
-  int get ob => JS('int', '#.ob', this._jsObject);
-
-  void set ob(int ob) {
-    JS('void', '#.ob = #', this._jsObject, ob);
-  }
-
-  /// Documentation for the optional int i.
-  int get oi => JS('int', '#.oi', this._jsObject);
-
-  void set oi(int oi) {
-    JS('void', '#.oi = #', this._jsObject, oi);
-  }
-
-  /// Documentation for the optional long l.
-  int get ol => JS('int', '#.ol', this._jsObject);
-
-  void set ol(int ol) {
-    JS('void', '#.ol = #', this._jsObject, ol);
-  }
-
-  /// Documentation for the optional double d.
-  double get od => JS('double', '#.od', this._jsObject);
-
-  void set od(double od) {
-    JS('void', '#.od = #', this._jsObject, od);
-  }
-
-  /// Documentation for the optional file entry f.
-  FileEntry get of => JS('FileEntry', '#.of', this._jsObject);
-
-  void set of(FileEntry of) {
-    JS('void', '#.of = #', this._jsObject, convertArgument(of));
-  }
-
-}
-
-class DictionariesOuterType extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  DictionariesOuterType({List<DictionariesInnerType> items, List<DictionariesInnerType> oitems}) {
-    if (items != null)
-      this.items = items;
-    if (oitems != null)
-      this.oitems = oitems;
-  }
-
-  /*
-   * Private constructor
-   */
-  DictionariesOuterType._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  /// Documentation for the array of InnerTypes items.
-  List<DictionariesInnerType> get items {
-    List<DictionariesInnerType> __proxy_items = new List<DictionariesInnerType>();
-    int count = JS('int', '#.items.length', this._jsObject);
-    for (int i = 0; i < count; i++) {
-      var item = JS('', '#.items[#]', this._jsObject, i);
-      __proxy_items.add(new DictionariesInnerType._proxy(item));
-    }
-    return __proxy_items;
-  }
-
-  void set items(List<DictionariesInnerType> items) {
-    JS('void', '#.items = #', this._jsObject, convertArgument(items));
-  }
-
-  /// Documentation for the optional array of Inner Types oitems.
-  List<DictionariesInnerType> get oitems {
-    List<DictionariesInnerType> __proxy_oitems = new List<DictionariesInnerType>();
-    int count = JS('int', '#.oitems.length', this._jsObject);
-    for (int i = 0; i < count; i++) {
-      var item = JS('', '#.oitems[#]', this._jsObject, i);
-      __proxy_oitems.add(new DictionariesInnerType._proxy(item));
-    }
-    return __proxy_oitems;
-  }
-
-  void set oitems(List<DictionariesInnerType> oitems) {
-    JS('void', '#.oitems = #', this._jsObject, convertArgument(oitems));
-  }
-
-}
-
-class DictionariesComplexType extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  DictionariesComplexType({int i, DictionariesComplexType c}) {
-    if (i != null)
-      this.i = i;
-    if (c != null)
-      this.c = c;
-  }
-
-  /*
-   * Private constructor
-   */
-  DictionariesComplexType._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  /// Documentation for the int i.
-  int get i => JS('int', '#.i', this._jsObject);
-
-  void set i(int i) {
-    JS('void', '#.i = #', this._jsObject, i);
-  }
-
-  /// Documentation for the ComplexType c.
-  DictionariesComplexType get c => new DictionariesComplexType._proxy(JS('', '#.c', this._jsObject));
-
-  void set c(DictionariesComplexType c) {
-    JS('void', '#.c = #', this._jsObject, convertArgument(c));
-  }
-
-}
-
-/**
- * Functions
- */
-
-class API_dictionaries {
-  /*
-   * API connection
-   */
-  Object _jsObject;
-  API_dictionaries(this._jsObject) {
-  }
-}
diff --git a/tools/json_schema_compiler/dart_test/dictionaries.idl b/tools/json_schema_compiler/dart_test/dictionaries.idl
deleted file mode 100644
index 1eb9e25..0000000
--- a/tools/json_schema_compiler/dart_test/dictionaries.idl
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2012 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.
-
-// This comment is for the dictionaries namespace.
-namespace dictionaries {
-  // Documentation for ComplexType.
-  dictionary InnerType {
-    // Documentation for the String s.
-    DOMString s;
-
-    // Documentation for the boolean b.
-    int b;
-
-    // Documentation for the int i.
-    int i;
-
-    // Documentation for the long l.
-    long l;
-
-    // Documentation for the double d.
-    double d;
-
-    // Documentation for the file entry f.
-    [instanceOf=FileEntry] object f;
-
-    // Documentation for the optional String s.
-    DOMString? os;
-
-    // Documentation for the optional boolean ob.
-    int ob;
-
-    // Documentation for the optional int i.
-    int? oi;
-
-    // Documentation for the optional long l.
-    long? ol;
-
-    // Documentation for the optional double d.
-    double? od;
-
-    // Documentation for the optional file entry f.
-    [instanceOf=FileEntry] object? of;
-  };
-
-  dictionary OuterType {
-    // Documentation for the array of InnerTypes items.
-    InnerType[] items;
-
-    // Documentation for the optional array of Inner Types oitems.
-    InnerType[]? oitems;
-  };
-
-  dictionary ComplexType {
-    // Documentation for the int i.
-    int i;
-
-    // Documentation for the ComplexType c.
-    ComplexType c;
-  };
-};
diff --git a/tools/json_schema_compiler/dart_test/empty_namespace.dart b/tools/json_schema_compiler/dart_test/empty_namespace.dart
deleted file mode 100644
index f6e48be..0000000
--- a/tools/json_schema_compiler/dart_test/empty_namespace.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Generated from namespace: empty_namespace
-
-part of chrome;
-/**
- * Functions
- */
-
-class API_empty_namespace {
-  /*
-   * API connection
-   */
-  Object _jsObject;
-  API_empty_namespace(this._jsObject) {
-  }
-}
diff --git a/tools/json_schema_compiler/dart_test/empty_namespace.idl b/tools/json_schema_compiler/dart_test/empty_namespace.idl
deleted file mode 100644
index 824de2d..0000000
--- a/tools/json_schema_compiler/dart_test/empty_namespace.idl
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 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.
-
-// An empty comment is required for an empty namespace.
-namespace empty_namespace {
-};
diff --git a/tools/json_schema_compiler/dart_test/empty_type.dart b/tools/json_schema_compiler/dart_test/empty_type.dart
deleted file mode 100644
index 29e8df9..0000000
--- a/tools/json_schema_compiler/dart_test/empty_type.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Generated from namespace: empty_type
-
-part of chrome;
-
-/**
- * Types
- */
-
-class Empty_typeEmptyType extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  Empty_typeEmptyType({}) {
-  }
-
-  /*
-   * Private constructor
-   */
-  Empty_typeEmptyType._proxy(_jsObject) : super._proxy(_jsObject);
-}
-
-/**
- * Functions
- */
-
-class API_empty_type {
-  /*
-   * API connection
-   */
-  Object _jsObject;
-  API_empty_type(this._jsObject) {
-  }
-}
diff --git a/tools/json_schema_compiler/dart_test/empty_type.idl b/tools/json_schema_compiler/dart_test/empty_type.idl
deleted file mode 100644
index 9d7de6f..0000000
--- a/tools/json_schema_compiler/dart_test/empty_type.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Namespace-level comment for EmptyType.
-namespace empty_type {
-  // Documentation for EmptyType.
-  dictionary EmptyType {
-  };
-};
diff --git a/tools/json_schema_compiler/dart_test/events.dart b/tools/json_schema_compiler/dart_test/events.dart
deleted file mode 100644
index 14cb19b..0000000
--- a/tools/json_schema_compiler/dart_test/events.dart
+++ /dev/null
@@ -1,282 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Generated from namespace: events
-
-part of chrome;
-
-/**
- * Types
- */
-
-class EventsEventArgumentElement extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  EventsEventArgumentElement({String elementStringArg}) {
-    if (elementStringArg != null)
-      this.elementStringArg = elementStringArg;
-  }
-
-  /*
-   * Private constructor
-   */
-  EventsEventArgumentElement._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  String get elementStringArg => JS('String', '#.elementStringArg', this._jsObject);
-
-  void set elementStringArg(String elementStringArg) {
-    JS('void', '#.elementStringArg = #', this._jsObject, elementStringArg);
-  }
-
-}
-
-class EventsEventArgument extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  EventsEventArgument({FileEntry entryArg, String stringArg, int intArg, List<EventsEventArgumentElement> elements, FileEntry optionalEntryArg, String optionalStringArg, int optionalIntArg, List<EventsEventArgumentElement> optionalElements}) {
-    if (entryArg != null)
-      this.entryArg = entryArg;
-    if (stringArg != null)
-      this.stringArg = stringArg;
-    if (intArg != null)
-      this.intArg = intArg;
-    if (elements != null)
-      this.elements = elements;
-    if (optionalEntryArg != null)
-      this.optionalEntryArg = optionalEntryArg;
-    if (optionalStringArg != null)
-      this.optionalStringArg = optionalStringArg;
-    if (optionalIntArg != null)
-      this.optionalIntArg = optionalIntArg;
-    if (optionalElements != null)
-      this.optionalElements = optionalElements;
-  }
-
-  /*
-   * Private constructor
-   */
-  EventsEventArgument._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  /// A file entry
-  FileEntry get entryArg => JS('FileEntry', '#.entryArg', this._jsObject);
-
-  void set entryArg(FileEntry entryArg) {
-    JS('void', '#.entryArg = #', this._jsObject, convertArgument(entryArg));
-  }
-
-  /// A string
-  String get stringArg => JS('String', '#.stringArg', this._jsObject);
-
-  void set stringArg(String stringArg) {
-    JS('void', '#.stringArg = #', this._jsObject, stringArg);
-  }
-
-  /// A primitive
-  int get intArg => JS('int', '#.intArg', this._jsObject);
-
-  void set intArg(int intArg) {
-    JS('void', '#.intArg = #', this._jsObject, intArg);
-  }
-
-  /// An array
-  List<EventsEventArgumentElement> get elements {
-    List<EventsEventArgumentElement> __proxy_elements = new List<EventsEventArgumentElement>();
-    int count = JS('int', '#.elements.length', this._jsObject);
-    for (int i = 0; i < count; i++) {
-      var item = JS('', '#.elements[#]', this._jsObject, i);
-      __proxy_elements.add(new EventsEventArgumentElement._proxy(item));
-    }
-    return __proxy_elements;
-  }
-
-  void set elements(List<EventsEventArgumentElement> elements) {
-    JS('void', '#.elements = #', this._jsObject, convertArgument(elements));
-  }
-
-  /// Optional file entry
-  FileEntry get optionalEntryArg => JS('FileEntry', '#.optionalEntryArg', this._jsObject);
-
-  void set optionalEntryArg(FileEntry optionalEntryArg) {
-    JS('void', '#.optionalEntryArg = #', this._jsObject, convertArgument(optionalEntryArg));
-  }
-
-  /// A string
-  String get optionalStringArg => JS('String', '#.optionalStringArg', this._jsObject);
-
-  void set optionalStringArg(String optionalStringArg) {
-    JS('void', '#.optionalStringArg = #', this._jsObject, optionalStringArg);
-  }
-
-  /// A primitive
-  int get optionalIntArg => JS('int', '#.optionalIntArg', this._jsObject);
-
-  void set optionalIntArg(int optionalIntArg) {
-    JS('void', '#.optionalIntArg = #', this._jsObject, optionalIntArg);
-  }
-
-  /// An array
-  List<EventsEventArgumentElement> get optionalElements {
-    List<EventsEventArgumentElement> __proxy_optionalElements = new List<EventsEventArgumentElement>();
-    int count = JS('int', '#.optionalElements.length', this._jsObject);
-    for (int i = 0; i < count; i++) {
-      var item = JS('', '#.optionalElements[#]', this._jsObject, i);
-      __proxy_optionalElements.add(new EventsEventArgumentElement._proxy(item));
-    }
-    return __proxy_optionalElements;
-  }
-
-  void set optionalElements(List<EventsEventArgumentElement> optionalElements) {
-    JS('void', '#.optionalElements = #', this._jsObject, convertArgument(optionalElements));
-  }
-
-}
-
-/**
- * Events
- */
-
-/// Documentation for the first basic event.
-class Event_events_firstBasicEvent extends Event {
-  void addListener(void callback()) => super.addListener(callback);
-
-  void removeListener(void callback()) => super.removeListener(callback);
-
-  bool hasListener(void callback()) => super.hasListener(callback);
-
-  Event_events_firstBasicEvent(jsObject) : super._(jsObject, 0);
-}
-
-/// Documentation for the second basic event.
-class Event_events_secondBasicEvent extends Event {
-  void addListener(void callback()) => super.addListener(callback);
-
-  void removeListener(void callback()) => super.removeListener(callback);
-
-  bool hasListener(void callback()) => super.hasListener(callback);
-
-  Event_events_secondBasicEvent(jsObject) : super._(jsObject, 0);
-}
-
-/// Documentation for an event with a non-optional primitive argument.
-class Event_events_nonOptionalPrimitiveArgEvent extends Event {
-  void addListener(void callback(int argument)) => super.addListener(callback);
-
-  void removeListener(void callback(int argument)) => super.removeListener(callback);
-
-  bool hasListener(void callback(int argument)) => super.hasListener(callback);
-
-  Event_events_nonOptionalPrimitiveArgEvent(jsObject) : super._(jsObject, 1);
-}
-
-/// Documentation for an event with an optional primitive argument.
-class Event_events_optionalPrimitiveArgEvent extends Event {
-  void addListener(void callback(int argument)) => super.addListener(callback);
-
-  void removeListener(void callback(int argument)) => super.removeListener(callback);
-
-  bool hasListener(void callback(int argument)) => super.hasListener(callback);
-
-  Event_events_optionalPrimitiveArgEvent(jsObject) : super._(jsObject, 1);
-}
-
-/// Documentation for an event with a non-optional dictionary argument.
-class Event_events_nonOptionalDictArgEvent extends Event {
-  void addListener(void callback(EventsEventArgument argument)) {
-    void __proxy_callback(argument) {
-      if (callback != null) {
-        callback(new EventsEventArgument._proxy(argument));
-      }
-    }
-    super.addListener(__proxy_callback);
-  }
-
-  void removeListener(void callback(EventsEventArgument argument)) {
-    void __proxy_callback(argument) {
-      if (callback != null) {
-        callback(new EventsEventArgument._proxy(argument));
-      }
-    }
-    super.removeListener(__proxy_callback);
-  }
-
-  bool hasListener(void callback(EventsEventArgument argument)) {
-    void __proxy_callback(argument) {
-      if (callback != null) {
-        callback(new EventsEventArgument._proxy(argument));
-      }
-    }
-    super.hasListener(__proxy_callback);
-  }
-
-  Event_events_nonOptionalDictArgEvent(jsObject) : super._(jsObject, 1);
-}
-
-/// Documentation for an event with a optional dictionary argument.
-class Event_events_optionalDictArgEvent extends Event {
-  void addListener(void callback(EventsEventArgument argument)) {
-    void __proxy_callback(argument) {
-      if (callback != null) {
-        callback(new EventsEventArgument._proxy(argument));
-      }
-    }
-    super.addListener(__proxy_callback);
-  }
-
-  void removeListener(void callback(EventsEventArgument argument)) {
-    void __proxy_callback(argument) {
-      if (callback != null) {
-        callback(new EventsEventArgument._proxy(argument));
-      }
-    }
-    super.removeListener(__proxy_callback);
-  }
-
-  bool hasListener(void callback(EventsEventArgument argument)) {
-    void __proxy_callback(argument) {
-      if (callback != null) {
-        callback(new EventsEventArgument._proxy(argument));
-      }
-    }
-    super.hasListener(__proxy_callback);
-  }
-
-  Event_events_optionalDictArgEvent(jsObject) : super._(jsObject, 1);
-}
-
-/**
- * Functions
- */
-
-class API_events {
-  /*
-   * API connection
-   */
-  Object _jsObject;
-
-  /*
-   * Events
-   */
-  Event_events_firstBasicEvent firstBasicEvent;
-  Event_events_secondBasicEvent secondBasicEvent;
-  Event_events_nonOptionalPrimitiveArgEvent nonOptionalPrimitiveArgEvent;
-  Event_events_optionalPrimitiveArgEvent optionalPrimitiveArgEvent;
-  Event_events_nonOptionalDictArgEvent nonOptionalDictArgEvent;
-  Event_events_optionalDictArgEvent optionalDictArgEvent;
-  API_events(this._jsObject) {
-    firstBasicEvent = new Event_events_firstBasicEvent(JS('', '#.firstBasicEvent', this._jsObject));
-    secondBasicEvent = new Event_events_secondBasicEvent(JS('', '#.secondBasicEvent', this._jsObject));
-    nonOptionalPrimitiveArgEvent = new Event_events_nonOptionalPrimitiveArgEvent(JS('', '#.nonOptionalPrimitiveArgEvent', this._jsObject));
-    optionalPrimitiveArgEvent = new Event_events_optionalPrimitiveArgEvent(JS('', '#.optionalPrimitiveArgEvent', this._jsObject));
-    nonOptionalDictArgEvent = new Event_events_nonOptionalDictArgEvent(JS('', '#.nonOptionalDictArgEvent', this._jsObject));
-    optionalDictArgEvent = new Event_events_optionalDictArgEvent(JS('', '#.optionalDictArgEvent', this._jsObject));
-  }
-}
diff --git a/tools/json_schema_compiler/dart_test/events.idl b/tools/json_schema_compiler/dart_test/events.idl
deleted file mode 100644
index f1fb4b6..0000000
--- a/tools/json_schema_compiler/dart_test/events.idl
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2013 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.
-
-// This comment is for the events namespace.
-namespace events {
-  dictionary EventArgumentElement {
-    DOMString elementStringArg;
-  };
-
-  dictionary EventArgument {
-    // A file entry
-    [instanceOf=FileEntry] object entryArg;
-
-    // A string
-    DOMString stringArg;
-
-    // A primitive
-    int intArg;
-
-    // An array
-    EventArgumentElement[] elements;
-
-    // Optional file entry
-    [instanceOf=FileEntry] object? optionalEntryArg;
-
-    // A string
-    DOMString? optionalStringArg;
-
-    // A primitive
-    int? optionalIntArg;
-
-    // An array
-    EventArgumentElement[]? optionalElements;
-  };
-
-  interface Events {
-    // Documentation for the first basic event.
-    static void firstBasicEvent();
-
-    // Documentation for the second basic event.
-    static void secondBasicEvent();
-
-    // Documentation for an event with a non-optional primitive argument.
-    static void nonOptionalPrimitiveArgEvent(int argument);
-
-    // Documentation for an event with an optional primitive argument.
-    static void optionalPrimitiveArgEvent(optional int argument);
-
-    // Documentation for an event with a non-optional dictionary argument.
-    static void nonOptionalDictArgEvent(EventArgument argument);
-
-    // Documentation for an event with a optional dictionary argument.
-    static void optionalDictArgEvent(EventArgument argument);
-  };
-};
diff --git a/tools/json_schema_compiler/dart_test/functions.dart b/tools/json_schema_compiler/dart_test/functions.dart
deleted file mode 100644
index cea71fd..0000000
--- a/tools/json_schema_compiler/dart_test/functions.dart
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Generated from namespace: functions
-
-part of chrome;
-
-/**
- * Types
- */
-
-class FunctionsDictType extends ChromeObject {
-  /*
-   * Private constructor
-   */
-  FunctionsDictType._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  /// A field.
-  int get a => JS('int', '#.a', this._jsObject);
-
-  void set a(int a) {
-    JS('void', '#.a = #', this._jsObject, a);
-  }
-
-
-  /*
-   * Methods
-   */
-  /// A parameter.
-  void voidFunc() => JS('void', '#.voidFunc()', this._jsObject);
-
-}
-
-/**
- * Functions
- */
-
-class API_functions {
-  /*
-   * API connection
-   */
-  Object _jsObject;
-
-  /*
-   * Functions
-   */
-  /// Simple function.
-  void voidFunc() => JS('void', '#.voidFunc()', this._jsObject);
-
-  /// Function taking a non-optional argument.
-  void argFunc(String s) => JS('void', '#.argFunc(#)', this._jsObject, s);
-
-  /// Function taking an optional argument.
-  void optionalArgFunc([String s]) => JS('void', '#.optionalArgFunc(#)', this._jsObject, s);
-
-  /// Function taking a non-optional dictionary argument.
-  void dictArgFunc(FunctionsDictType d) => JS('void', '#.dictArgFunc(#)', this._jsObject, convertArgument(d));
-
-  /// Function taking an optional dictionary argument.
-  void optionalDictArgFunc([FunctionsDictType d]) => JS('void', '#.optionalDictArgFunc(#)', this._jsObject, convertArgument(d));
-
-  /// Function taking an entry argument.
-  void entryArgFunc(Object entry) => JS('void', '#.entryArgFunc(#)', this._jsObject, convertArgument(entry));
-
-  /// Function taking a simple callback.
-  void callbackFunc(void c()) => JS('void', '#.callbackFunc(#)', this._jsObject, convertDartClosureToJS(c, 0));
-
-  /// Function taking an optional simple callback.
-  void optionalCallbackFunc([void c()]) => JS('void', '#.optionalCallbackFunc(#)', this._jsObject, convertDartClosureToJS(c, 0));
-
-  /// Function taking a primitive callback.
-  void primitiveCallbackFunc(void c(int i)) => JS('void', '#.primitiveCallbackFunc(#)', this._jsObject, convertDartClosureToJS(c, 1));
-
-  /// Function taking a dictionary callback.
-  void dictCallbackFunc(void c(DictType dict)) {
-    void __proxy_callback(dict) {
-      if (c != null) {
-        c(new DictType._proxy(dict));
-      }
-    }
-    JS('void', '#.dictCallbackFunc(#)', this._jsObject, convertDartClosureToJS(__proxy_callback, 1));
-  }
-
-  /// Function returning a dictionary.
-  FunctionsDictType dictRetFunc() => new FunctionsDictType._proxy(JS('', '#.dictRetFunc()', this._jsObject));
-
-  API_functions(this._jsObject) {
-  }
-}
diff --git a/tools/json_schema_compiler/dart_test/functions.idl b/tools/json_schema_compiler/dart_test/functions.idl
deleted file mode 100644
index e303d0d..0000000
--- a/tools/json_schema_compiler/dart_test/functions.idl
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2013 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.
-
-// A comment for the functions namespace.
-namespace functions {
-  callback SimpleCallback = void ();
-
-  callback PrimitiveCallback = void (int i);
-
-  callback DictCallback = void ([instanceOf=DictType] object dict);
-
-  dictionary DictType {
-    // A field.
-    int a;
-
-    // A parameter.
-    static void voidFunc();
-  };
-
-  interface Functions {
-    // Simple function.
-    static void voidFunc();
-
-    // Function taking a non-optional argument.
-    static void argFunc(DOMString s);
-
-    // Function taking an optional argument.
-    static void optionalArgFunc(optional DOMString s);
-
-    // Function taking a non-optional dictionary argument.
-    static void dictArgFunc(DictType d);
-
-    // Function taking an optional dictionary argument.
-    static void optionalDictArgFunc(optional DictType d);
-
-    // Function taking an entry argument.
-    static void entryArgFunc([intanceOf=FileEntry] object entry);
-
-    // Function taking a simple callback.
-    static void callbackFunc(SimpleCallback c);
-
-    // Function taking an optional simple callback.
-    static void optionalCallbackFunc(optional SimpleCallback c);
-
-    // Function taking a primitive callback.
-    static void primitiveCallbackFunc(PrimitiveCallback c);
-
-    // Function taking a dictionary callback.
-    static void dictCallbackFunc(DictCallback c);
-
-    // Function returning a dictionary.
-    static DictType dictRetFunc();
-  };
-};
diff --git a/tools/json_schema_compiler/dart_test/operatable_type.dart b/tools/json_schema_compiler/dart_test/operatable_type.dart
deleted file mode 100644
index 2cc9dc8..0000000
--- a/tools/json_schema_compiler/dart_test/operatable_type.dart
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Generated from namespace: operatable_type
-
-part of chrome;
-
-/**
- * Types
- */
-
-class Operatable_typeDictType extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  Operatable_typeDictType({int x, int y}) {
-    if (x != null)
-      this.x = x;
-    if (y != null)
-      this.y = y;
-  }
-
-  /*
-   * Private constructor
-   */
-  Operatable_typeDictType._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  int get x => JS('int', '#.x', this._jsObject);
-
-  void set x(int x) {
-    JS('void', '#.x = #', this._jsObject, x);
-  }
-
-  int get y => JS('int', '#.y', this._jsObject);
-
-  void set y(int y) {
-    JS('void', '#.y = #', this._jsObject, y);
-  }
-
-}
-
-class Operatable_typeOperatableType extends ChromeObject {
-  /*
-   * Private constructor
-   */
-  Operatable_typeOperatableType._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  /// Documentation for the String t.
-  String get t => JS('String', '#.t', this._jsObject);
-
-  void set t(String t) {
-    JS('void', '#.t = #', this._jsObject, t);
-  }
-
-
-  /*
-   * Methods
-   */
-  /// Function returning nothing, taking nothing.
-  void voidFunc() => JS('void', '#.voidFunc()', this._jsObject);
-
-  /// Function returning primitive type.
-  int intRetFunc() => new int._proxy(JS('', '#.intRetFunc()', this._jsObject));
-
-  /// Function returning dictionary.
-  Operatable_typeDictType dictRetFunc() => new Operatable_typeDictType._proxy(JS('', '#.dictRetFunc()', this._jsObject));
-
-  /// Function taking primitive type.
-  void intArgFunc(int i) => JS('void', '#.intArgFunc(#)', this._jsObject, i);
-
-  /// Function taking dict type.
-  void dictArgFunc(Operatable_typeDictType d) => JS('void', '#.dictArgFunc(#)', this._jsObject, convertArgument(d));
-
-}
-
-/**
- * Functions
- */
-
-class API_operatable_type {
-  /*
-   * API connection
-   */
-  Object _jsObject;
-  API_operatable_type(this._jsObject) {
-  }
-}
diff --git a/tools/json_schema_compiler/dart_test/operatable_type.idl b/tools/json_schema_compiler/dart_test/operatable_type.idl
deleted file mode 100644
index 9c5f53c..0000000
--- a/tools/json_schema_compiler/dart_test/operatable_type.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Top-level namespace-comment for operatableType
-namespace operatable_type {
-  dictionary DictType {
-    int x;
-    int y;
-  };
-
-  // Documentation for OperatableType.
-  dictionary OperatableType {
-    // Documentation for the String t.
-    DOMString t;
-
-    // Function returning nothing, taking nothing.
-    static void voidFunc();
-
-    // Function returning primitive type.
-    static int intRetFunc();
-
-    // Function returning dictionary.
-    static DictType dictRetFunc();
-
-    // Function taking primitive type.
-    static void intArgFunc(int i);
-
-    // Function taking dict type.
-    static void dictArgFunc(DictType d);
-  };
-};
diff --git a/tools/json_schema_compiler/dart_test/tags.dart b/tools/json_schema_compiler/dart_test/tags.dart
deleted file mode 100644
index e4adfd8..0000000
--- a/tools/json_schema_compiler/dart_test/tags.dart
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Generated from namespace: tags
-
-part of chrome;
-
-/**
- * Types
- */
-
-class TagsInlineDoc extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  TagsInlineDoc({}) {
-  }
-
-  /*
-   * Private constructor
-   */
-  TagsInlineDoc._proxy(_jsObject) : super._proxy(_jsObject);
-}
-
-class TagsNodoc extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  TagsNodoc({}) {
-  }
-
-  /*
-   * Private constructor
-   */
-  TagsNodoc._proxy(_jsObject) : super._proxy(_jsObject);
-}
-
-class TagsNocompile extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  TagsNocompile({}) {
-  }
-
-  /*
-   * Private constructor
-   */
-  TagsNocompile._proxy(_jsObject) : super._proxy(_jsObject);
-}
-
-class TagsPlainDict extends ChromeObject {
-  /*
-   * Public constructor
-   */
-  TagsPlainDict({int inline_doc, String nodoc, double nocompile, fileEntry instance_of_tag}) {
-    if (inline_doc != null)
-      this.inline_doc = inline_doc;
-    if (nodoc != null)
-      this.nodoc = nodoc;
-    if (nocompile != null)
-      this.nocompile = nocompile;
-    if (instance_of_tag != null)
-      this.instance_of_tag = instance_of_tag;
-  }
-
-  /*
-   * Private constructor
-   */
-  TagsPlainDict._proxy(_jsObject) : super._proxy(_jsObject);
-
-  /*
-   * Public accessors
-   */
-  /// This int has the property [inline_doc].
-  int get inline_doc => JS('int', '#.inline_doc', this._jsObject);
-
-  void set inline_doc(int inline_doc) {
-    JS('void', '#.inline_doc = #', this._jsObject, inline_doc);
-  }
-
-  /// This String has the property [nodoc].
-  String get nodoc => JS('String', '#.nodoc', this._jsObject);
-
-  void set nodoc(String nodoc) {
-    JS('void', '#.nodoc = #', this._jsObject, nodoc);
-  }
-
-  /// This double has the property [nocompile].
-  double get nocompile => JS('double', '#.nocompile', this._jsObject);
-
-  void set nocompile(double nocompile) {
-    JS('void', '#.nocompile = #', this._jsObject, nocompile);
-  }
-
-  /// This object has the property [instanceOf=fileEntry].
-  fileEntry get instance_of_tag => JS('fileEntry', '#.instance_of_tag', this._jsObject);
-
-  void set instance_of_tag(fileEntry instance_of_tag) {
-    JS('void', '#.instance_of_tag = #', this._jsObject, convertArgument(instance_of_tag));
-  }
-
-}
-
-/**
- * Functions
- */
-
-class API_tags {
-  /*
-   * API connection
-   */
-  Object _jsObject;
-  API_tags(this._jsObject) {
-  }
-}
diff --git a/tools/json_schema_compiler/dart_test/tags.idl b/tools/json_schema_compiler/dart_test/tags.idl
deleted file mode 100644
index 7a029cd..0000000
--- a/tools/json_schema_compiler/dart_test/tags.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2012 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.
-
-// A comment describing tags.
-namespace tags {
-  // This dictionary has the property [inline_doc].
-  [inline_doc] dictionary InlineDoc {
-  };
-
-  // This dictionary has the property [nodoc].
-  [nodoc] dictionary Nodoc {
-  };
-
-  // This dictionary has the property [nocompile].
-  [nocompile] dictionary Nocompile {
-  };
-
-  // This dictionary has no tags on the dictionary itself.
-  dictionary PlainDict {
-    // This int has the property [inline_doc].
-    [inline_doc] int inline_doc;
-
-    // This String has the property [nodoc].
-    [nodoc] String nodoc;
-
-    // This double has the property [nocompile].
-    [nocompile] double nocompile;
-
-    // This object has the property [instanceOf=fileEntry].
-    [instanceOf=fileEntry] object instance_of_tag;
-  };
-};
diff --git a/tools/json_schema_compiler/features_cc_generator.py b/tools/json_schema_compiler/features_cc_generator.py
deleted file mode 100644
index d3b3717..0000000
--- a/tools/json_schema_compiler/features_cc_generator.py
+++ /dev/null
@@ -1,95 +0,0 @@
-# Copyright 2013 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 os.path
-
-from code import Code
-import cpp_util
-
-
-class CCGenerator(object):
-  def Generate(self, feature_defs, source_file, namespace):
-    return _Generator(feature_defs, source_file, namespace).Generate()
-
-
-class _Generator(object):
-  """A .cc generator for features.
-  """
-  def __init__(self, feature_defs, source_file, namespace):
-    self._feature_defs = feature_defs
-    self._source_file = source_file
-    self._source_file_filename, _ = os.path.splitext(source_file)
-    self._class_name = cpp_util.ClassName(self._source_file_filename)
-    self._namespace = namespace
-
-  def Generate(self):
-    """Generates a Code object for features.
-    """
-    c = Code()
-    (c.Append(cpp_util.CHROMIUM_LICENSE)
-      .Append()
-      .Append(cpp_util.GENERATED_FEATURE_MESSAGE % self._source_file)
-      .Append()
-      .Append('#include <string>')
-      .Append()
-      .Append('#include "%s.h"' % self._source_file_filename)
-      .Append()
-      .Append('#include "base/logging.h"')
-      .Append()
-      .Concat(cpp_util.OpenNamespace(self._namespace))
-      .Append()
-    )
-
-    # Generate the constructor.
-    (c.Append('%s::%s() {' % (self._class_name, self._class_name))
-      .Sblock()
-    )
-    for feature in self._feature_defs:
-      c.Append('features_["%s"] = %s;'
-                       % (feature.name, cpp_util.ConstantName(feature.name)))
-    (c.Eblock()
-      .Append('}')
-      .Append()
-    )
-
-    # Generate the ToString function.
-    (c.Append('const char* %s::ToString('
-                  '%s::ID id) const {' % (self._class_name, self._class_name))
-      .Sblock()
-      .Append('switch (id) {')
-      .Sblock()
-    )
-    for feature in self._feature_defs:
-      c.Append('case %s: return "%s";' %
-          (cpp_util.ConstantName(feature.name), feature.name))
-    (c.Append('case kUnknown: break;')
-      .Append('case kEnumBoundary: break;')
-      .Eblock()
-      .Append('}')
-      .Append('NOTREACHED();')
-      .Append('return "";')
-    )
-    (c.Eblock()
-      .Append('}')
-      .Append()
-    )
-
-    # Generate the FromString function.
-
-    (c.Append('%s::ID %s::FromString('
-                  'const std::string& id) const {'
-                  % (self._class_name, self._class_name))
-      .Sblock()
-      .Append('std::map<std::string, %s::ID>::const_iterator it'
-                  ' = features_.find(id);' % self._class_name)
-      .Append('if (it == features_.end())')
-      .Append('  return kUnknown;')
-      .Append('return it->second;')
-      .Eblock()
-      .Append('}')
-      .Append()
-      .Cblock(cpp_util.CloseNamespace(self._namespace))
-    )
-
-    return c
diff --git a/tools/json_schema_compiler/features_compiler.py b/tools/json_schema_compiler/features_compiler.py
deleted file mode 100755
index 1e4e81a..0000000
--- a/tools/json_schema_compiler/features_compiler.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2013 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.
-"""Generator for C++ features from json files.
-
-Usage example:
-  features_compiler.py --destdir gen --root /home/Work/src _permissions.json
-"""
-
-import optparse
-import os
-
-from schema_loader import SchemaLoader
-from features_cc_generator import CCGenerator
-from features_h_generator import HGenerator
-from model import CreateFeature
-
-
-def _GenerateSchema(filename, root, destdir, namespace):
-  """Generates C++ features files from the json file |filename|.
-  """
-  # Load in the feature permissions from the JSON file.
-  schema = os.path.normpath(filename)
-  schema_loader = SchemaLoader(os.path.dirname(os.path.relpath(schema, root)),
-    os.path.dirname(schema))
-  schema_filename = os.path.splitext(schema)[0]
-  feature_defs = schema_loader.LoadSchema(schema)
-
-  # Generate a list of the features defined and a list of their models.
-  feature_list = []
-  for feature_def, feature in feature_defs.iteritems():
-    feature_list.append(CreateFeature(feature_def, feature))
-
-  source_file_dir, _ = os.path.split(schema)
-  relpath = os.path.relpath(os.path.normpath(source_file_dir), root)
-  full_path = os.path.join(relpath, schema)
-
-  generators = [
-      ('%s.cc' % schema_filename, CCGenerator()),
-      ('%s.h' % schema_filename, HGenerator())
-  ]
-
-  # Generate and output the code for all features.
-  output_code = []
-  for filename, generator in generators:
-    code = generator.Generate(feature_list, full_path, namespace).Render()
-    if destdir:
-      with open(os.path.join(destdir, relpath, filename), 'w') as f:
-        f.write(code)
-    output_code += [filename, '', code, '']
-
-  return '\n'.join(output_code)
-
-
-if __name__ == '__main__':
-  parser = optparse.OptionParser(
-      description='Generates a C++ features model from JSON schema',
-      usage='usage: %prog [option]... schema')
-  parser.add_option('-r', '--root', default='.',
-      help='logical include root directory. Path to schema files from '
-           'specified dir will be the include path.')
-  parser.add_option('-d', '--destdir',
-      help='root directory to output generated files.')
-  parser.add_option('-n', '--namespace', default='generated_features',
-      help='C++ namespace for generated files. e.g extensions::api.')
-  (opts, filenames) = parser.parse_args()
-
-  # Only one file is currently specified.
-  if len(filenames) != 1:
-    raise ValueError('One (and only one) file is required (for now).')
-
-  result = _GenerateSchema(filenames[0], opts.root, opts.destdir,
-                           opts.namespace)
-  if not opts.destdir:
-    print result
diff --git a/tools/json_schema_compiler/features_h_generator.py b/tools/json_schema_compiler/features_h_generator.py
deleted file mode 100644
index 4198bb4..0000000
--- a/tools/json_schema_compiler/features_h_generator.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright 2013 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 os.path
-
-from code import Code
-import cpp_util
-
-
-class HGenerator(object):
-  def Generate(self, features, source_file, namespace):
-    return _Generator(features, source_file, namespace).Generate()
-
-
-class _Generator(object):
-  """A .cc generator for features.
-  """
-  def __init__(self, features, source_file, namespace):
-    self._feature_defs = features
-    self._source_file = source_file
-    self._source_file_filename, _ = os.path.splitext(source_file)
-    self._class_name = cpp_util.ClassName(self._source_file_filename)
-    self._namespace = namespace
-
-  def Generate(self):
-    """Generates a Code object for features.
-    """
-    c = Code()
-    (c.Append(cpp_util.CHROMIUM_LICENSE)
-      .Append()
-      .Append(cpp_util.GENERATED_FEATURE_MESSAGE % self._source_file)
-      .Append()
-    )
-
-    # Hack: for the purpose of gyp the header file will always be the source
-    # file with its file extension replaced by '.h'. Assume so.
-    output_file = os.path.splitext(self._namespace.source_file)[0] + '.h'
-    ifndef_name = cpp_util.GenerateIfndefName(output_file)
-
-    (c.Append('#ifndef %s' % ifndef_name)
-      .Append('#define %s' % ifndef_name)
-      .Append()
-    )
-
-    (c.Append('#include <map>')
-      .Append('#include <string>')
-      .Append()
-      .Concat(cpp_util.OpenNamespace(self._namespace))
-      .Append()
-    )
-
-    (c.Append('class %s {' % self._class_name)
-      .Append(' public:')
-      .Sblock()
-      .Concat(self._GeneratePublicBody())
-      .Eblock()
-      .Append(' private:')
-      .Sblock()
-      .Concat(self._GeneratePrivateBody())
-      .Eblock('};')
-      .Append()
-      .Cblock(cpp_util.CloseNamespace(self._namespace))
-    )
-    (c.Append('#endif  // %s' % ifndef_name)
-      .Append()
-    )
-    return c
-
-  def _GeneratePublicBody(self):
-    c = Code()
-
-    (c.Append('%s();' % self._class_name)
-      .Append()
-      .Append('enum ID {')
-      .Concat(self._GenerateEnumConstants())
-      .Eblock('};')
-      .Append()
-      .Append('const char* ToString(ID id) const;')
-      .Append('ID FromString(const std::string& id) const;')
-      .Append()
-    )
-    return c
-
-  def _GeneratePrivateBody(self):
-    return Code().Append('std::map<std::string, '
-                         '%s::ID> features_;' % self._class_name)
-
-  def _GenerateEnumConstants(self):
-    c = Code()
-
-    (c.Sblock()
-      .Append('kUnknown,')
-    )
-    for feature in self._feature_defs:
-      c.Append('%s,' % cpp_util.ConstantName(feature.name))
-    c.Append('kEnumBoundary')
-
-    return c
diff --git a/tools/json_schema_compiler/h_generator.py b/tools/json_schema_compiler/h_generator.py
deleted file mode 100644
index a6d67db..0000000
--- a/tools/json_schema_compiler/h_generator.py
+++ /dev/null
@@ -1,397 +0,0 @@
-# Copyright (c) 2012 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 os
-
-from code import Code
-from model import PropertyType
-import cpp_util
-import schema_util
-
-class HGenerator(object):
-  def __init__(self, type_generator):
-    self._type_generator = type_generator
-
-  def Generate(self, namespace):
-    return _Generator(namespace, self._type_generator).Generate()
-
-
-class _Generator(object):
-  """A .h generator for a namespace.
-  """
-  def __init__(self, namespace, cpp_type_generator):
-    self._namespace = namespace
-    self._type_helper = cpp_type_generator
-    self._generate_error_messages = namespace.compiler_options.get(
-        'generate_error_messages', False)
-
-  def Generate(self):
-    """Generates a Code object with the .h for a single namespace.
-    """
-    c = Code()
-    (c.Append(cpp_util.CHROMIUM_LICENSE)
-      .Append()
-      .Append(cpp_util.GENERATED_FILE_MESSAGE % self._namespace.source_file)
-      .Append()
-    )
-
-    # Hack: for the purpose of gyp the header file will always be the source
-    # file with its file extension replaced by '.h'. Assume so.
-    output_file = os.path.splitext(self._namespace.source_file)[0] + '.h'
-    ifndef_name = cpp_util.GenerateIfndefName(output_file)
-
-    (c.Append('#ifndef %s' % ifndef_name)
-      .Append('#define %s' % ifndef_name)
-      .Append()
-      .Append('#include <map>')
-      .Append('#include <string>')
-      .Append('#include <vector>')
-      .Append()
-      .Append('#include "base/basictypes.h"')
-      .Append('#include "base/logging.h"')
-      .Append('#include "base/memory/linked_ptr.h"')
-      .Append('#include "base/memory/scoped_ptr.h"')
-      .Append('#include "base/values.h"')
-      .Cblock(self._type_helper.GenerateIncludes())
-      .Append()
-    )
-
-    # TODO(calamity): These forward declarations should be #includes to allow
-    # $ref types from other files to be used as required params. This requires
-    # some detangling of windows and tabs which will currently lead to circular
-    # #includes.
-    c.Cblock(self._type_helper.GenerateForwardDeclarations())
-
-    cpp_namespace = cpp_util.GetCppNamespace(
-        self._namespace.environment.namespace_pattern,
-        self._namespace.unix_name)
-    c.Concat(cpp_util.OpenNamespace(cpp_namespace))
-    c.Append()
-    if self._namespace.properties:
-      (c.Append('//')
-        .Append('// Properties')
-        .Append('//')
-        .Append()
-      )
-      for property in self._namespace.properties.values():
-        property_code = self._type_helper.GeneratePropertyValues(
-            property,
-            'extern const %(type)s %(name)s;')
-        if property_code:
-          c.Cblock(property_code)
-    if self._namespace.types:
-      (c.Append('//')
-        .Append('// Types')
-        .Append('//')
-        .Append()
-        .Cblock(self._GenerateTypes(self._FieldDependencyOrder(),
-                                    is_toplevel=True,
-                                    generate_typedefs=True))
-      )
-    if self._namespace.functions:
-      (c.Append('//')
-        .Append('// Functions')
-        .Append('//')
-        .Append()
-      )
-      for function in self._namespace.functions.values():
-        c.Cblock(self._GenerateFunction(function))
-    if self._namespace.events:
-      (c.Append('//')
-        .Append('// Events')
-        .Append('//')
-        .Append()
-      )
-      for event in self._namespace.events.values():
-        c.Cblock(self._GenerateEvent(event))
-    (c.Concat(cpp_util.CloseNamespace(cpp_namespace))
-      .Append('#endif  // %s' % ifndef_name)
-      .Append()
-    )
-    return c
-
-  def _FieldDependencyOrder(self):
-    """Generates the list of types in the current namespace in an order in which
-    depended-upon types appear before types which depend on them.
-    """
-    dependency_order = []
-
-    def ExpandType(path, type_):
-      if type_ in path:
-        raise ValueError("Illegal circular dependency via cycle " +
-                         ", ".join(map(lambda x: x.name, path + [type_])))
-      for prop in type_.properties.values():
-        if (prop.type_ == PropertyType.REF and
-            schema_util.GetNamespace(prop.ref_type) == self._namespace.name):
-          ExpandType(path + [type_], self._namespace.types[prop.ref_type])
-      if not type_ in dependency_order:
-        dependency_order.append(type_)
-
-    for type_ in self._namespace.types.values():
-      ExpandType([], type_)
-    return dependency_order
-
-  def _GenerateEnumDeclaration(self, enum_name, type_):
-    """Generate a code object with the  declaration of a C++ enum.
-    """
-    c = Code()
-    c.Sblock('enum %s {' % enum_name)
-    c.Append(self._type_helper.GetEnumNoneValue(type_) + ',')
-    for value in type_.enum_values:
-      current_enum_string = self._type_helper.GetEnumValue(type_, value)
-      c.Append(current_enum_string + ',')
-    c.Append('%s = %s,' % (
-        self._type_helper.GetEnumLastValue(type_), current_enum_string))
-    c.Eblock('};')
-    return c
-
-  def _GenerateFields(self, props):
-    """Generates the field declarations when declaring a type.
-    """
-    c = Code()
-    needs_blank_line = False
-    for prop in props:
-      if needs_blank_line:
-        c.Append()
-      needs_blank_line = True
-      if prop.description:
-        c.Comment(prop.description)
-      # ANY is a base::Value which is abstract and cannot be a direct member, so
-      # we always need to wrap it in a scoped_ptr.
-      is_ptr = prop.optional or prop.type_.property_type == PropertyType.ANY
-      (c.Append('%s %s;' % (
-           self._type_helper.GetCppType(prop.type_, is_ptr=is_ptr),
-           prop.unix_name))
-      )
-    return c
-
-  def _GenerateType(self, type_, is_toplevel=False, generate_typedefs=False):
-    """Generates a struct for |type_|.
-
-    |is_toplevel|       implies that the type was declared in the "types" field
-                        of an API schema. This determines the correct function
-                        modifier(s).
-    |generate_typedefs| controls whether primitive types should be generated as
-                        a typedef. This may not always be desired. If false,
-                        primitive types are ignored.
-    """
-    classname = cpp_util.Classname(schema_util.StripNamespace(type_.name))
-    c = Code()
-
-    if type_.functions:
-      # Wrap functions within types in the type's namespace.
-      (c.Append('namespace %s {' % classname)
-        .Append()
-      )
-      for function in type_.functions.values():
-        c.Cblock(self._GenerateFunction(function))
-      c.Append('}  // namespace %s' % classname)
-    elif type_.property_type == PropertyType.ARRAY:
-      if generate_typedefs and type_.description:
-        c.Comment(type_.description)
-      c.Cblock(self._GenerateType(type_.item_type))
-      if generate_typedefs:
-        (c.Append('typedef std::vector<%s > %s;' % (
-                       self._type_helper.GetCppType(type_.item_type),
-                       classname))
-        )
-    elif type_.property_type == PropertyType.STRING:
-      if generate_typedefs:
-        if type_.description:
-          c.Comment(type_.description)
-        c.Append('typedef std::string %(classname)s;')
-    elif type_.property_type == PropertyType.ENUM:
-      if type_.description:
-        c.Comment(type_.description)
-      c.Cblock(self._GenerateEnumDeclaration(classname, type_));
-      # Top level enums are in a namespace scope so the methods shouldn't be
-      # static. On the other hand, those declared inline (e.g. in an object) do.
-      maybe_static = '' if is_toplevel else 'static '
-      (c.Append()
-        .Append('%sstd::string ToString(%s as_enum);' %
-                (maybe_static, classname))
-        .Append('%s%s Parse%s(const std::string& as_string);' %
-                (maybe_static, classname, classname))
-      )
-    elif type_.property_type in (PropertyType.CHOICES,
-                                 PropertyType.OBJECT):
-      if type_.description:
-        c.Comment(type_.description)
-      (c.Sblock('struct %(classname)s {')
-          .Append('%(classname)s();')
-          .Append('~%(classname)s();')
-      )
-      if type_.origin.from_json:
-        (c.Append()
-          .Comment('Populates a %s object from a base::Value. Returns'
-                   ' whether |out| was successfully populated.' % classname)
-          .Append('static bool Populate(%s);' % self._GenerateParams(
-              ('const base::Value& value', '%s* out' % classname)))
-        )
-        if is_toplevel:
-          (c.Append()
-            .Comment('Creates a %s object from a base::Value, or NULL on '
-                     'failure.' % classname)
-            .Append('static scoped_ptr<%s> FromValue(%s);' % (
-                classname, self._GenerateParams(('const base::Value& value',))))
-          )
-      if type_.origin.from_client:
-        value_type = ('base::Value'
-                      if type_.property_type is PropertyType.CHOICES else
-                      'base::DictionaryValue')
-        (c.Append()
-          .Comment('Returns a new %s representing the serialized form of this '
-                   '%s object.' % (value_type, classname))
-          .Append('scoped_ptr<%s> ToValue() const;' % value_type)
-        )
-      if type_.property_type == PropertyType.CHOICES:
-        # Choices are modelled with optional fields for each choice. Exactly one
-        # field of the choice is guaranteed to be set by the compiler.
-        c.Cblock(self._GenerateTypes(type_.choices))
-        c.Append('// Choices:')
-        for choice_type in type_.choices:
-          c.Append('%s as_%s;' % (
-              self._type_helper.GetCppType(choice_type, is_ptr=True),
-              choice_type.unix_name))
-      else:
-        properties = type_.properties.values()
-        (c.Append()
-          .Cblock(self._GenerateTypes(p.type_ for p in properties))
-          .Cblock(self._GenerateFields(properties)))
-        if type_.additional_properties is not None:
-          # Most additionalProperties actually have type "any", which is better
-          # modelled as a DictionaryValue rather than a map of string -> Value.
-          if type_.additional_properties.property_type == PropertyType.ANY:
-            c.Append('base::DictionaryValue additional_properties;')
-          else:
-            (c.Cblock(self._GenerateType(type_.additional_properties))
-              .Append('std::map<std::string, %s> additional_properties;' %
-                  cpp_util.PadForGenerics(
-                      self._type_helper.GetCppType(type_.additional_properties,
-                                                   is_in_container=True)))
-            )
-      (c.Eblock()
-        .Append()
-        .Sblock(' private:')
-          .Append('DISALLOW_COPY_AND_ASSIGN(%(classname)s);')
-        .Eblock('};')
-      )
-    return c.Substitute({'classname': classname})
-
-  def _GenerateEvent(self, event):
-    """Generates the namespaces for an event.
-    """
-    c = Code()
-    # TODO(kalman): use event.unix_name not Classname.
-    event_namespace = cpp_util.Classname(event.name)
-    (c.Append('namespace %s {' % event_namespace)
-      .Append()
-      .Concat(self._GenerateEventNameConstant(event))
-      .Concat(self._GenerateCreateCallbackArguments(event))
-      .Eblock('}  // namespace %s' % event_namespace)
-    )
-    return c
-
-  def _GenerateFunction(self, function):
-    """Generates the namespaces and structs for a function.
-    """
-    c = Code()
-    # TODO(kalman): Use function.unix_name not Classname here.
-    function_namespace = cpp_util.Classname(function.name)
-    # Windows has a #define for SendMessage, so to avoid any issues, we need
-    # to not use the name.
-    if function_namespace == 'SendMessage':
-      function_namespace = 'PassMessage'
-    (c.Append('namespace %s {' % function_namespace)
-      .Append()
-      .Cblock(self._GenerateFunctionParams(function))
-    )
-    if function.callback:
-      c.Cblock(self._GenerateFunctionResults(function.callback))
-    c.Append('}  // namespace %s' % function_namespace)
-    return c
-
-  def _GenerateFunctionParams(self, function):
-    """Generates the struct for passing parameters from JSON to a function.
-    """
-    if not function.params:
-      return Code()
-
-    c = Code()
-    (c.Sblock('struct Params {')
-      .Append('static scoped_ptr<Params> Create(%s);' % self._GenerateParams(
-          ('const base::ListValue& args',)))
-      .Append('~Params();')
-      .Append()
-      .Cblock(self._GenerateTypes(p.type_ for p in function.params))
-      .Cblock(self._GenerateFields(function.params))
-      .Eblock()
-      .Append()
-      .Sblock(' private:')
-        .Append('Params();')
-        .Append()
-        .Append('DISALLOW_COPY_AND_ASSIGN(Params);')
-      .Eblock('};')
-    )
-    return c
-
-  def _GenerateTypes(self, types, is_toplevel=False, generate_typedefs=False):
-    """Generate the structures required by a property such as OBJECT classes
-    and enums.
-    """
-    c = Code()
-    for type_ in types:
-      c.Cblock(self._GenerateType(type_,
-                                  is_toplevel=is_toplevel,
-                                  generate_typedefs=generate_typedefs))
-    return c
-
-  def _GenerateCreateCallbackArguments(self, function):
-    """Generates functions for passing parameters to a callback.
-    """
-    c = Code()
-    params = function.params
-    c.Cblock(self._GenerateTypes((p.type_ for p in params), is_toplevel=True))
-
-    declaration_list = []
-    for param in params:
-      if param.description:
-        c.Comment(param.description)
-      declaration_list.append(cpp_util.GetParameterDeclaration(
-          param, self._type_helper.GetCppType(param.type_)))
-    c.Append('scoped_ptr<base::ListValue> Create(%s);' %
-             ', '.join(declaration_list))
-    return c
-
-  def _GenerateEventNameConstant(self, event):
-    """Generates a constant string array for the event name.
-    """
-    c = Code()
-    c.Append('extern const char kEventName[];  // "%s.%s"' % (
-                 self._namespace.name, event.name))
-    c.Append()
-    return c
-
-  def _GenerateFunctionResults(self, callback):
-    """Generates namespace for passing a function's result back.
-    """
-    c = Code()
-    (c.Append('namespace Results {')
-      .Append()
-      .Concat(self._GenerateCreateCallbackArguments(callback))
-      .Append('}  // namespace Results')
-    )
-    return c
-
-  def _GenerateParams(self, params):
-    """Builds the parameter list for a function, given an array of parameters.
-    """
-    # |error| is populated with warnings and/or errors found during parsing.
-    # |error| being set does not necessarily imply failure and may be
-    # recoverable.
-    # For example, optional properties may have failed to parse, but the
-    # parser was able to continue.
-    if self._generate_error_messages:
-      params += ('base::string16* error',)
-    return ', '.join(str(p) for p in params)
diff --git a/tools/json_schema_compiler/highlighters/__init__.py b/tools/json_schema_compiler/highlighters/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tools/json_schema_compiler/highlighters/__init__.py
+++ /dev/null
diff --git a/tools/json_schema_compiler/highlighters/hilite_me_highlighter.py b/tools/json_schema_compiler/highlighters/hilite_me_highlighter.py
deleted file mode 100644
index af04847..0000000
--- a/tools/json_schema_compiler/highlighters/hilite_me_highlighter.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2012 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 urllib
-import urllib2
-
-class HiliteMeHighlighter(object):
-  """Highlighter that calls the http://hilite.me API to highlight code.
-  """
-  def GetCSS(self, style):
-    return ''
-
-  def GetCodeElement(self, code, style):
-    # Call hilite.me API to do syntax highlighting
-    return urllib2.urlopen('http://hilite.me/api',
-        urllib.urlencode([
-            ('code', code),
-            ('lexer', 'cpp'),
-            ('style', style),
-            ('linenos', 1)])
-    ).read()
-
-  def DisplayName(self):
-    return 'hilite.me (slow, requires internet)'
-
-  def GetStyles(self):
-    return ['monokai', 'manni', 'perldoc', 'borland', 'colorful', 'default',
-        'murphy', 'vs', 'trac', 'tango', 'fruity', 'autumn', 'bw', 'emacs',
-        'vim', 'pastie', 'friendly', 'native']
diff --git a/tools/json_schema_compiler/highlighters/none_highlighter.py b/tools/json_schema_compiler/highlighters/none_highlighter.py
deleted file mode 100644
index ac1cc2b..0000000
--- a/tools/json_schema_compiler/highlighters/none_highlighter.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2012 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 cgi
-
-class NoneHighlighter(object):
-  """Highlighter that just wraps code in a <pre>.
-  """
-  def GetCSS(self, style):
-    return ''
-
-  def GetCodeElement(self, code, style):
-    return '<pre>' + cgi.escape(code) + '</pre>'
-
-  def DisplayName(self):
-    return 'none'
-
-  def GetStyles(self):
-    return []
diff --git a/tools/json_schema_compiler/highlighters/pygments_highlighter.py b/tools/json_schema_compiler/highlighters/pygments_highlighter.py
deleted file mode 100644
index 06abd33..0000000
--- a/tools/json_schema_compiler/highlighters/pygments_highlighter.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2012 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 sys
-try:
-  import pygments
-  from pygments.lexers import CppLexer
-  from pygments.formatters import HtmlFormatter
-  PYGMENTS_IMPORTED = True
-except ImportError:
-  print('It appears that Pygments is not installed. '
-    'Can be installed using easy_install Pygments or from http://pygments.org.')
-  PYGMENTS_IMPORTED = False
-
-class PygmentsHighlighter(object):
-  def __init__(self):
-    if not PYGMENTS_IMPORTED:
-      raise ImportError('Pygments not installed')
-
-  """Highlighter that uses the python pygments library to highlight code.
-  """
-  def GetCSS(self, style):
-    formatter = HtmlFormatter(linenos=True,
-        style=pygments.styles.get_style_by_name(style))
-    return formatter.get_style_defs('.highlight')
-
-  def GetCodeElement(self, code, style):
-    formatter = HtmlFormatter(linenos=True,
-            style=pygments.styles.get_style_by_name(style))
-    return pygments.highlight(code, CppLexer(), formatter)
-
-  def DisplayName(self):
-    return 'pygments' + ('' if PYGMENTS_IMPORTED else ' (not installed)')
-
-  def GetStyles(self):
-    return list(pygments.styles.get_all_styles())
diff --git a/tools/json_schema_compiler/idl_schema.py b/tools/json_schema_compiler/idl_schema.py
deleted file mode 100755
index a913756..0000000
--- a/tools/json_schema_compiler/idl_schema.py
+++ /dev/null
@@ -1,488 +0,0 @@
-#! /usr/bin/env python
-# Copyright (c) 2012 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 itertools
-import json
-import os.path
-import re
-import sys
-
-from json_parse import OrderedDict
-
-# This file is a peer to json_schema.py. Each of these files understands a
-# certain format describing APIs (either JSON or IDL), reads files written
-# in that format into memory, and emits them as a Python array of objects
-# corresponding to those APIs, where the objects are formatted in a way that
-# the JSON schema compiler understands. compiler.py drives both idl_schema.py
-# and json_schema.py.
-
-# idl_parser expects to be able to import certain files in its directory,
-# so let's set things up the way it wants.
-_idl_generators_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),
-                                    os.pardir, os.pardir, 'ppapi', 'generators')
-if _idl_generators_path in sys.path:
-  import idl_parser
-else:
-  sys.path.insert(0, _idl_generators_path)
-  try:
-    import idl_parser
-  finally:
-    sys.path.pop(0)
-
-def ProcessComment(comment):
-  '''
-  Convert a comment into a parent comment and a list of parameter comments.
-
-  Function comments are of the form:
-    Function documentation. May contain HTML and multiple lines.
-
-    |arg1_name|: Description of arg1. Use <var>argument</var> to refer
-    to other arguments.
-    |arg2_name|: Description of arg2...
-
-  Newlines are removed, and leading and trailing whitespace is stripped.
-
-  Args:
-    comment: The string from a Comment node.
-
-  Returns: A tuple that looks like:
-    (
-      "The processed comment, minus all |parameter| mentions.",
-      {
-        'parameter_name_1': "The comment that followed |parameter_name_1|:",
-        ...
-      }
-    )
-  '''
-  def add_paragraphs(content):
-    paragraphs = content.split('\n\n')
-    if len(paragraphs) < 2:
-      return content
-    return '<p>' + '</p><p>'.join(p.strip() for p in paragraphs) + '</p>'
-
-  # Find all the parameter comments of the form '|name|: comment'.
-  parameter_starts = list(re.finditer(r' *\|([^|]*)\| *: *', comment))
-
-  # Get the parent comment (everything before the first parameter comment.
-  first_parameter_location = (parameter_starts[0].start()
-                              if parameter_starts else len(comment))
-  parent_comment = (add_paragraphs(comment[:first_parameter_location].strip())
-                    .replace('\n', ''))
-
-  params = OrderedDict()
-  for (cur_param, next_param) in itertools.izip_longest(parameter_starts,
-                                                        parameter_starts[1:]):
-    param_name = cur_param.group(1)
-
-    # A parameter's comment goes from the end of its introduction to the
-    # beginning of the next parameter's introduction.
-    param_comment_start = cur_param.end()
-    param_comment_end = next_param.start() if next_param else len(comment)
-    params[param_name] = (
-        add_paragraphs(comment[param_comment_start:param_comment_end].strip())
-        .replace('\n', ''))
-
-  return (parent_comment, params)
-
-
-class Callspec(object):
-  '''
-  Given a Callspec node representing an IDL function declaration, converts into
-  a tuple:
-      (name, list of function parameters, return type)
-  '''
-  def __init__(self, callspec_node, comment):
-    self.node = callspec_node
-    self.comment = comment
-
-  def process(self, callbacks):
-    parameters = []
-    return_type = None
-    if self.node.GetProperty('TYPEREF') not in ('void', None):
-      return_type = Typeref(self.node.GetProperty('TYPEREF'),
-                            self.node.parent,
-                            {'name': self.node.GetName()}).process(callbacks)
-      # The IDL parser doesn't allow specifying return types as optional.
-      # Instead we infer any object return values to be optional.
-      # TODO(asargent): fix the IDL parser to support optional return types.
-      if return_type.get('type') == 'object' or '$ref' in return_type:
-        return_type['optional'] = True
-    for node in self.node.GetChildren():
-      parameter = Param(node).process(callbacks)
-      if parameter['name'] in self.comment:
-        parameter['description'] = self.comment[parameter['name']]
-      parameters.append(parameter)
-    return (self.node.GetName(), parameters, return_type)
-
-
-class Param(object):
-  '''
-  Given a Param node representing a function parameter, converts into a Python
-  dictionary that the JSON schema compiler expects to see.
-  '''
-  def __init__(self, param_node):
-    self.node = param_node
-
-  def process(self, callbacks):
-    return Typeref(self.node.GetProperty('TYPEREF'),
-                   self.node,
-                   {'name': self.node.GetName()}).process(callbacks)
-
-
-class Dictionary(object):
-  '''
-  Given an IDL Dictionary node, converts into a Python dictionary that the JSON
-  schema compiler expects to see.
-  '''
-  def __init__(self, dictionary_node):
-    self.node = dictionary_node
-
-  def process(self, callbacks):
-    properties = OrderedDict()
-    for node in self.node.GetChildren():
-      if node.cls == 'Member':
-        k, v = Member(node).process(callbacks)
-        properties[k] = v
-    result = {'id': self.node.GetName(),
-              'properties': properties,
-              'type': 'object'}
-    if self.node.GetProperty('nodoc'):
-      result['nodoc'] = True
-    elif self.node.GetProperty('inline_doc'):
-      result['inline_doc'] = True
-    elif self.node.GetProperty('noinline_doc'):
-      result['noinline_doc'] = True
-    return result
-
-
-
-class Member(object):
-  '''
-  Given an IDL dictionary or interface member, converts into a name/value pair
-  where the value is a Python dictionary that the JSON schema compiler expects
-  to see.
-  '''
-  def __init__(self, member_node):
-    self.node = member_node
-
-  def process(self, callbacks):
-    properties = OrderedDict()
-    name = self.node.GetName()
-    if self.node.GetProperty('deprecated'):
-      properties['deprecated'] = self.node.GetProperty('deprecated')
-    if self.node.GetProperty('allowAmbiguousOptionalArguments'):
-      properties['allowAmbiguousOptionalArguments'] = True
-    for property_name in ('OPTIONAL', 'nodoc', 'nocompile', 'nodart'):
-      if self.node.GetProperty(property_name):
-        properties[property_name.lower()] = True
-    for option_name, sanitizer in [
-        ('maxListeners', int),
-        ('supportsFilters', lambda s: s == 'true'),
-        ('supportsListeners', lambda s: s == 'true'),
-        ('supportsRules', lambda s: s == 'true')]:
-      if self.node.GetProperty(option_name):
-        if 'options' not in properties:
-          properties['options'] = {}
-        properties['options'][option_name] = sanitizer(self.node.GetProperty(
-          option_name))
-    is_function = False
-    parameter_comments = OrderedDict()
-    for node in self.node.GetChildren():
-      if node.cls == 'Comment':
-        (parent_comment, parameter_comments) = ProcessComment(node.GetName())
-        properties['description'] = parent_comment
-      elif node.cls == 'Callspec':
-        is_function = True
-        name, parameters, return_type = (Callspec(node, parameter_comments)
-                                         .process(callbacks))
-        properties['parameters'] = parameters
-        if return_type is not None:
-          properties['returns'] = return_type
-    properties['name'] = name
-    if is_function:
-      properties['type'] = 'function'
-    else:
-      properties = Typeref(self.node.GetProperty('TYPEREF'),
-                           self.node, properties).process(callbacks)
-    enum_values = self.node.GetProperty('legalValues')
-    if enum_values:
-      if properties['type'] == 'integer':
-        enum_values = map(int, enum_values)
-      elif properties['type'] == 'double':
-        enum_values = map(float, enum_values)
-      properties['enum'] = enum_values
-    return name, properties
-
-
-class Typeref(object):
-  '''
-  Given a TYPEREF property representing the type of dictionary member or
-  function parameter, converts into a Python dictionary that the JSON schema
-  compiler expects to see.
-  '''
-  def __init__(self, typeref, parent, additional_properties):
-    self.typeref = typeref
-    self.parent = parent
-    self.additional_properties = additional_properties
-
-  def process(self, callbacks):
-    properties = self.additional_properties
-    result = properties
-
-    if self.parent.GetPropertyLocal('OPTIONAL'):
-      properties['optional'] = True
-
-    # The IDL parser denotes array types by adding a child 'Array' node onto
-    # the Param node in the Callspec.
-    for sibling in self.parent.GetChildren():
-      if sibling.cls == 'Array' and sibling.GetName() == self.parent.GetName():
-        properties['type'] = 'array'
-        properties['items'] = OrderedDict()
-        properties = properties['items']
-        break
-
-    if self.typeref == 'DOMString':
-      properties['type'] = 'string'
-    elif self.typeref == 'boolean':
-      properties['type'] = 'boolean'
-    elif self.typeref == 'double':
-      properties['type'] = 'number'
-    elif self.typeref == 'long':
-      properties['type'] = 'integer'
-    elif self.typeref == 'any':
-      properties['type'] = 'any'
-    elif self.typeref == 'object':
-      properties['type'] = 'object'
-      if 'additionalProperties' not in properties:
-        properties['additionalProperties'] = OrderedDict()
-      properties['additionalProperties']['type'] = 'any'
-      instance_of = self.parent.GetProperty('instanceOf')
-      if instance_of:
-        properties['isInstanceOf'] = instance_of
-    elif self.typeref == 'ArrayBuffer':
-      properties['type'] = 'binary'
-      properties['isInstanceOf'] = 'ArrayBuffer'
-    elif self.typeref == 'FileEntry':
-      properties['type'] = 'object'
-      properties['isInstanceOf'] = 'FileEntry'
-      if 'additionalProperties' not in properties:
-        properties['additionalProperties'] = OrderedDict()
-      properties['additionalProperties']['type'] = 'any'
-    elif self.parent.GetPropertyLocal('Union'):
-      choices = []
-      properties['choices'] = [Typeref(node.GetProperty('TYPEREF'),
-                                       node,
-                                       OrderedDict()).process(callbacks)
-                               for node in self.parent.GetChildren()
-                               if node.cls == 'Option']
-    elif self.typeref is None:
-      properties['type'] = 'function'
-    else:
-      if self.typeref in callbacks:
-        # Do not override name and description if they are already specified.
-        name = properties.get('name', None)
-        description = properties.get('description', None)
-        properties.update(callbacks[self.typeref])
-        if description is not None:
-          properties['description'] = description
-        if name is not None:
-          properties['name'] = name
-      else:
-        properties['$ref'] = self.typeref
-    return result
-
-
-class Enum(object):
-  '''
-  Given an IDL Enum node, converts into a Python dictionary that the JSON
-  schema compiler expects to see.
-  '''
-  def __init__(self, enum_node):
-    self.node = enum_node
-    self.description = ''
-
-  def process(self, callbacks):
-    enum = []
-    for node in self.node.GetChildren():
-      if node.cls == 'EnumItem':
-        enum_value = {'name': node.GetName()}
-        for child in node.GetChildren():
-          if child.cls == 'Comment':
-            enum_value['description'] = ProcessComment(child.GetName())[0]
-          else:
-            raise ValueError('Did not process %s %s' % (child.cls, child))
-        enum.append(enum_value)
-      elif node.cls == 'Comment':
-        self.description = ProcessComment(node.GetName())[0]
-      else:
-        sys.exit('Did not process %s %s' % (node.cls, node))
-    result = {'id' : self.node.GetName(),
-              'description': self.description,
-              'type': 'string',
-              'enum': enum}
-    for property_name in (
-        'inline_doc', 'noinline_doc', 'nodoc', 'cpp_enum_prefix_override',):
-      if self.node.GetProperty(property_name):
-        result[property_name] = self.node.GetProperty(property_name)
-    if self.node.GetProperty('deprecated'):
-        result[deprecated] = self.node.GetProperty('deprecated')
-    return result
-
-
-class Namespace(object):
-  '''
-  Given an IDLNode representing an IDL namespace, converts into a Python
-  dictionary that the JSON schema compiler expects to see.
-  '''
-
-  def __init__(self,
-               namespace_node,
-               description,
-               nodoc=False,
-               internal=False,
-               platforms=None,
-               compiler_options=None,
-               deprecated=None):
-    self.namespace = namespace_node
-    self.nodoc = nodoc
-    self.internal = internal
-    self.platforms = platforms
-    self.compiler_options = compiler_options
-    self.events = []
-    self.functions = []
-    self.types = []
-    self.callbacks = OrderedDict()
-    self.description = description
-    self.deprecated = deprecated
-
-  def process(self):
-    for node in self.namespace.GetChildren():
-      if node.cls == 'Dictionary':
-        self.types.append(Dictionary(node).process(self.callbacks))
-      elif node.cls == 'Callback':
-        k, v = Member(node).process(self.callbacks)
-        self.callbacks[k] = v
-      elif node.cls == 'Interface' and node.GetName() == 'Functions':
-        self.functions = self.process_interface(node)
-      elif node.cls == 'Interface' and node.GetName() == 'Events':
-        self.events = self.process_interface(node)
-      elif node.cls == 'Enum':
-        self.types.append(Enum(node).process(self.callbacks))
-      else:
-        sys.exit('Did not process %s %s' % (node.cls, node))
-    if self.compiler_options is not None:
-      compiler_options = self.compiler_options
-    else:
-      compiler_options = {}
-    return {'namespace': self.namespace.GetName(),
-            'description': self.description,
-            'nodoc': self.nodoc,
-            'types': self.types,
-            'functions': self.functions,
-            'internal': self.internal,
-            'events': self.events,
-            'platforms': self.platforms,
-            'compiler_options': compiler_options,
-            'deprecated': self.deprecated}
-
-  def process_interface(self, node):
-    members = []
-    for member in node.GetChildren():
-      if member.cls == 'Member':
-        name, properties = Member(member).process(self.callbacks)
-        members.append(properties)
-    return members
-
-
-class IDLSchema(object):
-  '''
-  Given a list of IDLNodes and IDLAttributes, converts into a Python list
-  of api_defs that the JSON schema compiler expects to see.
-  '''
-
-  def __init__(self, idl):
-    self.idl = idl
-
-  def process(self):
-    namespaces = []
-    nodoc = False
-    internal = False
-    description = None
-    platforms = None
-    compiler_options = {}
-    deprecated = None
-    for node in self.idl:
-      if node.cls == 'Namespace':
-        if not description:
-          # TODO(kalman): Go back to throwing an error here.
-          print('%s must have a namespace-level comment. This will '
-                           'appear on the API summary page.' % node.GetName())
-          description = ''
-        namespace = Namespace(node, description, nodoc, internal,
-                              platforms=platforms,
-                              compiler_options=compiler_options or None,
-                              deprecated=deprecated)
-        namespaces.append(namespace.process())
-        nodoc = False
-        internal = False
-        platforms = None
-        compiler_options = None
-      elif node.cls == 'Copyright':
-        continue
-      elif node.cls == 'Comment':
-        description = node.GetName()
-      elif node.cls == 'ExtAttribute':
-        if node.name == 'nodoc':
-          nodoc = bool(node.value)
-        elif node.name == 'internal':
-          internal = bool(node.value)
-        elif node.name == 'platforms':
-          platforms = list(node.value)
-        elif node.name == 'implemented_in':
-          compiler_options['implemented_in'] = node.value
-        elif node.name == 'camel_case_enum_to_string':
-          compiler_options['camel_case_enum_to_string'] = node.value
-        elif node.name == 'deprecated':
-          deprecated = str(node.value)
-        else:
-          continue
-      else:
-        sys.exit('Did not process %s %s' % (node.cls, node))
-    return namespaces
-
-
-def Load(filename):
-  '''
-  Given the filename of an IDL file, parses it and returns an equivalent
-  Python dictionary in a format that the JSON schema compiler expects to see.
-  '''
-
-  f = open(filename, 'r')
-  contents = f.read()
-  f.close()
-
-  idl = idl_parser.IDLParser().ParseData(contents, filename)
-  idl_schema = IDLSchema(idl)
-  return idl_schema.process()
-
-
-def Main():
-  '''
-  Dump a json serialization of parse result for the IDL files whose names
-  were passed in on the command line.
-  '''
-  if len(sys.argv) > 1:
-    for filename in sys.argv[1:]:
-      schema = Load(filename)
-      print json.dumps(schema, indent=2)
-  else:
-    contents = sys.stdin.read()
-    idl = idl_parser.IDLParser().ParseData(contents, '<stdin>')
-    schema = IDLSchema(idl).process()
-    print json.dumps(schema, indent=2)
-
-
-if __name__ == '__main__':
-  Main()
diff --git a/tools/json_schema_compiler/idl_schema_test.py b/tools/json_schema_compiler/idl_schema_test.py
deleted file mode 100755
index a045716..0000000
--- a/tools/json_schema_compiler/idl_schema_test.py
+++ /dev/null
@@ -1,396 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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 idl_schema
-import unittest
-
-from json_parse import OrderedDict
-
-def getFunction(schema, name):
-  for item in schema['functions']:
-    if item['name'] == name:
-      return item
-  raise KeyError('Missing function %s' % name)
-
-
-def getParams(schema, name):
-  function = getFunction(schema, name)
-  return function['parameters']
-
-
-def getReturns(schema, name):
-  function = getFunction(schema, name)
-  return function['returns']
-
-
-def getType(schema, id):
-  for item in schema['types']:
-    if item['id'] == id:
-      return item
-
-
-class IdlSchemaTest(unittest.TestCase):
-  def setUp(self):
-    loaded = idl_schema.Load('test/idl_basics.idl')
-    self.assertEquals(1, len(loaded))
-    self.assertEquals('idl_basics', loaded[0]['namespace'])
-    self.idl_basics = loaded[0]
-    self.maxDiff = None
-
-  def testSimpleCallbacks(self):
-    schema = self.idl_basics
-    expected = [{'type': 'function', 'name': 'cb', 'parameters':[]}]
-    self.assertEquals(expected, getParams(schema, 'function4'))
-
-    expected = [{'type': 'function', 'name': 'cb',
-                 'parameters':[{'name': 'x', 'type': 'integer'}]}]
-    self.assertEquals(expected, getParams(schema, 'function5'))
-
-    expected = [{'type': 'function', 'name': 'cb',
-                 'parameters':[{'name': 'arg', '$ref': 'MyType1'}]}]
-    self.assertEquals(expected, getParams(schema, 'function6'))
-
-  def testCallbackWithArrayArgument(self):
-    schema = self.idl_basics
-    expected = [{'type': 'function', 'name': 'cb',
-                 'parameters':[{'name': 'arg', 'type': 'array',
-                                'items':{'$ref': 'MyType2'}}]}]
-    self.assertEquals(expected, getParams(schema, 'function12'))
-
-
-  def testArrayOfCallbacks(self):
-    schema = idl_schema.Load('test/idl_function_types.idl')[0]
-    expected = [{'type': 'array', 'name': 'callbacks',
-                 'items':{'type': 'function', 'name': 'MyCallback',
-                          'parameters':[{'type': 'integer', 'name': 'x'}]}}]
-    self.assertEquals(expected, getParams(schema, 'whatever'))
-
-  def testLegalValues(self):
-    self.assertEquals({
-        'x': {'name': 'x', 'type': 'integer', 'enum': [1,2],
-              'description': 'This comment tests "double-quotes".'},
-        'y': {'name': 'y', 'type': 'string'},
-        'z': {'name': 'z', 'type': 'string'},
-        'a': {'name': 'a', 'type': 'string'},
-        'b': {'name': 'b', 'type': 'string'},
-        'c': {'name': 'c', 'type': 'string'}},
-      getType(self.idl_basics, 'MyType1')['properties'])
-
-  def testMemberOrdering(self):
-    self.assertEquals(
-        ['x', 'y', 'z', 'a', 'b', 'c'],
-        getType(self.idl_basics, 'MyType1')['properties'].keys())
-
-  def testEnum(self):
-    schema = self.idl_basics
-    expected = {'enum': [{'name': 'name1', 'description': 'comment1'},
-                         {'name': 'name2'}],
-                'description': 'Enum description',
-                'type': 'string', 'id': 'EnumType'}
-    self.assertEquals(expected, getType(schema, expected['id']))
-
-    expected = [{'name': 'type', '$ref': 'EnumType'},
-                {'type': 'function', 'name': 'cb',
-                  'parameters':[{'name': 'type', '$ref': 'EnumType'}]}]
-    self.assertEquals(expected, getParams(schema, 'function13'))
-
-    expected = [{'items': {'$ref': 'EnumType'}, 'name': 'types',
-                 'type': 'array'}]
-    self.assertEquals(expected, getParams(schema, 'function14'))
-
-  def testScopedArguments(self):
-    schema = self.idl_basics
-    expected = [{'name': 'value', '$ref': 'idl_other_namespace.SomeType'}]
-    self.assertEquals(expected, getParams(schema, 'function20'))
-
-    expected = [{'items': {'$ref': 'idl_other_namespace.SomeType'},
-                 'name': 'values',
-                 'type': 'array'}]
-    self.assertEquals(expected, getParams(schema, 'function21'))
-
-    expected = [{'name': 'value',
-                 '$ref': 'idl_other_namespace.sub_namespace.AnotherType'}]
-    self.assertEquals(expected, getParams(schema, 'function22'))
-
-    expected = [{'items': {'$ref': 'idl_other_namespace.sub_namespace.'
-                                   'AnotherType'},
-                 'name': 'values',
-                 'type': 'array'}]
-    self.assertEquals(expected, getParams(schema, 'function23'))
-
-  def testNoCompile(self):
-    schema = self.idl_basics
-    func = getFunction(schema, 'function15')
-    self.assertTrue(func is not None)
-    self.assertTrue(func['nocompile'])
-
-  def testNoDocOnEnum(self):
-    schema = self.idl_basics
-    enum_with_nodoc = getType(schema, 'EnumTypeWithNoDoc')
-    self.assertTrue(enum_with_nodoc is not None)
-    self.assertTrue(enum_with_nodoc['nodoc'])
-
-  def testInternalNamespace(self):
-    idl_basics  = self.idl_basics
-    self.assertEquals('idl_basics', idl_basics['namespace'])
-    self.assertTrue(idl_basics['internal'])
-    self.assertFalse(idl_basics['nodoc'])
-
-  def testReturnTypes(self):
-    schema = self.idl_basics
-    self.assertEquals({'name': 'function24', 'type': 'integer'},
-                      getReturns(schema, 'function24'))
-    self.assertEquals({'name': 'function25', '$ref': 'MyType1',
-                       'optional': True},
-                      getReturns(schema, 'function25'))
-    self.assertEquals({'name': 'function26', 'type': 'array',
-                       'items': {'$ref': 'MyType1'}},
-                      getReturns(schema, 'function26'))
-    self.assertEquals({'name': 'function27', '$ref': 'EnumType',
-                       'optional': True},
-                      getReturns(schema, 'function27'))
-    self.assertEquals({'name': 'function28', 'type': 'array',
-                       'items': {'$ref': 'EnumType'}},
-                      getReturns(schema, 'function28'))
-    self.assertEquals({'name': 'function29', '$ref':
-                       'idl_other_namespace.SomeType',
-                       'optional': True},
-                      getReturns(schema, 'function29'))
-    self.assertEquals({'name': 'function30', 'type': 'array',
-                       'items': {'$ref': 'idl_other_namespace.SomeType'}},
-                      getReturns(schema, 'function30'))
-
-  def testChromeOSPlatformsNamespace(self):
-    schema = idl_schema.Load('test/idl_namespace_chromeos.idl')[0]
-    self.assertEquals('idl_namespace_chromeos', schema['namespace'])
-    expected = ['chromeos']
-    self.assertEquals(expected, schema['platforms'])
-
-  def testAllPlatformsNamespace(self):
-    schema = idl_schema.Load('test/idl_namespace_all_platforms.idl')[0]
-    self.assertEquals('idl_namespace_all_platforms', schema['namespace'])
-    expected = ['chromeos', 'chromeos_touch', 'linux', 'mac', 'win']
-    self.assertEquals(expected, schema['platforms'])
-
-  def testNonSpecificPlatformsNamespace(self):
-    schema = idl_schema.Load('test/idl_namespace_non_specific_platforms.idl')[0]
-    self.assertEquals('idl_namespace_non_specific_platforms',
-                      schema['namespace'])
-    expected = None
-    self.assertEquals(expected, schema['platforms'])
-
-  def testSpecificImplementNamespace(self):
-    schema = idl_schema.Load('test/idl_namespace_specific_implement.idl')[0]
-    self.assertEquals('idl_namespace_specific_implement',
-                      schema['namespace'])
-    expected = 'idl_namespace_specific_implement.idl'
-    self.assertEquals(expected, schema['compiler_options']['implemented_in'])
-
-  def testSpecificImplementOnChromeOSNamespace(self):
-    schema = idl_schema.Load(
-        'test/idl_namespace_specific_implement_chromeos.idl')[0]
-    self.assertEquals('idl_namespace_specific_implement_chromeos',
-                      schema['namespace'])
-    expected_implemented_path = 'idl_namespace_specific_implement_chromeos.idl'
-    expected_platform = ['chromeos']
-    self.assertEquals(expected_implemented_path,
-                      schema['compiler_options']['implemented_in'])
-    self.assertEquals(expected_platform, schema['platforms'])
-
-  def testCallbackComment(self):
-    schema = self.idl_basics
-    self.assertEquals('A comment on a callback.',
-                      getParams(schema, 'function16')[0]['description'])
-    self.assertEquals(
-        'A parameter.',
-        getParams(schema, 'function16')[0]['parameters'][0]['description'])
-    self.assertEquals(
-        'Just a parameter comment, with no comment on the callback.',
-        getParams(schema, 'function17')[0]['parameters'][0]['description'])
-    self.assertEquals(
-        'Override callback comment.',
-        getParams(schema, 'function18')[0]['description'])
-
-  def testFunctionComment(self):
-    schema = self.idl_basics
-    func = getFunction(schema, 'function3')
-    self.assertEquals(('This comment should appear in the documentation, '
-                       'despite occupying multiple lines.'),
-                      func['description'])
-    self.assertEquals(
-        [{'description': ('So should this comment about the argument. '
-                          '<em>HTML</em> is fine too.'),
-          'name': 'arg',
-          '$ref': 'MyType1'}],
-        func['parameters'])
-    func = getFunction(schema, 'function4')
-    self.assertEquals(
-        '<p>This tests if "double-quotes" are escaped correctly.</p>'
-        '<p>It also tests a comment with two newlines.</p>',
-        func['description'])
-
-  def testReservedWords(self):
-    schema = idl_schema.Load('test/idl_reserved_words.idl')[0]
-
-    foo_type = getType(schema, 'Foo')
-    self.assertEquals([{'name': 'float'}, {'name': 'DOMString'}],
-                      foo_type['enum'])
-
-    enum_type = getType(schema, 'enum')
-    self.assertEquals([{'name': 'callback'}, {'name': 'namespace'}],
-                      enum_type['enum'])
-
-    dictionary = getType(schema, 'dictionary')
-    self.assertEquals('integer', dictionary['properties']['long']['type'])
-
-    mytype = getType(schema, 'MyType')
-    self.assertEquals('string', mytype['properties']['interface']['type'])
-
-    params = getParams(schema, 'static')
-    self.assertEquals('Foo', params[0]['$ref'])
-    self.assertEquals('enum', params[1]['$ref'])
-
-  def testObjectTypes(self):
-    schema = idl_schema.Load('test/idl_object_types.idl')[0]
-
-    foo_type = getType(schema, 'FooType')
-    self.assertEquals('object', foo_type['type'])
-    self.assertEquals('integer', foo_type['properties']['x']['type'])
-    self.assertEquals('object', foo_type['properties']['y']['type'])
-    self.assertEquals(
-        'any',
-        foo_type['properties']['y']['additionalProperties']['type'])
-    self.assertEquals('object', foo_type['properties']['z']['type'])
-    self.assertEquals(
-        'any',
-        foo_type['properties']['z']['additionalProperties']['type'])
-    self.assertEquals('Window', foo_type['properties']['z']['isInstanceOf'])
-
-    bar_type = getType(schema, 'BarType')
-    self.assertEquals('object', bar_type['type'])
-    self.assertEquals('any', bar_type['properties']['x']['type'])
-
-  def testObjectTypesInFunctions(self):
-    schema = idl_schema.Load('test/idl_object_types.idl')[0]
-
-    params = getParams(schema, 'objectFunction1')
-    self.assertEquals('object', params[0]['type'])
-    self.assertEquals('any', params[0]['additionalProperties']['type'])
-    self.assertEquals('ImageData', params[0]['isInstanceOf'])
-
-    params = getParams(schema, 'objectFunction2')
-    self.assertEquals('any', params[0]['type'])
-
-  def testObjectTypesWithOptionalFields(self):
-    schema = idl_schema.Load('test/idl_object_types.idl')[0]
-
-    baz_type = getType(schema, 'BazType')
-    self.assertEquals(True, baz_type['properties']['x']['optional'])
-    self.assertEquals('integer', baz_type['properties']['x']['type'])
-    self.assertEquals(True, baz_type['properties']['foo']['optional'])
-    self.assertEquals('FooType', baz_type['properties']['foo']['$ref'])
-
-  def testObjectTypesWithUnions(self):
-    schema = idl_schema.Load('test/idl_object_types.idl')[0]
-
-    union_type = getType(schema, 'UnionType')
-    expected = {
-                 'type': 'object',
-                 'id': 'UnionType',
-                 'properties': {
-                   'x': {
-                     'name': 'x',
-                     'optional': True,
-                     'choices': [
-                       {'type': 'integer'},
-                       {'$ref': 'FooType'},
-                     ]
-                   },
-                   'y': {
-                     'name': 'y',
-                     'choices': [
-                       {'type': 'string'},
-                       {'type': 'object',
-                        'additionalProperties': {'type': 'any'}}
-                     ]
-                   },
-                   'z': {
-                     'name': 'z',
-                     'choices': [
-                       {'type': 'object', 'isInstanceOf': 'ImageData',
-                        'additionalProperties': {'type': 'any'}},
-                       {'type': 'integer'}
-                     ]
-                   }
-                 },
-               }
-
-    self.assertEquals(expected, union_type)
-
-  def testUnionsWithModifiers(self):
-    schema = idl_schema.Load('test/idl_object_types.idl')[0]
-
-    union_type = getType(schema, 'ModifiedUnionType')
-    expected = {
-                 'type': 'object',
-                 'id': 'ModifiedUnionType',
-                 'properties': {
-                   'x': {
-                     'name': 'x',
-                     'nodoc': True,
-                     'choices': [
-                       {'type': 'integer'},
-                       {'type': 'string'}
-                     ]
-                   }
-                 }
-               }
-
-    self.assertEquals(expected, union_type)
-
-  def testUnionsWithFunctions(self):
-    schema = idl_schema.Load('test/idl_function_types.idl')[0]
-
-    union_params = getParams(schema, 'union_params')
-    expected = [{
-                 'name': 'x',
-                 'choices': [
-                   {'type': 'integer'},
-                   {'type': 'string'}
-                 ]
-               }]
-
-    self.assertEquals(expected, union_params)
-
-  def testUnionsWithCallbacks(self):
-    schema = idl_schema.Load('test/idl_function_types.idl')[0]
-
-    blah_params = getParams(schema, 'blah')
-    expected = [{
-                 'type': 'function', 'name': 'callback', 'parameters': [{
-                   'name': 'x',
-                   'choices': [
-                     {'type': 'integer'},
-                     {'type': 'string'}
-                   ]}
-                 ]
-               }]
-    self.assertEquals(expected, blah_params)
-
-    badabish_params = getParams(schema, 'badabish')
-    expected = [{
-                 'type': 'function', 'name': 'callback', 'parameters': [{
-                   'name': 'x', 'optional': True, 'choices': [
-                     {'type': 'integer'},
-                     {'type': 'string'}
-                   ]
-                 }]
-               }]
-
-    self.assertEquals(expected, badabish_params)
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/tools/json_schema_compiler/json_parse.py b/tools/json_schema_compiler/json_parse.py
deleted file mode 100644
index 21a5a8f..0000000
--- a/tools/json_schema_compiler/json_parse.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (c) 2012 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 json
-import os
-import sys
-
-_FILE_PATH = os.path.dirname(os.path.realpath(__file__))
-_SYS_PATH = sys.path[:]
-try:
-  _COMMENT_EATER_PATH = os.path.join(
-      _FILE_PATH, os.pardir, 'json_comment_eater')
-  sys.path.insert(0, _COMMENT_EATER_PATH)
-  import json_comment_eater
-finally:
-  sys.path = _SYS_PATH
-
-try:
-  from collections import OrderedDict
-
-  # Successfully imported, so we're running Python >= 2.7, and json.loads
-  # supports object_pairs_hook.
-  def Parse(json_str):
-    return json.loads(json_comment_eater.Nom(json_str),
-                      object_pairs_hook=OrderedDict)
-
-except ImportError:
-  # Failed to import, so we're running Python < 2.7, and json.loads doesn't
-  # support object_pairs_hook. simplejson however does, but it's slow.
-  #
-  # TODO(cduvall/kalman): Refuse to start the docs server in this case, but
-  # let json-schema-compiler do its thing.
-  #logging.warning('Using simplejson to parse, this might be slow! Upgrade to '
-  #                'Python 2.7.')
-
-  _SYS_PATH = sys.path[:]
-  try:
-    _SIMPLE_JSON_PATH = os.path.join(_FILE_PATH,
-                                     os.pardir,
-                                     os.pardir,
-                                     'third_party')
-    sys.path.insert(0, _SIMPLE_JSON_PATH)
-    # Add this path in case this is being used in the docs server.
-    sys.path.insert(0, os.path.join(_FILE_PATH,
-                                    os.pardir,
-                                    os.pardir,
-                                    'third_party',
-                                    'json_schema_compiler'))
-    import simplejson
-    from simplejson import OrderedDict
-  finally:
-    sys.path = _SYS_PATH
-
-  def Parse(json_str):
-    return simplejson.loads(json_comment_eater.Nom(json_str),
-                            object_pairs_hook=OrderedDict)
-
-
-def IsDict(item):
-  return isinstance(item, (dict, OrderedDict))
diff --git a/tools/json_schema_compiler/json_schema.py b/tools/json_schema_compiler/json_schema.py
deleted file mode 100644
index bb4e9c4..0000000
--- a/tools/json_schema_compiler/json_schema.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (c) 2012 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 copy
-
-import json_parse
-
-
-def DeleteNodes(item, delete_key=None, matcher=None):
-  """Deletes certain nodes in item, recursively. If |delete_key| is set, all
-  dicts with |delete_key| as an attribute are deleted. If a callback is passed
-  as |matcher|, |DeleteNodes| will delete all dicts for which matcher(dict)
-  returns True.
-  """
-  assert (delete_key is not None) != (matcher is not None)
-
-  def ShouldDelete(thing):
-    return json_parse.IsDict(thing) and (
-        delete_key is not None and delete_key in thing or
-        matcher is not None and matcher(thing))
-
-  if json_parse.IsDict(item):
-    toDelete = []
-    for key, value in item.items():
-      if ShouldDelete(value):
-        toDelete.append(key)
-      else:
-        DeleteNodes(value, delete_key, matcher)
-    for key in toDelete:
-      del item[key]
-  elif type(item) == list:
-    item[:] = [DeleteNodes(thing, delete_key, matcher)
-        for thing in item if not ShouldDelete(thing)]
-
-  return item
-
-
-def Load(filename):
-  with open(filename, 'r') as handle:
-    schemas = json_parse.Parse(handle.read())
-  return schemas
-
-
-# A dictionary mapping |filename| to the object resulting from loading the JSON
-# at |filename|.
-_cache = {}
-
-
-def CachedLoad(filename):
-  """Equivalent to Load(filename), but caches results for subsequent calls"""
-  if filename not in _cache:
-    _cache[filename] = Load(filename)
-  # Return a copy of the object so that any changes a caller makes won't affect
-  # the next caller.
-  return copy.deepcopy(_cache[filename])
-
diff --git a/tools/json_schema_compiler/json_schema_test.py b/tools/json_schema_compiler/json_schema_test.py
deleted file mode 100755
index edbb06e..0000000
--- a/tools/json_schema_compiler/json_schema_test.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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 json_schema
-import unittest
-
-class JsonSchemaUnittest(unittest.TestCase):
-  def testNocompile(self):
-    compiled = [
-      {
-        "namespace": "compile",
-        "description": "The compile API.",
-        "functions": [],
-        "types":     {}
-      },
-
-      {
-        "namespace": "functions",
-        "description": "The functions API.",
-        "functions": [
-          {
-            "id": "two"
-          },
-          {
-            "id": "four"
-          }
-        ],
-
-        "types": {
-          "one": { "key": "value" }
-        }
-      },
-
-      {
-        "namespace": "types",
-        "description": "The types API.",
-        "functions": [
-          { "id": "one" }
-        ],
-        "types": {
-          "two": {
-            "key": "value"
-          },
-          "four": {
-            "key": "value"
-          }
-        }
-      },
-
-      {
-        "namespace": "nested",
-        "description": "The nested API.",
-        "properties": {
-          "sync": {
-            "functions": [
-              {
-                "id": "two"
-              },
-              {
-                "id": "four"
-              }
-            ],
-            "types": {
-              "two": {
-                "key": "value"
-              },
-              "four": {
-                "key": "value"
-              }
-            }
-          }
-        }
-      }
-    ]
-
-    schema = json_schema.CachedLoad('test/json_schema_test.json')
-    self.assertEquals(compiled, json_schema.DeleteNodes(schema, 'nocompile'))
-
-    def should_delete(value):
-      return isinstance(value, dict) and not value.get('valid', True)
-    expected = [
-      {'one': {'test': 'test'}},
-      {'valid': True},
-      {}
-    ]
-    given = [
-      {'one': {'test': 'test'}, 'two': {'valid': False}},
-      {'valid': True},
-      {},
-      {'valid': False}
-    ]
-    self.assertEquals(
-        expected, json_schema.DeleteNodes(given, matcher=should_delete))
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/tools/json_schema_compiler/memoize.py b/tools/json_schema_compiler/memoize.py
deleted file mode 100644
index 228e7e3..0000000
--- a/tools/json_schema_compiler/memoize.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2013 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.
-
-def memoize(fn):
-  '''Decorates |fn| to memoize.
-  '''
-  memory = {}
-  def impl(*args, **optargs):
-    full_args = args + tuple(optargs.iteritems())
-    if full_args not in memory:
-      memory[full_args] = fn(*args, **optargs)
-    return memory[full_args]
-  return impl
diff --git a/tools/json_schema_compiler/model.py b/tools/json_schema_compiler/model.py
deleted file mode 100644
index 16530e7..0000000
--- a/tools/json_schema_compiler/model.py
+++ /dev/null
@@ -1,605 +0,0 @@
-# Copyright (c) 2012 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 os.path
-
-from json_parse import OrderedDict
-from memoize import memoize
-
-
-class ParseException(Exception):
-  """Thrown when data in the model is invalid.
-  """
-  def __init__(self, parent, message):
-    hierarchy = _GetModelHierarchy(parent)
-    hierarchy.append(message)
-    Exception.__init__(
-        self, 'Model parse exception at:\n' + '\n'.join(hierarchy))
-
-
-class Model(object):
-  """Model of all namespaces that comprise an API.
-
-  Properties:
-  - |namespaces| a map of a namespace name to its model.Namespace
-  """
-  def __init__(self):
-    self.namespaces = {}
-
-  def AddNamespace(self,
-                   json,
-                   source_file,
-                   include_compiler_options=False,
-                   environment=None):
-    """Add a namespace's json to the model and returns the namespace.
-    """
-    namespace = Namespace(json,
-                          source_file,
-                          include_compiler_options=include_compiler_options,
-                          environment=environment)
-    self.namespaces[namespace.name] = namespace
-    return namespace
-
-
-def CreateFeature(name, model):
-  if isinstance(model, dict):
-    return SimpleFeature(name, model)
-  return ComplexFeature(name, [SimpleFeature(name, child) for child in model])
-
-
-class ComplexFeature(object):
-  """A complex feature which may be made of several simple features.
-
-  Properties:
-  - |name| the name of the feature
-  - |unix_name| the unix_name of the feature
-  - |feature_list| a list of simple features which make up the feature
-  """
-  def __init__(self, feature_name, features):
-    self.name = feature_name
-    self.unix_name = UnixName(self.name)
-    self.feature_list = features
-
-class SimpleFeature(object):
-  """A simple feature, which can make up a complex feature, as specified in
-  files such as chrome/common/extensions/api/_permission_features.json.
-
-  Properties:
-  - |name| the name of the feature
-  - |unix_name| the unix_name of the feature
-  - |channel| the channel where the feature is released
-  - |extension_types| the types which can use the feature
-  - |whitelist| a list of extensions allowed to use the feature
-  """
-  def __init__(self, feature_name, feature_def):
-    self.name = feature_name
-    self.unix_name = UnixName(self.name)
-    self.channel = feature_def['channel']
-    self.extension_types = feature_def['extension_types']
-    self.whitelist = feature_def.get('whitelist')
-
-
-class Namespace(object):
-  """An API namespace.
-
-  Properties:
-  - |name| the name of the namespace
-  - |description| the description of the namespace
-  - |deprecated| a reason and possible alternative for a deprecated api
-  - |unix_name| the unix_name of the namespace
-  - |source_file| the file that contained the namespace definition
-  - |source_file_dir| the directory component of |source_file|
-  - |source_file_filename| the filename component of |source_file|
-  - |platforms| if not None, the list of platforms that the namespace is
-                available to
-  - |types| a map of type names to their model.Type
-  - |functions| a map of function names to their model.Function
-  - |events| a map of event names to their model.Function
-  - |properties| a map of property names to their model.Property
-  - |compiler_options| the compiler_options dict, only not empty if
-                       |include_compiler_options| is True
-  """
-  def __init__(self,
-               json,
-               source_file,
-               include_compiler_options=False,
-               environment=None):
-    self.name = json['namespace']
-    if 'description' not in json:
-      # TODO(kalman): Go back to throwing an error here.
-      print('%s must have a "description" field. This will appear '
-                       'on the API summary page.' % self.name)
-      json['description'] = ''
-    self.description = json['description']
-    self.deprecated = json.get('deprecated', None)
-    self.unix_name = UnixName(self.name)
-    self.source_file = source_file
-    self.source_file_dir, self.source_file_filename = os.path.split(source_file)
-    self.short_filename = os.path.basename(source_file).split('.')[0]
-    self.parent = None
-    self.platforms = _GetPlatforms(json)
-    toplevel_origin = Origin(from_client=True, from_json=True)
-    self.types = _GetTypes(self, json, self, toplevel_origin)
-    self.functions = _GetFunctions(self, json, self)
-    self.events = _GetEvents(self, json, self)
-    self.properties = _GetProperties(self, json, self, toplevel_origin)
-    if include_compiler_options:
-      self.compiler_options = json.get('compiler_options', {})
-    else:
-      self.compiler_options = {}
-    self.environment = environment
-    self.documentation_options = json.get('documentation_options', {})
-
-
-class Origin(object):
-  """Stores the possible origin of model object as a pair of bools. These are:
-
-  |from_client| indicating that instances can originate from users of
-                generated code (for example, function results), or
-  |from_json|   indicating that instances can originate from the JSON (for
-                example, function parameters)
-
-  It is possible for model objects to originate from both the client and json,
-  for example Types defined in the top-level schema, in which case both
-  |from_client| and |from_json| would be True.
-  """
-  def __init__(self, from_client=False, from_json=False):
-    if not from_client and not from_json:
-      raise ValueError('One of from_client or from_json must be true')
-    self.from_client = from_client
-    self.from_json = from_json
-
-
-class Type(object):
-  """A Type defined in the json.
-
-  Properties:
-  - |name| the type name
-  - |namespace| the Type's namespace
-  - |description| the description of the type (if provided)
-  - |properties| a map of property unix_names to their model.Property
-  - |functions| a map of function names to their model.Function
-  - |events| a map of event names to their model.Event
-  - |origin| the Origin of the type
-  - |property_type| the PropertyType of this Type
-  - |item_type| if this is an array, the type of items in the array
-  - |simple_name| the name of this Type without a namespace
-  - |additional_properties| the type of the additional properties, if any is
-                            specified
-  """
-  def __init__(self,
-               parent,
-               name,
-               json,
-               namespace,
-               origin):
-    self.name = name
-    self.namespace = namespace
-    self.simple_name = _StripNamespace(self.name, namespace)
-    self.unix_name = UnixName(self.name)
-    self.description = json.get('description', None)
-    self.origin = origin
-    self.parent = parent
-    self.instance_of = json.get('isInstanceOf', None)
-
-    # TODO(kalman): Only objects need functions/events/properties, but callers
-    # assume that all types have them. Fix this.
-    self.functions = _GetFunctions(self, json, namespace)
-    self.events = _GetEvents(self, json, namespace)
-    self.properties = _GetProperties(self, json, namespace, origin)
-
-    json_type = json.get('type', None)
-    if json_type == 'array':
-      self.property_type = PropertyType.ARRAY
-      self.item_type = Type(
-          self, '%sType' % name, json['items'], namespace, origin)
-    elif '$ref' in json:
-      self.property_type = PropertyType.REF
-      self.ref_type = json['$ref']
-    elif 'enum' in json and json_type == 'string':
-      self.property_type = PropertyType.ENUM
-      self.enum_values = [EnumValue(value) for value in json['enum']]
-      self.cpp_enum_prefix_override = json.get('cpp_enum_prefix_override', None)
-    elif json_type == 'any':
-      self.property_type = PropertyType.ANY
-    elif json_type == 'binary':
-      self.property_type = PropertyType.BINARY
-    elif json_type == 'boolean':
-      self.property_type = PropertyType.BOOLEAN
-    elif json_type == 'integer':
-      self.property_type = PropertyType.INTEGER
-    elif (json_type == 'double' or
-          json_type == 'number'):
-      self.property_type = PropertyType.DOUBLE
-    elif json_type == 'string':
-      self.property_type = PropertyType.STRING
-    elif 'choices' in json:
-      self.property_type = PropertyType.CHOICES
-      def generate_type_name(type_json):
-        if 'items' in type_json:
-          return '%ss' % generate_type_name(type_json['items'])
-        if '$ref' in type_json:
-          return type_json['$ref']
-        if 'type' in type_json:
-          return type_json['type']
-        return None
-      self.choices = [
-          Type(self,
-               generate_type_name(choice) or 'choice%s' % i,
-               choice,
-               namespace,
-               origin)
-          for i, choice in enumerate(json['choices'])]
-    elif json_type == 'object':
-      if not (
-          'isInstanceOf' in json or
-          'properties' in json or
-          'additionalProperties' in json or
-          'functions' in json or
-          'events' in json):
-        raise ParseException(self, name + " has no properties or functions")
-      self.property_type = PropertyType.OBJECT
-      additional_properties_json = json.get('additionalProperties', None)
-      if additional_properties_json is not None:
-        self.additional_properties = Type(self,
-                                          'additionalProperties',
-                                          additional_properties_json,
-                                          namespace,
-                                          origin)
-      else:
-        self.additional_properties = None
-    elif json_type == 'function':
-      self.property_type = PropertyType.FUNCTION
-      # Sometimes we might have an unnamed function, e.g. if it's a property
-      # of an object. Use the name of the property in that case.
-      function_name = json.get('name', name)
-      self.function = Function(self, function_name, json, namespace, origin)
-    else:
-      raise ParseException(self, 'Unsupported JSON type %s' % json_type)
-
-
-class Function(object):
-  """A Function defined in the API.
-
-  Properties:
-  - |name| the function name
-  - |platforms| if not None, the list of platforms that the function is
-                available to
-  - |params| a list of parameters to the function (order matters). A separate
-             parameter is used for each choice of a 'choices' parameter
-  - |deprecated| a reason and possible alternative for a deprecated function
-  - |description| a description of the function (if provided)
-  - |callback| the callback parameter to the function. There should be exactly
-               one
-  - |optional| whether the Function is "optional"; this only makes sense to be
-               present when the Function is representing a callback property
-  - |simple_name| the name of this Function without a namespace
-  - |returns| the return type of the function; None if the function does not
-    return a value
-  """
-  def __init__(self,
-               parent,
-               name,
-               json,
-               namespace,
-               origin):
-    self.name = name
-    self.simple_name = _StripNamespace(self.name, namespace)
-    self.platforms = _GetPlatforms(json)
-    self.params = []
-    self.description = json.get('description')
-    self.deprecated = json.get('deprecated')
-    self.callback = None
-    self.optional = json.get('optional', False)
-    self.parent = parent
-    self.nocompile = json.get('nocompile')
-    options = json.get('options', {})
-    self.conditions = options.get('conditions', [])
-    self.actions = options.get('actions', [])
-    self.supports_listeners = options.get('supportsListeners', True)
-    self.supports_rules = options.get('supportsRules', False)
-    self.supports_dom = options.get('supportsDom', False)
-
-    def GeneratePropertyFromParam(p):
-      return Property(self, p['name'], p, namespace, origin)
-
-    self.filters = [GeneratePropertyFromParam(filter)
-                    for filter in json.get('filters', [])]
-    callback_param = None
-    for param in json.get('parameters', []):
-      if param.get('type') == 'function':
-        if callback_param:
-          # No ParseException because the webstore has this.
-          # Instead, pretend all intermediate callbacks are properties.
-          self.params.append(GeneratePropertyFromParam(callback_param))
-        callback_param = param
-      else:
-        self.params.append(GeneratePropertyFromParam(param))
-
-    if callback_param:
-      self.callback = Function(self,
-                               callback_param['name'],
-                               callback_param,
-                               namespace,
-                               Origin(from_client=True))
-
-    self.returns = None
-    if 'returns' in json:
-      self.returns = Type(self,
-                          '%sReturnType' % name,
-                          json['returns'],
-                          namespace,
-                          origin)
-
-
-class Property(object):
-  """A property of a type OR a parameter to a function.
-  Properties:
-  - |name| name of the property as in the json. This shouldn't change since
-    it is the key used to access DictionaryValues
-  - |unix_name| the unix_style_name of the property. Used as variable name
-  - |optional| a boolean representing whether the property is optional
-  - |description| a description of the property (if provided)
-  - |type_| the model.Type of this property
-  - |simple_name| the name of this Property without a namespace
-  - |deprecated| a reason and possible alternative for a deprecated property
-  """
-  def __init__(self, parent, name, json, namespace, origin):
-    """Creates a Property from JSON.
-    """
-    self.parent = parent
-    self.name = name
-    self._unix_name = UnixName(self.name)
-    self._unix_name_used = False
-    self.origin = origin
-    self.simple_name = _StripNamespace(self.name, namespace)
-    self.description = json.get('description', None)
-    self.optional = json.get('optional', None)
-    self.instance_of = json.get('isInstanceOf', None)
-    self.deprecated = json.get('deprecated')
-
-    # HACK: only support very specific value types.
-    is_allowed_value = (
-        '$ref' not in json and
-        ('type' not in json or json['type'] == 'integer'
-                            or json['type'] == 'string'))
-
-    self.value = None
-    if 'value' in json and is_allowed_value:
-      self.value = json['value']
-      if 'type' not in json:
-        # Sometimes the type of the value is left out, and we need to figure
-        # it out for ourselves.
-        if isinstance(self.value, int):
-          json['type'] = 'integer'
-        elif isinstance(self.value, basestring):
-          json['type'] = 'string'
-        else:
-          # TODO(kalman): support more types as necessary.
-          raise ParseException(
-              parent,
-              '"%s" is not a supported type for "value"' % type(self.value))
-
-    self.type_ = Type(parent, name, json, namespace, origin)
-
-  def GetUnixName(self):
-    """Gets the property's unix_name. Raises AttributeError if not set.
-    """
-    if not self._unix_name:
-      raise AttributeError('No unix_name set on %s' % self.name)
-    self._unix_name_used = True
-    return self._unix_name
-
-  def SetUnixName(self, unix_name):
-    """Set the property's unix_name. Raises AttributeError if the unix_name has
-    already been used (GetUnixName has been called).
-    """
-    if unix_name == self._unix_name:
-      return
-    if self._unix_name_used:
-      raise AttributeError(
-          'Cannot set the unix_name on %s; '
-          'it is already used elsewhere as %s' %
-          (self.name, self._unix_name))
-    self._unix_name = unix_name
-
-  unix_name = property(GetUnixName, SetUnixName)
-
-class EnumValue(object):
-  """A single value from an enum.
-  Properties:
-  - |name| name of the property as in the json.
-  - |description| a description of the property (if provided)
-  """
-  def __init__(self, json):
-    if isinstance(json, dict):
-      self.name = json['name']
-      self.description = json.get('description')
-    else:
-      self.name = json
-      self.description = None
-
-  def CamelName(self):
-    return CamelName(self.name)
-
-class _Enum(object):
-  """Superclass for enum types with a "name" field, setting up repr/eq/ne.
-  Enums need to do this so that equality/non-equality work over pickling.
-  """
-  @staticmethod
-  def GetAll(cls):
-    """Yields all _Enum objects declared in |cls|.
-    """
-    for prop_key in dir(cls):
-      prop_value = getattr(cls, prop_key)
-      if isinstance(prop_value, _Enum):
-        yield prop_value
-
-  def __init__(self, name):
-    self.name = name
-
-  def __eq__(self, other):
-    return type(other) == type(self) and other.name == self.name
-  def __ne__(self, other):
-    return not (self == other)
-
-  def __repr__(self):
-    return self.name
-
-  def __str__(self):
-    return repr(self)
-
-
-class _PropertyTypeInfo(_Enum):
-  def __init__(self, is_fundamental, name):
-    _Enum.__init__(self, name)
-    self.is_fundamental = is_fundamental
-
-
-class PropertyType(object):
-  """Enum of different types of properties/parameters.
-  """
-  ANY = _PropertyTypeInfo(False, "any")
-  ARRAY = _PropertyTypeInfo(False, "array")
-  BINARY = _PropertyTypeInfo(False, "binary")
-  BOOLEAN = _PropertyTypeInfo(True, "boolean")
-  CHOICES = _PropertyTypeInfo(False, "choices")
-  DOUBLE = _PropertyTypeInfo(True, "double")
-  ENUM = _PropertyTypeInfo(False, "enum")
-  FUNCTION = _PropertyTypeInfo(False, "function")
-  INT64 = _PropertyTypeInfo(True, "int64")
-  INTEGER = _PropertyTypeInfo(True, "integer")
-  OBJECT = _PropertyTypeInfo(False, "object")
-  REF = _PropertyTypeInfo(False, "ref")
-  STRING = _PropertyTypeInfo(True, "string")
-
-
-@memoize
-def UnixName(name):
-  '''Returns the unix_style name for a given lowerCamelCase string.
-  '''
-  unix_name = []
-  for i, c in enumerate(name):
-    if c.isupper() and i > 0 and name[i - 1] != '_':
-      # Replace lowerUpper with lower_Upper.
-      if name[i - 1].islower():
-        unix_name.append('_')
-      # Replace ACMEWidgets with ACME_Widgets
-      elif i + 1 < len(name) and name[i + 1].islower():
-        unix_name.append('_')
-    if c == '.':
-      # Replace hello.world with hello_world.
-      unix_name.append('_')
-    else:
-      # Everything is lowercase.
-      unix_name.append(c.lower())
-  return ''.join(unix_name)
-
-
-@memoize
-def CamelName(snake):
-  ''' Converts a snake_cased_string to a camelCasedOne. '''
-  pieces = snake.split('_')
-  camel = []
-  for i, piece in enumerate(pieces):
-    if i == 0:
-      camel.append(piece)
-    else:
-      camel.append(piece.capitalize())
-  return ''.join(camel)
-
-
-def _StripNamespace(name, namespace):
-  if name.startswith(namespace.name + '.'):
-    return name[len(namespace.name + '.'):]
-  return name
-
-
-def _GetModelHierarchy(entity):
-  """Returns the hierarchy of the given model entity."""
-  hierarchy = []
-  while entity is not None:
-    hierarchy.append(getattr(entity, 'name', repr(entity)))
-    if isinstance(entity, Namespace):
-      hierarchy.insert(0, '  in %s' % entity.source_file)
-    entity = getattr(entity, 'parent', None)
-  hierarchy.reverse()
-  return hierarchy
-
-
-def _GetTypes(parent, json, namespace, origin):
-  """Creates Type objects extracted from |json|.
-  """
-  types = OrderedDict()
-  for type_json in json.get('types', []):
-    type_ = Type(parent, type_json['id'], type_json, namespace, origin)
-    types[type_.name] = type_
-  return types
-
-
-def _GetFunctions(parent, json, namespace):
-  """Creates Function objects extracted from |json|.
-  """
-  functions = OrderedDict()
-  for function_json in json.get('functions', []):
-    function = Function(parent,
-                        function_json['name'],
-                        function_json,
-                        namespace,
-                        Origin(from_json=True))
-    functions[function.name] = function
-  return functions
-
-
-def _GetEvents(parent, json, namespace):
-  """Creates Function objects generated from the events in |json|.
-  """
-  events = OrderedDict()
-  for event_json in json.get('events', []):
-    event = Function(parent,
-                     event_json['name'],
-                     event_json,
-                     namespace,
-                     Origin(from_client=True))
-    events[event.name] = event
-  return events
-
-
-def _GetProperties(parent, json, namespace, origin):
-  """Generates Property objects extracted from |json|.
-  """
-  properties = OrderedDict()
-  for name, property_json in json.get('properties', {}).items():
-    properties[name] = Property(parent, name, property_json, namespace, origin)
-  return properties
-
-
-class _PlatformInfo(_Enum):
-  def __init__(self, name):
-    _Enum.__init__(self, name)
-
-
-class Platforms(object):
-  """Enum of the possible platforms.
-  """
-  CHROMEOS = _PlatformInfo("chromeos")
-  CHROMEOS_TOUCH = _PlatformInfo("chromeos_touch")
-  LINUX = _PlatformInfo("linux")
-  MAC = _PlatformInfo("mac")
-  WIN = _PlatformInfo("win")
-
-
-def _GetPlatforms(json):
-  if 'platforms' not in json or json['platforms'] == None:
-    return None
-  # Sanity check: platforms should not be an empty list.
-  if not json['platforms']:
-    raise ValueError('"platforms" cannot be an empty list')
-  platforms = []
-  for platform_name in json['platforms']:
-    for platform_enum in _Enum.GetAll(Platforms):
-      if platform_name == platform_enum.name:
-        platforms.append(platform_enum)
-        break
-  return platforms
diff --git a/tools/json_schema_compiler/model_test.py b/tools/json_schema_compiler/model_test.py
deleted file mode 100755
index 75ed9c5..0000000
--- a/tools/json_schema_compiler/model_test.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-from json_schema import CachedLoad
-from idl_schema import Load
-from model import Platforms
-import model
-import unittest
-
-class ModelTest(unittest.TestCase):
-  def setUp(self):
-    self.model = model.Model()
-    self.permissions_json = CachedLoad('test/permissions.json')
-    self.model.AddNamespace(self.permissions_json[0],
-        'path/to/permissions.json')
-    self.permissions = self.model.namespaces.get('permissions')
-    self.windows_json = CachedLoad('test/windows.json')
-    self.model.AddNamespace(self.windows_json[0],
-        'path/to/window.json')
-    self.windows = self.model.namespaces.get('windows')
-    self.tabs_json = CachedLoad('test/tabs.json')
-    self.model.AddNamespace(self.tabs_json[0],
-        'path/to/tabs.json')
-    self.tabs = self.model.namespaces.get('tabs')
-    self.idl_chromeos = Load('test/idl_namespace_chromeos.idl')
-    self.model.AddNamespace(self.idl_chromeos[0],
-        'path/to/idl_namespace_chromeos.idl')
-    self.idl_namespace_chromeos = self.model.namespaces.get(
-        'idl_namespace_chromeos')
-    self.idl_all_platforms = Load('test/idl_namespace_all_platforms.idl')
-    self.model.AddNamespace(self.idl_all_platforms[0],
-        'path/to/idl_namespace_all_platforms.idl')
-    self.idl_namespace_all_platforms = self.model.namespaces.get(
-        'idl_namespace_all_platforms')
-    self.idl_non_specific_platforms = Load(
-        'test/idl_namespace_non_specific_platforms.idl')
-    self.model.AddNamespace(self.idl_non_specific_platforms[0],
-        'path/to/idl_namespace_non_specific_platforms.idl')
-    self.idl_namespace_non_specific_platforms = self.model.namespaces.get(
-        'idl_namespace_non_specific_platforms')
-
-  def testNamespaces(self):
-    self.assertEquals(6, len(self.model.namespaces))
-    self.assertTrue(self.permissions)
-
-  def testHasFunctions(self):
-    self.assertEquals(["contains", "getAll", "remove", "request"],
-        sorted(self.permissions.functions.keys()))
-
-  def testHasTypes(self):
-    self.assertEquals(['Tab'], self.tabs.types.keys())
-    self.assertEquals(['Permissions'], self.permissions.types.keys())
-    self.assertEquals(['Window'], self.windows.types.keys())
-
-  def testHasProperties(self):
-    self.assertEquals(["active", "favIconUrl", "highlighted", "id",
-        "incognito", "index", "pinned", "selected", "status", "title", "url",
-        "windowId"],
-        sorted(self.tabs.types['Tab'].properties.keys()))
-
-  def testProperties(self):
-    string_prop = self.tabs.types['Tab'].properties['status']
-    self.assertEquals(model.PropertyType.STRING,
-                      string_prop.type_.property_type)
-    integer_prop = self.tabs.types['Tab'].properties['id']
-    self.assertEquals(model.PropertyType.INTEGER,
-                      integer_prop.type_.property_type)
-    array_prop = self.windows.types['Window'].properties['tabs']
-    self.assertEquals(model.PropertyType.ARRAY,
-                      array_prop.type_.property_type)
-    self.assertEquals(model.PropertyType.REF,
-                      array_prop.type_.item_type.property_type)
-    self.assertEquals('tabs.Tab', array_prop.type_.item_type.ref_type)
-    object_prop = self.tabs.functions['query'].params[0]
-    self.assertEquals(model.PropertyType.OBJECT,
-                      object_prop.type_.property_type)
-    self.assertEquals(
-        ["active", "highlighted", "pinned", "status", "title", "url",
-         "windowId", "windowType"],
-        sorted(object_prop.type_.properties.keys()))
-
-  def testChoices(self):
-    self.assertEquals(model.PropertyType.CHOICES,
-                      self.tabs.functions['move'].params[0].type_.property_type)
-
-  def testPropertyNotImplemented(self):
-    (self.permissions_json[0]['types'][0]
-        ['properties']['permissions']['type']) = 'something'
-    self.assertRaises(model.ParseException, self.model.AddNamespace,
-        self.permissions_json[0], 'path/to/something.json')
-
-  def testDescription(self):
-    self.assertFalse(
-        self.permissions.functions['contains'].params[0].description)
-    self.assertEquals('True if the extension has the specified permissions.',
-        self.permissions.functions['contains'].callback.params[0].description)
-
-  def testPropertyUnixName(self):
-    param = self.tabs.functions['move'].params[0]
-    self.assertEquals('tab_ids', param.unix_name)
-
-  def testUnixName(self):
-    expectations = {
-      'foo': 'foo',
-      'fooBar': 'foo_bar',
-      'fooBarBaz': 'foo_bar_baz',
-      'fooBARBaz': 'foo_bar_baz',
-      'fooBAR': 'foo_bar',
-      'FOO': 'foo',
-      'FOOBar': 'foo_bar',
-      'foo.bar': 'foo_bar',
-      'foo.BAR': 'foo_bar',
-      'foo.barBAZ': 'foo_bar_baz',
-      'foo_Bar_Baz_box': 'foo_bar_baz_box',
-      }
-    for name in expectations:
-      self.assertEquals(expectations[name], model.UnixName(name))
-
-  def testCamelName(self):
-    expectations = {
-      'foo': 'foo',
-      'fooBar': 'fooBar',
-      'foo_bar_baz': 'fooBarBaz',
-      'FOO_BAR': 'FOOBar',
-      'FOO_bar': 'FOOBar',
-      '_bar': 'Bar',
-      '_bar_baz': 'BarBaz',
-      'bar_': 'bar',
-      'bar_baz_': 'barBaz',
-      }
-    for testcase, expected in expectations.iteritems():
-      self.assertEquals(expected, model.CamelName(testcase))
-
-  def testPlatforms(self):
-    self.assertEqual([Platforms.CHROMEOS],
-                     self.idl_namespace_chromeos.platforms)
-    self.assertEqual(
-        [Platforms.CHROMEOS, Platforms.CHROMEOS_TOUCH, Platforms.LINUX,
-         Platforms.MAC, Platforms.WIN],
-        self.idl_namespace_all_platforms.platforms)
-    self.assertEqual(None,
-        self.idl_namespace_non_specific_platforms.platforms)
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/tools/json_schema_compiler/preview.py b/tools/json_schema_compiler/preview.py
deleted file mode 100755
index 050af96..0000000
--- a/tools/json_schema_compiler/preview.py
+++ /dev/null
@@ -1,364 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 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.
-"""Server for viewing the compiled C++ code from tools/json_schema_compiler.
-"""
-
-import cc_generator
-import code
-import cpp_type_generator
-import cpp_util
-import h_generator
-import idl_schema
-import json_schema
-import model
-import optparse
-import os
-import shlex
-import urlparse
-from highlighters import (
-    pygments_highlighter, none_highlighter, hilite_me_highlighter)
-from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
-from cpp_namespace_environment import CppNamespaceEnvironment
-from schema_loader import SchemaLoader
-
-
-class CompilerHandler(BaseHTTPRequestHandler):
-  """A HTTPRequestHandler that outputs the result of tools/json_schema_compiler.
-  """
-  def do_GET(self):
-    parsed_url = urlparse.urlparse(self.path)
-    request_path = self._GetRequestPath(parsed_url)
-
-    chromium_favicon = 'http://codereview.chromium.org/static/favicon.ico'
-
-    head = code.Code()
-    head.Append('<link rel="icon" href="%s">' % chromium_favicon)
-    head.Append('<link rel="shortcut icon" href="%s">' % chromium_favicon)
-
-    body = code.Code()
-
-    try:
-      if os.path.isdir(request_path):
-        self._ShowPanels(parsed_url, head, body)
-      else:
-        self._ShowCompiledFile(parsed_url, head, body)
-    finally:
-      self.wfile.write('<html><head>')
-      self.wfile.write(head.Render())
-      self.wfile.write('</head><body>')
-      self.wfile.write(body.Render())
-      self.wfile.write('</body></html>')
-
-  def _GetRequestPath(self, parsed_url, strip_nav=False):
-    """Get the relative path from the current directory to the requested file.
-    """
-    path = parsed_url.path
-    if strip_nav:
-      path = parsed_url.path.replace('/nav', '')
-    return os.path.normpath(os.curdir + path)
-
-  def _ShowPanels(self, parsed_url, head, body):
-    """Show the previewer frame structure.
-
-    Code panes are populated via XHR after links in the nav pane are clicked.
-    """
-    (head.Append('<style>')
-         .Append('body {')
-         .Append('  margin: 0;')
-         .Append('}')
-         .Append('.pane {')
-         .Append('  height: 100%;')
-         .Append('  overflow-x: auto;')
-         .Append('  overflow-y: scroll;')
-         .Append('  display: inline-block;')
-         .Append('}')
-         .Append('#nav_pane {')
-         .Append('  width: 20%;')
-         .Append('}')
-         .Append('#nav_pane ul {')
-         .Append('  list-style-type: none;')
-         .Append('  padding: 0 0 0 1em;')
-         .Append('}')
-         .Append('#cc_pane {')
-         .Append('  width: 40%;')
-         .Append('}')
-         .Append('#h_pane {')
-         .Append('  width: 40%;')
-         .Append('}')
-         .Append('</style>')
-    )
-
-    body.Append(
-        '<div class="pane" id="nav_pane">%s</div>'
-        '<div class="pane" id="h_pane"></div>'
-        '<div class="pane" id="cc_pane"></div>' %
-        self._RenderNavPane(parsed_url.path[1:])
-    )
-
-    # The Javascript that interacts with the nav pane and panes to show the
-    # compiled files as the URL or highlighting options change.
-    body.Append('''<script type="text/javascript">
-// Calls a function for each highlighter style <select> element.
-function forEachHighlighterStyle(callback) {
-  var highlighterStyles =
-      document.getElementsByClassName('highlighter_styles');
-  for (var i = 0; i < highlighterStyles.length; ++i)
-    callback(highlighterStyles[i]);
-}
-
-// Called when anything changes, such as the highlighter or hashtag.
-function updateEverything() {
-  var highlighters = document.getElementById('highlighters');
-  var highlighterName = highlighters.value;
-
-  // Cache in localStorage for when the page loads next.
-  localStorage.highlightersValue = highlighterName;
-
-  // Show/hide the highlighter styles.
-  var highlighterStyleName = '';
-  forEachHighlighterStyle(function(highlighterStyle) {
-    if (highlighterStyle.id === highlighterName + '_styles') {
-      highlighterStyle.removeAttribute('style')
-      highlighterStyleName = highlighterStyle.value;
-    } else {
-      highlighterStyle.setAttribute('style', 'display:none')
-    }
-
-    // Cache in localStorage for when the page next loads.
-    localStorage[highlighterStyle.id + 'Value'] = highlighterStyle.value;
-  });
-
-  // Populate the code panes.
-  function populateViaXHR(elementId, requestPath) {
-    var xhr = new XMLHttpRequest();
-    xhr.onreadystatechange = function() {
-      if (xhr.readyState != 4)
-        return;
-      if (xhr.status != 200) {
-        alert('XHR error to ' + requestPath);
-        return;
-      }
-      document.getElementById(elementId).innerHTML = xhr.responseText;
-    };
-    xhr.open('GET', requestPath, true);
-    xhr.send();
-  }
-
-  var targetName = window.location.hash;
-  targetName = targetName.substring('#'.length);
-  targetName = targetName.split('.', 1)[0]
-
-  if (targetName !== '') {
-    var basePath = window.location.pathname;
-    var query = 'highlighter=' + highlighterName + '&' +
-                'style=' + highlighterStyleName;
-    populateViaXHR('h_pane',  basePath + '/' + targetName + '.h?'  + query);
-    populateViaXHR('cc_pane', basePath + '/' + targetName + '.cc?' + query);
-  }
-}
-
-// Initial load: set the values of highlighter and highlighterStyles from
-// localStorage.
-(function() {
-var cachedValue = localStorage.highlightersValue;
-if (cachedValue)
-  document.getElementById('highlighters').value = cachedValue;
-
-forEachHighlighterStyle(function(highlighterStyle) {
-  var cachedValue = localStorage[highlighterStyle.id + 'Value'];
-  if (cachedValue)
-    highlighterStyle.value = cachedValue;
-});
-})();
-
-window.addEventListener('hashchange', updateEverything, false);
-updateEverything();
-</script>''')
-
-  def _ShowCompiledFile(self, parsed_url, head, body):
-    """Show the compiled version of a json or idl file given the path to the
-    compiled file.
-    """
-    api_model = model.Model()
-
-    request_path = self._GetRequestPath(parsed_url)
-    (file_root, file_ext) = os.path.splitext(request_path)
-    (filedir, filename) = os.path.split(file_root)
-
-    schema_loader = SchemaLoader("./",
-                                 filedir,
-                                 self.server.include_rules,
-                                 self.server.cpp_namespace_pattern)
-    try:
-      # Get main file.
-      namespace = schema_loader.ResolveNamespace(filename)
-      type_generator = cpp_type_generator.CppTypeGenerator(
-           api_model,
-           schema_loader,
-           namespace)
-
-      # Generate code
-      cpp_namespace = 'generated_api_schemas'
-      if file_ext == '.h':
-        cpp_code = (h_generator.HGenerator(type_generator)
-            .Generate(namespace).Render())
-      elif file_ext == '.cc':
-        cpp_code = (cc_generator.CCGenerator(type_generator)
-            .Generate(namespace).Render())
-      else:
-        self.send_error(404, "File not found: %s" % request_path)
-        return
-
-      # Do highlighting on the generated code
-      (highlighter_param, style_param) = self._GetHighlighterParams(parsed_url)
-      head.Append('<style>' +
-          self.server.highlighters[highlighter_param].GetCSS(style_param) +
-          '</style>')
-      body.Append(self.server.highlighters[highlighter_param]
-          .GetCodeElement(cpp_code, style_param))
-    except IOError:
-      self.send_error(404, "File not found: %s" % request_path)
-      return
-    except (TypeError, KeyError, AttributeError,
-        AssertionError, NotImplementedError) as error:
-      body.Append('<pre>')
-      body.Append('compiler error: %s' % error)
-      body.Append('Check server log for more details')
-      body.Append('</pre>')
-      raise
-
-  def _GetHighlighterParams(self, parsed_url):
-    """Get the highlighting parameters from a parsed url.
-    """
-    query_dict = urlparse.parse_qs(parsed_url.query)
-    return (query_dict.get('highlighter', ['pygments'])[0],
-        query_dict.get('style', ['colorful'])[0])
-
-  def _RenderNavPane(self, path):
-    """Renders an HTML nav pane.
-
-    This consists of a select element to set highlight style, and a list of all
-    files at |path| with the appropriate onclick handlers to open either
-    subdirectories or JSON files.
-    """
-    html = code.Code()
-
-    # Highlighter chooser.
-    html.Append('<select id="highlighters" onChange="updateEverything()">')
-    for name, highlighter in self.server.highlighters.items():
-      html.Append('<option value="%s">%s</option>' %
-          (name, highlighter.DisplayName()))
-    html.Append('</select>')
-
-    html.Append('<br/>')
-
-    # Style for each highlighter.
-    # The correct highlighting will be shown by Javascript.
-    for name, highlighter in self.server.highlighters.items():
-      styles = sorted(highlighter.GetStyles())
-      if not styles:
-        continue
-
-      html.Append('<select class="highlighter_styles" id="%s_styles" '
-                  'onChange="updateEverything()">' % name)
-      for style in styles:
-        html.Append('<option>%s</option>' % style)
-      html.Append('</select>')
-
-    html.Append('<br/>')
-
-    # The files, with appropriate handlers.
-    html.Append('<ul>')
-
-    # Make path point to a non-empty directory. This can happen if a URL like
-    # http://localhost:8000 is navigated to.
-    if path == '':
-      path = os.curdir
-
-    # Firstly, a .. link if this isn't the root.
-    if not os.path.samefile(os.curdir, path):
-      normpath = os.path.normpath(os.path.join(path, os.pardir))
-      html.Append('<li><a href="/%s">%s/</a>' % (normpath, os.pardir))
-
-    # Each file under path/
-    for filename in sorted(os.listdir(path)):
-      full_path = os.path.join(path, filename)
-      (file_root, file_ext) = os.path.splitext(full_path)
-      if os.path.isdir(full_path) and not full_path.endswith('.xcodeproj'):
-        html.Append('<li><a href="/%s/">%s/</a>' % (full_path, filename))
-      elif file_ext in ['.json', '.idl']:
-        # cc/h panes will automatically update via the hash change event.
-        html.Append('<li><a href="#%s">%s</a>' %
-            (filename, filename))
-
-    html.Append('</ul>')
-
-    return html.Render()
-
-
-class PreviewHTTPServer(HTTPServer, object):
-  def __init__(self,
-               server_address,
-               handler,
-               highlighters,
-               include_rules,
-               cpp_namespace_pattern):
-    super(PreviewHTTPServer, self).__init__(server_address, handler)
-    self.highlighters = highlighters
-    self.include_rules = include_rules
-    self.cpp_namespace_pattern = cpp_namespace_pattern
-
-
-if __name__ == '__main__':
-  parser = optparse.OptionParser(
-      description='Runs a server to preview the json_schema_compiler output.',
-      usage='usage: %prog [option]...')
-  parser.add_option('-p', '--port', default='8000',
-      help='port to run the server on')
-  parser.add_option('-n', '--namespace', default='generated_api_schemas',
-      help='C++ namespace for generated files. e.g extensions::api.')
-  parser.add_option('-I', '--include-rules',
-      help='A list of paths to include when searching for referenced objects,'
-      ' with the namespace separated by a \':\'. Example: '
-      '/foo/bar:Foo::Bar::%(namespace)s')
-
-  (opts, argv) = parser.parse_args()
-
-  def split_path_and_namespace(path_and_namespace):
-    if ':' not in path_and_namespace:
-      raise ValueError('Invalid include rule "%s". Rules must be of '
-                       'the form path:namespace' % path_and_namespace)
-    return path_and_namespace.split(':', 1)
-
-  include_rules = []
-  if opts.include_rules:
-    include_rules = map(split_path_and_namespace,
-                        shlex.split(opts.include_rules))
-
-  try:
-    print('Starting previewserver on port %s' % opts.port)
-    print('The extension documentation can be found at:')
-    print('')
-    print('  http://localhost:%s/chrome/common/extensions/api' % opts.port)
-    print('')
-
-    highlighters = {
-      'hilite': hilite_me_highlighter.HiliteMeHighlighter(),
-      'none': none_highlighter.NoneHighlighter()
-    }
-    try:
-      highlighters['pygments'] = pygments_highlighter.PygmentsHighlighter()
-    except ImportError as e:
-      pass
-
-    server = PreviewHTTPServer(('', int(opts.port)),
-                               CompilerHandler,
-                               highlighters,
-                               include_rules,
-                               opts.namespace)
-    server.serve_forever()
-  except KeyboardInterrupt:
-    server.socket.close()
diff --git a/tools/json_schema_compiler/schema_loader.py b/tools/json_schema_compiler/schema_loader.py
deleted file mode 100644
index b896991..0000000
--- a/tools/json_schema_compiler/schema_loader.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright (c) 2012 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 os
-import re
-import sys
-
-import idl_schema
-import json_schema
-from cpp_namespace_environment import CppNamespaceEnvironment
-from model import Model, UnixName
-
-def GenerateFilenames(full_namespace):
-  # Try to find the file defining the namespace. Eg. for
-  # nameSpace.sub_name_space.Type' the following heuristics looks for:
-  # 1. name_space_sub_name_space.json,
-  # 2. name_space_sub_name_space.idl,
-  # 3. sub_name_space.json,
-  # 4. sub_name_space.idl,
-  # 5. etc.
-  sub_namespaces = full_namespace.split('.')
-  filenames = [ ]
-  basename = None
-  for namespace in reversed(sub_namespaces):
-    if basename is not None:
-      basename = UnixName(namespace + '.' + basename)
-    else:
-      basename = UnixName(namespace)
-    for ext in ['json', 'idl']:
-      filenames.append('%s.%s' % (basename, ext))
-  return filenames
-
-class SchemaLoader(object):
-  '''Resolves a type name into the namespace the type belongs to.
-
-  Properties:
-  - |root| path to the root directory.
-  - |path| path to the directory with the API header files, relative to the
-    root.
-  - |include_rules| List containing tuples with (path, cpp_namespace_pattern)
-    used when searching for types.
-  - |cpp_namespace_pattern| Default namespace pattern
-  '''
-  def __init__(self,
-               root,
-               path,
-               include_rules,
-               cpp_namespace_pattern):
-    self._root = root
-    self._include_rules = [(path, cpp_namespace_pattern)]
-    self._include_rules.extend(include_rules)
-
-  def ResolveNamespace(self, full_namespace):
-    filenames = GenerateFilenames(full_namespace)
-    for path, cpp_namespace in self._include_rules:
-      for filename in reversed(filenames):
-        filepath = os.path.join(path, filename);
-        if os.path.exists(os.path.join(self._root, filepath)):
-          return Model().AddNamespace(
-              self.LoadSchema(filepath)[0],
-              filepath,
-              environment=CppNamespaceEnvironment(cpp_namespace))
-    return None
-
-  def ResolveType(self, full_name, default_namespace):
-    name_parts = full_name.rsplit('.', 1)
-    if len(name_parts) == 1:
-      if full_name not in default_namespace.types:
-        return None
-      return default_namespace
-    full_namespace, type_name = full_name.rsplit('.', 1)
-    namespace = self.ResolveNamespace(full_namespace)
-    if namespace and type_name in namespace.types:
-      return namespace
-    return None
-
-  def LoadSchema(self, schema):
-    '''Load a schema definition. The schema parameter must be a file name
-    with the full path relative to the root.'''
-    schema_filename, schema_extension = os.path.splitext(schema)
-
-    schema_path = os.path.join(self._root, schema)
-    if schema_extension == '.json':
-      api_defs = json_schema.Load(schema_path)
-    elif schema_extension == '.idl':
-      api_defs = idl_schema.Load(schema_path)
-    else:
-      sys.exit('Did not recognize file extension %s for schema %s' %
-               (schema_extension, schema))
-
-    return api_defs
diff --git a/tools/json_schema_compiler/schema_util.py b/tools/json_schema_compiler/schema_util.py
deleted file mode 100644
index b8fb404..0000000
--- a/tools/json_schema_compiler/schema_util.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (c) 2012 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.
-"""Utilies for the processing of schema python structures.
-"""
-
-def CapitalizeFirstLetter(value):
-  return value[0].capitalize() + value[1:]
-
-
-def GetNamespace(ref):
-  return SplitNamespace(ref)[0]
-
-
-def StripNamespace(ref):
-  return SplitNamespace(ref)[1]
-
-
-def SplitNamespace(ref):
-  """Returns (namespace, entity) from |ref|, e.g. app.window.AppWindow ->
-  (app.window, AppWindow). If |ref| isn't qualified then returns (None, ref).
-  """
-  if '.' in ref:
-    return tuple(ref.rsplit('.', 1))
-  return (None, ref)
-
-
-def JsFunctionNameToClassName(namespace_name, function_name):
-  """Transform a fully qualified function name like foo.bar.baz into FooBarBaz
-
-  Also strips any leading 'Experimental' prefix."""
-  parts = []
-  full_name = namespace_name + "." + function_name
-  for part in full_name.split("."):
-    parts.append(CapitalizeFirstLetter(part))
-  if parts[0] == "Experimental":
-    del parts[0]
-  class_name = "".join(parts)
-  return class_name
diff --git a/tools/json_schema_compiler/schema_util_test.py b/tools/json_schema_compiler/schema_util_test.py
deleted file mode 100755
index 154da01..0000000
--- a/tools/json_schema_compiler/schema_util_test.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-from schema_util import JsFunctionNameToClassName
-from schema_util import StripNamespace
-import unittest
-
-class SchemaUtilTest(unittest.TestCase):
-  def testStripNamespace(self):
-    self.assertEquals('Bar', StripNamespace('foo.Bar'))
-    self.assertEquals('Baz', StripNamespace('Baz'))
-
-  def testJsFunctionNameToClassName(self):
-    self.assertEquals('FooBar', JsFunctionNameToClassName('foo', 'bar'))
-    self.assertEquals('FooBar',
-                      JsFunctionNameToClassName('experimental.foo', 'bar'))
-    self.assertEquals('FooBarBaz',
-                      JsFunctionNameToClassName('foo.bar', 'baz'))
-    self.assertEquals('FooBarBaz',
-                      JsFunctionNameToClassName('experimental.foo.bar', 'baz'))
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/tools/json_schema_compiler/test/additional_properties.json b/tools/json_schema_compiler/test/additional_properties.json
deleted file mode 100644
index a40c479..0000000
--- a/tools/json_schema_compiler/test/additional_properties.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
-  {
-    "namespace": "additionalProperties",
-    "description": "The additionalProperties API.",
-    "types": [
-      {
-        "id": "AdditionalPropertiesType",
-        "type": "object",
-        "properties": {
-          "string": {
-            "type": "string",
-            "description": "Some string."
-          }
-        },
-        "additionalProperties": { "type": "any" }
-      }
-    ],
-    "functions": [
-      {
-        "name": "additionalProperties",
-        "type": "function",
-        "description": "Takes an object with additionalProperties",
-        "parameters": [
-          {
-            "name": "paramObject",
-            "type": "object",
-            "properties": {},
-            "additionalProperties": {"type": "any"}
-          }
-        ]
-      },
-      {
-        "name": "returnAdditionalProperties",
-        "type": "function",
-        "description": "Returns an object with additionalProperties.",
-        "nodoc": "true",
-        "parameters": [
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "resultObject",
-                "type": "object",
-                "properties": {
-                  "integer": {"type": "integer"}
-                },
-                "additionalProperties": {"type": "string"}
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/additional_properties_unittest.cc b/tools/json_schema_compiler/test/additional_properties_unittest.cc
deleted file mode 100644
index dc980af..0000000
--- a/tools/json_schema_compiler/test/additional_properties_unittest.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/json_schema_compiler/test/additional_properties.h"
-
-using namespace test::api::additional_properties;
-
-TEST(JsonSchemaCompilerAdditionalPropertiesTest,
-    AdditionalPropertiesTypePopulate) {
-  {
-    scoped_ptr<base::ListValue> list_value(new base::ListValue());
-    list_value->Append(new base::StringValue("asdf"));
-    list_value->Append(new base::FundamentalValue(4));
-    scoped_ptr<base::DictionaryValue> type_value(new base::DictionaryValue());
-    type_value->SetString("string", "value");
-    type_value->SetInteger("other", 9);
-    type_value->Set("another", list_value.release());
-    scoped_ptr<AdditionalPropertiesType> type(new AdditionalPropertiesType());
-    ASSERT_TRUE(AdditionalPropertiesType::Populate(*type_value, type.get()));
-    EXPECT_TRUE(type->additional_properties.Equals(type_value.get()));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> type_value(new base::DictionaryValue());
-    type_value->SetInteger("string", 3);
-    scoped_ptr<AdditionalPropertiesType> type(new AdditionalPropertiesType());
-    EXPECT_FALSE(AdditionalPropertiesType::Populate(*type_value, type.get()));
-  }
-}
-
-TEST(JsonSchemaCompilerAdditionalPropertiesTest,
-    AdditionalPropertiesParamsCreate) {
-  scoped_ptr<base::DictionaryValue> param_object_value(
-      new base::DictionaryValue());
-  param_object_value->SetString("str", "a");
-  param_object_value->SetInteger("num", 1);
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  params_value->Append(param_object_value->DeepCopy());
-  scoped_ptr<AdditionalProperties::Params> params(
-      AdditionalProperties::Params::Create(*params_value));
-  EXPECT_TRUE(params.get());
-  EXPECT_TRUE(params->param_object.additional_properties.Equals(
-      param_object_value.get()));
-}
-
-TEST(JsonSchemaCompilerAdditionalPropertiesTest,
-    ReturnAdditionalPropertiesResultCreate) {
-  ReturnAdditionalProperties::Results::ResultObject result_object;
-  result_object.integer = 5;
-  result_object.additional_properties["key"] = "value";
-
-  base::ListValue expected;
-  {
-    base::DictionaryValue* dict = new base::DictionaryValue();
-    dict->SetInteger("integer", 5);
-    dict->SetString("key", "value");
-    expected.Append(dict);
-  }
-
-  EXPECT_TRUE(base::Value::Equals(
-      ReturnAdditionalProperties::Results::Create(result_object).get(),
-      &expected));
-}
diff --git a/tools/json_schema_compiler/test/any.json b/tools/json_schema_compiler/test/any.json
deleted file mode 100644
index d836a04..0000000
--- a/tools/json_schema_compiler/test/any.json
+++ /dev/null
@@ -1,68 +0,0 @@
-[
-  {
-    "namespace": "any",
-    "description": "The any API.",
-    "types": [
-      {
-        "id": "AnyType",
-        "type": "object",
-        "properties": {
-          "any": {
-            "type": "any",
-            "description": "Any way you want it, that's the way you need it."
-          }
-        }
-      }
-    ],
-    "functions": [
-      {
-        "name": "optionalAny",
-        "type": "function",
-        "description": "Takes an optional any param.",
-        "parameters": [
-          {
-            "type": "any",
-            "name": "anyName",
-            "optional": true
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "returnAny",
-        "type": "function",
-        "description": "Returns any.",
-        "nodoc": "true",
-        "parameters": [
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "result",
-                "type": "any"
-              }
-            ]
-          }
-        ]
-      }
-    ],
-    "events": [
-      {
-        "name": "onAnyFired",
-        "type": "function",
-        "description": "Fired when anything is ready.",
-        "parameters": [
-          {
-            "name": "something",
-            "type": "any"
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/any_unittest.cc b/tools/json_schema_compiler/test/any_unittest.cc
deleted file mode 100644
index d10a3eb..0000000
--- a/tools/json_schema_compiler/test/any_unittest.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/json_schema_compiler/test/any.h"
-
-using namespace test::api::any;
-
-TEST(JsonSchemaCompilerAnyTest, AnyTypePopulate) {
-  {
-    AnyType any_type;
-    scoped_ptr<base::DictionaryValue> any_type_value(
-        new base::DictionaryValue());
-    any_type_value->SetString("any", "value");
-    EXPECT_TRUE(AnyType::Populate(*any_type_value, &any_type));
-    scoped_ptr<base::Value> any_type_to_value(any_type.ToValue());
-    EXPECT_TRUE(any_type_value->Equals(any_type_to_value.get()));
-  }
-  {
-    AnyType any_type;
-    scoped_ptr<base::DictionaryValue> any_type_value(
-        new base::DictionaryValue());
-    any_type_value->SetInteger("any", 5);
-    EXPECT_TRUE(AnyType::Populate(*any_type_value, &any_type));
-    scoped_ptr<base::Value> any_type_to_value(any_type.ToValue());
-    EXPECT_TRUE(any_type_value->Equals(any_type_to_value.get()));
-  }
-}
-
-TEST(JsonSchemaCompilerAnyTest, OptionalAnyParamsCreate) {
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<OptionalAny::Params> params(
-        OptionalAny::Params::Create(*params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_FALSE(params->any_name.get());
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<base::Value> param(new base::StringValue("asdf"));
-    params_value->Append(param->DeepCopy());
-    scoped_ptr<OptionalAny::Params> params(
-        OptionalAny::Params::Create(*params_value));
-    ASSERT_TRUE(params);
-    ASSERT_TRUE(params->any_name);
-    EXPECT_TRUE(params->any_name->Equals(param.get()));
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<base::Value> param(new base::FundamentalValue(true));
-    params_value->Append(param->DeepCopy());
-    scoped_ptr<OptionalAny::Params> params(
-        OptionalAny::Params::Create(*params_value));
-    ASSERT_TRUE(params);
-    ASSERT_TRUE(params->any_name);
-    EXPECT_TRUE(params->any_name->Equals(param.get()));
-  }
-}
diff --git a/tools/json_schema_compiler/test/arrays.json b/tools/json_schema_compiler/test/arrays.json
deleted file mode 100644
index 23314e9..0000000
--- a/tools/json_schema_compiler/test/arrays.json
+++ /dev/null
@@ -1,274 +0,0 @@
-[
-  {
-    "namespace": "arrays",
-    "description": "The arrays API.",
-    "types": [
-      {
-        "id": "EnumArrayType",
-        "type": "object",
-        "properties": {
-          "types": {
-            "type": "array",
-            "items": {
-              "type": "string",
-              "enum": ["one", "two", "three"]
-            }
-          }
-        }
-      },
-      {
-        "id": "Enumeration",
-        "type": "string",
-        "enum": ["one", "two", "three"]
-      },
-      {
-        "id": "EnumArrayReference",
-        "type": "object",
-        "properties": {
-          "types": {
-            "type": "array",
-            "items": {
-              "$ref": "Enumeration"
-            }
-          }
-        }
-      },
-      {
-        "id": "EnumArrayMixed",
-        "type": "object",
-        "properties": {
-          "inline_enums": {
-            "type": "array",
-            "items": {
-              "type": "string",
-              "enum": ["one", "two", "three"]
-            }
-          },
-          "infile_enums": {
-            "type": "array",
-            "items": {
-              "$ref": "Enumeration"
-            }
-          },
-          "external_enums": {
-            "type": "array",
-            "items": {
-              "$ref": "enums.Enumeration"
-            }
-          }
-        }
-      },
-      {
-        "id": "OptionalEnumArrayType",
-        "type": "object",
-        "properties": {
-          "types": {
-            "type": "array",
-            "items": {
-              "type": "string",
-              "enum": ["one", "two", "three"]
-            },
-            "optional": true
-          }
-        }
-      },
-      {
-        "id": "BasicArrayType",
-        "type": "object",
-        "properties": {
-          "strings": {
-            "type": "array",
-            "items": {"type": "string"}
-          },
-          "booleans": {
-            "type": "array",
-            "items": {"type": "boolean"}
-          },
-          "numbers": {
-            "type": "array",
-            "items": {"type": "number"}
-          },
-          "integers": {
-            "type": "array",
-            "items": {"type": "integer"}
-          }
-        }
-      },
-      {
-        "id": "Item",
-        "type": "object",
-        "properties": {
-          "val": {
-            "type": "integer"
-          }
-        }
-      },
-      {
-        "id": "RefArrayType",
-        "type": "object",
-        "properties": {
-          "refs": {
-            "type": "array",
-            "items": { "$ref": "Item" }
-          }
-        }
-      }
-    ],
-    "functions": [
-      {
-        "name": "integerArray",
-        "type": "function",
-        "description": "Takes some integers.",
-        "parameters": [
-          {
-            "name": "nums",
-            "type": "array",
-            "items": {"type": "integer"}
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "anyArray",
-        "type": "function",
-        "description": "Takes some Items.",
-        "parameters": [
-          {
-            "name": "anys",
-            "type": "array",
-            "items": {"type": "any"}
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "objectArray",
-        "type": "function",
-        "description": "Takes some Items.",
-        "parameters": [
-          {
-            "name": "objects",
-            "type": "array",
-            "items": {
-              "type": "object",
-              "additionalProperties": {"type": "integer"}
-            }
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "refArray",
-        "type": "function",
-        "description": "Takes some Items.",
-        "parameters": [
-          {
-            "name": "refs",
-            "type": "array",
-            "items": {"$ref": "Item"}
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "justChoices",
-        "type": "function",
-        "description": "Takes some Choices.",
-        "parameters": [
-          {
-            "name": "choices",
-            "choices": [
-              { "type": "integer" },
-              { "type": "boolean" },
-              { "type": "array",
-                "items": {"$ref": "Item"}
-              }
-            ]
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "choicesArray",
-        "type": "function",
-        "description": "Takes some Choices.",
-        "parameters": [
-          {
-            "name": "choices",
-            "type": "array",
-            "items": {
-              "choices": [
-                { "type": "integer" },
-                { "type": "boolean" },
-                { "type": "array",
-                  "items": {"$ref": "Item"}
-                }
-              ]
-            }
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "returnIntegerArray",
-        "type": "function",
-        "description": "Returns some integers.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "integers",
-                "type": "array",
-                "items": {"type": "integer"}
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "returnRefArray",
-        "type": "function",
-        "description": "Returns some Items.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "refs",
-                "type": "array",
-                "items": {"$ref": "Item"}
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/arrays_unittest.cc b/tools/json_schema_compiler/test/arrays_unittest.cc
deleted file mode 100644
index 79ebfb2..0000000
--- a/tools/json_schema_compiler/test/arrays_unittest.cc
+++ /dev/null
@@ -1,317 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/test/arrays.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/json_schema_compiler/test/enums.h"
-
-using namespace test::api::arrays;
-
-namespace {
-
-// TODO(calamity): Change to AppendString etc once kalman's patch goes through
-static scoped_ptr<base::DictionaryValue> CreateBasicArrayTypeDictionary() {
-  base::DictionaryValue* value = new base::DictionaryValue();
-  base::ListValue* strings_value = new base::ListValue();
-  strings_value->Append(new base::StringValue("a"));
-  strings_value->Append(new base::StringValue("b"));
-  strings_value->Append(new base::StringValue("c"));
-  strings_value->Append(new base::StringValue("it's easy as"));
-  base::ListValue* integers_value = new base::ListValue();
-  integers_value->Append(new base::FundamentalValue(1));
-  integers_value->Append(new base::FundamentalValue(2));
-  integers_value->Append(new base::FundamentalValue(3));
-  base::ListValue* booleans_value = new base::ListValue();
-  booleans_value->Append(new base::FundamentalValue(false));
-  booleans_value->Append(new base::FundamentalValue(true));
-  base::ListValue* numbers_value = new base::ListValue();
-  numbers_value->Append(new base::FundamentalValue(6.1));
-  value->Set("numbers", numbers_value);
-  value->Set("booleans", booleans_value);
-  value->Set("strings", strings_value);
-  value->Set("integers", integers_value);
-  return scoped_ptr<base::DictionaryValue>(value);
-}
-
-static base::Value* CreateItemValue(int val) {
-  base::DictionaryValue* value(new base::DictionaryValue());
-  value->Set("val", new base::FundamentalValue(val));
-  return value;
-}
-
-}  // namespace
-
-TEST(JsonSchemaCompilerArrayTest, BasicArrayType) {
-  {
-    scoped_ptr<base::DictionaryValue> value = CreateBasicArrayTypeDictionary();
-    scoped_ptr<BasicArrayType> basic_array_type(new BasicArrayType());
-    ASSERT_TRUE(BasicArrayType::Populate(*value, basic_array_type.get()));
-    EXPECT_TRUE(value->Equals(basic_array_type->ToValue().get()));
-  }
-}
-
-TEST(JsonSchemaCompilerArrayTest, EnumArrayType) {
-  // { "types": ["one", "two", "three"] }
-  base::ListValue* types = new base::ListValue();
-  types->AppendString("one");
-  types->AppendString("two");
-  types->AppendString("three");
-  base::DictionaryValue value;
-  value.Set("types", types);
-
-  EnumArrayType enum_array_type;
-
-  // Test Populate.
-  ASSERT_TRUE(EnumArrayType::Populate(value, &enum_array_type));
-  {
-    EnumArrayType::TypesType enums[] = {
-      EnumArrayType::TYPES_TYPE_ONE,
-      EnumArrayType::TYPES_TYPE_TWO,
-      EnumArrayType::TYPES_TYPE_THREE,
-    };
-    std::vector<EnumArrayType::TypesType> enums_vector(
-        enums, enums + arraysize(enums));
-    EXPECT_EQ(enums_vector, enum_array_type.types);
-  }
-
-  // Test ToValue.
-  scoped_ptr<base::Value> as_value(enum_array_type.ToValue());
-  EXPECT_TRUE(value.Equals(as_value.get())) << value << " != " << *as_value;
-}
-
-TEST(JsonSchemaCompilerArrayTest, EnumArrayReference) {
-  // { "types": ["one", "two", "three"] }
-  base::ListValue* types = new base::ListValue();
-  types->AppendString("one");
-  types->AppendString("two");
-  types->AppendString("three");
-  base::DictionaryValue value;
-  value.Set("types", types);
-
-  EnumArrayReference enum_array_reference;
-
-  // Test Populate.
-  ASSERT_TRUE(EnumArrayReference::Populate(value, &enum_array_reference));
-
-  Enumeration expected_types[] = {ENUMERATION_ONE, ENUMERATION_TWO,
-                                  ENUMERATION_THREE};
-  EXPECT_EQ(std::vector<Enumeration>(
-                expected_types, expected_types + arraysize(expected_types)),
-            enum_array_reference.types);
-
-  // Test ToValue.
-  scoped_ptr<base::Value> as_value(enum_array_reference.ToValue());
-  EXPECT_TRUE(value.Equals(as_value.get())) << value << " != " << *as_value;
-}
-
-TEST(JsonSchemaCompilerArrayTest, EnumArrayMixed) {
-  // { "types": ["one", "two", "three"] }
-  base::ListValue* inline_enums = new base::ListValue();
-  inline_enums->AppendString("one");
-  inline_enums->AppendString("two");
-  inline_enums->AppendString("three");
-
-  base::ListValue* infile_enums = new base::ListValue();
-  infile_enums->AppendString("one");
-  infile_enums->AppendString("two");
-  infile_enums->AppendString("three");
-
-  base::ListValue* external_enums = new base::ListValue();
-  external_enums->AppendString("one");
-  external_enums->AppendString("two");
-  external_enums->AppendString("three");
-
-  base::DictionaryValue value;
-  value.Set("inline_enums", inline_enums);
-  value.Set("infile_enums", infile_enums);
-  value.Set("external_enums", external_enums);
-
-  EnumArrayMixed enum_array_mixed;
-
-  // Test Populate.
-  ASSERT_TRUE(EnumArrayMixed::Populate(value, &enum_array_mixed));
-
-  EnumArrayMixed::Inline_enumsType expected_inline_types[] = {
-      EnumArrayMixed::INLINE_ENUMS_TYPE_ONE,
-      EnumArrayMixed::INLINE_ENUMS_TYPE_TWO,
-      EnumArrayMixed::INLINE_ENUMS_TYPE_THREE};
-  EXPECT_EQ(std::vector<EnumArrayMixed::Inline_enumsType>(
-                expected_inline_types,
-                expected_inline_types + arraysize(expected_inline_types)),
-            enum_array_mixed.inline_enums);
-
-  Enumeration expected_infile_types[] = {ENUMERATION_ONE, ENUMERATION_TWO,
-                                         ENUMERATION_THREE};
-  EXPECT_EQ(std::vector<Enumeration>(
-                expected_infile_types,
-                expected_infile_types + arraysize(expected_infile_types)),
-            enum_array_mixed.infile_enums);
-
-  test::api::enums::Enumeration expected_external_types[] = {
-      test::api::enums::ENUMERATION_ONE, test::api::enums::ENUMERATION_TWO,
-      test::api::enums::ENUMERATION_THREE};
-  EXPECT_EQ(std::vector<test::api::enums::Enumeration>(
-                expected_external_types,
-                expected_external_types + arraysize(expected_external_types)),
-            enum_array_mixed.external_enums);
-
-  // Test ToValue.
-  scoped_ptr<base::Value> as_value(enum_array_mixed.ToValue());
-  EXPECT_TRUE(value.Equals(as_value.get())) << value << " != " << *as_value;
-}
-
-TEST(JsonSchemaCompilerArrayTest, OptionalEnumArrayType) {
-  {
-    std::vector<OptionalEnumArrayType::TypesType> enums;
-    enums.push_back(OptionalEnumArrayType::TYPES_TYPE_ONE);
-    enums.push_back(OptionalEnumArrayType::TYPES_TYPE_TWO);
-    enums.push_back(OptionalEnumArrayType::TYPES_TYPE_THREE);
-
-    scoped_ptr<base::ListValue> types(new base::ListValue());
-    for (size_t i = 0; i < enums.size(); ++i) {
-      types->Append(new base::StringValue(
-          OptionalEnumArrayType::ToString(enums[i])));
-    }
-
-    base::DictionaryValue value;
-    value.Set("types", types.release());
-
-    OptionalEnumArrayType enum_array_type;
-    ASSERT_TRUE(OptionalEnumArrayType::Populate(value, &enum_array_type));
-    EXPECT_EQ(enums, *enum_array_type.types);
-  }
-  {
-    base::DictionaryValue value;
-    scoped_ptr<base::ListValue> enum_array(new base::ListValue());
-    enum_array->Append(new base::StringValue("invalid"));
-
-    value.Set("types", enum_array.release());
-    OptionalEnumArrayType enum_array_type;
-    ASSERT_FALSE(OptionalEnumArrayType::Populate(value, &enum_array_type));
-    EXPECT_TRUE(enum_array_type.types->empty());
-  }
-}
-
-TEST(JsonSchemaCompilerArrayTest, RefArrayType) {
-  {
-    scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-    scoped_ptr<base::ListValue> ref_array(new base::ListValue());
-    ref_array->Append(CreateItemValue(1));
-    ref_array->Append(CreateItemValue(2));
-    ref_array->Append(CreateItemValue(3));
-    value->Set("refs", ref_array.release());
-    scoped_ptr<RefArrayType> ref_array_type(new RefArrayType());
-    EXPECT_TRUE(RefArrayType::Populate(*value, ref_array_type.get()));
-    ASSERT_EQ(3u, ref_array_type->refs.size());
-    EXPECT_EQ(1, ref_array_type->refs[0]->val);
-    EXPECT_EQ(2, ref_array_type->refs[1]->val);
-    EXPECT_EQ(3, ref_array_type->refs[2]->val);
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-    scoped_ptr<base::ListValue> not_ref_array(new base::ListValue());
-    not_ref_array->Append(CreateItemValue(1));
-    not_ref_array->Append(new base::FundamentalValue(3));
-    value->Set("refs", not_ref_array.release());
-    scoped_ptr<RefArrayType> ref_array_type(new RefArrayType());
-    EXPECT_FALSE(RefArrayType::Populate(*value, ref_array_type.get()));
-  }
-}
-
-TEST(JsonSchemaCompilerArrayTest, IntegerArrayParamsCreate) {
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  scoped_ptr<base::ListValue> integer_array(new base::ListValue());
-  integer_array->Append(new base::FundamentalValue(2));
-  integer_array->Append(new base::FundamentalValue(4));
-  integer_array->Append(new base::FundamentalValue(8));
-  params_value->Append(integer_array.release());
-  scoped_ptr<IntegerArray::Params> params(
-      IntegerArray::Params::Create(*params_value));
-  EXPECT_TRUE(params.get());
-  ASSERT_EQ(3u, params->nums.size());
-  EXPECT_EQ(2, params->nums[0]);
-  EXPECT_EQ(4, params->nums[1]);
-  EXPECT_EQ(8, params->nums[2]);
-}
-
-TEST(JsonSchemaCompilerArrayTest, AnyArrayParamsCreate) {
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  scoped_ptr<base::ListValue> any_array(new base::ListValue());
-  any_array->Append(new base::FundamentalValue(1));
-  any_array->Append(new base::StringValue("test"));
-  any_array->Append(CreateItemValue(2));
-  params_value->Append(any_array.release());
-  scoped_ptr<AnyArray::Params> params(
-      AnyArray::Params::Create(*params_value));
-  EXPECT_TRUE(params.get());
-  ASSERT_EQ(3u, params->anys.size());
-  int int_temp = 0;
-  EXPECT_TRUE(params->anys[0]->GetAsInteger(&int_temp));
-  EXPECT_EQ(1, int_temp);
-}
-
-TEST(JsonSchemaCompilerArrayTest, ObjectArrayParamsCreate) {
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  scoped_ptr<base::ListValue> item_array(new base::ListValue());
-  item_array->Append(CreateItemValue(1));
-  item_array->Append(CreateItemValue(2));
-  params_value->Append(item_array.release());
-  scoped_ptr<ObjectArray::Params> params(
-      ObjectArray::Params::Create(*params_value));
-  EXPECT_TRUE(params.get());
-  ASSERT_EQ(2u, params->objects.size());
-  EXPECT_EQ(1, params->objects[0]->additional_properties["val"]);
-  EXPECT_EQ(2, params->objects[1]->additional_properties["val"]);
-}
-
-TEST(JsonSchemaCompilerArrayTest, RefArrayParamsCreate) {
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  scoped_ptr<base::ListValue> item_array(new base::ListValue());
-  item_array->Append(CreateItemValue(1));
-  item_array->Append(CreateItemValue(2));
-  params_value->Append(item_array.release());
-  scoped_ptr<RefArray::Params> params(
-      RefArray::Params::Create(*params_value));
-  EXPECT_TRUE(params.get());
-  ASSERT_EQ(2u, params->refs.size());
-  EXPECT_EQ(1, params->refs[0]->val);
-  EXPECT_EQ(2, params->refs[1]->val);
-}
-
-TEST(JsonSchemaCompilerArrayTest, ReturnIntegerArrayResultCreate) {
-  std::vector<int> integers;
-  integers.push_back(1);
-  integers.push_back(2);
-  scoped_ptr<base::ListValue> results =
-      ReturnIntegerArray::Results::Create(integers);
-
-  base::ListValue expected;
-  base::ListValue* expected_argument = new base::ListValue();
-  expected_argument->Append(new base::FundamentalValue(1));
-  expected_argument->Append(new base::FundamentalValue(2));
-  expected.Append(expected_argument);
-  EXPECT_TRUE(results->Equals(&expected));
-}
-
-TEST(JsonSchemaCompilerArrayTest, ReturnRefArrayResultCreate) {
-  std::vector<linked_ptr<Item> > items;
-  items.push_back(linked_ptr<Item>(new Item()));
-  items.push_back(linked_ptr<Item>(new Item()));
-  items[0]->val = 1;
-  items[1]->val = 2;
-  scoped_ptr<base::ListValue> results =
-      ReturnRefArray::Results::Create(items);
-
-  base::ListValue expected;
-  base::ListValue* expected_argument = new base::ListValue();
-  base::DictionaryValue* first = new base::DictionaryValue();
-  first->SetInteger("val", 1);
-  expected_argument->Append(first);
-  base::DictionaryValue* second = new base::DictionaryValue();
-  second->SetInteger("val", 2);
-  expected_argument->Append(second);
-  expected.Append(expected_argument);
-  EXPECT_TRUE(results->Equals(&expected));
-}
diff --git a/tools/json_schema_compiler/test/browser_action.json b/tools/json_schema_compiler/test/browser_action.json
deleted file mode 100644
index 934d56d..0000000
--- a/tools/json_schema_compiler/test/browser_action.json
+++ /dev/null
@@ -1,273 +0,0 @@
-// Copyright (c) 2012 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.
-
-[
-  {
-    "namespace": "browserAction",
-    "description": "The browserAction API.",
-    "dependencies": [ "tabs" ],
-    "types": [
-      {
-        "id": "ColorArray",
-        "type": "array",
-        "items": {
-          "type": "integer",
-          "minimum": 0,
-          "maximum": 255
-        },
-        "minItems": 4,
-        "maxItems": 4
-      }
-    ],
-    "functions": [
-      {
-        "name": "setTitle",
-        "type": "function",
-        "description": "Sets the title of the browser action. This shows up in the tooltip.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "title": {
-                "type": "string",
-                "description": "The string the browser action should display when moused over."
-              },
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "getTitle",
-        "type": "function",
-        "description": "Gets the title of the browser action.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "description": "Specify the tab to get the title from. If no tab is specified, the non-tab-specific title is returned."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "result",
-                "type": "string"
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "setIcon",
-        "type": "function",
-        "description": "Sets the icon for the browser action. The icon can be specified either as the path to an image file or as the pixel data from a canvas element. Either the <b>path</b> or the <b>imageData</b> property must be specified.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "imageData": {
-                "type": "object",
-                "isInstanceOf": "ImageData",
-                "additionalProperties": { "type": "any" },
-                "description": "Pixel data for an image. Must be an ImageData object (for example, from a <code>canvas</code> element).",
-                "optional": true
-              },
-              "path": {
-                "type": "string",
-                "description": "Relative path to an image in the extension to show in the browser action.",
-                "optional": true
-              },
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "setPopup",
-        "type": "function",
-        "description": "Sets the html document to be opened as a popup when the user clicks on the browser action's icon.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "minimum": 0,
-                "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
-              },
-              "popup": {
-                "type": "string",
-                "description": "The html file to show in a popup.  If set to the empty string (''), no popup is shown."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "getPopup",
-        "type": "function",
-        "description": "Gets the html document set as the popup for this browser action.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "description": "Specify the tab to get the popup from. If no tab is specified, the non-tab-specific popup is returned."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "result",
-                "type": "string"
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "setBadgeText",
-        "type": "function",
-        "description": "Sets the badge text for the browser action. The badge is displayed on top of the icon.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "text": {
-                "type": "string",
-                "description": "Any number of characters can be passed, but only about four can fit in the space."
-              },
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "getBadgeText",
-        "type": "function",
-        "description": "Gets the badge text of the browser action. If no tab is specified, the non-tab-specific badge text is returned.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "description": "Specify the tab to get the badge text from. If no tab is specified, the non-tab-specific badge text is returned."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "result",
-                "type": "string"
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "setBadgeBackgroundColor",
-        "type": "function",
-        "description": "Sets the background color for the badge.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "color": {
-                "description": "An array of four integers in the range [0,255] that make up the RGBA color of the badge. For example, opaque red is <code>[255, 0, 0, 255]</code>. Can also be a string with a CSS value, with opaque red being <code>#FF0000</code> or <code>#F00</code>.",
-                "choices": [
-                  {"type": "string"},
-                  {"$ref": "ColorArray"}
-                ]
-              },
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "getBadgeBackgroundColor",
-        "type": "function",
-        "description": "Gets the background color of the browser action.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "tabId": {
-                "type": "integer",
-                "optional": true,
-                "description": "Specify the tab to get the badge background color from. If no tab is specified, the non-tab-specific badge background color is returned."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "result",
-                "$ref": "ColorArray"
-              }
-            ]
-          }
-        ]
-      }
-    ],
-    "events": [
-      {
-        "name": "onClicked",
-        "type": "function",
-        "description": "Fired when a browser action icon is clicked.  This event will not fire if the browser action has a popup.",
-        "parameters": [
-          {
-            "name": "tab",
-            "$ref": "Tab"
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/callbacks.json b/tools/json_schema_compiler/test/callbacks.json
deleted file mode 100644
index 2f86c26..0000000
--- a/tools/json_schema_compiler/test/callbacks.json
+++ /dev/null
@@ -1,72 +0,0 @@
-[
-  {
-    "namespace": "callbacks",
-    "description": "The callbacks API.",
-    "types": [],
-    "functions": [
-      {
-        "name": "returnsNothing",
-        "type": "function",
-        "description": "Takes nothing. Returns nothing.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "returnsObject",
-        "description": "Returns an object.",
-        "type": "function",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "someObject",
-                "type": "object",
-                "properties": {
-                  "state": {
-                    "type": "string",
-                    "enum": ["foo", "bar", "baz"]
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "returnsMultiple",
-        "description": "Returns an object.",
-        "type": "function",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "someInteger",
-                "type": "integer"
-              },
-              {
-                "name": "someObject",
-                "type": "object",
-                "properties": {
-                  "state": {
-                    "type": "string",
-                    "enum": ["foo", "bar", "baz"]
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  }
-]
-
diff --git a/tools/json_schema_compiler/test/callbacks_unittest.cc b/tools/json_schema_compiler/test/callbacks_unittest.cc
deleted file mode 100644
index 001e977..0000000
--- a/tools/json_schema_compiler/test/callbacks_unittest.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/test/callbacks.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-using namespace test::api::callbacks;
-
-TEST(JsonSchemaCompilerCallbacksTest, ReturnsObjectResultCreate) {
-  ReturnsObject::Results::SomeObject some_object;
-  some_object.state = ReturnsObject::Results::SomeObject::STATE_FOO;
-  scoped_ptr<base::ListValue> results =
-      ReturnsObject::Results::Create(some_object);
-
-  base::DictionaryValue* expected_dict = new base::DictionaryValue();
-  expected_dict->SetString("state", "foo");
-  base::ListValue expected;
-  expected.Append(expected_dict);
-  EXPECT_TRUE(results->Equals(&expected));
-}
-
-TEST(JsonSchemaCompilerCallbacksTest, ReturnsMultipleResultCreate) {
-  ReturnsMultiple::Results::SomeObject some_object;
-  some_object.state = ReturnsMultiple::Results::SomeObject::STATE_FOO;
-  scoped_ptr<base::ListValue> results =
-      ReturnsMultiple::Results::Create(5, some_object);
-
-  base::DictionaryValue* expected_dict = new base::DictionaryValue();
-  expected_dict->SetString("state", "foo");
-  base::ListValue expected;
-  expected.Append(new base::FundamentalValue(5));
-  expected.Append(expected_dict);
-  EXPECT_TRUE(results->Equals(&expected));
-}
diff --git a/tools/json_schema_compiler/test/choices.json b/tools/json_schema_compiler/test/choices.json
deleted file mode 100644
index e7e39e0..0000000
--- a/tools/json_schema_compiler/test/choices.json
+++ /dev/null
@@ -1,167 +0,0 @@
-[
-  {
-    "namespace": "choices",
-    "description": "The choices API.",
-    "types": [
-      {
-        "id": "ChoiceType",
-        "type": "object",
-        "properties": {
-          "integers": {
-            "choices": [
-               {"type": "array", "items": {"type": "integer", "minimum": 0}},
-               {"type": "integer"}
-            ]
-          },
-          "strings": {
-            "choices": [
-               {"type": "array", "items": {"type": "string", "minimum": 0}},
-               {"type": "string"}
-            ],
-            "optional": true
-          }
-        }
-      },
-      {
-        "id": "NestedChoice",
-        "description": "Tests when some of the choices are choices themselves",
-        "choices": [
-          {"type": "integer"},
-          {"choices": [
-            {"type": "string"},
-            {"type": "boolean"}
-          ]},
-          {"choices": [
-            {"type": "double"},
-            {"$ref": "ChoiceType"},
-            {"type": "array", "items": {"$ref": "ChoiceType"}}
-          ]}
-        ]
-      }
-    ],
-    "functions": [
-      {
-        "name": "takesIntegers",
-        "type": "function",
-        "description": "Takes one or more integers.",
-        "parameters": [
-          {
-            "name": "nums",
-            "choices": [
-               {"type": "array", "items": {"type": "integer", "minimum": 0}},
-               {"type": "integer"}
-             ]
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "takesIntegersOptional",
-        "type": "function",
-        "description": "Takes one or more integers.",
-        "parameters": [
-          {
-            "name": "nums",
-            "choices": [
-               {"type": "array", "items": {"type": "integer", "minimum": 0}},
-               {"type": "integer"}
-            ],
-            "optional": true
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "objectWithChoices",
-        "type": "function",
-        "description": "Takes an object with one or more strings and optional integer(s).",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "stringInfo",
-            "properties": {
-               "strings": {
-                 "description": "One or more tab indices to highlight.",
-                 "choices": [
-                   {"type": "array", "items": {"type": "string", "minimum": 0}},
-                   {"type": "string"}
-                 ]
-               },
-               "integers": {
-                 "description": "One or more tab indices to highlight.",
-                 "choices": [
-                   {"type": "array", "items": {"type": "integer", "minimum": 0}},
-                   {"type": "integer"}
-                 ],
-                 "optional": true
-               }
-             }
-           },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "returnChoices",
-        "type": "function",
-        "description": "Gives back a string. Or not.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "result",
-                "choices": [
-                   {"type": "array", "items": {"type": "integer", "minimum": 0}},
-                   {"type": "integer"}
-                 ],
-                "description": "Some integers."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "returnMultipleChoices",
-        "type": "function",
-        "description": "Gives back two values where each is an integer or a list of integers.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "firstResult",
-                "choices": [
-                   {"type": "array", "items": {"type": "integer", "minimum": 0}},
-                   {"type": "integer"}
-                 ],
-                "description": "Some integers."
-              },
-              {
-                "name": "secondResult",
-                "choices": [
-                   {"type": "array", "items": {"type": "integer", "minimum": 0}},
-                   {"type": "integer"}
-                 ],
-                "description": "Some integers."
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/choices_unittest.cc b/tools/json_schema_compiler/test/choices_unittest.cc
deleted file mode 100644
index 2cf1d8d..0000000
--- a/tools/json_schema_compiler/test/choices_unittest.cc
+++ /dev/null
@@ -1,292 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/test/choices.h"
-
-#include "base/strings/string_piece.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/json_schema_compiler/test/test_util.h"
-
-namespace {
-
-using namespace test::api::choices;
-using json_schema_compiler::test_util::Dictionary;
-using json_schema_compiler::test_util::List;
-using json_schema_compiler::test_util::ReadJson;
-using json_schema_compiler::test_util::Vector;
-
-TEST(JsonSchemaCompilerChoicesTest, TakesIntegersParamsCreate) {
-  {
-    scoped_ptr<TakesIntegers::Params> params(
-        TakesIntegers::Params::Create(*List(new base::FundamentalValue(true))));
-    EXPECT_FALSE(params);
-  }
-  {
-    scoped_ptr<TakesIntegers::Params> params(
-        TakesIntegers::Params::Create(*List(new base::FundamentalValue(6))));
-    ASSERT_TRUE(params);
-    EXPECT_FALSE(params->nums.as_integers);
-    EXPECT_EQ(6, *params->nums.as_integer);
-  }
-  {
-    scoped_ptr<TakesIntegers::Params> params(TakesIntegers::Params::Create(
-        *List(List(new base::FundamentalValue(2),
-                   new base::FundamentalValue(6),
-                   new base::FundamentalValue(8)).release())));
-    ASSERT_TRUE(params);
-    ASSERT_TRUE(params->nums.as_integers);
-    EXPECT_EQ(Vector(2, 6, 8), *params->nums.as_integers);
-  }
-}
-
-TEST(JsonSchemaCompilerChoicesTest, ObjectWithChoicesParamsCreate) {
-  {
-    scoped_ptr<ObjectWithChoices::Params> params(
-        ObjectWithChoices::Params::Create(*List(
-            Dictionary("strings", new base::StringValue("asdf")).release())));
-    ASSERT_TRUE(params);
-    EXPECT_FALSE(params->string_info.strings.as_strings);
-    EXPECT_EQ("asdf", *params->string_info.strings.as_string);
-    EXPECT_FALSE(params->string_info.integers);
-  }
-  {
-    scoped_ptr<ObjectWithChoices::Params> params(
-        ObjectWithChoices::Params::Create(*List(
-            Dictionary("strings", new base::StringValue("asdf"),
-                       "integers", new base::FundamentalValue(6)).release())));
-    ASSERT_TRUE(params);
-    EXPECT_FALSE(params->string_info.strings.as_strings);
-    EXPECT_EQ("asdf", *params->string_info.strings.as_string);
-    ASSERT_TRUE(params->string_info.integers);
-    EXPECT_FALSE(params->string_info.integers->as_integers);
-    EXPECT_EQ(6, *params->string_info.integers->as_integer);
-  }
-}
-
-// TODO(kalman): Clean up the rest of these tests to use the
-// Vector/List/Dictionary helpers.
-
-TEST(JsonSchemaCompilerChoicesTest, ObjectWithChoicesParamsCreateFail) {
-  {
-    scoped_ptr<base::DictionaryValue> object_param(new base::DictionaryValue());
-    object_param->SetWithoutPathExpansion("strings",
-                                          new base::FundamentalValue(5));
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(object_param.release());
-    scoped_ptr<ObjectWithChoices::Params> params(
-        ObjectWithChoices::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-  {
-    scoped_ptr<base::DictionaryValue> object_param(new base::DictionaryValue());
-    object_param->SetWithoutPathExpansion("strings",
-                                          new base::StringValue("asdf"));
-    object_param->SetWithoutPathExpansion("integers",
-                                          new base::StringValue("asdf"));
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(object_param.release());
-    scoped_ptr<ObjectWithChoices::Params> params(
-        ObjectWithChoices::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-  {
-    scoped_ptr<base::DictionaryValue> object_param(new base::DictionaryValue());
-    object_param->SetWithoutPathExpansion("integers",
-                                          new base::FundamentalValue(6));
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(object_param.release());
-    scoped_ptr<ObjectWithChoices::Params> params(
-        ObjectWithChoices::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-}
-
-TEST(JsonSchemaCompilerChoicesTest, PopulateChoiceType) {
-  std::vector<std::string> strings = Vector(std::string("list"),
-                                            std::string("of"),
-                                            std::string("strings"));
-
-  base::ListValue* strings_value = new base::ListValue();
-  for (size_t i = 0; i < strings.size(); ++i)
-    strings_value->Append(new base::StringValue(strings[i]));
-
-  base::DictionaryValue value;
-  value.SetInteger("integers", 4);
-  value.Set("strings", strings_value);
-
-  ChoiceType out;
-  ASSERT_TRUE(ChoiceType::Populate(value, &out));
-  ASSERT_TRUE(out.integers.as_integer.get());
-  EXPECT_FALSE(out.integers.as_integers.get());
-  EXPECT_EQ(4, *out.integers.as_integer);
-
-  EXPECT_FALSE(out.strings->as_string.get());
-  ASSERT_TRUE(out.strings->as_strings.get());
-  EXPECT_EQ(strings, *out.strings->as_strings);
-}
-
-TEST(JsonSchemaCompilerChoicesTest, ChoiceTypeToValue) {
-  base::ListValue* strings_value = new base::ListValue();
-  strings_value->Append(new base::StringValue("list"));
-  strings_value->Append(new base::StringValue("of"));
-  strings_value->Append(new base::StringValue("strings"));
-
-  base::DictionaryValue value;
-  value.SetInteger("integers", 5);
-  value.Set("strings", strings_value);
-
-  ChoiceType out;
-  ASSERT_TRUE(ChoiceType::Populate(value, &out));
-
-  EXPECT_TRUE(value.Equals(out.ToValue().get()));
-}
-
-TEST(JsonSchemaCompilerChoicesTest, ReturnChoices) {
-  {
-    ReturnChoices::Results::Result results;
-    results.as_integers.reset(new std::vector<int>(Vector(1, 2)));
-
-    scoped_ptr<base::Value> results_value = results.ToValue();
-    ASSERT_TRUE(results_value);
-
-    base::ListValue expected;
-    expected.AppendInteger(1);
-    expected.AppendInteger(2);
-
-    EXPECT_TRUE(expected.Equals(results_value.get()));
-  }
-  {
-    ReturnChoices::Results::Result results;
-    results.as_integer.reset(new int(5));
-
-    scoped_ptr<base::Value> results_value = results.ToValue();
-    ASSERT_TRUE(results_value);
-
-    base::FundamentalValue expected(5);
-
-    EXPECT_TRUE(expected.Equals(results_value.get()));
-  }
-}
-
-TEST(JsonSchemaCompilerChoicesTest, NestedChoices) {
-  // These test both ToValue and FromValue for every legitimate configuration of
-  // NestedChoices.
-  {
-    // The plain integer choice.
-    scoped_ptr<base::Value> value = ReadJson("42");
-    scoped_ptr<NestedChoice> obj = NestedChoice::FromValue(*value);
-
-    ASSERT_TRUE(obj);
-    ASSERT_TRUE(obj->as_integer);
-    EXPECT_FALSE(obj->as_choice1);
-    EXPECT_FALSE(obj->as_choice2);
-    EXPECT_EQ(42, *obj->as_integer);
-
-    EXPECT_TRUE(base::Value::Equals(value.get(), obj->ToValue().get()));
-  }
-
-  {
-    // The string choice within the first choice.
-    scoped_ptr<base::Value> value = ReadJson("\"foo\"");
-    scoped_ptr<NestedChoice> obj = NestedChoice::FromValue(*value);
-
-    ASSERT_TRUE(obj);
-    EXPECT_FALSE(obj->as_integer);
-    ASSERT_TRUE(obj->as_choice1);
-    EXPECT_FALSE(obj->as_choice2);
-    ASSERT_TRUE(obj->as_choice1->as_string);
-    EXPECT_FALSE(obj->as_choice1->as_boolean);
-    EXPECT_EQ("foo", *obj->as_choice1->as_string);
-
-    EXPECT_TRUE(base::Value::Equals(value.get(), obj->ToValue().get()));
-  }
-
-  {
-    // The boolean choice within the first choice.
-    scoped_ptr<base::Value> value = ReadJson("true");
-    scoped_ptr<NestedChoice> obj = NestedChoice::FromValue(*value);
-
-    ASSERT_TRUE(obj);
-    EXPECT_FALSE(obj->as_integer);
-    ASSERT_TRUE(obj->as_choice1);
-    EXPECT_FALSE(obj->as_choice2);
-    EXPECT_FALSE(obj->as_choice1->as_string);
-    ASSERT_TRUE(obj->as_choice1->as_boolean);
-    EXPECT_TRUE(*obj->as_choice1->as_boolean);
-
-    EXPECT_TRUE(base::Value::Equals(value.get(), obj->ToValue().get()));
-  }
-
-  {
-    // The double choice within the second choice.
-    scoped_ptr<base::Value> value = ReadJson("42.0");
-    scoped_ptr<NestedChoice> obj = NestedChoice::FromValue(*value);
-
-    ASSERT_TRUE(obj);
-    EXPECT_FALSE(obj->as_integer);
-    EXPECT_FALSE(obj->as_choice1);
-    ASSERT_TRUE(obj->as_choice2);
-    ASSERT_TRUE(obj->as_choice2->as_double);
-    EXPECT_FALSE(obj->as_choice2->as_choice_type);
-    EXPECT_FALSE(obj->as_choice2->as_choice_types);
-    EXPECT_EQ(42.0, *obj->as_choice2->as_double);
-
-    EXPECT_TRUE(base::Value::Equals(value.get(), obj->ToValue().get()));
-  }
-
-  {
-    // The ChoiceType choice within the second choice.
-    scoped_ptr<base::Value> value = ReadJson(
-        "{\"integers\": [1, 2], \"strings\": \"foo\"}");
-    scoped_ptr<NestedChoice> obj = NestedChoice::FromValue(*value);
-
-    ASSERT_TRUE(obj);
-    EXPECT_FALSE(obj->as_integer);
-    EXPECT_FALSE(obj->as_choice1);
-    ASSERT_TRUE(obj->as_choice2);
-    EXPECT_FALSE(obj->as_choice2->as_double);
-    ASSERT_TRUE(obj->as_choice2->as_choice_type);
-    EXPECT_FALSE(obj->as_choice2->as_choice_types);
-    {
-      ChoiceType* choice_type = obj->as_choice2->as_choice_type.get();
-      ASSERT_TRUE(choice_type->integers.as_integers);
-      EXPECT_FALSE(choice_type->integers.as_integer);
-      EXPECT_EQ(Vector(1, 2), *choice_type->integers.as_integers);
-      ASSERT_TRUE(choice_type->strings);
-      EXPECT_FALSE(choice_type->strings->as_strings);
-      ASSERT_TRUE(choice_type->strings->as_string);
-      EXPECT_EQ("foo", *choice_type->strings->as_string);
-    }
-
-    EXPECT_TRUE(base::Value::Equals(value.get(), obj->ToValue().get()));
-  }
-
-  {
-    // The array of ChoiceTypes within the second choice.
-    scoped_ptr<base::Value> value = ReadJson(
-        "["
-        "  {\"integers\": [1, 2], \"strings\": \"foo\"},"
-        "  {\"integers\": 3, \"strings\": [\"bar\", \"baz\"]}"
-        "]");
-    scoped_ptr<NestedChoice> obj = NestedChoice::FromValue(*value);
-
-    ASSERT_TRUE(obj);
-    EXPECT_FALSE(obj->as_integer);
-    EXPECT_FALSE(obj->as_choice1);
-    ASSERT_TRUE(obj->as_choice2);
-    EXPECT_FALSE(obj->as_choice2->as_double);
-    EXPECT_FALSE(obj->as_choice2->as_choice_type);
-    ASSERT_TRUE(obj->as_choice2->as_choice_types);
-    {
-      std::vector<linked_ptr<ChoiceType> >* choice_types =
-          obj->as_choice2->as_choice_types.get();
-      // Bleh too much effort to test everything.
-      ASSERT_EQ(2u, choice_types->size());
-    }
-
-    EXPECT_TRUE(base::Value::Equals(value.get(), obj->ToValue().get()));
-  }
-}
-
-}  // namespace
diff --git a/tools/json_schema_compiler/test/content_settings.json b/tools/json_schema_compiler/test/content_settings.json
deleted file mode 100644
index 6fac436..0000000
--- a/tools/json_schema_compiler/test/content_settings.json
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright (c) 2012 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.
-
-[
-  {
-    "namespace": "contentSettings",
-    "description": "The contentSettings API.",
-    "types": [
-      {
-        "id": "ResourceIdentifier",
-        "type": "object",
-        "properties": {
-          "id": {
-            "type": "string",
-            "description": "The resource identifier for the given content type."
-          },
-          "description": {
-            "type": "string",
-            "optional": true,
-            "description": "A human readable description of the resource."
-          }
-        },
-        "description": "The only content type using resource identifiers is <a href=\"contentSettings.html#property-plugins\"><var>plugins</var></a>. For more information, see <a href=\"contentSettings.html#resource-identifiers\">Resource Identifiers</a>."
-      },
-      {
-        "id": "ContentSetting",
-        "type": "object",
-        "functions": [
-          {
-            "name": "clear",
-            "type": "function",
-            "description": "Clear all content setting rules set by this extension.",
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "properties": {
-                  "scope": {
-                    "type": "string",
-                    "enum": ["regular", "incognito_session_only"],
-                    "optional": true,
-                    "description": "Where to set the setting (default: regular). One of<br><var>regular</var>: setting for regular profile (which is inherited by the incognito profile if not overridden elsewhere),<br><var>incognito_session_only</var>: setting for incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular settings)."
-                  }
-                }
-              },
-              {
-                "type": "function",
-                "name": "callback",
-                "optional": true,
-                "parameters": []
-              }
-            ]
-          },
-          {
-            "name": "get",
-            "type": "function",
-            "description": "Gets the current content setting for a given pair of URLs.",
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "properties": {
-                  "primaryUrl": {
-                    "type": "string",
-                    "description": "The primary URL for which the content setting should be retrieved. Note that the meaning of a primary URL depends on the content type."
-                  },
-                  "secondaryUrl": {
-                    "type": "string",
-                    "description": "The secondary URL for which the content setting should be retrieved. Defaults to the primary URL. Note that the meaning of a secondary URL depends on the content type, and not all content types use secondary URLs.",
-                    "optional": true
-                  },
-                  "resourceIdentifier": {
-                    "$ref": "ResourceIdentifier",
-                    "optional": true,
-                    "description": "A more specific identifier of the type of content for which the settings should be retrieved."
-                  },
-                  "incognito": {
-                    "type": "boolean",
-                    "optional": true,
-                    "description": "Whether to check the content settings for an incognito session. (default false)"
-                  }
-                }
-              },
-              {
-                "type": "function",
-                "name": "callback",
-                "parameters": [
-                  {
-                    "name": "details",
-                    "type": "object",
-                    "properties": {
-                      "setting": {
-                        "type": "any",
-                        "description": "The content setting. See the description of the individual ContentSetting objects for the possible values."
-                      }
-                    }
-                  }
-                ]
-              }
-            ]
-          },
-          {
-            "name": "set",
-            "type": "function",
-            "description": "Applies a new content setting rule.",
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "properties": {
-                  "primaryPattern": {
-                    "type": "string",
-                    "description": "The pattern for the primary URL. For details on the format of a pattern, see <a href='contentSettings.html#patterns'>Content Setting Patterns</a>."
-                  },
-                  "secondaryPattern": {
-                    "type": "string",
-                    "description": "The pattern for the secondary URL. Defaults to matching all URLs. For details on the format of a pattern, see <a href='contentSettings.html#patterns'>Content Setting Patterns</a>.",
-                    "optional": true
-                  },
-                  "resourceIdentifier": {
-                    "$ref": "ResourceIdentifier",
-                    "optional": true,
-                    "description": "The resource identifier for the content type."
-                  },
-                  "setting": {
-                    "type": "any",
-                    "description": "The setting applied by this rule. See the description of the individual ContentSetting objects for the possible values."
-                  },
-                  "scope": {
-                    "type": "string",
-                    "enum": ["regular", "incognito_session_only"],
-                    "optional": true,
-                    "description": "Where to clear the setting (default: regular). One of<br><var>regular</var>: setting for regular profile (which is inherited by the incognito profile if not overridden elsewhere),<br><var>incognito_session_only</var>: setting for incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular settings)."
-                  }
-                }
-              },
-              {
-                "type": "function",
-                "name": "callback",
-                "optional": true,
-                "parameters": []
-              }
-            ]
-          },
-          {
-            "name": "getResourceIdentifiers",
-            "type": "function",
-            "description": "",
-            "parameters": [
-              {
-                "name": "callback",
-                "type": "function",
-                "parameters": [
-                  {
-                    "name": "resourceIdentifiers",
-                    "type": "array",
-                    "description": "A list of resource identifiers for this content type, or <var>undefined</var> if this content type does not use resource identifiers.",
-                    "optional": true,
-                    "items": {
-                      "$ref": "ResourceIdentifier"
-                    }
-                  }
-                ]
-              }
-            ]
-          }
-        ]
-      }
-    ],
-    "properties": {
-      "cookies": {
-        "$ref": "ContentSetting",
-        "description": "Whether to allow cookies and other local data to be set by websites. One of<br><var>allow</var>: Accept cookies,<br><var>block</var>: Block cookies,<br><var>session_only</var>: Accept cookies only for the current session. <br>Default is <var>allow</var>.<br>The primary URL is the URL representing the cookie origin. The secondary URL is the URL of the top-level frame.",
-        "value": [
-          "cookies",
-          {"type":"string", "enum": ["allow", "block", "session_only"]}
-        ]
-      },
-      "images": {
-        "$ref": "ContentSetting",
-        "description": "Whether to show images. One of<br><var>allow</var>: Show images,<br><var>block</var>: Don't show images. <br>Default is <var>allow</var>.<br>The primary URL is the main-frame URL. The secondary URL is the URL of the image.",
-        "value": [
-          "images",
-          {"type":"string", "enum": ["allow", "block"]}
-        ]
-      },
-      "javascript": {
-        "$ref": "ContentSetting",
-        "description": "Whether to run JavaScript. One of<br><var>allow</var>: Run JavaScript,<br><var>block</var>: Don't run JavaScript. <br>Default is <var>allow</var>.<br>The primary URL is the main-frame URL. The secondary URL is not used.",
-        "value": [
-          "javascript",
-          {"type":"string", "enum": ["allow", "block"]}
-        ]
-      },
-      "plugins": {
-        "$ref": "ContentSetting",
-        "description": "Whether to run plug-ins. One of<br><var>allow</var>: Run plug-ins automatically,<br><var>block</var>: Don't run plug-ins automatically. <br>Default is <var>allow</var>.<br>The primary URL is the main-frame URL. The secondary URL is not used.",
-        "value": [
-          "plugins",
-          {"type":"string", "enum": ["allow", "block"]}
-        ]
-      },
-      "popups": {
-        "$ref": "ContentSetting",
-        "description": "Whether to allow sites to show pop-ups. One of<br><var>allow</var>: Allow sites to show pop-ups,<br><var>block</var>: Don't allow sites to show pop-ups. <br>Default is <var>block</var>.<br>The primary URL is the main-frame URL. The secondary URL is not used.",
-        "value": [
-          "popups",
-          {"type":"string", "enum": ["allow", "block"]}
-        ]
-      },
-      "notifications": {
-        "$ref": "ContentSetting",
-        "description": "Whether to allow sites to show desktop notifications. One of<br><var>allow</var>: Allow sites to show desktop notifications,<br><var>block</var>: Don't allow sites to show desktop notifications,<br><var>ask</var>: Ask when a site wants to show desktop notifications. <br>Default is <var>ask</var>.<br>The primary URL is the main-frame URL. The secondary URL is not used.",
-        "value": [
-          "notifications",
-          {"type":"string", "enum": ["allow", "block", "ask"]}
-        ]
-      }
-    }
-  }
-]
diff --git a/tools/json_schema_compiler/test/crossref.json b/tools/json_schema_compiler/test/crossref.json
deleted file mode 100644
index a1e994b..0000000
--- a/tools/json_schema_compiler/test/crossref.json
+++ /dev/null
@@ -1,76 +0,0 @@
-[
-  {
-    "namespace": "crossref",
-    "description": "The crossref API.",
-    "dependencies": ["simple_api"],
-    "types": [
-      {
-        "id": "CrossrefType",
-        "type": "object",
-        "properties": {
-          "testType": {
-            "$ref": "simple_api.TestType",
-            "optional": true
-          }
-        }
-      }
-    ],
-    "functions": [
-      {
-        "name": "testTypeOptionalParam",
-        "type": "function",
-        "description": "Takes TestType as a param.",
-        "parameters": [
-          {
-            "name": "testType",
-            "$ref": "simple_api.TestType",
-            "optional": true
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "getTestType",
-        "type": "function",
-        "description": "Return a TestType.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "result",
-                "$ref": "simple_api.TestType",
-                "description": "A TestType."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "testTypeInObject",
-        "type": "function",
-        "description": "Takes an optional object with a TestType and a bool.",
-        "parameters": [
-          {
-            "name": "paramObject",
-            "type": "object",
-            "properties": {
-              "testType": {"$ref": "simple_api.TestType", "optional": true},
-              "boolean": {"type": "boolean"}
-            }
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/crossref_unittest.cc b/tools/json_schema_compiler/test/crossref_unittest.cc
deleted file mode 100644
index 7d8879d..0000000
--- a/tools/json_schema_compiler/test/crossref_unittest.cc
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/test/simple_api.h"
-#include "tools/json_schema_compiler/test/crossref.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-using namespace test::api::crossref;
-
-namespace {
-
-static scoped_ptr<base::DictionaryValue> CreateTestTypeDictionary() {
-  base::DictionaryValue* value(new base::DictionaryValue());
-  value->SetWithoutPathExpansion("number", new base::FundamentalValue(1.1));
-  value->SetWithoutPathExpansion("integer", new base::FundamentalValue(4));
-  value->SetWithoutPathExpansion("string", new base::StringValue("bling"));
-  value->SetWithoutPathExpansion("boolean", new base::FundamentalValue(true));
-  return scoped_ptr<base::DictionaryValue>(value);
-}
-
-}  // namespace
-
-TEST(JsonSchemaCompilerCrossrefTest, CrossrefTypePopulate) {
-  scoped_ptr<CrossrefType> crossref_type(new CrossrefType());
-  scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-  value->Set("testType", CreateTestTypeDictionary().release());
-  EXPECT_TRUE(CrossrefType::Populate(*value, crossref_type.get()));
-  EXPECT_TRUE(crossref_type->test_type.get());
-  EXPECT_TRUE(CreateTestTypeDictionary()->Equals(
-        crossref_type->test_type->ToValue().get()));
-  EXPECT_TRUE(value->Equals(crossref_type->ToValue().get()));
-}
-
-TEST(JsonSchemaCompilerCrossrefTest, TestTypeOptionalParamCreate) {
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  params_value->Append(CreateTestTypeDictionary().release());
-  scoped_ptr<TestTypeOptionalParam::Params> params(
-      TestTypeOptionalParam::Params::Create(*params_value));
-  EXPECT_TRUE(params.get());
-  EXPECT_TRUE(params->test_type.get());
-  EXPECT_TRUE(
-      CreateTestTypeDictionary()->Equals(params->test_type->ToValue().get()));
-}
-
-TEST(JsonSchemaCompilerCrossrefTest, TestTypeOptionalParamFail) {
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  scoped_ptr<base::DictionaryValue> test_type_value =
-      CreateTestTypeDictionary();
-  test_type_value->RemoveWithoutPathExpansion("number", NULL);
-  params_value->Append(test_type_value.release());
-  scoped_ptr<TestTypeOptionalParam::Params> params(
-      TestTypeOptionalParam::Params::Create(*params_value));
-  EXPECT_FALSE(params.get());
-}
-
-TEST(JsonSchemaCompilerCrossrefTest, GetTestType) {
-  scoped_ptr<base::DictionaryValue> value = CreateTestTypeDictionary();
-  scoped_ptr<test::api::simple_api::TestType> test_type(
-      new test::api::simple_api::TestType());
-  EXPECT_TRUE(
-      test::api::simple_api::TestType::Populate(*value, test_type.get()));
-
-  scoped_ptr<base::ListValue> results =
-      GetTestType::Results::Create(*test_type);
-  base::DictionaryValue* result_dict = NULL;
-  results->GetDictionary(0, &result_dict);
-  EXPECT_TRUE(value->Equals(result_dict));
-}
-
-TEST(JsonSchemaCompilerCrossrefTest, TestTypeInObjectParamsCreate) {
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<base::DictionaryValue> param_object_value(
-        new base::DictionaryValue());
-    param_object_value->Set("testType", CreateTestTypeDictionary().release());
-    param_object_value->Set("boolean", new base::FundamentalValue(true));
-    params_value->Append(param_object_value.release());
-    scoped_ptr<TestTypeInObject::Params> params(
-        TestTypeInObject::Params::Create(*params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_TRUE(params->param_object.test_type.get());
-    EXPECT_TRUE(params->param_object.boolean);
-    EXPECT_TRUE(CreateTestTypeDictionary()->Equals(
-          params->param_object.test_type->ToValue().get()));
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<base::DictionaryValue> param_object_value(
-        new base::DictionaryValue());
-    param_object_value->Set("boolean", new base::FundamentalValue(true));
-    params_value->Append(param_object_value.release());
-    scoped_ptr<TestTypeInObject::Params> params(
-        TestTypeInObject::Params::Create(*params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_FALSE(params->param_object.test_type.get());
-    EXPECT_TRUE(params->param_object.boolean);
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<base::DictionaryValue> param_object_value(
-        new base::DictionaryValue());
-    param_object_value->Set("testType", new base::StringValue("invalid"));
-    param_object_value->Set("boolean", new base::FundamentalValue(true));
-    params_value->Append(param_object_value.release());
-    scoped_ptr<TestTypeInObject::Params> params(
-        TestTypeInObject::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<base::DictionaryValue> param_object_value(
-        new base::DictionaryValue());
-    param_object_value->Set("testType", CreateTestTypeDictionary().release());
-    params_value->Append(param_object_value.release());
-    scoped_ptr<TestTypeInObject::Params> params(
-        TestTypeInObject::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-}
diff --git a/tools/json_schema_compiler/test/dependency_tester.json b/tools/json_schema_compiler/test/dependency_tester.json
deleted file mode 100644
index 4845136..0000000
--- a/tools/json_schema_compiler/test/dependency_tester.json
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2012 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.
-
-[
-  {
-    "namespace": "dependencyTester",
-    "description": "An API for testing dependencies.",
-    "dependencies": [ "browserAction", "fontSettings" ],
-    "types": [],
-    "functions": [
-      {
-        "name": "setTitle",
-        "type": "function",
-        "description": "hi",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "color": {
-                "$ref": "browserAction.ColorArray"
-              },
-              "scriptCode": {
-                "$ref": "fontSettings.FakeStringType"
-              }
-            }
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/enums.json b/tools/json_schema_compiler/test/enums.json
deleted file mode 100644
index c776313..0000000
--- a/tools/json_schema_compiler/test/enums.json
+++ /dev/null
@@ -1,265 +0,0 @@
-[
-  {
-    "namespace": "enums",
-    "description": "The enums API.",
-    "types": [
-      {
-        "id": "Enumeration",
-        "type": "string",
-        "enum": ["one", "two", "three"]
-      },
-      {
-        "id": "EnumType",
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "enum": ["one", "two", "three"]
-          }
-        }
-      },
-      {
-        "id": "HasEnumeration",
-        "type": "object",
-        "properties": {
-          "enumeration": {
-            "$ref": "Enumeration"
-          },
-          "optional_enumeration": {
-            "$ref": "Enumeration",
-            "optional": true
-          }
-        }
-      },
-      {
-        "id": "InlineAndReferenceEnum",
-        "type": "object",
-        "properties": {
-          "inline_enum": {
-            "type": "string",
-            "enum": ["test1", "test2", "test3"]
-          },
-          "reference_enum": {
-            "$ref": "Enumeration"
-          }
-        }
-      },
-      {
-        "id": "OptionalEnumType",
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "enum": ["one", "two", "three"],
-            "optional": true
-          }
-        }
-      }
-    ],
-    "functions": [
-      {
-        "name": "takesEnum",
-        "type": "function",
-        "description": "Takes an enum as its parameter.",
-        "parameters": [
-          {
-            "name": "state",
-            "type": "string",
-            "enum": ["foo", "bar", "baz"]
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "takesEnumArray",
-        "type": "function",
-        "description": "Takes an enum array as its parameter.",
-        "parameters": [
-          {
-            "name": "values",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "enum": ["foo", "bar", "baz"]
-            }
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "takesEnumAsType",
-        "type": "function",
-        "description": "Takes an enum type as its parameter.",
-        "parameters": [
-          {
-            "name": "enumeration",
-            "$ref": "Enumeration"
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "takesEnumArrayAsType",
-        "type": "function",
-        "description": "Takes an enum type array as its parameter.",
-        "parameters": [
-          {
-            "name": "values",
-            "type": "array",
-            "items": {
-              "$ref": "Enumeration"
-            }
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "returnsEnum",
-        "type": "function",
-        "description": "Returns an enum through the callback",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "state",
-                "type": "string",
-                "enum": ["foo", "bar", "baz"]
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "returnsEnumAsType",
-        "type": "function",
-        "description": "Returns an enum through the callback",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "enumeration",
-                "$ref": "Enumeration"
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "returnsTwoEnums",
-        "type": "function",
-        "description": "Returns two enums through the callback",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "firstState",
-                "type": "string",
-                "enum": ["foo", "bar", "baz"]
-              },
-              {
-                "name": "secondState",
-                "type": "string",
-                "enum": ["spam", "ham", "eggs"]
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "takesOptionalEnum",
-        "type": "function",
-        "description": "Takes an enum as its parameter.",
-        "parameters": [
-          {
-            "name": "state",
-            "type": "string",
-            "enum": ["foo", "bar", "baz"],
-            "optional": true
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "takesMultipleOptionalEnums",
-        "type": "function",
-        "description": "Takes two enums as parameters.",
-        "parameters": [
-          {
-            "name": "state",
-            "type": "string",
-            "enum": ["foo", "bar", "baz"],
-            "optional": true
-          },
-          {
-            "name": "type",
-            "type": "string",
-            "enum": ["foo", "ding", "dong"],
-            "optional": true
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      }
-    ],
-    "events": [
-      {
-        "name": "onEnumFired",
-        "type": "function",
-        "description": "Fired when an enum is ready.",
-        "parameters": [
-          {
-            "name": "someEnum",
-            "type": "string",
-            "enum": ["foo", "bar", "baz"]
-          }
-        ]
-      },
-      {
-        "name": "onTwoEnumsFired",
-        "type": "function",
-        "description": "Fired when two enums are ready.",
-        "parameters": [
-          {
-            "name": "firstEnum",
-            "type": "string",
-            "enum": ["foo", "bar", "baz"]
-          },
-          {
-            "name": "secondEnum",
-            "type": "string",
-            "enum": ["spam", "ham", "eggs"]
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/enums_unittest.cc b/tools/json_schema_compiler/test/enums_unittest.cc
deleted file mode 100644
index 7f1addb..0000000
--- a/tools/json_schema_compiler/test/enums_unittest.cc
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/test/enums.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/json_schema_compiler/test/test_util.h"
-
-using namespace test::api::enums;
-using json_schema_compiler::test_util::List;
-
-TEST(JsonSchemaCompilerEnumsTest, EnumTypePopulate) {
-  {
-    EnumType enum_type;
-    base::DictionaryValue value;
-    value.Set("type", new base::StringValue("one"));
-    EXPECT_TRUE(EnumType::Populate(value, &enum_type));
-    EXPECT_EQ(EnumType::TYPE_ONE, enum_type.type);
-    EXPECT_TRUE(value.Equals(enum_type.ToValue().get()));
-  }
-  {
-    EnumType enum_type;
-    base::DictionaryValue value;
-    value.Set("type", new base::StringValue("invalid"));
-    EXPECT_FALSE(EnumType::Populate(value, &enum_type));
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, EnumsAsTypes) {
-  {
-    base::ListValue args;
-    args.Append(new base::StringValue("one"));
-
-    scoped_ptr<TakesEnumAsType::Params> params(
-        TakesEnumAsType::Params::Create(args));
-    ASSERT_TRUE(params.get());
-    EXPECT_EQ(ENUMERATION_ONE, params->enumeration);
-
-    EXPECT_TRUE(args.Equals(ReturnsEnumAsType::Results::Create(
-        ENUMERATION_ONE).get()));
-  }
-  {
-    HasEnumeration enumeration;
-    EXPECT_EQ(ENUMERATION_NONE, enumeration.enumeration);
-    EXPECT_EQ(ENUMERATION_NONE, enumeration.optional_enumeration);
-  }
-  {
-    HasEnumeration enumeration;
-    base::DictionaryValue value;
-    ASSERT_FALSE(HasEnumeration::Populate(value, &enumeration));
-
-    value.Set("enumeration", new base::StringValue("one"));
-    ASSERT_TRUE(HasEnumeration::Populate(value, &enumeration));
-    EXPECT_TRUE(value.Equals(enumeration.ToValue().get()));
-
-    value.Set("optional_enumeration", new base::StringValue("two"));
-    ASSERT_TRUE(HasEnumeration::Populate(value, &enumeration));
-    EXPECT_TRUE(value.Equals(enumeration.ToValue().get()));
-  }
-  {
-    InlineAndReferenceEnum enumeration;
-    base::DictionaryValue value;
-    ASSERT_FALSE(InlineAndReferenceEnum::Populate(value, &enumeration));
-
-    value.Set("inline_enum", new base::StringValue("test2"));
-    ASSERT_FALSE(InlineAndReferenceEnum::Populate(value, &enumeration));
-
-    value.Set("reference_enum", new base::StringValue("one"));
-    ASSERT_TRUE(InlineAndReferenceEnum::Populate(value, &enumeration));
-    EXPECT_TRUE(value.Equals(enumeration.ToValue().get()));
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, EnumsArrayAsType) {
-  {
-    base::ListValue params_value;
-    params_value.Append(List(new base::StringValue("one"),
-                             new base::StringValue("two")).release());
-    scoped_ptr<TakesEnumArrayAsType::Params> params(
-        TakesEnumArrayAsType::Params::Create(params_value));
-    ASSERT_TRUE(params);
-    EXPECT_EQ(2U, params->values.size());
-    EXPECT_EQ(ENUMERATION_ONE, params->values[0]);
-    EXPECT_EQ(ENUMERATION_TWO, params->values[1]);
-  }
-  {
-    base::ListValue params_value;
-    params_value.Append(List(new base::StringValue("invalid")).release());
-    scoped_ptr<TakesEnumArrayAsType::Params> params(
-        TakesEnumArrayAsType::Params::Create(params_value));
-    EXPECT_FALSE(params);
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, ReturnsEnumCreate) {
-  {
-    ReturnsEnum::Results::State state = ReturnsEnum::Results::STATE_FOO;
-    scoped_ptr<base::Value> result(
-        new base::StringValue(ReturnsEnum::Results::ToString(state)));
-    scoped_ptr<base::Value> expected(new base::StringValue("foo"));
-    EXPECT_TRUE(result->Equals(expected.get()));
-  }
-  {
-    ReturnsEnum::Results::State state = ReturnsEnum::Results::STATE_FOO;
-    scoped_ptr<base::ListValue> results = ReturnsEnum::Results::Create(state);
-    base::ListValue expected;
-    expected.Append(new base::StringValue("foo"));
-    EXPECT_TRUE(results->Equals(&expected));
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, ReturnsTwoEnumsCreate) {
-  {
-    scoped_ptr<base::ListValue> results = ReturnsTwoEnums::Results::Create(
-        ReturnsTwoEnums::Results::FIRST_STATE_FOO,
-        ReturnsTwoEnums::Results::SECOND_STATE_HAM);
-    base::ListValue expected;
-    expected.Append(new base::StringValue("foo"));
-    expected.Append(new base::StringValue("ham"));
-    EXPECT_TRUE(results->Equals(&expected));
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, OptionalEnumTypePopulate) {
-  {
-    OptionalEnumType enum_type;
-    base::DictionaryValue value;
-    value.Set("type", new base::StringValue("two"));
-    EXPECT_TRUE(OptionalEnumType::Populate(value, &enum_type));
-    EXPECT_EQ(OptionalEnumType::TYPE_TWO, enum_type.type);
-    EXPECT_TRUE(value.Equals(enum_type.ToValue().get()));
-  }
-  {
-    OptionalEnumType enum_type;
-    base::DictionaryValue value;
-    EXPECT_TRUE(OptionalEnumType::Populate(value, &enum_type));
-    EXPECT_EQ(OptionalEnumType::TYPE_NONE, enum_type.type);
-    EXPECT_TRUE(value.Equals(enum_type.ToValue().get()));
-  }
-  {
-    OptionalEnumType enum_type;
-    base::DictionaryValue value;
-    value.Set("type", new base::StringValue("invalid"));
-    EXPECT_FALSE(OptionalEnumType::Populate(value, &enum_type));
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, TakesEnumParamsCreate) {
-  {
-    base::ListValue params_value;
-    params_value.Append(new base::StringValue("baz"));
-    scoped_ptr<TakesEnum::Params> params(
-        TakesEnum::Params::Create(params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_EQ(TakesEnum::Params::STATE_BAZ, params->state);
-  }
-  {
-    base::ListValue params_value;
-    params_value.Append(new base::StringValue("invalid"));
-    scoped_ptr<TakesEnum::Params> params(
-        TakesEnum::Params::Create(params_value));
-    EXPECT_FALSE(params.get());
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, TakesEnumArrayParamsCreate) {
-  {
-    base::ListValue params_value;
-    params_value.Append(List(new base::StringValue("foo"),
-                             new base::StringValue("bar")).release());
-    scoped_ptr<TakesEnumArray::Params> params(
-        TakesEnumArray::Params::Create(params_value));
-    ASSERT_TRUE(params);
-    EXPECT_EQ(2U, params->values.size());
-    EXPECT_EQ(TakesEnumArray::Params::VALUES_TYPE_FOO, params->values[0]);
-    EXPECT_EQ(TakesEnumArray::Params::VALUES_TYPE_BAR, params->values[1]);
-  }
-  {
-    base::ListValue params_value;
-    params_value.Append(List(new base::StringValue("invalid")).release());
-    scoped_ptr<TakesEnumArray::Params> params(
-        TakesEnumArray::Params::Create(params_value));
-    EXPECT_FALSE(params);
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, TakesOptionalEnumParamsCreate) {
-  {
-    base::ListValue params_value;
-    params_value.Append(new base::StringValue("baz"));
-    scoped_ptr<TakesOptionalEnum::Params> params(
-        TakesOptionalEnum::Params::Create(params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_EQ(TakesOptionalEnum::Params::STATE_BAZ, params->state);
-  }
-  {
-    base::ListValue params_value;
-    scoped_ptr<TakesOptionalEnum::Params> params(
-        TakesOptionalEnum::Params::Create(params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_EQ(TakesOptionalEnum::Params::STATE_NONE, params->state);
-  }
-  {
-    base::ListValue params_value;
-    params_value.Append(new base::StringValue("invalid"));
-    scoped_ptr<TakesOptionalEnum::Params> params(
-        TakesOptionalEnum::Params::Create(params_value));
-    EXPECT_FALSE(params.get());
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, TakesMultipleOptionalEnumsParamsCreate) {
-  {
-    base::ListValue params_value;
-    params_value.Append(new base::StringValue("foo"));
-    params_value.Append(new base::StringValue("foo"));
-    scoped_ptr<TakesMultipleOptionalEnums::Params> params(
-        TakesMultipleOptionalEnums::Params::Create(params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_EQ(TakesMultipleOptionalEnums::Params::STATE_FOO, params->state);
-    EXPECT_EQ(TakesMultipleOptionalEnums::Params::TYPE_FOO, params->type);
-  }
-  {
-    base::ListValue params_value;
-    params_value.Append(new base::StringValue("foo"));
-    scoped_ptr<TakesMultipleOptionalEnums::Params> params(
-        TakesMultipleOptionalEnums::Params::Create(params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_EQ(TakesMultipleOptionalEnums::Params::STATE_FOO, params->state);
-    EXPECT_EQ(TakesMultipleOptionalEnums::Params::TYPE_NONE, params->type);
-  }
-  {
-    base::ListValue params_value;
-    scoped_ptr<TakesMultipleOptionalEnums::Params> params(
-        TakesMultipleOptionalEnums::Params::Create(params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_EQ(TakesMultipleOptionalEnums::Params::STATE_NONE, params->state);
-    EXPECT_EQ(TakesMultipleOptionalEnums::Params::TYPE_NONE, params->type);
-  }
-  {
-    base::ListValue params_value;
-    params_value.Append(new base::StringValue("baz"));
-    params_value.Append(new base::StringValue("invalid"));
-    scoped_ptr<TakesMultipleOptionalEnums::Params> params(
-        TakesMultipleOptionalEnums::Params::Create(params_value));
-    EXPECT_FALSE(params.get());
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, OnEnumFiredCreate) {
-  {
-    OnEnumFired::SomeEnum some_enum = OnEnumFired::SOME_ENUM_FOO;
-    scoped_ptr<base::Value> result(
-        new base::StringValue(OnEnumFired::ToString(some_enum)));
-    scoped_ptr<base::Value> expected(new base::StringValue("foo"));
-    EXPECT_TRUE(result->Equals(expected.get()));
-  }
-  {
-    OnEnumFired::SomeEnum some_enum = OnEnumFired::SOME_ENUM_FOO;
-    scoped_ptr<base::ListValue> results(OnEnumFired::Create(some_enum));
-    base::ListValue expected;
-    expected.Append(new base::StringValue("foo"));
-    EXPECT_TRUE(results->Equals(&expected));
-  }
-}
-
-TEST(JsonSchemaCompilerEnumsTest, OnTwoEnumsFiredCreate) {
-  {
-    scoped_ptr<base::Value> results(OnTwoEnumsFired::Create(
-        OnTwoEnumsFired::FIRST_ENUM_FOO,
-        OnTwoEnumsFired::SECOND_ENUM_HAM));
-    base::ListValue expected;
-    expected.Append(new base::StringValue("foo"));
-    expected.Append(new base::StringValue("ham"));
-    EXPECT_TRUE(results->Equals(&expected));
-  }
-}
diff --git a/tools/json_schema_compiler/test/error_generation.json b/tools/json_schema_compiler/test/error_generation.json
deleted file mode 100644
index f90ef6e..0000000
--- a/tools/json_schema_compiler/test/error_generation.json
+++ /dev/null
@@ -1,152 +0,0 @@
-[
-  {
-    "namespace": "error_generation",
-    "description": "Generates ALL the errors.",
-    "compiler_options": {
-      "generate_error_messages": true
-    },
-    "types": [
-      {
-        "id": "TestType",
-        "type": "object",
-        "properties": {
-          "string": {
-            "type": "string",
-            "description": "Some string."
-          }
-        }
-      },
-      {
-        "id": "OptionalTestType",
-        "type": "object",
-        "properties": {
-          "string": {
-            "type": "string",
-            "description": "Some string.",
-            "optional": true
-          }
-        }
-      },
-      {
-        "id": "ChoiceType",
-        "type": "object",
-        "properties": {
-          "integers": {
-            "choices": [
-               {"type": "array", "items": {"type": "integer", "minimum": 0}},
-               {"type": "integer"}
-            ]
-          }
-        }
-      },
-      {
-        "id": "OptionalChoiceType",
-        "type": "object",
-        "properties": {
-          "integers": {
-            "choices": [
-               {"type": "array", "items": {"type": "integer", "minimum": 0}},
-               {"type": "integer"}
-            ],
-            "optional": true
-          }
-        }
-      },
-      {
-        "id": "ObjectType",
-        "type": "object",
-        "properties": {
-          "otherType": {
-            "$ref": "error_generation.TestType",
-            "optional": true
-          }
-        }
-      },
-      {
-        "id": "Enumeration",
-        "type": "string",
-        "enum": ["one", "two", "three"]
-      },
-      {
-        "id": "HasEnumeration",
-        "type": "object",
-        "properties": {
-          "enumeration": {
-            "$ref": "Enumeration"
-          }
-        }
-      },
-      {
-        "id": "BinaryData",
-        "type": "object",
-        "properties": {
-          "data": {
-            "type" : "binary"
-          }
-        }
-      },
-      {
-        "id": "OptionalBinaryData",
-        "type": "object",
-        "properties": {
-          "data": {
-            "type" : "binary",
-            "optional": true
-          }
-        }
-      },
-      {
-        "id": "ArrayObject",
-        "type": "object",
-        "properties": {
-          "TheArray": {
-            "type": "array",
-            "items": {"type": "string"},
-            "optional": true,
-            "description": "Expecting a list?"
-          }
-        }
-      }
-    ],
-    "functions": [
-      {
-        "name": "testString",
-        "type": "function",
-        "description": "Takes a string. Or not.",
-        "parameters": [
-          {
-            "name": "str",
-            "type": "string",
-            "optional": true
-          }
-        ]
-      },
-      {
-        "name": "testFunction",
-        "type": "function",
-        "description": "Specifies a number of parameters.",
-        "parameters": [
-          {
-            "name": "num",
-            "type": "integer"
-          }
-        ]
-      },
-      {
-        "name": "testTypeInObject",
-        "type": "function",
-        "description": "Takes a TestType.",
-        "parameters": [
-          {
-            "name": "paramObject",
-            "type": "object",
-            "properties": {
-              "testType": {"$ref": "error_generation.TestType", "optional": true},
-              "boolean": {"type": "boolean"}
-            }
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/error_generation_unittest.cc b/tools/json_schema_compiler/test/error_generation_unittest.cc
deleted file mode 100644
index 42f9576..0000000
--- a/tools/json_schema_compiler/test/error_generation_unittest.cc
+++ /dev/null
@@ -1,336 +0,0 @@
-// Copyright 2013 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.
-
-#include "tools/json_schema_compiler/test/error_generation.h"
-
-#include "base/json/json_writer.h"
-#include "base/strings/utf_string_conversions.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/json_schema_compiler/test/test_util.h"
-
-using namespace test::api::error_generation;
-using base::FundamentalValue;
-using json_schema_compiler::test_util::Dictionary;
-using json_schema_compiler::test_util::List;
-
-template <typename T>
-base::string16 GetPopulateError(const base::Value& value) {
-  base::string16 error;
-  T test_type;
-  T::Populate(value, &test_type, &error);
-  return error;
-}
-
-testing::AssertionResult EqualsUtf16(const std::string& expected,
-                                     const base::string16& actual) {
-  if (base::ASCIIToUTF16(expected) != actual)
-    return testing::AssertionFailure() << expected << " != " << actual;
-  return testing::AssertionSuccess();
-}
-
-// GenerateTypePopulate errors
-
-TEST(JsonSchemaCompilerErrorTest, RequiredPropertyPopulate) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "string", new base::StringValue("bling"));
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<TestType>(*value)));
-  }
-  {
-    scoped_ptr<base::BinaryValue> value(new base::BinaryValue());
-    EXPECT_TRUE(EqualsUtf16("expected dictionary, got binary",
-        GetPopulateError<TestType>(*value)));
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, UnexpectedTypePopulation) {
-  {
-    scoped_ptr<base::ListValue> value(new base::ListValue());
-    EXPECT_TRUE(EqualsUtf16("",
-        GetPopulateError<ChoiceType::Integers>(*value)));
-  }
-  {
-    scoped_ptr<base::BinaryValue> value(new base::BinaryValue());
-    EXPECT_TRUE(EqualsUtf16("expected integers or integer, got binary",
-        GetPopulateError<ChoiceType::Integers>(*value)));
-  }
-}
-
-// GenerateTypePopulateProperty errors
-
-TEST(JsonSchemaCompilerErrorTest, TypeIsRequired) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "integers", new FundamentalValue(5));
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<ChoiceType>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-    EXPECT_TRUE(EqualsUtf16("'integers' is required",
-        GetPopulateError<ChoiceType>(*value)));
-  }
-}
-
-// GenerateParamsCheck errors
-
-TEST(JsonSchemaCompilerErrorTest, TooManyParameters) {
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        new FundamentalValue(5));
-    base::string16 error;
-    EXPECT_TRUE(TestFunction::Params::Create(*params_value, &error));
-  }
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        new FundamentalValue(5),
-        new FundamentalValue(5));
-    base::string16 error;
-    EXPECT_FALSE(TestFunction::Params::Create(*params_value, &error));
-    EXPECT_TRUE(EqualsUtf16("expected 1 arguments, got 2", error));
-  }
-}
-
-// GenerateFunctionParamsCreate errors
-
-TEST(JsonSchemaCompilerErrorTest, ParamIsRequired) {
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        new FundamentalValue(5));
-    base::string16 error;
-    EXPECT_TRUE(TestFunction::Params::Create(*params_value, &error));
-  }
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        base::Value::CreateNullValue());
-    base::string16 error;
-    EXPECT_FALSE(TestFunction::Params::Create(*params_value, &error));
-    EXPECT_TRUE(EqualsUtf16("'num' is required", error));
-  }
-}
-
-// GeneratePopulateVariableFromValue errors
-
-TEST(JsonSchemaCompilerErrorTest, WrongPropertyValueType) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-      "string", new base::StringValue("yes"));
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<TestType>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "string", new FundamentalValue(1.1));
-    EXPECT_TRUE(EqualsUtf16("'string': expected string, got number",
-        GetPopulateError<TestType>(*value)));
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, WrongParameterCreationType) {
-  {
-    base::string16 error;
-    scoped_ptr<base::ListValue> params_value = List(
-        new base::StringValue("Yeah!"));
-    EXPECT_TRUE(TestString::Params::Create(*params_value, &error));
-  }
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        new FundamentalValue(5));
-    base::string16 error;
-    EXPECT_FALSE(TestTypeInObject::Params::Create(*params_value, &error));
-    EXPECT_TRUE(EqualsUtf16("'paramObject': expected dictionary, got integer",
-        error));
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, WrongTypeValueType) {
-  {
-    scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<ObjectType>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "otherType", new FundamentalValue(1.1));
-    ObjectType out;
-    base::string16 error;
-    EXPECT_TRUE(ObjectType::Populate(*value, &out, &error));
-    EXPECT_TRUE(EqualsUtf16("'otherType': expected dictionary, got number",
-        error));
-    EXPECT_EQ(NULL, out.other_type.get());
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, UnableToPopulateArray) {
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        new FundamentalValue(5));
-    EXPECT_TRUE(EqualsUtf16("",
-        GetPopulateError<ChoiceType::Integers>(*params_value)));
-  }
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        new FundamentalValue(5),
-        new FundamentalValue(false));
-    EXPECT_TRUE(EqualsUtf16("unable to populate array 'integers'",
-        GetPopulateError<ChoiceType::Integers>(*params_value)));
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, BinaryTypeExpected) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "data", new base::BinaryValue());
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<BinaryData>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "data", new FundamentalValue(1.1));
-    EXPECT_TRUE(EqualsUtf16("'data': expected binary, got number",
-        GetPopulateError<BinaryData>(*value)));
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, ListExpected) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "TheArray", new base::ListValue());
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<ArrayObject>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "TheArray", new FundamentalValue(5));
-    EXPECT_TRUE(EqualsUtf16("'TheArray': expected list, got integer",
-        GetPopulateError<ArrayObject>(*value)));
-  }
-}
-
-// GenerateStringToEnumConversion errors
-
-TEST(JsonSchemaCompilerErrorTest, BadEnumValue) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "enumeration", new base::StringValue("one"));
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<HasEnumeration>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "enumeration", new base::StringValue("bad sauce"));
-    EXPECT_TRUE(EqualsUtf16("'Enumeration': expected \"one\" or \"two\" "
-              "or \"three\", got \"bad sauce\"",
-        GetPopulateError<HasEnumeration>(*value)));
-  }
-}
-
-// Warn but don't fail out errors
-
-TEST(JsonSchemaCompilerErrorTest, WarnOnOptionalFailure) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "string", new base::StringValue("bling"));
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<OptionalTestType>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "string", new base::FundamentalValue(1));
-
-    OptionalTestType out;
-    base::string16 error;
-    EXPECT_TRUE(OptionalTestType::Populate(*value, &out, &error));
-    EXPECT_TRUE(EqualsUtf16("'string': expected string, got integer",
-        error));
-    EXPECT_EQ(NULL, out.string.get());
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, OptionalBinaryTypeFailure) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "data", new base::BinaryValue());
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<OptionalBinaryData>(*value)));
-  }
-  {
-    // There's a bug with silent failures if the key doesn't exist.
-    scoped_ptr<base::DictionaryValue> value = Dictionary("data",
-        new base::FundamentalValue(1));
-
-    OptionalBinaryData out;
-    base::string16 error;
-    EXPECT_TRUE(OptionalBinaryData::Populate(*value, &out, &error));
-    EXPECT_TRUE(EqualsUtf16("'data': expected binary, got integer",
-        error));
-    EXPECT_EQ(NULL, out.data.get());
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, OptionalArrayTypeFailure) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "TheArray", new base::ListValue());
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<ArrayObject>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "TheArray", new FundamentalValue(5));
-    ArrayObject out;
-    base::string16 error;
-    EXPECT_TRUE(ArrayObject::Populate(*value, &out, &error));
-    EXPECT_TRUE(EqualsUtf16("'TheArray': expected list, got integer",
-        error));
-    EXPECT_EQ(NULL, out.the_array.get());
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, OptionalUnableToPopulateArray) {
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        new FundamentalValue(5));
-    EXPECT_TRUE(EqualsUtf16("",
-        GetPopulateError<OptionalChoiceType::Integers>(*params_value)));
-  }
-  {
-    scoped_ptr<base::ListValue> params_value = List(
-        new FundamentalValue(5),
-        new FundamentalValue(false));
-    OptionalChoiceType::Integers out;
-    base::string16 error;
-    EXPECT_TRUE(OptionalChoiceType::Integers::Populate(*params_value, &out,
-        &error));
-    EXPECT_TRUE(EqualsUtf16("unable to populate array 'integers'",
-        error));
-    EXPECT_EQ(NULL, out.as_integer.get());
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, MultiplePopulationErrors) {
-  {
-
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "TheArray", new FundamentalValue(5));
-    ArrayObject out;
-    base::string16 error;
-    EXPECT_TRUE(ArrayObject::Populate(*value, &out, &error));
-    EXPECT_TRUE(EqualsUtf16("'TheArray': expected list, got integer",
-        error));
-    EXPECT_EQ(NULL, out.the_array.get());
-
-    EXPECT_TRUE(ArrayObject::Populate(*value, &out, &error));
-    EXPECT_TRUE(EqualsUtf16("'TheArray': expected list, got integer; "
-        "'TheArray': expected list, got integer",
-        error));
-    EXPECT_EQ(NULL, out.the_array.get());
-  }
-}
-
-TEST(JsonSchemaCompilerErrorTest, TooManyKeys) {
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-      "string", new base::StringValue("yes"));
-    EXPECT_TRUE(EqualsUtf16("", GetPopulateError<TestType>(*value)));
-  }
-  {
-    scoped_ptr<base::DictionaryValue> value = Dictionary(
-        "string", new base::StringValue("yes"),
-        "ohno", new base::StringValue("many values"));
-    EXPECT_TRUE(EqualsUtf16("found unexpected key 'ohno'",
-        GetPopulateError<TestType>(*value)));
-  }
-}
diff --git a/tools/json_schema_compiler/test/features_unittest.cc b/tools/json_schema_compiler/test/features_unittest.cc
deleted file mode 100644
index c4f1f12..0000000
--- a/tools/json_schema_compiler/test/features_unittest.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2013 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.
-
-#include <string>
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/json_schema_compiler/test/test_features.h"
-
-using test::features::TestFeatures;
-
-TEST(FeaturesGeneratorTest, FromString) {
-  TestFeatures test_features;
-  EXPECT_EQ(TestFeatures::kSimple, test_features.FromString("simple"));
-  EXPECT_EQ(TestFeatures::kComplex, test_features.FromString("complex"));
-}
-
-TEST(FeaturesGeneratorTest, ToString) {
-  TestFeatures test_features;
-  EXPECT_STREQ("simple", test_features.ToString(TestFeatures::kSimple));
-  EXPECT_STREQ("complex", test_features.ToString(TestFeatures::kComplex));
-}
diff --git a/tools/json_schema_compiler/test/font_settings.json b/tools/json_schema_compiler/test/font_settings.json
deleted file mode 100644
index 01c49f7..0000000
--- a/tools/json_schema_compiler/test/font_settings.json
+++ /dev/null
@@ -1,551 +0,0 @@
-// Copyright (c) 2012 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.
-
-[
-  {
-    "namespace": "fontSettings",
-    "description": "The fontSettings API.",
-    "types": [
-      {
-        "id": "FontName",
-        "type": "object",
-        "description": "Represents a font name.",
-        "properties": {
-          "fontName": {
-            "type": "string",
-            "description": "The font name."
-          },
-          "localizedName": {
-            "type": "string",
-            "description": "The font name localized for the current locale."
-          }
-        }
-      },
-      {
-        "id": "FakeStringType",
-        "type": "string",
-        "description": "Used to test a string type."
-      },
-      {
-        "id": "GenericFamily",
-        "type": "string",
-        "enum": ["standard", "sansserif", "serif", "fixed", "cursive", "fantasy"],
-        "description": "A CSS generic font family."
-      },
-      {
-        "id": "LevelOfControl",
-        "description": "One of<br><var>not_controllable</var>: cannot be controlled by any extension<br><var>controlled_by_other_extensions</var>: controlled by extensions with higher precedence<br><var>controllable_by_this_extension</var>: can be controlled by this extension<br><var>controlled_by_this_extension</var>: controlled by this extension",
-        "type": "string",
-        "enum": ["not_controllable", "controlled_by_other_extensions", "controllable_by_this_extension", "controlled_by_this_extension"]
-      }
-    ],
-    "functions": [
-      {
-        "name": "clearFont",
-        "description": "Clears the font set by this extension, if any.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "script": {
-                "$ref": "FakeStringType",
-                "description": "The script for which the font should be cleared. If omitted, the global script font setting is cleared.",
-                "optional": true
-              },
-              "genericFamily": {
-                "$ref": "GenericFamily",
-                "description": "The generic font family for which the font should be cleared."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "getFont",
-        "description": "Gets the font for a given script and generic font family.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "script": {
-                "$ref": "FakeStringType",
-                "description": "The script for which the font should be retrieved. If omitted, the font for the global script is retrieved.",
-                "optional": true
-              },
-              "genericFamily": {
-                "$ref": "GenericFamily",
-                "description": "The generic font family for which the font should be retrieved."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "properties": {
-                  "fontName": {
-                    "type": "string",
-                    "description": "The font name. Rather than the literal font name preference value, this may be the name of the font that the system resolves the preference value to. The empty string signifies fallback to the global script font setting."
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "setFont",
-        "description": "Sets the font for a given script and generic font family.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "script": {
-                "$ref": "FakeStringType",
-                "description": "The script code which the font should be set. If omitted, the font for the global script is set.",
-                "optional": true
-              },
-              "genericFamily": {
-                "$ref": "GenericFamily",
-                "description": "The generic font family for which the font should be set."
-              },
-              "fontName": {
-                "type": "string",
-                "description": "The font name. If a script is specified, the empty string means to fallback to the global script font setting."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "getFontList",
-        "description": "Gets a list of fonts on the system.",
-        "parameters": [
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "results",
-                "type": "array",
-                "items": { "$ref": "FontName" }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "clearDefaultFontSize",
-        "description": "Clears the default font size set by this extension, if any.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "optional": true,
-            "description": "This parameter is currently unused.",
-            "properties": {}
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "getDefaultFontSize",
-        "description": "Gets the default font size.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "optional": true,
-            "description": "This parameter is currently unused.",
-            "properties": {}
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "properties": {
-                  "pixelSize": {
-                    "type": "integer",
-                    "description": "The font size in pixels."
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "setDefaultFontSize",
-        "description": "Sets the default font size.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "pixelSize": {
-                "type": "integer",
-                "description": "The font size in pixels."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "clearDefaultFixedFontSize",
-        "description": "Clears the default fixed font size set by this extension, if any.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "optional": true,
-            "description": "This parameter is currently unused.",
-            "properties": {}
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "getDefaultFixedFontSize",
-        "description": "Gets the default size for fixed width fonts.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "optional": true,
-            "description": "This parameter is currently unused.",
-            "properties": {}
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "properties": {
-                  "pixelSize": {
-                    "type": "integer",
-                    "description": "The font size in pixels."
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "setDefaultFixedFontSize",
-        "description": "Sets the default size for fixed width fonts.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "pixelSize": {
-                "type": "integer",
-                "description": "The font size in pixels."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "clearMinimumFontSize",
-        "description": "Clears the minimum font size set by this extension, if any.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "optional": true,
-            "description": "This parameter is currently unused.",
-            "properties": {}
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "getMinimumFontSize",
-        "description": "Gets the minimum font size.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "optional": true,
-            "description": "This parameter is currently unused.",
-            "properties": {}
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "properties": {
-                  "pixelSize": {
-                    "type": "integer",
-                    "description": "The font size in pixels."
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "setMinimumFontSize",
-        "description": "Sets the minimum font size.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "pixelSize": {
-                "type": "integer",
-                "description": "The font size in pixels."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "clearDefaultCharacterSet",
-        "description": "Clears the default character set set by this extension, if any.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "optional": true,
-            "description": "This parameter is currently unused.",
-            "properties": {}
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "getDefaultCharacterSet",
-        "description": "Gets the default character set.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "optional": true,
-            "description": "This parameter is currently unused.",
-            "properties": {}
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "properties": {
-                  "charset": {
-                    "type": "string",
-                    "description": "The default character set, such as \"ISO-8859-1\"."
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "setDefaultCharacterSet",
-        "description": "Sets the default character set.",
-        "parameters": [
-          {
-            "name": "details",
-            "type": "object",
-            "properties": {
-              "charset": {
-                "type": "string",
-                "description": "The character set."
-              }
-            }
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "optional": true,
-            "parameters": []
-          }
-        ]
-      }
-    ],
-    "events": [
-      {
-        "name": "onFontChanged",
-        "description": "Fired when a font setting changes.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "details",
-            "properties": {
-              "fontName": { "type": "string" },
-              "script": {
-                "$ref": "FakeStringType",
-                "description": "The script code for which the font setting has changed. If omitted, the global script font setting has changed.",
-                "optional": true
-              },
-              "genericFamily": {
-                "$ref": "GenericFamily",
-                "description": "The generic font family for which the font setting has changed."
-              },
-              "levelOfControl": {
-                "$ref": "LevelOfControl",
-                "description": "The level of control this extension has over the setting."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "onDefaultFontSizeChanged",
-        "description": "Fired when the default font size setting changes.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "details",
-            "properties": {
-              "pixelSize": {
-                "type": "integer",
-                "description": "The font size in pixels."
-              },
-              "levelOfControl": {
-                "$ref": "LevelOfControl",
-                "description": "The level of control this extension has over the setting."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "onDefaultFixedFontSizeChanged",
-        "description": "Fired when the default fixed font size setting changes.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "details",
-            "properties": {
-              "pixelSize": {
-                "type": "integer",
-                "description": "The font size in pixels."
-              },
-              "levelOfControl": {
-                "$ref": "LevelOfControl",
-                "description": "The level of control this extension has over the setting."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "onMinimumFontSizeChanged",
-        "description": "Fired when the minimum font size setting changes.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "details",
-            "properties": {
-              "pixelSize": {
-                "type": "integer",
-                "description": "The font size in pixels."
-              },
-              "levelOfControl": {
-                "$ref": "LevelOfControl",
-                "description": "The level of control this extension has over the setting."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "onDefaultCharacterSetChanged",
-        "description": "Fired when the default character set setting changes.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "details",
-            "properties": {
-              "charset": {
-                "type": "string",
-                "description": "The character set."
-              },
-              "levelOfControl": {
-                "$ref": "LevelOfControl",
-                "description": "The level of control this extension has over the setting."
-              }
-            }
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/forbidden.json b/tools/json_schema_compiler/test/forbidden.json
deleted file mode 100644
index 841b0e1..0000000
--- a/tools/json_schema_compiler/test/forbidden.json
+++ /dev/null
@@ -1,40 +0,0 @@
-[
-  {
-    "namespace": "forbidden",
-    "description": "The forbidden API... Careful.",
-    "types": [],
-    "functions": [
-      {
-        "name": "forbiddenParameters",
-        "type": "function",
-        "description": "Don't do this at home. Accepts multiple choices and values",
-        "parameters": [
-          {
-            "name": "firstChoice",
-            "description": "a choice between int and array",
-            "choices": [
-              {"type": "integer", "minimum": 0},
-              {"type": "array", "items": {"type": "integer"}}
-            ]
-          },
-          {
-            "type": "string",
-            "name": "firstString"
-          },
-          {
-            "name": "secondChoice",
-            "description": "a choice between int and array",
-            "choices": [
-              {"type": "integer", "minimum": 0},
-              {"type": "array", "items": {"type": "integer"}}
-            ]
-          },
-          {
-            "type": "string",
-            "name": "secondString"
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/functions_as_parameters.json b/tools/json_schema_compiler/test/functions_as_parameters.json
deleted file mode 100644
index b948616..0000000
--- a/tools/json_schema_compiler/test/functions_as_parameters.json
+++ /dev/null
@@ -1,29 +0,0 @@
-[
-  {
-    "namespace": "functions_as_parameters",
-    "description": "The functionsAsParameters API",
-    "types": [
-      {
-        "id": "FunctionType",
-        "type": "object",
-        "properties": {
-          "event_callback": {
-            "type": "function",
-            "parameters": { }
-          }
-        }
-      },
-      {
-        "id": "OptionalFunctionType",
-        "type": "object",
-        "properties": {
-          "event_callback": {
-            "type": "function",
-            "optional": true,
-            "parameters": { }
-          }
-        }
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc b/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc
deleted file mode 100644
index ce7a2f9..0000000
--- a/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/test/functions_as_parameters.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-using namespace test::api::functions_as_parameters;
-
-TEST(JsonSchemaCompilerFunctionsAsParametersTest, PopulateRequiredFunction) {
-  // The expectation is that if any value is set for the function, then
-  // the function is "present".
-  {
-    base::DictionaryValue empty_value;
-    FunctionType out;
-    EXPECT_FALSE(FunctionType::Populate(empty_value, &out));
-  }
-  {
-    base::DictionaryValue value;
-    base::DictionaryValue function_dict;
-    value.Set("event_callback", function_dict.DeepCopy());
-    FunctionType out;
-    ASSERT_TRUE(FunctionType::Populate(value, &out));
-    EXPECT_TRUE(out.event_callback.empty());
-  }
-}
-
-TEST(JsonSchemaCompilerFunctionsAsParametersTest, RequiredFunctionToValue) {
-  {
-    base::DictionaryValue value;
-    base::DictionaryValue function_dict;
-    value.Set("event_callback", function_dict.DeepCopy());
-
-    FunctionType out;
-    ASSERT_TRUE(FunctionType::Populate(value, &out));
-    EXPECT_TRUE(value.Equals(out.ToValue().get()));
-  }
-  {
-    base::DictionaryValue value;
-    base::DictionaryValue expected_value;
-    base::DictionaryValue function_dict;
-    value.Set("event_callback", function_dict.DeepCopy());
-    expected_value.Set("event_callback", function_dict.DeepCopy());
-
-    FunctionType out;
-    ASSERT_TRUE(FunctionType::Populate(value, &out));
-    EXPECT_TRUE(expected_value.Equals(out.ToValue().get()));
-  }
-}
-
-TEST(JsonSchemaCompilerFunctionsAsParametersTest, PopulateOptionalFunction) {
-  {
-    base::DictionaryValue empty_value;
-    OptionalFunctionType out;
-    ASSERT_TRUE(OptionalFunctionType::Populate(empty_value, &out));
-    EXPECT_FALSE(out.event_callback.get());
-  }
-  {
-    base::DictionaryValue value;
-    base::DictionaryValue function_value;
-    value.Set("event_callback", function_value.DeepCopy());
-    OptionalFunctionType out;
-    ASSERT_TRUE(OptionalFunctionType::Populate(value, &out));
-    EXPECT_TRUE(out.event_callback.get());
-  }
-  {
-    base::DictionaryValue value;
-    base::DictionaryValue function_value;
-    value.Set("event_callback", function_value.DeepCopy());
-    OptionalFunctionType out;
-    ASSERT_TRUE(OptionalFunctionType::Populate(value, &out));
-    EXPECT_TRUE(out.event_callback.get());
-  }
-}
-
-TEST(JsonSchemaCompilerFunctionsAsParametersTest, OptionalFunctionToValue) {
-  {
-    base::DictionaryValue empty_value;
-    OptionalFunctionType out;
-    ASSERT_TRUE(OptionalFunctionType::Populate(empty_value, &out));
-    // event_callback should not be set in the return from ToValue.
-    EXPECT_TRUE(empty_value.Equals(out.ToValue().get()));
-  }
-  {
-    base::DictionaryValue value;
-    base::DictionaryValue function_value;
-    value.Set("event_callback", function_value.DeepCopy());
-
-    OptionalFunctionType out;
-    ASSERT_TRUE(OptionalFunctionType::Populate(value, &out));
-    EXPECT_TRUE(value.Equals(out.ToValue().get()));
-  }
-}
diff --git a/tools/json_schema_compiler/test/functions_on_types.json b/tools/json_schema_compiler/test/functions_on_types.json
deleted file mode 100644
index a20a75f..0000000
--- a/tools/json_schema_compiler/test/functions_on_types.json
+++ /dev/null
@@ -1,75 +0,0 @@
-[
-  {
-    "namespace": "functionsOnTypes",
-    "description": "The functionsOnTypes API.",
-    "types": [
-      {
-        "id": "StorageArea",
-        "type": "object",
-        "functions": [
-          {
-            "name": "get",
-            "type": "function",
-            "description": "Gets one or more items from storage.",
-            "parameters": [
-              {
-                "name": "keys",
-                "choices": [
-                  { "type": "string" },
-                  {
-                    "type": "object",
-                    "description": "Storage items to return in the callback, where the values are replaced with those from storage if they exist.",
-                    "properties": {},
-                    "additionalProperties": { "type": "any" }
-                  }
-                ],
-                "description": "A single key to get, list of keys to get, or a dictionary specifying default values (see description of the object).  An empty list or object will return an empty result object.  Pass in <code>null</code> to get the entire contents of storage.",
-                "optional": true
-              },
-              {
-                "name": "callback",
-                "type": "function",
-                "description": "Callback with storage items, or on failure (in which case lastError will be set).",
-                "parameters": [
-                  {
-                    "name": "items",
-                    "type": "object",
-                    "properties": {},
-                    "additionalProperties": { "type": "any" },
-                    "description": "Object with items in their key-value mappings."
-                  }
-                ]
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "id": "ChromeSetting",
-        "type": "object",
-        "description": "An interface which allows access to a Chrome browser setting.",
-        "functions": [
-          {
-            "name": "get",
-            "type": "function",
-            "description": "Gets the value of a setting.",
-            "parameters": [
-              {
-                "name": "details",
-                "type": "object",
-                "description": "What setting to consider.",
-                "properties": {
-                  "incognito": {
-                    "type": "boolean",
-                    "optional": true,
-                    "description": "Whether to return the setting that applies to the incognito session (default false)."
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/functions_on_types_unittest.cc b/tools/json_schema_compiler/test/functions_on_types_unittest.cc
deleted file mode 100644
index 86ce492..0000000
--- a/tools/json_schema_compiler/test/functions_on_types_unittest.cc
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "base/values.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/json_schema_compiler/test/functions_on_types.h"
-
-using namespace test::api::functions_on_types;
-
-TEST(JsonSchemaCompilerFunctionsOnTypesTest, StorageAreaGetParamsCreate) {
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<StorageArea::Get::Params> params(
-        StorageArea::Get::Params::Create(*params_value));
-    ASSERT_TRUE(params);
-    EXPECT_FALSE(params->keys);
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(new base::FundamentalValue(9));
-    scoped_ptr<StorageArea::Get::Params> params(
-        StorageArea::Get::Params::Create(*params_value));
-    EXPECT_FALSE(params);
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(new base::StringValue("test"));
-    scoped_ptr<StorageArea::Get::Params> params(
-        StorageArea::Get::Params::Create(*params_value));
-    ASSERT_TRUE(params);
-    ASSERT_TRUE(params->keys);
-    EXPECT_EQ("test", *params->keys->as_string);
-  }
-  {
-    scoped_ptr<base::DictionaryValue> keys_object_value(
-        new base::DictionaryValue());
-    keys_object_value->SetInteger("integer", 5);
-    keys_object_value->SetString("string", "string");
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(keys_object_value->DeepCopy());
-    scoped_ptr<StorageArea::Get::Params> params(
-        StorageArea::Get::Params::Create(*params_value));
-    ASSERT_TRUE(params);
-    ASSERT_TRUE(params->keys);
-    EXPECT_TRUE(keys_object_value->Equals(
-        &params->keys->as_object->additional_properties));
-  }
-}
-
-TEST(JsonSchemaCompilerFunctionsOnTypesTest, StorageAreaGetResultCreate) {
-  StorageArea::Get::Results::Items items;
-  items.additional_properties.SetDouble("asdf", 0.1);
-  items.additional_properties.SetString("sdfg", "zxcv");
-  scoped_ptr<base::ListValue> results =
-      StorageArea::Get::Results::Create(items);
-  base::DictionaryValue* item_result = NULL;
-  ASSERT_TRUE(results->GetDictionary(0, &item_result));
-  EXPECT_TRUE(item_result->Equals(&items.additional_properties));
-}
-
-TEST(JsonSchemaCompilerFunctionsOnTypesTest, ChromeSettingGetParamsCreate) {
-  scoped_ptr<base::DictionaryValue> details_value(new base::DictionaryValue());
-  details_value->SetBoolean("incognito", true);
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  params_value->Append(details_value.release());
-  scoped_ptr<ChromeSetting::Get::Params> params(
-      ChromeSetting::Get::Params::Create(*params_value));
-  EXPECT_TRUE(params.get());
-  EXPECT_TRUE(*params->details.incognito);
-}
diff --git a/tools/json_schema_compiler/test/idl_basics.idl b/tools/json_schema_compiler/test/idl_basics.idl
deleted file mode 100644
index 463574f..0000000
--- a/tools/json_schema_compiler/test/idl_basics.idl
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Tests a variety of basic API definition features.
-
-[internal] namespace idl_basics {
-  // Enum description
-  enum EnumType {
-    // comment1
-    name1,
-    name2
-  };
-
-  [nodoc] enum EnumTypeWithNoDoc {
-    name1,
-    name2
-  };
-
-  dictionary MyType1 {
-    // This comment tests "double-quotes".
-    [legalValues=(1,2)] long x;
-    DOMString y;
-    DOMString z;
-    DOMString a;
-    DOMString b;
-    DOMString c;
-  };
-
-  dictionary MyType2 {
-    DOMString x;
-  };
-
-  callback Callback1 = void();
-  callback Callback2 = void(long x);
-  callback Callback3 = void(MyType1 arg);
-  callback Callback4 = void(MyType2[] arg);
-  callback Callback5 = void(EnumType type);
-  // A comment on a callback.
-  // |x|: A parameter.
-  callback Callback6 = void(long x);
-  // |x|: Just a parameter comment, with no comment on the callback.
-  callback Callback7 = void(long x);
-
-  interface Functions {
-    static void function1();
-    static void function2(long x);
-    // This comment should appear in the documentation,
-    // despite occupying multiple lines.
-    //
-    // |arg|: So should this comment
-    // about the argument.
-    // <em>HTML</em> is fine too.
-    static void function3(MyType1 arg);
-
-    // This tests if "double-quotes" are escaped correctly.
-    //
-    // It also tests a comment with two newlines.
-    static void function4(Callback1 cb);
-    static void function5(Callback2 cb);
-    static void function6(Callback3 cb);
-
-    static void function7(optional long arg);
-    static void function8(long arg1, optional DOMString arg2);
-    static void function9(optional MyType1 arg);
-
-    static void function10(long x, long[] y);
-    static void function11(MyType1[] arg);
-
-    static void function12(Callback4 cb);
-
-    static void function13(EnumType type, Callback5 cb);
-    static void function14(EnumType[] types);
-
-    // "switch" is a reserved word and should cause a C++ compile error if we
-    // emit code for this declaration.
-    [nocompile] static void function15(long switch);
-
-    static void function16(Callback6 cb);
-    static void function17(Callback7 cb);
-    // |cb|: Override callback comment.
-    static void function18(Callback7 cb);
-
-    static void function20(idl_other_namespace.SomeType value);
-    static void function21(idl_other_namespace.SomeType[] values);
-    static void function22(
-        idl_other_namespace.sub_namespace.AnotherType value);
-    static void function23(
-        idl_other_namespace.sub_namespace.AnotherType[] values);
-
-    static long function24();
-    static MyType1 function25();
-    static MyType1[] function26();
-    static EnumType function27();
-    static EnumType[] function28();
-    static idl_other_namespace.SomeType function29();
-    static idl_other_namespace.SomeType[] function30();
-  };
-
-  interface Events {
-    static void onFoo1();
-    static void onFoo2(long x);
-    static void onFoo2(MyType1 arg);
-    static void onFoo3(EnumType type);
-  };
-};
diff --git a/tools/json_schema_compiler/test/idl_function_types.idl b/tools/json_schema_compiler/test/idl_function_types.idl
deleted file mode 100644
index 96bff43..0000000
--- a/tools/json_schema_compiler/test/idl_function_types.idl
+++ /dev/null
@@ -1,18 +0,0 @@
-// 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.
-
-// Tests function and callback types in various places in IDL.
-
-namespace idl_function_types {
-  callback MyCallback = void(long x);
-  callback MyUnionCallback = void ((long or DOMString) x);
-  callback MyOptionalUnionCallback = void (optional (long or DOMString) x);
-
-  interface Functions {
-    static void whatever(MyCallback[] callbacks);
-    static void blah(MyUnionCallback callback);
-    static void badabish(MyOptionalUnionCallback callback);
-    static void union_params((long or DOMString) x);
-  };
-};
diff --git a/tools/json_schema_compiler/test/idl_namespace_all_platforms.idl b/tools/json_schema_compiler/test/idl_namespace_all_platforms.idl
deleted file mode 100644
index 7ffd84a..0000000
--- a/tools/json_schema_compiler/test/idl_namespace_all_platforms.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2013 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.
-
-// Tests a variety of basic API definition features.
-
-[platforms=("chromeos", "chromeos_touch", "linux", "mac", "win")]
-namespace idl_namespace_all_platforms {
-
-};
diff --git a/tools/json_schema_compiler/test/idl_namespace_chromeos.idl b/tools/json_schema_compiler/test/idl_namespace_chromeos.idl
deleted file mode 100644
index ad748ff..0000000
--- a/tools/json_schema_compiler/test/idl_namespace_chromeos.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2013 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.
-
-// Tests the case of a namespace with chromeos platforms.
-
-[platforms=("chromeos")]
-namespace idl_namespace_chromeos {
-
-};
diff --git a/tools/json_schema_compiler/test/idl_namespace_non_specific_platforms.idl b/tools/json_schema_compiler/test/idl_namespace_non_specific_platforms.idl
deleted file mode 100644
index cff64f8..0000000
--- a/tools/json_schema_compiler/test/idl_namespace_non_specific_platforms.idl
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2013 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.
-
-// Tests the case of a namespace with non specific platforms.
-
-namespace idl_namespace_non_specific_platforms {
-
-};
diff --git a/tools/json_schema_compiler/test/idl_namespace_specific_implement.idl b/tools/json_schema_compiler/test/idl_namespace_specific_implement.idl
deleted file mode 100644
index 99b65ac..0000000
--- a/tools/json_schema_compiler/test/idl_namespace_specific_implement.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2013 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.
-
-// Tests the case of a namespace with specific implemented file.
-
-[implemented_in="idl_namespace_specific_implement.idl"]
-namespace idl_namespace_specific_implement {
-
-};
diff --git a/tools/json_schema_compiler/test/idl_namespace_specific_implement_chromeos.idl b/tools/json_schema_compiler/test/idl_namespace_specific_implement_chromeos.idl
deleted file mode 100644
index 619e073..0000000
--- a/tools/json_schema_compiler/test/idl_namespace_specific_implement_chromeos.idl
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2013 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.
-
-// Tests the case of a namespace with specific implemented file on chromeos.
-
-[platforms=("chromeos"),
- implemented_in="idl_namespace_specific_implement_chromeos.idl"]
-namespace idl_namespace_specific_implement_chromeos {
-
-};
diff --git a/tools/json_schema_compiler/test/idl_object_types.idl b/tools/json_schema_compiler/test/idl_object_types.idl
deleted file mode 100644
index ebf9f38..0000000
--- a/tools/json_schema_compiler/test/idl_object_types.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Tests 'object' types in various places in IDL.
-
-namespace idl_object_types {
-  dictionary FooType {
-    long x;
-    object y;
-    [instanceOf=Window]object z;
-  };
-
-  dictionary BarType {
-    any x;
-  };
-
-  dictionary BazType {
-    long? x;
-    FooType? foo;
-  };
-
-  dictionary UnionType {
-    (long or FooType)? x;
-    (DOMString or object) y;
-    ([instanceOf=ImageData]object or long) z;
-  };
-
-  dictionary ModifiedUnionType {
-    [nodoc] (long or DOMString) x;
-  };
-
-  interface Functions {
-    static void objectFunction1([instanceOf=ImageData]object icon);
-    static void objectFunction2(any some_arg);
-  };
-};
diff --git a/tools/json_schema_compiler/test/idl_other_namespace.idl b/tools/json_schema_compiler/test/idl_other_namespace.idl
deleted file mode 100644
index 9aa3fa0..0000000
--- a/tools/json_schema_compiler/test/idl_other_namespace.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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.
-
-// Provides types for testing scoped types included in idl_basics.idl.
-
-namespace idl_other_namespace {
-  enum SomeType {
-    hello,
-    world
-  };
-};
diff --git a/tools/json_schema_compiler/test/idl_other_namespace_sub_namespace.idl b/tools/json_schema_compiler/test/idl_other_namespace_sub_namespace.idl
deleted file mode 100644
index 0d6a2cc..0000000
--- a/tools/json_schema_compiler/test/idl_other_namespace_sub_namespace.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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.
-
-// Provides types for testing scoped types included in idl_basics.idl.
-
-namespace idl_other_namespace.sub_namespace {
-  enum AnotherType {
-    hello,
-    world
-  };
-};
diff --git a/tools/json_schema_compiler/test/idl_reserved_words.idl b/tools/json_schema_compiler/test/idl_reserved_words.idl
deleted file mode 100644
index 411973e..0000000
--- a/tools/json_schema_compiler/test/idl_reserved_words.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Tests 'reserved words' in various places in IDL.
-
-namespace reserved_words {
-
-  enum Foo { _float, _DOMString };
-
-  enum _enum {
-    _callback,
-    _namespace
-  };
-
-  dictionary _dictionary {
-    long _long;
-  };
-
-  dictionary MyType {
-    DOMString _interface;
-  };
-
-  interface Functions {
-    static void _static(Foo foo, _enum e);
-  };
-};
diff --git a/tools/json_schema_compiler/test/idl_schemas_unittest.cc b/tools/json_schema_compiler/test/idl_schemas_unittest.cc
deleted file mode 100644
index 1817afb..0000000
--- a/tools/json_schema_compiler/test/idl_schemas_unittest.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "base/values.h"
-#include "tools/json_schema_compiler/test/idl_basics.h"
-#include "tools/json_schema_compiler/test/idl_object_types.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-using test::api::idl_basics::MyType1;
-using test::api::idl_object_types::BarType;
-using test::api::idl_object_types::FooType;
-
-namespace Function2 = test::api::idl_basics::Function2;
-namespace Function3 = test::api::idl_basics::Function3;
-namespace Function4 = test::api::idl_basics::Function4;
-namespace Function5 = test::api::idl_basics::Function5;
-namespace Function6 = test::api::idl_basics::Function6;
-namespace Function7 = test::api::idl_basics::Function7;
-namespace Function8 = test::api::idl_basics::Function8;
-namespace Function9 = test::api::idl_basics::Function9;
-namespace Function10 = test::api::idl_basics::Function10;
-namespace Function11 = test::api::idl_basics::Function11;
-namespace ObjectFunction1 = test::api::idl_object_types::ObjectFunction1;
-
-TEST(IdlCompiler, Basics) {
-  // Test MyType1.
-  MyType1 a;
-  a.x = 5;
-  a.y = std::string("foo");
-  scoped_ptr<base::DictionaryValue> serialized = a.ToValue();
-  MyType1 b;
-  EXPECT_TRUE(MyType1::Populate(*serialized.get(), &b));
-  EXPECT_EQ(a.x, b.x);
-  EXPECT_EQ(a.y, b.y);
-
-  // Test Function2, which takes an integer parameter.
-  base::ListValue list;
-  list.Append(new base::FundamentalValue(5));
-  scoped_ptr<Function2::Params> f2_params = Function2::Params::Create(list);
-  EXPECT_EQ(5, f2_params->x);
-
-  // Test Function3, which takes a MyType1 parameter.
-  list.Clear();
-  base::DictionaryValue* tmp = new base::DictionaryValue();
-  tmp->SetInteger("x", 17);
-  tmp->SetString("y", "hello");
-  tmp->SetString("z", "zstring");
-  tmp->SetString("a", "astring");
-  tmp->SetString("b", "bstring");
-  tmp->SetString("c", "cstring");
-  list.Append(tmp);
-  scoped_ptr<Function3::Params> f3_params = Function3::Params::Create(list);
-  EXPECT_EQ(17, f3_params->arg.x);
-  EXPECT_EQ("hello", f3_params->arg.y);
-
-  // Test functions that take a callback function as a parameter, with varying
-  // callback signatures.
-  scoped_ptr<base::ListValue> f4_results = Function4::Results::Create();
-  base::ListValue expected;
-  EXPECT_TRUE(f4_results->Equals(&expected));
-
-  scoped_ptr<base::ListValue> f5_results(Function5::Results::Create(13));
-  base::Value* f5_result_int = NULL;
-  ASSERT_TRUE(f5_results->Get(0, &f5_result_int));
-  EXPECT_TRUE(f5_result_int->IsType(base::Value::TYPE_INTEGER));
-
-  scoped_ptr<base::ListValue> f6_results(Function6::Results::Create(a));
-  base::Value* f6_result_dict = NULL;
-  ASSERT_TRUE(f6_results->Get(0, &f6_result_dict));
-  MyType1 c;
-  EXPECT_TRUE(MyType1::Populate(*f6_result_dict, &c));
-  EXPECT_EQ(a.x, c.x);
-  EXPECT_EQ(a.y, c.y);
-}
-
-TEST(IdlCompiler, OptionalArguments) {
-  // Test a function that takes one optional argument, both without and with
-  // that argument.
-  base::ListValue list;
-  scoped_ptr<Function7::Params> f7_params = Function7::Params::Create(list);
-  EXPECT_EQ(NULL, f7_params->arg.get());
-  list.Append(new base::FundamentalValue(7));
-  f7_params = Function7::Params::Create(list);
-  EXPECT_EQ(7, *(f7_params->arg));
-
-  // Similar to above, but a function with one required and one optional
-  // argument.
-  list.Clear();
-  list.Append(new base::FundamentalValue(8));
-  scoped_ptr<Function8::Params> f8_params = Function8::Params::Create(list);
-  EXPECT_EQ(8, f8_params->arg1);
-  EXPECT_EQ(NULL, f8_params->arg2.get());
-  list.Append(new base::StringValue("foo"));
-  f8_params = Function8::Params::Create(list);
-  EXPECT_EQ(8, f8_params->arg1);
-  EXPECT_EQ("foo", *(f8_params->arg2));
-
-  // Test a function with an optional argument of custom type.
-  list.Clear();
-  scoped_ptr<Function9::Params> f9_params = Function9::Params::Create(list);
-  EXPECT_EQ(NULL, f9_params->arg.get());
-  list.Clear();
-  base::DictionaryValue* tmp = new base::DictionaryValue();
-  tmp->SetInteger("x", 17);
-  tmp->SetString("y", "hello");
-  tmp->SetString("z", "zstring");
-  tmp->SetString("a", "astring");
-  tmp->SetString("b", "bstring");
-  tmp->SetString("c", "cstring");
-  list.Append(tmp);
-  f9_params = Function9::Params::Create(list);
-  ASSERT_TRUE(f9_params->arg.get() != NULL);
-  MyType1* t1 = f9_params->arg.get();
-  EXPECT_EQ(17, t1->x);
-  EXPECT_EQ("hello", t1->y);
-}
-
-TEST(IdlCompiler, ArrayTypes) {
-  // Tests of a function that takes an integer and an array of integers. First
-  // use an empty array.
-  base::ListValue list;
-  list.Append(new base::FundamentalValue(33));
-  list.Append(new base::ListValue);
-  scoped_ptr<Function10::Params> f10_params = Function10::Params::Create(list);
-  ASSERT_TRUE(f10_params != NULL);
-  EXPECT_EQ(33, f10_params->x);
-  EXPECT_TRUE(f10_params->y.empty());
-
-  // Same function, but this time with 2 values in the array.
-  list.Clear();
-  list.Append(new base::FundamentalValue(33));
-  base::ListValue* sublist = new base::ListValue;
-  sublist->Append(new base::FundamentalValue(34));
-  sublist->Append(new base::FundamentalValue(35));
-  list.Append(sublist);
-  f10_params = Function10::Params::Create(list);
-  ASSERT_TRUE(f10_params != NULL);
-  EXPECT_EQ(33, f10_params->x);
-  ASSERT_EQ(2u, f10_params->y.size());
-  EXPECT_EQ(34, f10_params->y[0]);
-  EXPECT_EQ(35, f10_params->y[1]);
-
-  // Now test a function which takes an array of a defined type.
-  list.Clear();
-  MyType1 a;
-  MyType1 b;
-  a.x = 5;
-  b.x = 6;
-  a.y = std::string("foo");
-  b.y = std::string("bar");
-  base::ListValue* sublist2 = new base::ListValue;
-  sublist2->Append(a.ToValue().release());
-  sublist2->Append(b.ToValue().release());
-  list.Append(sublist2);
-  scoped_ptr<Function11::Params> f11_params = Function11::Params::Create(list);
-  ASSERT_TRUE(f11_params != NULL);
-  ASSERT_EQ(2u, f11_params->arg.size());
-  EXPECT_EQ(5, f11_params->arg[0]->x);
-  EXPECT_EQ("foo", f11_params->arg[0]->y);
-  EXPECT_EQ(6, f11_params->arg[1]->x);
-  EXPECT_EQ("bar", f11_params->arg[1]->y);
-}
-
-TEST(IdlCompiler, ObjectTypes) {
-  // Test the FooType type.
-  FooType f1;
-  f1.x = 3;
-  scoped_ptr<base::DictionaryValue> serialized_foo = f1.ToValue();
-  FooType f2;
-  EXPECT_TRUE(FooType::Populate(*serialized_foo.get(), &f2));
-  EXPECT_EQ(f1.x, f2.x);
-
-  // Test the BarType type.
-  BarType b1;
-  b1.x.reset(new base::FundamentalValue(7));
-  scoped_ptr<base::DictionaryValue> serialized_bar = b1.ToValue();
-  BarType b2;
-  EXPECT_TRUE(BarType::Populate(*serialized_bar.get(), &b2));
-  int tmp_int = 0;
-  EXPECT_TRUE(b2.x->GetAsInteger(&tmp_int));
-  EXPECT_EQ(7, tmp_int);
-
-  // Test the params to the ObjectFunction1 function.
-  scoped_ptr<base::DictionaryValue> icon_props(new base::DictionaryValue());
-  icon_props->SetString("hello", "world");
-  ObjectFunction1::Params::Icon icon;
-  EXPECT_TRUE(ObjectFunction1::Params::Icon::Populate(*(icon_props.get()),
-                                                      &icon));
-  base::ListValue list;
-  list.Append(icon_props.release());
-  scoped_ptr<ObjectFunction1::Params> params =
-    ObjectFunction1::Params::Create(list);
-  ASSERT_TRUE(params.get() != NULL);
-  std::string tmp;
-  EXPECT_TRUE(params->icon.additional_properties.GetString("hello", &tmp));
-  EXPECT_EQ("world", tmp);
-}
diff --git a/tools/json_schema_compiler/test/json_schema_compiler_tests.gyp b/tools/json_schema_compiler/test/json_schema_compiler_tests.gyp
deleted file mode 100644
index 7921f87..0000000
--- a/tools/json_schema_compiler/test/json_schema_compiler_tests.gyp
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (c) 2012 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.
-
-{
-  'targets': [
-    {
-      'target_name': 'json_schema_compiler_tests',
-      'type': 'static_library',
-      'variables': {
-        'chromium_code': 1,
-        'schema_files': [
-          'additional_properties.json',
-          'any.json',
-          'arrays.json',
-          'callbacks.json',
-          'choices.json',
-          'crossref.json',
-          'enums.json',
-          'functions_as_parameters.json',
-          'functions_on_types.json',
-          'idl_basics.idl',
-          'idl_other_namespace.idl',
-          'idl_other_namespace_sub_namespace.idl',
-          'idl_object_types.idl',
-          'objects.json',
-          'simple_api.json',
-          'error_generation.json'
-        ],
-        'cc_dir': 'tools/json_schema_compiler/test',
-        'root_namespace': 'test::api::%(namespace)s',
-      },
-      'inputs': [
-        '<@(schema_files)',
-      ],
-      'sources': [
-        '<@(schema_files)',
-        'test_util.cc',
-        'test_util.h',
-      ],
-      'includes': ['../../../build/json_schema_compile.gypi'],
-      # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
-      'msvs_disabled_warnings': [4267, ],
-    },
-  ],
-}
diff --git a/tools/json_schema_compiler/test/json_schema_test.json b/tools/json_schema_compiler/test/json_schema_test.json
deleted file mode 100644
index b3b24e9..0000000
--- a/tools/json_schema_compiler/test/json_schema_test.json
+++ /dev/null
@@ -1,106 +0,0 @@
-[
-  {
-    "namespace": "compile",
-    "description": "The compile API.",
-    "functions": [],
-    "types":     {}
-  },
-
-  {
-    "namespace": "nocompile",
-    "description": "The nocompile API.",
-    "nocompile": true,
-    "functions": [],
-    "types":     {}
-  },
-
-  {
-    "namespace": "functions",
-    "description": "The functions API.",
-    "functions": [
-      {
-        "id": "one",
-        "nocompile": true
-      },
-      {
-        "id": "two"
-      },
-      {
-        "id": "three",
-        "nocompile": true
-      },
-      {
-        "id": "four"
-      }
-    ],
-
-    "types": {
-      "one": { "key": "value" }
-    }
-  },
-
-  {
-    "namespace": "types",
-    "description": "The types API.",
-    "functions": [
-      { "id": "one" }
-    ],
-    "types": {
-      "one": {
-        "key": "value",
-        "nocompile": true
-      },
-      "two": {
-        "key": "value"
-      },
-      "three": {
-        "key": "value",
-        "nocompile": true
-      },
-      "four": {
-        "key": "value"
-      }
-    }
-  },
-
-  {
-    "namespace": "nested",
-    "description": "The nested API.",
-    "properties": {
-      "sync": {
-        "functions": [
-          {
-            "id": "one",
-            "nocompile": true
-          },
-          {
-            "id": "two"
-          },
-          {
-            "id": "three",
-            "nocompile": true
-          },
-          {
-            "id": "four"
-          }
-        ],
-        "types": {
-          "one": {
-            "key": "value",
-            "nocompile": true
-          },
-          "two": {
-            "key": "value"
-          },
-          "three": {
-            "key": "value",
-            "nocompile": true
-          },
-          "four": {
-            "key": "value"
-          }
-        }
-      }
-    }
-  }
-]
diff --git a/tools/json_schema_compiler/test/objects.json b/tools/json_schema_compiler/test/objects.json
deleted file mode 100644
index e76e229..0000000
--- a/tools/json_schema_compiler/test/objects.json
+++ /dev/null
@@ -1,140 +0,0 @@
-[
-  {
-    "namespace": "objects",
-    "description": "The objects API.",
-    "types": [],
-    "functions": [
-      {
-        "name": "objectParam",
-        "type": "function",
-        "description": "Takes an object.",
-        "parameters": [
-          {
-            "name": "info",
-            "type": "object",
-            "properties": {
-              "strings": {
-                "type": "array",
-                "items": {"type": "string"}
-              },
-              "integer": {
-                "type": "integer"
-              },
-              "boolean": {
-                "type": "boolean"
-              }
-            }
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "returnsObject",
-        "description": "Returns an object.",
-        "type": "function",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "info",
-                "type": "object",
-                "properties": {
-                  "state": {
-                    "type": "string",
-                    "enum": ["foo", "bar", "baz"]
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "returnsTwoObjects",
-        "description": "Return two objects.",
-        "type": "function",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "firstInfo",
-                "type": "object",
-                "properties": {
-                  "state": {
-                    "type": "string",
-                    "enum": ["foo", "bar", "baz"]
-                  }
-                }
-              },
-              {
-                "name": "secondInfo",
-                "type": "object",
-                "properties": {
-                  "state": {
-                    "type": "string",
-                    "enum": ["spam", "ham", "eggs"]
-                  }
-                }
-              }
-            ]
-          }
-        ]
-      }
-    ],
-    "events": [
-      {
-        "name": "onObjectFired",
-        "type": "function",
-        "description": "Fired when an object is ready.",
-        "parameters": [
-          {
-            "name": "someObject",
-            "type": "object",
-            "properties": {
-              "state": {
-                "type": "string",
-                "enum": ["foo", "bar", "baz"]
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "onTwoObjectsFired",
-        "type": "function",
-        "description": "Fired when two objects are ready.",
-        "parameters": [
-          {
-            "name": "firstObject",
-            "type": "object",
-            "properties": {
-              "state": {
-                "type": "string",
-                "enum": ["foo", "bar", "baz"]
-              }
-            }
-          },
-          {
-            "name": "secondObject",
-            "type": "object",
-            "properties": {
-              "state": {
-                "type": "string",
-                "enum": ["spam", "ham", "eggs"]
-              }
-            }
-          }
-        ]
-      }
-    ]
-  }
-]
-
diff --git a/tools/json_schema_compiler/test/objects_unittest.cc b/tools/json_schema_compiler/test/objects_unittest.cc
deleted file mode 100644
index 6dc2c45..0000000
--- a/tools/json_schema_compiler/test/objects_unittest.cc
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/test/objects.h"
-
-#include "base/json/json_writer.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using namespace test::api::objects;
-
-TEST(JsonSchemaCompilerObjectsTest, ObjectParamParamsCreate) {
-  {
-    scoped_ptr<base::ListValue> strings(new base::ListValue());
-    strings->Append(new base::StringValue("one"));
-    strings->Append(new base::StringValue("two"));
-    scoped_ptr<base::DictionaryValue> info_value(new base::DictionaryValue());
-    info_value->Set("strings", strings.release());
-    info_value->Set("integer", new base::FundamentalValue(5));
-    info_value->Set("boolean", new base::FundamentalValue(true));
-
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(info_value.release());
-    scoped_ptr<ObjectParam::Params> params(
-        ObjectParam::Params::Create(*params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_EQ((size_t) 2, params->info.strings.size());
-    EXPECT_EQ("one", params->info.strings[0]);
-    EXPECT_EQ("two", params->info.strings[1]);
-    EXPECT_EQ(5, params->info.integer);
-    EXPECT_TRUE(params->info.boolean);
-  }
-  {
-    scoped_ptr<base::ListValue> strings(new base::ListValue());
-    strings->Append(new base::StringValue("one"));
-    strings->Append(new base::StringValue("two"));
-    scoped_ptr<base::DictionaryValue> info_value(new base::DictionaryValue());
-    info_value->Set("strings", strings.release());
-    info_value->Set("integer", new base::FundamentalValue(5));
-
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(info_value.release());
-    scoped_ptr<ObjectParam::Params> params(
-        ObjectParam::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-}
-
-TEST(JsonSchemaCompilerObjectsTest, ReturnsObjectResultCreate) {
-  ReturnsObject::Results::Info info;
-  info.state = ReturnsObject::Results::Info::STATE_FOO;
-  scoped_ptr<base::ListValue> results = ReturnsObject::Results::Create(info);
-
-  base::DictionaryValue expected;
-  expected.SetString("state", "foo");
-  base::DictionaryValue* result = NULL;
-  ASSERT_TRUE(results->GetDictionary(0, &result));
-  ASSERT_TRUE(result->Equals(&expected));
-}
-
-TEST(JsonSchemaCompilerObjectsTest, OnObjectFiredCreate) {
-  OnObjectFired::SomeObject object;
-  object.state = OnObjectFired::SomeObject::STATE_BAR;
-  scoped_ptr<base::ListValue> results(OnObjectFired::Create(object));
-
-  base::DictionaryValue expected;
-  expected.SetString("state", "bar");
-  base::DictionaryValue* result = NULL;
-  ASSERT_TRUE(results->GetDictionary(0, &result));
-  ASSERT_TRUE(result->Equals(&expected));
-}
diff --git a/tools/json_schema_compiler/test/permissions.json b/tools/json_schema_compiler/test/permissions.json
deleted file mode 100644
index df97441..0000000
--- a/tools/json_schema_compiler/test/permissions.json
+++ /dev/null
@@ -1,140 +0,0 @@
-[
-  {
-    "namespace": "permissions",
-    "description": "A test API for the json_schema_compiler.",
-    "types": [
-      {
-        "id": "Permissions",
-        "type": "object",
-        "properties": {
-          "permissions": {
-            "type": "array",
-            "items": {"type": "string"},
-            "optional": true,
-            "description": "List of named permissions (does not include hosts or origins)."
-          },
-          "origins": {
-            "type": "array",
-            "items": {"type": "string"},
-            "optional": true,
-            "description": "List of origin permissions."
-          }
-        }
-      }
-    ],
-    "events": [
-      {
-        "name": "onAdded",
-        "type": "function",
-        "description": "Fired when the extension acquires new permissions.",
-        "parameters": [
-          {
-            "$ref": "Permissions",
-            "name": "permissions",
-            "description": "The newly acquired permissions."
-          }
-        ]
-      },
-      {
-        "name": "onRemoved",
-        "type": "function",
-        "description": "Fired when access to permissions has been removed from the extension.",
-        "parameters": [
-          {
-            "$ref": "Permissions",
-            "name": "permissions",
-            "description": "The permissions that have been removed."
-          }
-        ]
-      }
-     ],
-    "functions": [
-      {
-        "name": "getAll",
-        "type": "function",
-        "description": "Gets the extension's current set of permissions.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-               {
-                "name": "permissions",
-                "$ref": "Permissions",
-                "description": "The extension's active permissions."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "contains",
-        "type": "function",
-        "description": "Checks if the extension has the specified permissions.",
-        "parameters": [
-          {
-            "name": "permissions",
-            "$ref": "Permissions"
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "result",
-                "type": "boolean",
-                "description": "True if the extension has the specified permissions."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "request",
-        "type": "function",
-        "description": "Requests access to the specified permissions. These permissions must be defined in the optional_permissions field of the manifest. If there are any problems requesting the permissions, <a href='extension.html#property-lastError'>chrome.runtime.lastError</a> will be set.",
-        "parameters": [
-          {
-            "name": "permissions",
-            "$ref": "Permissions"
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "granted",
-                "type": "boolean",
-                "description": "True if the user granted the specified permissions."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "remove",
-        "type": "function",
-        "description": "Removes access to the specified permissions. If there are any problems removing the permissions, <a href='extension.html#property-lastError'>chrome.runtime.lastError</a> will be set.",
-        "parameters": [
-          {
-            "name": "permissions",
-            "$ref": "Permissions"
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "removed",
-                "type": "boolean",
-                "description": "True if the permissions were removed."
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/simple_api.json b/tools/json_schema_compiler/test/simple_api.json
deleted file mode 100644
index 9ab5403..0000000
--- a/tools/json_schema_compiler/test/simple_api.json
+++ /dev/null
@@ -1,163 +0,0 @@
-[
-  {
-    "namespace": "simple_api",
-    "description": "This is a simple API.",
-    "types": [
-      {
-        "id": "TestType",
-        "type": "object",
-        "properties": {
-          "string": {
-            "type": "string",
-            "description": "Some string."
-          },
-          "boolean": {
-            "type": "boolean",
-            "description": "Some boolean."
-          },
-          "number": {
-            "type": "number",
-            "description": "Some double."
-          },
-          "integer": {
-            "type": "integer",
-            "description": "Some integer."
-          }
-        }
-      }
-    ],
-    "functions": [
-      {
-        "name": "incrementInteger",
-        "type": "function",
-        "description": "Increments the given integer.",
-        "parameters": [
-          {
-            "name": "num",
-            "type": "integer"
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "result",
-                "type": "integer",
-                "description": "The incremented value."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "optionalString",
-        "type": "function",
-        "description": "Takes a string. Or not.",
-        "parameters": [
-          {
-            "name": "str",
-            "type": "string",
-            "optional": true
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "optionalBeforeRequired",
-        "type": "function",
-        "description": "Takes an optional parameter followed by a required one.",
-        "parameters": [
-          {
-            "name": "first",
-            "type": "string",
-            "optional": true
-          },
-          {
-            "name": "second",
-            "type": "string"
-          },
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "optionalCallbackParams",
-        "type": "function",
-        "description": "Gives back a string. Or not.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "result",
-                "$ref": "TestType",
-                "description": "True if the extension has the specified permissions."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "getTestType",
-        "type": "function",
-        "description": "Return a TestType.",
-        "parameters": [
-          {
-            "name": "callback",
-            "type": "function",
-            "parameters": [
-              {
-                "name": "result",
-                "$ref": "TestType",
-                "description": "A TestType."
-              }
-            ]
-          }
-        ]
-      }
-    ],
-    "events": [
-      {
-        "name": "onIntegerFired",
-        "type": "function",
-        "description": "Fired when an integer is ready.",
-        "parameters": [
-          {
-            "name": "someInteger",
-            "type": "integer"
-          }
-        ]
-      },
-      {
-        "name": "onStringFired",
-        "type": "function",
-        "description": "Fired when a string is ready.",
-        "parameters": [
-          {
-            "name": "someString",
-            "type": "string"
-          }
-        ]
-      },
-      {
-        "name": "onTestTypeFired",
-        "type": "function",
-        "description": "Fired when a TestType is ready.",
-        "parameters": [
-          {
-            "name": "someTestType",
-            "$ref": "TestType"
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/simple_api_unittest.cc b/tools/json_schema_compiler/test/simple_api_unittest.cc
deleted file mode 100644
index f100b81..0000000
--- a/tools/json_schema_compiler/test/simple_api_unittest.cc
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/test/simple_api.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-using namespace test::api::simple_api;
-
-namespace {
-
-static scoped_ptr<base::DictionaryValue> CreateTestTypeDictionary() {
-  scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-  value->SetWithoutPathExpansion("number", new base::FundamentalValue(1.1));
-  value->SetWithoutPathExpansion("integer", new base::FundamentalValue(4));
-  value->SetWithoutPathExpansion("string", new base::StringValue("bling"));
-  value->SetWithoutPathExpansion("boolean", new base::FundamentalValue(true));
-  return value.Pass();
-}
-
-}  // namespace
-
-TEST(JsonSchemaCompilerSimpleTest, IncrementIntegerResultCreate) {
-  scoped_ptr<base::ListValue> results = IncrementInteger::Results::Create(5);
-  base::ListValue expected;
-  expected.Append(new base::FundamentalValue(5));
-  EXPECT_TRUE(results->Equals(&expected));
-}
-
-TEST(JsonSchemaCompilerSimpleTest, IncrementIntegerParamsCreate) {
-  scoped_ptr<base::ListValue> params_value(new base::ListValue());
-  params_value->Append(new base::FundamentalValue(6));
-  scoped_ptr<IncrementInteger::Params> params(
-      IncrementInteger::Params::Create(*params_value));
-  EXPECT_TRUE(params.get());
-  EXPECT_EQ(6, params->num);
-}
-
-TEST(JsonSchemaCompilerSimpleTest, NumberOfParams) {
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(new base::StringValue("text"));
-    params_value->Append(new base::StringValue("text"));
-    scoped_ptr<OptionalString::Params> params(
-        OptionalString::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<IncrementInteger::Params> params(
-        IncrementInteger::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, OptionalStringParamsCreate) {
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    scoped_ptr<OptionalString::Params> params(
-        OptionalString::Params::Create(*params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_FALSE(params->str.get());
-  }
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(new base::StringValue("asdf"));
-    scoped_ptr<OptionalString::Params> params(
-        OptionalString::Params::Create(*params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_TRUE(params->str.get());
-    EXPECT_EQ("asdf", *params->str);
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, OptionalParamsTakingNull) {
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(base::Value::CreateNullValue());
-    scoped_ptr<OptionalString::Params> params(
-        OptionalString::Params::Create(*params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_FALSE(params->str.get());
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, OptionalStringParamsWrongType) {
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(new base::FundamentalValue(5));
-    scoped_ptr<OptionalString::Params> params(
-        OptionalString::Params::Create(*params_value));
-    EXPECT_FALSE(params.get());
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, OptionalBeforeRequired) {
-  {
-    scoped_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(base::Value::CreateNullValue());
-    params_value->Append(new base::StringValue("asdf"));
-    scoped_ptr<OptionalBeforeRequired::Params> params(
-        OptionalBeforeRequired::Params::Create(*params_value));
-    EXPECT_TRUE(params.get());
-    EXPECT_FALSE(params->first.get());
-    EXPECT_EQ("asdf", params->second);
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, NoParamsResultCreate) {
-  scoped_ptr<base::ListValue> results = OptionalString::Results::Create();
-  base::ListValue expected;
-  EXPECT_TRUE(results->Equals(&expected));
-}
-
-TEST(JsonSchemaCompilerSimpleTest, TestTypePopulate) {
-  {
-    scoped_ptr<TestType> test_type(new TestType());
-    scoped_ptr<base::DictionaryValue> value = CreateTestTypeDictionary();
-    EXPECT_TRUE(TestType::Populate(*value, test_type.get()));
-    EXPECT_EQ("bling", test_type->string);
-    EXPECT_EQ(1.1, test_type->number);
-    EXPECT_EQ(4, test_type->integer);
-    EXPECT_EQ(true, test_type->boolean);
-    EXPECT_TRUE(value->Equals(test_type->ToValue().get()));
-  }
-  {
-    scoped_ptr<TestType> test_type(new TestType());
-    scoped_ptr<base::DictionaryValue> value = CreateTestTypeDictionary();
-    value->Remove("number", NULL);
-    EXPECT_FALSE(TestType::Populate(*value, test_type.get()));
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, GetTestType) {
-  {
-    scoped_ptr<base::DictionaryValue> value = CreateTestTypeDictionary();
-    scoped_ptr<TestType> test_type(new TestType());
-    EXPECT_TRUE(TestType::Populate(*value, test_type.get()));
-    scoped_ptr<base::ListValue> results =
-        GetTestType::Results::Create(*test_type);
-
-    base::DictionaryValue* result = NULL;
-    results->GetDictionary(0, &result);
-    EXPECT_TRUE(result->Equals(value.get()));
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, OnIntegerFiredCreate) {
-  {
-    scoped_ptr<base::ListValue> results(OnIntegerFired::Create(5));
-    base::ListValue expected;
-    expected.Append(new base::FundamentalValue(5));
-    EXPECT_TRUE(results->Equals(&expected));
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, OnStringFiredCreate) {
-  {
-    scoped_ptr<base::ListValue> results(OnStringFired::Create("yo dawg"));
-    base::ListValue expected;
-    expected.Append(new base::StringValue("yo dawg"));
-    EXPECT_TRUE(results->Equals(&expected));
-  }
-}
-
-TEST(JsonSchemaCompilerSimpleTest, OnTestTypeFiredCreate) {
-  {
-    TestType some_test_type;
-    scoped_ptr<base::DictionaryValue> expected = CreateTestTypeDictionary();
-    ASSERT_TRUE(expected->GetDouble("number", &some_test_type.number));
-    ASSERT_TRUE(expected->GetString("string", &some_test_type.string));
-    ASSERT_TRUE(expected->GetInteger("integer", &some_test_type.integer));
-    ASSERT_TRUE(expected->GetBoolean("boolean", &some_test_type.boolean));
-
-    scoped_ptr<base::ListValue> results(
-        OnTestTypeFired::Create(some_test_type));
-    base::DictionaryValue* result = NULL;
-    results->GetDictionary(0, &result);
-    EXPECT_TRUE(result->Equals(expected.get()));
-  }
-}
diff --git a/tools/json_schema_compiler/test/tabs.json b/tools/json_schema_compiler/test/tabs.json
deleted file mode 100644
index 7dca080..0000000
--- a/tools/json_schema_compiler/test/tabs.json
+++ /dev/null
@@ -1,770 +0,0 @@
-[
-  {
-    "namespace": "tabs",
-    "description": "The tabs API.",
-    "types": [
-      {
-        "id": "Tab",
-        "type": "object",
-        "properties": {
-          "id": {"type": "integer", "minimum": 0, "description": "The ID of the tab. Tab IDs are unique within a browser session."},
-          "index": {"type": "integer", "minimum": 0, "description": "The zero-based index of the tab within its window."},
-          "windowId": {"type": "integer", "minimum": 0, "description": "The ID of the window the tab is contained within."},
-          "selected": {"type": "boolean", "description": "Whether the tab is selected.", "nodoc": true},
-          "highlighted": {"type": "boolean", "description": "Whether the tab is highlighted."},
-          "active": {"type": "boolean", "description": "Whether the tab is active in its window."},
-          "pinned": {"type": "boolean", "description": "Whether the tab is pinned."},
-          "url": {"type": "string", "description": "The URL the tab is displaying."},
-          "title": {"type": "string", "optional": true, "description": "The title of the tab. This may not be available if the tab is loading."},
-          "favIconUrl": {"type": "string", "optional": true, "description": "The URL of the tab's favicon. This may not be available if the tab is loading."},
-          "status": {"type": "string", "optional": true, "description": "Either <em>loading</em> or <em>complete</em>."},
-          "incognito": {"type": "boolean", "description": "Whether the tab is in an incognito window."}
-        }
-      }
-    ],
-    "functions": [
-      {
-        "name": "get",
-        "type": "function",
-        "description": "Retrieves details about the specified tab.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "tabId",
-            "minimum": 0
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {"name": "tab", "$ref": "Tab"}
-            ]
-          }
-        ]
-      },
-      {
-        "name": "getCurrent",
-        "type": "function",
-        "description": "Gets the tab that this script call is being made from. May be undefined if called from a non-tab context (for example: a background page or popup view).",
-        "parameters": [
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "tab",
-                "$ref": "Tab",
-                "optional": true
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "connect",
-        "nocompile": true,
-        "type": "function",
-        "description": "Connects to the content script(s) in the specified tab. The <a href='extension.html#event-onConnect'>chrome.runtime.onConnect</a> event is fired in each content script running in the specified tab for the current extension. For more details, see <a href='content_scripts.html#messaging'>Content Script Messaging</a>.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "tabId",
-            "minimum": 0
-          },
-          {
-            "type": "object",
-            "name": "connectInfo",
-            "properties": {
-              "name": { "type": "string", "optional": true, "description": "Will be passed into onConnect for content scripts that are listening for the connection event." }
-            },
-            "optional": true
-          }
-        ],
-        "returns": {
-          "$ref": "Port",
-          "description": "A port that can be used to communicate with the content scripts running in the specified tab. The port's <a href='extension.html#type-Port'>onDisconnect</a> event is fired if the tab closes or does not exist. "
-        }
-      },
-      {
-        "name": "sendRequest",
-        "nocompile": true,
-        "type": "function",
-        "description": "Sends a single request to the content script(s) in the specified tab, with an optional callback to run when a response is sent back.  The <a href='extension.html#event-onRequest'>chrome.extension.onRequest</a> event is fired in each content script running in the specified tab for the current extension.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "tabId",
-            "minimum": 0
-          },
-          {
-            "type": "any",
-            "name": "request"
-          },
-          {
-            "type": "function",
-            "name": "responseCallback",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "response",
-                "type": "any",
-                "description": "The JSON response object sent by the handler of the request. If an error occurs while connecting to the specified tab, the callback will be called with no arguments and <a href='extension.html#property-lastError'>chrome.runtime.lastError</a> will be set to the error message."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "getSelected",
-        "nodoc": true,
-        "type": "function",
-        "description": "Deprecated. Please use query({'active': true}). Gets the tab that is selected in the specified window.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "windowId",
-            "minimum": 0,
-            "optional": true,
-            "description": "Defaults to the <a href='windows.html#current-window'>current window</a>."
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {"name": "tab", "$ref": "Tab"}
-            ]
-          }
-        ]
-      },
-      {
-        "name": "getAllInWindow",
-        "type": "function",
-        "nodoc": true,
-        "description": "Deprecated. Please use query({'windowId': windowId}). Gets details about all tabs in the specified window.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "windowId",
-            "minimum": 0,
-            "optional": true,
-            "description": "Defaults to the <a href='windows.html#current-window'>current window</a>."
-            },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {"name": "tabs", "type": "array", "items": { "$ref": "Tab" } }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "create",
-        "type": "function",
-        "description": "Creates a new tab. Note: This function can be used without requesting the 'tabs' permission in the manifest.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "createProperties",
-            "properties": {
-              "windowId": {
-                "type": "integer",
-                "minimum": 0,
-                "optional": true,
-                "description": "The window to create the new tab in. Defaults to the <a href='windows.html#current-window'>current window</a>."
-              },
-              "index": {
-                "type": "integer",
-                "minimum": 0,
-                "optional": true,
-                "description": "The position the tab should take in the window. The provided value will be clamped to between zero and the number of tabs in the window."
-              },
-              "url": {
-                "type": "string",
-                "optional": true,
-                "description": "The URL to navigate the tab to initially. Fully-qualified URLs must include a scheme (i.e. 'http://www.google.com', not 'www.google.com'). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page."
-              },
-              "active": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tab should become the active tab in the window. Defaults to <var>true</var>"
-              },
-              "selected": {
-                "nodoc": true,
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tab should become the selected tab in the window. Defaults to <var>true</var>"
-              },
-              "pinned": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tab should be pinned. Defaults to <var>false</var>"
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "tab",
-                "$ref": "Tab",
-                "description": "Details about the created tab. Will contain the ID of the new tab."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "query",
-        "type": "function",
-        "description": "Gets all tabs that have the specified properties, or all tabs if no properties are specified.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "queryInfo",
-            "properties": {
-              "active": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tabs are active in their windows."
-              },
-              "pinned": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tabs are pinned."
-              },
-              "highlighted": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tabs are highlighted."
-              },
-              "status": {
-                "type": "string",
-                "optional": true,
-                "enum": ["loading", "complete"],
-                "description": "Whether the tabs have completed loading."
-              },
-              "title": {
-                "type": "string",
-                "optional": true,
-                "description": "Match page titles against a pattern."
-              },
-              "url": {
-                "type": "string",
-                "optional": true,
-                "description": "Match tabs against a URL pattern."
-              },
-              "windowId": {
-                "type": "integer",
-                "optional": true,
-                "minimum": 0,
-                "description": "The ID of the parent window."
-              },
-              "windowType": {
-                "type": "string",
-                "optional": true,
-                "enum": ["normal", "popup", "panel", "app"],
-                "description": "The type of window the tabs are in."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "result",
-                "type": "array",
-                "items": {
-                  "$ref": "Tab"
-                }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "highlight",
-        "type": "function",
-        "description": "Highlights the given tabs.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "highlightInfo",
-            "properties": {
-               "windowId": {
-                 "type": "integer",
-                 "description": "The window that contains the tabs."
-               },
-               "tabs": {
-                 "description": "One or more tab indices to highlight.",
-                 "choices": [
-                   {"type": "array", "items": {"type": "integer", "minimum": 0}},
-                   {"type": "integer"}
-                 ]
-               }
-             }
-           },
-           {
-             "type": "function",
-             "name": "callback",
-             "parameters": [
-               {
-                 "name": "window",
-                 "$ref": "Window",
-                 "description": "Contains details about the window whose tabs were highlighted."
-               }
-             ]
-           }
-        ]
-      },
-      {
-        "name": "update",
-        "type": "function",
-        "description": "Modifies the properties of a tab. Properties that are not specified in <var>updateProperties</var> are not modified. Note: This function can be used without requesting the 'tabs' permission in the manifest.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "tabId",
-            "minimum": 0,
-            "optional": true,
-            "description": "Defaults to the selected tab of the <a href='windows.html#current-window'>current window</a>."
-          },
-          {
-            "type": "object",
-            "name": "updateProperties",
-            "properties": {
-              "url": {
-                "optional": true,
-                "type": "string",
-                "description": "A URL to navigate the tab to."
-              },
-              "active": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tab should be active."
-              },
-              "highlighted": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Adds or removes the tab from the current selection."
-              },
-              "selected": {
-                "nodoc": true,
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tab should be selected."
-              },
-              "pinned": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether the tab should be pinned."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "tab",
-                "$ref": "Tab",
-                "optional": true,
-                "description": "Details about the updated tab, or <code>null</code> if the 'tabs' permission has not been requested."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "move",
-        "type": "function",
-        "description": "Moves one or more tabs to a new position within its window, or to a new window. Note that tabs can only be moved to and from normal (window.type === \"normal\") windows.",
-        "parameters": [
-          {
-            "name": "tabIds",
-            "description": "The tab or list of tabs to move.",
-            "choices": [
-              {"type": "integer", "minimum": 0},
-              {"type": "array", "items": {"type": "integer", "minimum": 0}}
-            ]
-          },
-          {
-            "type": "object",
-            "name": "moveProperties",
-            "properties": {
-              "windowId": {
-                "type": "integer",
-                "minimum": 0,
-                "optional": true,
-                "description": "Defaults to the window the tab is currently in."
-              },
-              "index": {
-                "type": "integer",
-                "minimum": 0,
-                "description": "The position to move the window to. The provided value will be clamped to between zero and the number of tabs in the window."
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "tabs",
-                "description": "Details about the moved tabs.",
-                "choices": [
-                  {"$ref": "Tab"},
-                  {"type": "array", "items": {"$ref": "Tab"}}
-                ]
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "reload",
-        "type": "function",
-        "description": "Reload a tab.",
-        "parameters": [
-          {"type": "integer", "name": "tabId", "optional": true, "description": "The ID of the tab to reload; defaults to the selected tab of the current window."},
-          {
-            "type": "object",
-            "name": "reloadProperties",
-            "optional": true,
-            "properties": {
-              "bypassCache": {
-                "type": "boolean",
-                "optional": true,
-                "description": "Whether using any local cache. Default is false."
-              }
-            }
-          },
-          {"type": "function", "name": "callback", "optional": true, "parameters": []}
-        ]
-      },
-      {
-        "name": "remove",
-        "type": "function",
-        "description": "Closes one or more tabs. Note: This function can be used without requesting the 'tabs' permission in the manifest.",
-        "parameters": [
-          {
-            "name": "tabIds",
-            "description": "The tab or list of tabs to close.",
-            "choices": [
-              {"type": "integer", "minimum": 0},
-              {"type": "array", "items": {"type": "integer", "minimum": 0}}
-            ]
-          },
-          {"type": "function", "name": "callback", "optional": true, "parameters": []}
-        ]
-      },
-      {
-        "name": "detectLanguage",
-        "type": "function",
-        "description": "Detects the primary language of the content in a tab.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "tabId",
-            "minimum": 0,
-            "optional": true,
-            "description": "Defaults to the active tab of the <a href='windows.html#current-window'>current window</a>."
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "type": "string",
-                "name": "language",
-                "description": "An ISO language code such as <code>en</code> or <code>fr</code>. For a complete list of languages supported by this method, see <a href='http://src.chromium.org/viewvc/chrome/trunk/src/third_party/cld/languages/internal/languages.cc'>kLanguageInfoTable</a>. The 2nd to 4th columns will be checked and the first non-NULL value will be returned except for Simplified Chinese for which zh-CN will be returned. For an unknown language, <code>und</code> will be returned."
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "captureVisibleTab",
-        "type": "function",
-        "description": "Captures the visible area of the currently active tab in the specified window. You must have <a href='manifest.html#permissions'>&lt;all_urls&gt;</a> permission to use this method.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "windowId",
-            "minimum": 0,
-            "optional": true,
-            "description": "The target window. Defaults to the <a href='windows.html#current-window'>current window</a>."
-          },
-          {
-            "type": "object",
-            "name": "options",
-            "optional": true,
-            "description": "Set parameters of image capture, such as the format of the resulting image.",
-            "properties": {
-              "format": {
-                "type": "string",
-                "optional": true,
-                "enum": ["jpeg", "png"],
-                "description": "The format of the resulting image.  Default is jpeg."
-              },
-              "quality": {
-                "type": "integer",
-                "name": "quality",
-                "optional": true,
-                "minimum": 0,
-                "maximum": 100,
-                "description": "When format is 'jpeg', controls the quality of the resulting image.  This value is ignored for PNG images.  As quality is decreased, the resulting image will have more visual artifacts, and the number of bytes needed to store it will decrease."
-              }
-            }
-          },
-          {
-            "type": "function", "name": "callback", "parameters": [
-              {"type": "string", "name": "dataUrl", "description": "A data URL which encodes an image of the visible area of the captured tab. May be assigned to the 'src' property of an HTML Image element for display."}
-            ]
-          }
-        ]
-      },
-      {
-        "name": "executeScript",
-        "type": "function",
-        "description": "Injects JavaScript code into a page. For details, see the <a href='content_scripts.html#pi'>programmatic injection</a> section of the content scripts doc.",
-        "parameters": [
-          {"type": "integer", "name": "tabId", "optional": true, "description": "The ID of the tab in which to run the script; defaults to the active tab of the current window."},
-          {
-            "type": "object",
-            "name": "details",
-            "description": "Details of the script to run. Either the code or the file property must be set, but both may not be set at the same time.",
-            "properties": {
-              "code": {"type": "string", "optional": true, "description": "JavaScript code to execute."},
-              "file": {"type": "string", "optional": true, "description": "JavaScript file to execute."},
-              "allFrames": {"type": "boolean", "optional": true, "description": "If allFrames is true, this function injects script into all frames of current page. By default, it's false and script is injected only into the top main frame."}
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "description": "Called after all the JavaScript has been executed.",
-            "parameters": []
-          }
-        ]
-      },
-      {
-        "name": "insertCSS",
-        "type": "function",
-        "description": "Injects CSS into a page. For details, see the <a href='content_scripts.html#pi'>programmatic injection</a> section of the content scripts doc.",
-        "parameters": [
-          {"type": "integer", "name": "tabId", "optional": true, "description": "The ID of the tab in which to insert the CSS; defaults to the active tab of the current window."},
-          {
-            "type": "object",
-            "name": "details",
-            "description": "Details of the CSS text to insert. Either the code or the file property must be set, but both may not be set at the same time.",
-            "properties": {
-              "code": {"type": "string", "optional": true, "description": "CSS code to be injected."},
-              "file": {"type": "string", "optional": true, "description": "CSS file to be injected."},
-              "allFrames": {"type": "boolean", "optional": true, "description": "If allFrames is true, this function injects CSS text into all frames of current page. By default, it's false and CSS is injected only into the top main frame."}
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "description": "Called when all the CSS has been inserted.",
-            "parameters": []
-          }
-        ]
-      }
-    ],
-    "events": [
-      {
-        "name": "onCreated",
-        "type": "function",
-        "description": "Fired when a tab is created. Note that the tab's URL may not be set at the time this event fired, but you can listen to onUpdated events to be notified when a URL is set.",
-        "parameters": [
-          {
-            "$ref": "Tab",
-            "name": "tab",
-            "description": "Details of the tab that was created."
-          }
-        ]
-      },
-      {
-        "name": "onUpdated",
-        "type": "function",
-        "description": "Fired when a tab is updated.",
-        "parameters": [
-          {"type": "integer", "name": "tabId", "minimum": 0},
-          {
-            "type": "object",
-            "name": "changeInfo",
-            "description": "Lists the changes to the state of the tab that was updated.",
-            "properties": {
-              "status": {
-                "type": "string",
-                "optional": true,
-                "description": "The status of the tab. Can be either <em>loading</em> or <em>complete</em>."
-              },
-              "url": {
-                "type": "string",
-                "optional": true,
-                "description": "The tab's URL if it has changed."
-              },
-              "pinned": {
-                "type": "boolean",
-                "optional": true,
-                "description": "The tab's new pinned state."
-              }
-            }
-          },
-          {
-            "$ref": "Tab",
-            "name": "tab",
-            "description": "Gives the state of the tab that was updated."
-          }
-        ]
-      },
-      {
-        "name": "onMoved",
-        "type": "function",
-        "description": "Fired when a tab is moved within a window. Only one move event is fired, representing the tab the user directly moved. Move events are not fired for the other tabs that must move in response. This event is not fired when a tab is moved between windows. For that, see <a href='#event-onDetached'>onDetached</a>.",
-        "parameters": [
-          {"type": "integer", "name": "tabId", "minimum": 0},
-          {
-            "type": "object",
-            "name": "moveInfo",
-            "properties": {
-              "windowId": {"type": "integer", "minimum": 0},
-              "fromIndex": {"type": "integer", "minimum": 0},
-              "toIndex": {"type": "integer", "minimum": 0}
-            }
-          }
-        ]
-      },
-      {
-        "name": "onSelectionChanged",
-        "nodoc": true,
-        "type": "function",
-        "description": "Deprecated. Please use onActiveChanged.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "tabId",
-            "minimum": 0,
-            "description": "The ID of the tab that has become active."
-          },
-          {
-            "type": "object",
-            "name": "selectInfo",
-            "properties": {
-              "windowId": {
-                "type": "integer",
-                "minimum": 0,
-                "description": "The ID of the window the selected tab changed inside of."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "onActiveChanged",
-        "type": "function",
-        "description": "Fires when the selected tab in a window changes.",
-        "parameters": [
-          {
-            "type": "integer",
-            "name": "tabId",
-            "minimum": 0,
-            "description": "The ID of the tab that has become active."
-          },
-          {
-            "type": "object",
-            "name": "selectInfo",
-            "properties": {
-              "windowId": {
-                "type": "integer",
-                "minimum": 0,
-                "description": "The ID of the window the selected tab changed inside of."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "onHighlightChanged",
-        "type": "function",
-        "description": "Fired when the highlighted or selected tabs in a window changes.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "selectInfo",
-            "properties": {
-              "windowId": {
-                "type": "integer",
-                "minimum": 0,
-                "description": "The window whose tabs changed."
-              },
-              "tabIds": {
-                "type": "array",
-                "name": "tabIds",
-                "items": {"type": "integer", "minimum": 0},
-                "description": "All highlighted tabs in the window."
-              }
-            }
-          }
-        ]
-      },
-      {
-        "name": "onDetached",
-        "type": "function",
-        "description": "Fired when a tab is detached from a window, for example because it is being moved between windows.",
-        "parameters": [
-          {"type": "integer", "name": "tabId", "minimum": 0},
-          {
-            "type": "object",
-            "name": "detachInfo",
-            "properties": {
-              "oldWindowId": {"type": "integer", "minimum": 0},
-              "oldPosition": {"type": "integer", "minimum": 0}
-            }
-          }
-        ]
-      },
-      {
-        "name": "onAttached",
-        "type": "function",
-        "description": "Fired when a tab is attached to a window, for example because it was moved between windows.",
-        "parameters": [
-          {"type": "integer", "name": "tabId", "minimum": 0},
-          {
-            "type": "object",
-            "name": "attachInfo",
-            "properties": {
-              "newWindowId": {"type": "integer", "minimum": 0},
-              "newPosition": {"type": "integer", "minimum": 0}
-            }
-          }
-        ]
-      },
-      {
-        "name": "onRemoved",
-        "type": "function",
-        "description": "Fired when a tab is closed. Note: A listener can be registered for this event without requesting the 'tabs' permission in the manifest.",
-        "parameters": [
-          {"type": "integer", "name": "tabId", "minimum": 0},
-          {
-            "type": "object",
-            "name": "removeInfo",
-            "properties": {
-              "isWindowClosing": {"type": "boolean", "description": "True when the tab is being closed because its window is being closed." }
-            }
-          }
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/test/test_features.json b/tools/json_schema_compiler/test/test_features.json
deleted file mode 100644
index 26d67a1..0000000
--- a/tools/json_schema_compiler/test/test_features.json
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2013 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.
-
-{
-  "simple": {
-    "channel": "stable",
-    "extension_types": ["extension", "legacy_packaged_app"],
-    "min_manifest_version": 2
-  },
-  "complex": [
-    {
-      "channel": "dev",
-      "extension_types": ["platform_app"]
-    },
-    {
-      "channel": "stable",
-      "extension_types": ["platform_app"],
-      "whitelist": [
-        "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578",
-        "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB"
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/tools/json_schema_compiler/test/test_util.cc b/tools/json_schema_compiler/test/test_util.cc
deleted file mode 100644
index 79d5f7b..0000000
--- a/tools/json_schema_compiler/test/test_util.cc
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2013 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.
-
-#include "tools/json_schema_compiler/test/test_util.h"
-
-#include <string>
-
-#include "base/json/json_reader.h"
-#include "base/logging.h"
-
-namespace json_schema_compiler {
-namespace test_util {
-
-scoped_ptr<base::Value> ReadJson(const base::StringPiece& json) {
-  int error_code;
-  std::string error_msg;
-  scoped_ptr<base::Value> result(base::JSONReader::ReadAndReturnError(
-      json,
-      base::JSON_ALLOW_TRAILING_COMMAS,
-      &error_code,
-      &error_msg));
-  // CHECK not ASSERT since passing invalid |json| is a test error.
-  CHECK(result) << error_msg;
-  return result.Pass();
-}
-
-scoped_ptr<base::ListValue> List(base::Value* a) {
-  scoped_ptr<base::ListValue> list(new base::ListValue());
-  list->Append(a);
-  return list.Pass();
-}
-scoped_ptr<base::ListValue> List(base::Value* a, base::Value* b) {
-  scoped_ptr<base::ListValue> list = List(a);
-  list->Append(b);
-  return list.Pass();
-}
-scoped_ptr<base::ListValue> List(base::Value* a,
-                                 base::Value* b,
-                                 base::Value* c) {
-  scoped_ptr<base::ListValue> list = List(a, b);
-  list->Append(c);
-  return list.Pass();
-}
-
-scoped_ptr<base::DictionaryValue> Dictionary(
-    const std::string& ak, base::Value* av) {
-  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
-  dict->SetWithoutPathExpansion(ak, av);
-  return dict.Pass();
-}
-scoped_ptr<base::DictionaryValue> Dictionary(
-    const std::string& ak, base::Value* av,
-    const std::string& bk, base::Value* bv) {
-  scoped_ptr<base::DictionaryValue> dict = Dictionary(ak, av);
-  dict->SetWithoutPathExpansion(bk, bv);
-  return dict.Pass();
-}
-scoped_ptr<base::DictionaryValue> Dictionary(
-    const std::string& ak, base::Value* av,
-    const std::string& bk, base::Value* bv,
-    const std::string& ck, base::Value* cv) {
-  scoped_ptr<base::DictionaryValue> dict = Dictionary(ak, av, bk, bv);
-  dict->SetWithoutPathExpansion(ck, cv);
-  return dict.Pass();
-}
-
-}  // namespace test_util
-}  // namespace json_schema_compiler
diff --git a/tools/json_schema_compiler/test/test_util.h b/tools/json_schema_compiler/test/test_util.h
deleted file mode 100644
index 7590004..0000000
--- a/tools/json_schema_compiler/test/test_util.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef TOOLS_JSON_SCHEMA_COMPILER_TEST_TEST_UTIL_H_
-#define TOOLS_JSON_SCHEMA_COMPILER_TEST_TEST_UTIL_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "base/strings/string_piece.h"
-#include "base/values.h"
-
-namespace json_schema_compiler {
-namespace test_util {
-
-scoped_ptr<base::Value> ReadJson(const base::StringPiece& json);
-
-template <typename T>
-std::vector<T> Vector(const T& a) {
-  std::vector<T> arr;
-  arr.push_back(a);
-  return arr;
-}
-template <typename T>
-std::vector<T> Vector(const T& a, const T& b) {
-  std::vector<T> arr = Vector(a);
-  arr.push_back(b);
-  return arr;
-}
-template <typename T>
-std::vector<T> Vector(const T& a, const T& b, const T& c) {
-  std::vector<T> arr = Vector(a, b);
-  arr.push_back(c);
-  return arr;
-}
-
-scoped_ptr<base::ListValue> List(base::Value* a);
-scoped_ptr<base::ListValue> List(base::Value* a, base::Value* b);
-scoped_ptr<base::ListValue> List(base::Value* a,
-                                 base::Value* b,
-                                 base::Value* c);
-
-scoped_ptr<base::DictionaryValue> Dictionary(
-    const std::string& ak, base::Value* av);
-scoped_ptr<base::DictionaryValue> Dictionary(
-    const std::string& ak, base::Value* av,
-    const std::string& bk, base::Value* bv);
-scoped_ptr<base::DictionaryValue> Dictionary(
-    const std::string& ak, base::Value* av,
-    const std::string& bk, base::Value* bv,
-    const std::string& ck, base::Value* cv);
-
-}  // namespace test_util
-}  // namespace json_schema_compiler
-
-#endif  // TOOLS_JSON_SCHEMA_COMPILER_TEST_TEST_UTIL_H_
diff --git a/tools/json_schema_compiler/test/windows.json b/tools/json_schema_compiler/test/windows.json
deleted file mode 100644
index ae90084..0000000
--- a/tools/json_schema_compiler/test/windows.json
+++ /dev/null
@@ -1,265 +0,0 @@
-[
-  {
-    "namespace": "windows",
-    "description": "The windows API.",
-    "types": [
-      {
-        "id": "Window",
-        "type": "object",
-        "properties": {
-          "id": {"type": "integer", "minimum": 0, "description": "The ID of the window. Window IDs are unique within a browser session."},
-          "focused": {"type": "boolean", "description": "Whether the window is currently the focused window."},
-          "top": {"type": "integer", "description": "The offset of the window from the top edge of the screen in pixels."},
-          "left": {"type": "integer", "description": "The offset of the window from the left edge of the screen in pixels."},
-          "width": {"type": "integer", "description": "The width of the window in pixels."},
-          "height": {"type": "integer", "description": "The height of the window in pixels."},
-          "tabs": {"type": "array", "items": { "$ref": "tabs.Tab" }, "optional": true, "description": "Array of $ref:Tab objects representing the current tabs in the window."},
-          "incognito": {"type": "boolean", "description": "Whether the window is incognito."},
-          "type": {
-            "type": "string",
-            "description": "The type of browser window this is.",
-            "enum": ["normal", "popup", "panel", "app"]
-          },
-          "state": {
-            "type": "string",
-            "description": "The state of this browser window.",
-            "enum": ["normal", "minimized", "maximized"]
-            }
-        }
-      }
-    ],
-    "properties": {
-      "WINDOW_ID_NONE": {
-        "type": "integer",
-        "value": "-1",
-        "description": "The windowId value that represents the absence of a chrome browser window."
-      }
-    },
-    "functions": [
-      {
-        "name": "get",
-        "type": "function",
-        "description": "Gets details about a window.",
-        "parameters": [
-          {"type": "integer", "name": "windowId", "minimum": 0},
-          {
-            "type": "object",
-            "name": "getInfo",
-            "optional": true,
-            "description": "",
-            "properties": {
-              "populate": {"type": "boolean", "optional": true, "description": "If true, the window object will have a <var>tabs</var> property that contains a list of the $ref:Tab objects" }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "window", "$ref": "Window"
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "getCurrent",
-        "type": "function",
-        "description": "Gets the <a href='#current-window'>current window</a>.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "getInfo",
-            "optional": true,
-            "description": "",
-            "properties": {
-              "populate": {"type": "boolean", "optional": true, "description": "If true, the window object will have a <var>tabs</var> property that contains a list of the $ref:Tab objects" }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "window", "$ref": "Window"
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "getLastFocused",
-        "type": "function",
-        "description": "Gets the window that was most recently focused &mdash; typically the window 'on top'.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "getInfo",
-            "optional": true,
-            "description": "",
-            "properties": {
-              "populate": {"type": "boolean", "optional": true, "description": "If true, the window object will have a <var>tabs</var> property that contains a list of the $ref:Tab objects" }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "window", "$ref": "Window"
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "getAll",
-        "type": "function",
-        "description": "Gets all windows.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "getInfo",
-            "optional": true,
-            "description": "",
-            "properties": {
-              "populate": {"type": "boolean", "optional": true, "description": "If true, each window object will have a <var>tabs</var> property that contains a list of the $ref:Tab objects for that window." }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "parameters": [
-              {
-                "name": "windows", "type": "array", "items": { "$ref": "Window" }
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "create",
-        "nocompile": true,
-        "type": "function",
-        "description": "Creates (opens) a new browser with any optional sizing, position or default URL provided.",
-        "parameters": [
-          {
-            "type": "object",
-            "name": "createData",
-            "properties": {
-              "url": {
-                "type": "string",
-                "description": "A URL or list of URLs to open as tabs in the window. Fully-qualified URLs must include a scheme (i.e. 'http://www.google.com', not 'www.google.com'). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page.",
-                "optional": true,
-                "choices": [
-                  {"type": "string"},
-                  {"type": "array", "items": {"type": "string"}}
-                ]
-              },
-              "tabId": {"type": "integer", "minimum": 0, "optional": true, "description": "The id of the tab for which you want to adopt to the new window."},
-              "left": {"type": "integer", "optional": true, "description": "The number of pixels to position the new window from the left edge of the screen. If not specified, the new window is offset naturally from the last focusd window. This value is ignored for panels."},
-              "top": {"type": "integer", "optional": true, "description": "The number of pixels to position the new window from the top edge of the screen. If not specified, the new window is offset naturally from the last focusd window. This value is ignored for panels."},
-              "width": {"type": "integer", "minimum": 0, "optional": true, "description": "The width in pixels of the new window. If not specified defaults to a natural width."},
-              "height": {"type": "integer", "minimum": 0, "optional": true, "description": "The height in pixels of the new window. If not specified defaults to a natural height."},
-              "focused": {"type": "boolean", "optional": true, "description": "If true, opens an active window. If false, opens an inactive window."},
-              "incognito": {"type": "boolean", "optional": true, "description": "Whether the new window should be an incognito window."},
-              "type": {
-                "type": "string",
-                "optional": true,
-                "description": "Specifies what type of browser window to create. The 'panel' type creates a popup unless the '--enable-panels' flag is set.",
-                "enum": ["normal", "popup", "panel"]
-              }
-            },
-            "optional": true
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "window", "$ref": "Window", "description": "Contains details about the created window.",
-                "optional": true
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "update",
-        "type": "function",
-        "description": "Updates the properties of a window. Specify only the properties that you want to change; unspecified properties will be left unchanged.",
-        "parameters": [
-          {"type": "integer", "name": "windowId", "minimum": 0},
-          {
-            "type": "object",
-            "name": "updateInfo",
-            "properties": {
-              "left": {"type": "integer", "optional": true, "description": "The offset from the left edge of the screen to move the window to in pixels. This value is ignored for panels."},
-              "top": {"type": "integer", "optional": true, "description": "The offset from the top edge of the screen to move the window to in pixels. This value is ignored for panels."},
-              "width": {"type": "integer", "minimum": 0, "optional": true, "description": "The width to resize the window to in pixels. This value is ignored for panels."},
-              "height": {"type": "integer", "minimum": 0, "optional": true, "description": "The height to resize the window to in pixels. This value is ignored for panels."},
-              "focused": {"type": "boolean", "optional": true, "description": "If true, brings the window to the front. If false, brings the next window in the z-order to the front."},
-              "drawAttention": {"type": "boolean", "optional": true, "description": "If true, causes the window to be displayed in a manner that draws the user's attention to the window, without changing the focused window. The effect lasts until the user changes focus to the window. This option has no effect if set to false or if the window already has focus."},
-              "state": {
-                "type": "string",
-                "optional": true,
-                "description": "The new state of the window. The 'minimized' and 'maximized' states cannot be combined with 'left', 'top', 'width' or 'height'.",
-                "enum": ["normal", "minimized", "maximized"]
-              }
-            }
-          },
-          {
-            "type": "function",
-            "name": "callback",
-            "optional": true,
-            "parameters": [
-              {
-                "name": "window", "$ref": "Window"
-              }
-            ]
-          }
-        ]
-      },
-      {
-        "name": "remove",
-        "type": "function",
-        "description": "Removes (closes) a window, and all the tabs inside it.",
-        "parameters": [
-          {"type": "integer", "name": "windowId", "minimum": 0},
-          {"type": "function", "name": "callback", "optional": true, "parameters": []}
-        ]
-      }
-    ],
-    "events": [
-      {
-        "name": "onCreated",
-        "type": "function",
-        "description": "Fired when a window is created.",
-        "parameters": [
-          {
-            "$ref": "Window",
-            "name": "window",
-            "description": "Details of the window that was created."
-          }
-        ]
-      },
-      {
-        "name": "onRemoved",
-        "type": "function",
-        "description": "Fired when a window is removed (closed).",
-        "parameters": [
-          {"type": "integer", "name": "windowId", "minimum": 0, "description": "ID of the removed window."}
-        ]
-      },
-      {
-        "name": "onFocusChanged",
-        "type": "function",
-        "description": "Fired when the currently focused window changes. Will be chrome.windows.WINDOW_ID_NONE if all chrome windows have lost focus. Note: On some Linux window managers, WINDOW_ID_NONE will always be sent immediately preceding a switch from one chrome window to another.",
-        "parameters": [
-          {"type": "integer", "name": "windowId", "minimum": -1, "description": "ID of the newly focused window."}
-        ]
-      }
-    ]
-  }
-]
diff --git a/tools/json_schema_compiler/util.cc b/tools/json_schema_compiler/util.cc
deleted file mode 100644
index 2806cfc..0000000
--- a/tools/json_schema_compiler/util.cc
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "tools/json_schema_compiler/util.h"
-
-#include "base/values.h"
-
-namespace json_schema_compiler {
-namespace util {
-
-bool GetItemFromList(const base::ListValue& from, int index, int* out) {
-  return from.GetInteger(index, out);
-}
-
-bool GetItemFromList(const base::ListValue& from, int index, bool* out) {
-  return from.GetBoolean(index, out);
-}
-
-bool GetItemFromList(const base::ListValue& from, int index, double* out) {
-  return from.GetDouble(index, out);
-}
-
-bool GetItemFromList(const base::ListValue& from, int index, std::string* out) {
-  return from.GetString(index, out);
-}
-
-bool GetItemFromList(const base::ListValue& from,
-                     int index,
-                     linked_ptr<base::Value>* out) {
-  const base::Value* value = NULL;
-  if (!from.Get(index, &value))
-    return false;
-  *out = make_linked_ptr(value->DeepCopy());
-  return true;
-}
-
-bool GetItemFromList(const base::ListValue& from, int index,
-    linked_ptr<base::DictionaryValue>* out) {
-  const base::DictionaryValue* dict = NULL;
-  if (!from.GetDictionary(index, &dict))
-    return false;
-  *out = make_linked_ptr(dict->DeepCopy());
-  return true;
-}
-
-void AddItemToList(const int from, base::ListValue* out) {
-  out->Append(new base::FundamentalValue(from));
-}
-
-void AddItemToList(const bool from, base::ListValue* out) {
-  out->Append(new base::FundamentalValue(from));
-}
-
-void AddItemToList(const double from, base::ListValue* out) {
-  out->Append(new base::FundamentalValue(from));
-}
-
-void AddItemToList(const std::string& from, base::ListValue* out) {
-  out->Append(new base::StringValue(from));
-}
-
-void AddItemToList(const linked_ptr<base::Value>& from,
-                   base::ListValue* out) {
-  out->Append(from->DeepCopy());
-}
-
-void AddItemToList(const linked_ptr<base::DictionaryValue>& from,
-                   base::ListValue* out) {
-  out->Append(static_cast<base::Value*>(from->DeepCopy()));
-}
-
-std::string ValueTypeToString(base::Value::Type type) {
-  switch(type) {
-    case base::Value::TYPE_NULL:
-      return "null";
-    case base::Value::TYPE_BOOLEAN:
-      return "boolean";
-    case base::Value::TYPE_INTEGER:
-      return "integer";
-    case base::Value::TYPE_DOUBLE:
-      return "number";
-    case base::Value::TYPE_STRING:
-      return "string";
-    case base::Value::TYPE_BINARY:
-      return "binary";
-    case base::Value::TYPE_DICTIONARY:
-      return "dictionary";
-    case base::Value::TYPE_LIST:
-      return "list";
-  }
-  NOTREACHED();
-  return "";
-}
-
-}  // namespace api_util
-}  // namespace extensions
diff --git a/tools/json_schema_compiler/util.h b/tools/json_schema_compiler/util.h
deleted file mode 100644
index 228eced..0000000
--- a/tools/json_schema_compiler/util.h
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright (c) 2012 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.
-
-#ifndef TOOLS_JSON_SCHEMA_COMPILER_UTIL_H__
-#define TOOLS_JSON_SCHEMA_COMPILER_UTIL_H__
-
-#include <string>
-#include <vector>
-
-#include "base/memory/linked_ptr.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/values.h"
-
-namespace json_schema_compiler {
-
-namespace util {
-
-// Creates a new item at |out| from |from|[|index|]. These are used by template
-// specializations of |Get(Optional)ArrayFromList|.
-bool GetItemFromList(const base::ListValue& from, int index, int* out);
-bool GetItemFromList(const base::ListValue& from, int index, bool* out);
-bool GetItemFromList(const base::ListValue& from, int index, double* out);
-bool GetItemFromList(const base::ListValue& from, int index, std::string* out);
-bool GetItemFromList(const base::ListValue& from,
-                     int index,
-                     linked_ptr<base::Value>* out);
-bool GetItemFromList(const base::ListValue& from,
-                     int index,
-                     linked_ptr<base::DictionaryValue>* out);
-
-// This template is used for types generated by tools/json_schema_compiler.
-template<class T>
-bool GetItemFromList(const base::ListValue& from,
-                     int index,
-                     linked_ptr<T>* out) {
-  const base::DictionaryValue* dict;
-  if (!from.GetDictionary(index, &dict))
-    return false;
-  scoped_ptr<T> obj(new T());
-  if (!T::Populate(*dict, obj.get()))
-    return false;
-  *out = linked_ptr<T>(obj.release());
-  return true;
-}
-
-// Populates |out| with |list|. Returns false if there is no list at the
-// specified key or if the list has anything other than |T|.
-template <class T>
-bool PopulateArrayFromList(
-    const base::ListValue& list, std::vector<T>* out) {
-  out->clear();
-  T value;
-  for (size_t i = 0; i < list.GetSize(); ++i) {
-    if (!GetItemFromList(list, i, &value))
-      return false;
-    out->push_back(value);
-  }
-
-  return true;
-}
-
-// Populates |out| with |from|.|name|. Returns false if there is no list at
-// the specified key or if the list has anything other than |T|.
-template <class T>
-bool PopulateArrayFromDictionary(
-    const base::DictionaryValue& from,
-    const std::string& name,
-    std::vector<T>* out) {
-  const base::ListValue* list = NULL;
-  if (!from.GetListWithoutPathExpansion(name, &list))
-    return false;
-
-  return PopulateArrayFromList(*list, out);
-}
-
-// Creates a new vector containing |list| at |out|. Returns
-// true on success or if there is nothing at the specified key. Returns false
-// if anything other than a list of |T| is at the specified key.
-template <class T>
-bool PopulateOptionalArrayFromList(
-    const base::ListValue& list,
-    scoped_ptr<std::vector<T> >* out) {
-  out->reset(new std::vector<T>());
-  T value;
-  for (size_t i = 0; i < list.GetSize(); ++i) {
-    if (!GetItemFromList(list, i, &value)) {
-      out->reset();
-      return false;
-    }
-    (*out)->push_back(value);
-  }
-
-  return true;
-}
-
-// Creates a new vector containing |from|.|name| at |out|. Returns
-// true on success or if there is nothing at the specified key. Returns false
-// if anything other than a list of |T| is at the specified key.
-template <class T>
-bool PopulateOptionalArrayFromDictionary(
-    const base::DictionaryValue& from,
-    const std::string& name,
-    scoped_ptr<std::vector<T> >* out) {
-  const base::ListValue* list = NULL;
-  {
-    const base::Value* maybe_list = NULL;
-    // Since |name| is optional, its absence is acceptable. However, anything
-    // other than a ListValue is not.
-    if (!from.GetWithoutPathExpansion(name, &maybe_list))
-      return true;
-    if (!maybe_list->IsType(base::Value::TYPE_LIST))
-      return false;
-    list = static_cast<const base::ListValue*>(maybe_list);
-  }
-
-  return PopulateOptionalArrayFromList(*list, out);
-}
-
-// Appends a Value newly created from |from| to |out|. These used by template
-// specializations of |Set(Optional)ArrayToList|.
-void AddItemToList(const int from, base::ListValue* out);
-void AddItemToList(const bool from, base::ListValue* out);
-void AddItemToList(const double from, base::ListValue* out);
-void AddItemToList(const std::string& from, base::ListValue* out);
-void AddItemToList(const linked_ptr<base::Value>& from,
-                   base::ListValue* out);
-void AddItemToList(const linked_ptr<base::DictionaryValue>& from,
-                   base::ListValue* out);
-
-// This template is used for types generated by tools/json_schema_compiler.
-template<class T>
-void AddItemToList(const linked_ptr<T>& from, base::ListValue* out) {
-  out->Append(from->ToValue().release());
-}
-
-// Set |out| to the the contents of |from|. Requires GetItemFromList to be
-// implemented for |T|.
-template <class T>
-void PopulateListFromArray(
-    const std::vector<T>& from,
-    base::ListValue* out) {
-  out->Clear();
-  for (typename std::vector<T>::const_iterator it = from.begin();
-      it != from.end(); ++it) {
-    AddItemToList(*it, out);
-  }
-}
-
-// Set |out| to the the contents of |from| if |from| is non-NULL. Requires
-// GetItemFromList to be implemented for |T|.
-template <class T>
-void PopulateListFromOptionalArray(
-    const scoped_ptr<std::vector<T> >& from,
-    base::ListValue* out) {
-  if (from.get())
-    PopulateListFromArray(*from, out);
-
-}
-
-template <class T>
-scoped_ptr<base::Value> CreateValueFromArray(const std::vector<T>& from) {
-  base::ListValue* list = new base::ListValue();
-  PopulateListFromArray(from, list);
-  return scoped_ptr<base::Value>(list);
-}
-
-template <class T>
-scoped_ptr<base::Value> CreateValueFromOptionalArray(
-    const scoped_ptr<std::vector<T> >& from) {
-  if (from.get())
-    return CreateValueFromArray(*from);
-  return scoped_ptr<base::Value>();
-}
-
-std::string ValueTypeToString(base::Value::Type type);
-
-}  // namespace util
-}  // namespace json_schema_compiler
-
-#endif // TOOLS_JSON_SCHEMA_COMPILER_UTIL_H__
diff --git a/tools/json_schema_compiler/util_cc_helper.py b/tools/json_schema_compiler/util_cc_helper.py
deleted file mode 100644
index 0e41abf..0000000
--- a/tools/json_schema_compiler/util_cc_helper.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# Copyright (c) 2012 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.
-
-_API_UTIL_NAMESPACE = 'json_schema_compiler::util'
-
-
-class UtilCCHelper(object):
-  """A util class that generates code that uses
-  tools/json_schema_compiler/util.cc.
-  """
-  def __init__(self, type_manager):
-    self._type_manager = type_manager
-
-  def PopulateArrayFromDictionary(self, array_prop, src, name, dst):
-    """Generates code to get an array from a src.name into dst.
-
-    src: DictionaryValue*
-    dst: std::vector or scoped_ptr<std::vector>
-    """
-    prop = array_prop.item_type
-    sub = {
-        'namespace': _API_UTIL_NAMESPACE,
-        'name': name,
-        'src': src,
-        'dst': dst,
-    }
-
-    sub['type'] = self._type_manager.GetCppType(prop),
-    if array_prop.optional:
-      val = ('%(namespace)s::PopulateOptionalArrayFromDictionary'
-          '(*%(src)s, "%(name)s", &%(dst)s)')
-    else:
-      val = ('%(namespace)s::PopulateArrayFromDictionary'
-          '(*%(src)s, "%(name)s", &%(dst)s)')
-
-    return val % sub
-
-  def PopulateArrayFromList(self, src, dst, optional):
-    """Generates code to get an array from src into dst.
-
-    src: ListValue*
-    dst: std::vector or scoped_ptr<std::vector>
-    """
-    if optional:
-      val = '%(namespace)s::PopulateOptionalArrayFromList(*%(src)s, &%(dst)s)'
-    else:
-      val = '%(namespace)s::PopulateArrayFromList(*%(src)s, &%(dst)s)'
-    return val % {
-      'namespace': _API_UTIL_NAMESPACE,
-      'src': src,
-      'dst': dst
-    }
-
-  def CreateValueFromArray(self, src, optional):
-    """Generates code to create a scoped_pt<Value> from the array at src.
-
-    |src| The variable to convert, either a vector or scoped_ptr<vector>.
-    |optional| Whether |type_| was optional. Optional types are pointers so
-        must be treated differently.
-    """
-    if optional:
-      name = 'CreateValueFromOptionalArray'
-    else:
-      name = 'CreateValueFromArray'
-    return '%s::%s(%s)' % (_API_UTIL_NAMESPACE, name, src)
-
-  def GetIncludePath(self):
-    return '#include "tools/json_schema_compiler/util.h"'
-
-  def GetValueTypeString(self, value, is_ptr=False):
-    call = '.GetType()'
-    if is_ptr:
-      call = '->GetType()'
-    return 'json_schema_compiler::util::ValueTypeToString(%s%s)' % (value, call)
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn
index 043e5ef..8b0a92e 100644
--- a/ui/accessibility/BUILD.gn
+++ b/ui/accessibility/BUILD.gn
@@ -2,8 +2,6 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//build/json_schema_api.gni")
-
 component("accessibility") {
   sources = [
     "ax_enums.cc",