blob: c35b938a72c70111246ce75ca91520877f3fc36d [file] [log] [blame]
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/features.gni")
import("//chrome/common/features.gni")
import("//chrome/test/base/js2gtest.gni")
import("//components/nacl/features.gni")
import("//testing/test.gni")
import("//third_party/closure_compiler/compile_js.gni")
import("run_jsbundler.gni")
assert(is_chromeos)
declare_args() {
# Whether to compress the main Chromevox javascript files or load the
# modules individually from source files.
chromevox_compress_js = true
}
closure_library_dir =
"//third_party/chromevox/third_party/closure-library/closure/goog"
# List of all modules that are included in one or more of the production
# chromevox scripts.
chromevox_modules = [
"braille/braille_display_manager.js",
"braille/braille_input_handler.js",
"braille/braille_key_event_rewriter.js",
"braille/braille_key_types.js",
"braille/braille_table.js",
"braille/braille_translator_manager.js",
"braille/bluetooth_braille_display_manager.js",
"braille/bluetooth_braille_display_ui.js",
"braille/expanding_braille_translator.js",
"braille/liblouis.js",
"braille/nav_braille.js",
"braille/pan_strategy.js",
"braille/spans.js",
"chromevox/background/background.js",
"chromevox/background/braille_captions_background.js",
"chromevox/background/injected_script_loader.js",
"chromevox/background/kbexplorer.js",
"chromevox/background/keymaps/key_map.js",
"chromevox/background/options.js",
"chromevox/background/prefs.js",
"chromevox/background/tabs_api_handler.js",
"chromevox/injected/active_indicator.js",
"chromevox/injected/api_implementation.js",
"chromevox/injected/event_suspender.js",
"chromevox/injected/event_watcher.js",
"chromevox/injected/history.js",
"chromevox/injected/init_document.js",
"chromevox/injected/init_globals.js",
"chromevox/injected/initial_speech.js",
"chromevox/injected/keyboard_handler.js",
"chromevox/injected/live_regions.js",
"chromevox/injected/navigation_history.js",
"chromevox/injected/navigation_manager.js",
"chromevox/injected/navigation_shifter.js",
"chromevox/injected/navigation_speaker.js",
"chromevox/injected/node_breadcrumb.js",
"chromevox/injected/script_installer.js",
"chromevox/injected/serializer.js",
"chromevox/injected/ui/braille_overlay_widget.js",
"chromevox/injected/ui/context_menu_widget.js",
"chromevox/injected/ui/keyboard_help_widget.js",
"chromevox/injected/ui/node_search_widget.js",
"chromevox/injected/ui/overlay_widget.js",
"chromevox/injected/ui/search_widget.js",
"chromevox/injected/ui/select_widget.js",
"chromevox/injected/ui/spoken_messages.js",
"chromevox/injected/ui/widget.js",
"chromevox/injected/user_commands.js",
"chromevox/injected/user_event_detail.js",
"common/aria_util.js",
"common/aural_style_util.js",
"common/braille_text_handler.js",
"common/braille_util.js",
"common/buildinfo.js",
"common/chromevox.js",
"common/chromevox_json.js",
"common/command_store.js",
"common/composite_tts.js",
"common/content_editable_extractor.js",
"common/cursor.js",
"common/cursor_selection.js",
"common/date_widget.js",
"common/description_util.js",
"common/dom_predicates.js",
"common/dom_util.js",
"common/earcon_util.js",
"common/editable_text.js",
"common/editable_text_area_shadow.js",
"common/editable_text_base.js",
"common/find_util.js",
"common/focus_util.js",
"common/focuser.js",
"common/group_util.js",
"common/interframe.js",
"common/key_sequence.js",
"common/key_util.js",
"common/media_widget.js",
"common/memoize.js",
"common/msgs.js",
"common/nav_description.js",
"common/nav_math_description.js",
"common/node_state.js",
"common/page_selection.js",
"common/platform_util.js",
"common/selection_util.js",
"common/spannable.js",
"common/string_util.js",
"common/table_util.js",
"common/time_widget.js",
"common/traverse_content.js",
"common/traverse_table.js",
"common/traverse_util.js",
"common/xpath_util.js",
"cvox2/background/automation_object_constructor_installer.js",
"cvox2/background/automation_predicate.js",
"cvox2/background/automation_util.js",
"cvox2/background/background.js",
"cvox2/background/base_automation_handler.js",
"cvox2/background/braille_command_data.js",
"cvox2/background/braille_command_handler.js",
"cvox2/background/chromevox_state.js",
"cvox2/background/command_handler.js",
"cvox2/background/console_tts.js",
"cvox2/background/constants.js",
"cvox2/background/cursors.js",
"cvox2/background/custom_automation_event.js",
"cvox2/background/desktop_automation_handler.js",
"cvox2/background/earcon_engine.js",
"cvox2/background/editing.js",
"cvox2/background/event_source.js",
"cvox2/background/event_stream_logger.js",
"cvox2/background/find_handler.js",
"cvox2/background/gesture_command_data.js",
"cvox2/background/gesture_command_handler.js",
"cvox2/background/i_search.js",
"cvox2/background/keyboard_handler.js",
"cvox2/background/live_regions.js",
"cvox2/background/log.js",
"cvox2/background/log_store.js",
"cvox2/background/math_handler.js",
"cvox2/background/media_automation_handler.js",
"cvox2/background/mouse_handler.js",
"cvox2/background/next_earcons.js",
"cvox2/background/notifications.js",
"cvox2/background/output.js",
"cvox2/background/output_logger.js",
"cvox2/background/panel.js",
"cvox2/background/panel_command.js",
"cvox2/background/panel_menu.js",
"cvox2/background/panel_menu_item.js",
"cvox2/background/recovery_strategy.js",
"cvox2/background/tree_dumper.js",
"cvox2/background/tree_walker.js",
"cvox2/background/tutorial.js",
"cvox2/injected/keyboard_handler.js",
"cvox2/injected/loader.js",
"extensions/searchvox/abstract_result.js",
"extensions/searchvox/constants.js",
"extensions/searchvox/context_menu.js",
"extensions/searchvox/loader.js",
"extensions/searchvox/results.js",
"extensions/searchvox/search.js",
"extensions/searchvox/search_tools.js",
"extensions/searchvox/util.js",
"host/chrome/braille.js",
"host/chrome/braille_background.js",
"host/chrome/classic_earcons.js",
"host/chrome/earcons.js",
"host/chrome/extension_bridge.js",
"host/chrome/host.js",
"host/chrome/tts.js",
"host/chrome/tts_background.js",
"host/chrome/tts_base.js",
"host/interface/abstract_earcons.js",
"host/interface/abstract_host.js",
"host/interface/abstract_tts.js",
"host/interface/braille_interface.js",
"host/interface/host_factory.js",
"host/interface/tts_interface.js",
"walkers/abstract_node_walker.js",
"walkers/abstract_selection_walker.js",
"walkers/abstract_shifter.js",
"walkers/abstract_walker.js",
"walkers/bare_object_walker.js",
"walkers/character_walker.js",
"walkers/column_walker.js",
"walkers/group_walker.js",
"walkers/layout_line_walker.js",
"walkers/object_walker.js",
"walkers/row_walker.js",
"walkers/sentence_walker.js",
"walkers/structural_line_walker.js",
"walkers/table_shifter.js",
"walkers/table_walker.js",
"walkers/word_walker.js",
]
# Closure library modules neede by chromevox.
relative_closure_library_modules = [
"i18n/pluralrules.js",
"i18n/ordinalrules.js",
"i18n/messageformat.js",
"string/string.js",
"dom/nodetype.js",
"base.js",
"asserts/asserts.js",
"debug/error.js",
"object/object.js",
]
closure_library_modules =
rebase_path(relative_closure_library_modules, ".", closure_library_dir)
chromevox_out_dir = "$root_out_dir/resources/chromeos/chromevox"
group("chromevox") {
deps = [
":chromevox_copied_files",
":chromevox_guest_manifest",
":chromevox_manifest",
"//chrome/browser/resources/chromeos/braille_ime:braille_ime_manifest",
"//chrome/browser/resources/chromeos/chromevox/strings:chromevox_strings",
"//third_party/chromevox:chromevox_third_party_resources",
]
if (enable_nacl) {
deps += [ "//third_party/liblouis" ]
}
if (chromevox_compress_js) {
deps += [
":chromevox_background_script",
":chromevox_content_script",
":chromevox_kbexplorer_script",
":chromevox_log_script",
":chromevox_min_content_script",
":chromevox_options_script",
":chromevox_panel_script",
]
} else {
deps += [ ":chromevox_deps_js" ]
}
}
chromevox_background_script_loader_file = "cvox2/background/loader.js"
chromevox_content_script_loader_file = "chromevox/injected/loader.js"
chromevox_kbexplorer_loader_file = "chromevox/background/kbexplorer_loader.js"
chromevox_log_loader_file = "cvox2/background/log_loader.js"
chromevox_min_content_script_loader_file = "cvox2/injected/loader.js"
chromevox_options_script_loader_file = "chromevox/background/options_loader.js"
chromevox_panel_script_loader_file = "cvox2/background/panel_loader.js"
# Instead of setting up one copy target for each subdirectory, use a script
# to copy all files.
run_jsbundler("chromevox_copied_files") {
mode = "copy"
dest_dir = chromevox_out_dir
sources = [
"chromevox/background/background.html",
"chromevox/background/checked.png",
"chromevox/background/earcons/alert_modal.ogg",
"chromevox/background/earcons/alert_nonmodal.ogg",
"chromevox/background/earcons/button.ogg",
"chromevox/background/earcons/check_off.ogg",
"chromevox/background/earcons/check_on.ogg",
"chromevox/background/earcons/editable_text.ogg",
"chromevox/background/earcons/invalid_keypress.ogg",
"chromevox/background/earcons/link.ogg",
"chromevox/background/earcons/list_item.ogg",
"chromevox/background/earcons/listbox.ogg",
"chromevox/background/earcons/long_desc.ogg",
"chromevox/background/earcons/math.ogg",
"chromevox/background/earcons/object_close.ogg",
"chromevox/background/earcons/object_enter.ogg",
"chromevox/background/earcons/object_exit.ogg",
"chromevox/background/earcons/object_open.ogg",
"chromevox/background/earcons/object_select.ogg",
"chromevox/background/earcons/page_finish_loading.ogg",
"chromevox/background/earcons/page_start_loading.ogg",
"chromevox/background/earcons/recover_focus.ogg",
"chromevox/background/earcons/selection.ogg",
"chromevox/background/earcons/selection_reverse.ogg",
"chromevox/background/earcons/skip.ogg",
"chromevox/background/earcons/wrap.ogg",
"chromevox/background/earcons/wrap_edge.ogg",
"chromevox/background/kbexplorer.html",
"chromevox/background/keymaps/classic_keymap.json",
"chromevox/background/keymaps/experimental.json",
"chromevox/background/keymaps/flat_keymap.json",
"chromevox/background/keymaps/next_keymap.json",
"chromevox/background/options.css",
"chromevox/background/options.html",
"chromevox/background/unchecked.png",
"chromevox/injected/api.js",
"cvox2/background/background.html",
"cvox2/background/earcons/control.wav",
"cvox2/background/earcons/selection.wav",
"cvox2/background/earcons/selection_reverse.wav",
"cvox2/background/earcons/skim.wav",
"cvox2/background/earcons/small_room_2.wav",
"cvox2/background/earcons/static.wav",
"cvox2/background/log.css",
"cvox2/background/log.html",
"cvox2/background/panel.css",
"cvox2/background/panel.html",
"images/chromevox-128.png",
"images/chromevox-16.png",
"images/chromevox-19.png",
"images/chromevox-48.png",
"images/chromevox.svg",
"images/close-19.png",
"images/close-hover-19.png",
"images/options-19.png",
"images/options-hover-19.png",
"images/triangle-6.png",
]
if (!chromevox_compress_js) {
sources += chromevox_modules
sources += [
"closure/closure_preinit.js",
chromevox_background_script_loader_file,
chromevox_content_script_loader_file,
chromevox_kbexplorer_loader_file,
chromevox_log_loader_file,
chromevox_min_content_script_loader_file,
chromevox_options_script_loader_file,
chromevox_panel_script_loader_file,
]
}
if (!chromevox_compress_js) {
sources += closure_library_modules
}
rewrite_rules = [
rebase_path(".", root_build_dir) + ":",
rebase_path(closure_library_dir, root_build_dir) + ":closure",
]
}
# TODO: refactor this into another file like generate_manifest.gni
# to share with other extensions.
template("manifest") {
version_file = "//chrome/VERSION"
version_script = "//build/util/version.py"
template_file = "manifest.json.jinja2"
output_file = invoker.output_file
key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDltVl1k15pjRzuZfMc3B69inxwm2bZeZ2O8/zFO+NluHnBm3GJ3fzdOoFGJd+M16I8p7zxxQyHeDMfWYASyCeB8XnUEDKjqNLQfCnncsANzHsYoEbYj2nEUML2P13b9q+AAvpCBpAJ4cZp81e9n1y/vbSXHE4385cgkKueItzikQIDAQAB"
action(target_name) {
script = "tools/generate_manifest.py"
inputs = [
version_file,
version_script,
]
sources = [
template_file,
]
outputs = [
output_file,
]
args = [
"--key=$key",
"--version_file=" + rebase_path(version_file, root_build_dir),
"--output_manifest=" + rebase_path(output_file, root_build_dir),
]
if (defined(invoker.is_guest_manifest) && invoker.is_guest_manifest) {
args += [ "--is_guest_manifest=1" ]
}
if (!chromevox_compress_js) {
args += [ "--is_js_compressed=0" ]
}
args += rebase_path(sources, root_build_dir)
}
}
manifest("chromevox_manifest") {
output_file = "$chromevox_out_dir/manifest.json"
}
manifest("chromevox_guest_manifest") {
output_file = "$chromevox_out_dir/manifest_guest.json"
is_guest_manifest = true
}
template("generate_deps_js") {
if (defined(invoker.rewrite_rules)) {
rewrite_rules = invoker.rewrite_rules
} else {
rewrite_rules = []
}
action(target_name) {
if (defined(invoker.testonly)) {
testonly = invoker.testonly
}
script = "tools/generate_deps.py"
inputs = jsbundler_modules
sources = invoker.sources
outputs = [
invoker.output_file,
]
args = [
"-o",
rebase_path(invoker.output_file, root_build_dir),
]
foreach(rule, rewrite_rules) {
args += [
"-w",
rule,
]
}
args += rebase_path(sources, root_build_dir)
if (defined(invoker.deps)) {
deps = invoker.deps
}
}
}
if (chromevox_compress_js) {
template("compress_js") {
run_jsbundler(target_name) {
assert(defined(invoker.output_file))
mode = "compressed_bundle"
modules = chromevox_modules + closure_library_modules
sources = invoker.sources
output_file = invoker.output_file
}
}
compress_js("chromevox_content_script") {
sources = [
chromevox_content_script_loader_file,
]
output_file = "$chromevox_out_dir/chromeVoxChromePageScript.js"
}
compress_js("chromevox_kbexplorer_script") {
sources = [
chromevox_kbexplorer_loader_file,
]
output_file = "$chromevox_out_dir/chromeVoxKbExplorerScript.js"
}
compress_js("chromevox_log_script") {
sources = [
chromevox_log_loader_file,
]
output_file = "$chromevox_out_dir/chromeVoxLogScript.js"
}
compress_js("chromevox_options_script") {
sources = [
chromevox_options_script_loader_file,
]
output_file = "$chromevox_out_dir/chromeVoxChromeOptionsScript.js"
}
compress_js("chromevox_background_script") {
sources = [
chromevox_background_script_loader_file,
]
output_file = "$chromevox_out_dir/chromeVox2ChromeBackgroundScript.js"
}
compress_js("chromevox_min_content_script") {
sources = [
chromevox_min_content_script_loader_file,
]
output_file = "$chromevox_out_dir/chromeVox2ChromePageScript.js"
}
compress_js("chromevox_panel_script") {
sources = [
chromevox_panel_script_loader_file,
]
output_file = "$chromevox_out_dir/chromeVoxPanelScript.js"
}
} else {
generate_deps_js("chromevox_deps_js") {
sources = chromevox_modules + closure_library_modules
output_file = "$chromevox_out_dir/deps.js"
rewrite_rules = [
rebase_path(".", root_build_dir) + ":..",
rebase_path(closure_library_dir, root_build_dir) + ":../closure",
]
}
}
source_set("browser_tests") {
testonly = true
assert(enable_extensions)
deps = [
":chromevox_extjs_tests",
":chromevox_unitjs_tests",
]
# TODO(jamescook): Figure out which of these are really necessary.
data = [
"$root_out_dir/chrome_100_percent.pak",
"$root_out_dir/chrome_200_percent.pak",
"$root_out_dir/locales/en-US.pak",
"$root_out_dir/locales/fr.pak",
"$root_out_dir/resources.pak",
"$root_out_dir/resources/chromeos/chromevox/",
"$root_out_dir/test_data/chrome/browser/resources/chromeos/chromevox/",
# Surprisingly, the test uses data from the original location, not the
# copied one.
"//chrome/browser/resources/chromeos/chromevox/",
"//chrome/test/data/webui/test_api.js",
"//third_party/chromevox/",
"//chrome/third_party/mock4js/",
"//third_party/accessibility-audit/axs_testing.js",
"//third_party/chaijs/chai.js",
]
}
action("chromevox_test_messages_js") {
script = "tools/generate_test_messages.py"
sources = [
"$chromevox_out_dir/_locales/en/messages.json",
]
output_file = "$root_out_dir/test_data/chrome/browser/resources/chromeos/chromevox/host/testing/test_messages.js"
outputs = [
output_file,
]
deps = [
"strings:chromevox_strings",
]
args = [
"-o",
rebase_path(output_file, root_build_dir),
] + rebase_path(sources, root_build_dir)
}
chromevox_test_modules = [
"host/testing/earcons.js",
"host/testing/host.js",
"host/testing/tts.js",
"testing/spoken_list_builder.js",
"testing/test_msgs.js",
"testing/tester.js",
] + get_target_outputs(":chromevox_test_messages_js")
generate_deps_js("chromevox_test_deps_js") {
sources = closure_library_modules + chromevox_modules + chromevox_test_modules
output_file = "$target_gen_dir/test_deps.js"
rewrite_rules = [
rebase_path("//", root_build_dir) + ":",
rebase_path("$root_out_dir/test_data", root_build_dir) + ":",
]
deps = [
":chromevox_test_messages_js",
]
}
js2gtest("chromevox_unitjs_tests") {
test_type = "webui"
sources = [
"braille/bluetooth_braille_display_manager_test.unitjs",
"braille/bluetooth_braille_display_ui_test.unitjs",
"braille/braille_display_manager_test.unitjs",
"braille/braille_input_handler_test.unitjs",
"braille/expanding_braille_translator_test.unitjs",
"braille/pan_strategy_test.unitjs",
"chromevox/injected/event_watcher_test.unitjs",
"chromevox/injected/live_regions_test.unitjs",
"chromevox/injected/navigation_manager_test.unitjs",
"chromevox/injected/user_commands_test.unitjs",
"common/aria_util_test.unitjs",
"common/braille_text_handler_test.unitjs",
"common/braille_util_test.unitjs",
"common/command_store_test.unitjs",
"common/content_editable_extractor_test.unitjs",
"common/cursor_selection_test.unitjs",
"common/dom_util_test.unitjs",
"common/editable_text_area_shadow_test.unitjs",
"common/editable_text_test.unitjs",
"common/find_util_test.unitjs",
"common/key_sequence_test.unitjs",
"common/page_selection_test.unitjs",
"common/selection_util_test.unitjs",
"common/spannable_test.unitjs",
"common/string_util_test.unitjs",
"host/chrome/braille_integration_test.unitjs",
"testing/mock_feedback_test.unitjs",
"walkers/character_walker_test.unitjs",
"walkers/group_walker_test.unitjs",
"walkers/layout_line_walker_test.unitjs",
"walkers/object_walker_test.unitjs",
"walkers/sentence_walker_test.unitjs",
"walkers/structural_line_walker_test.unitjs",
"walkers/table_walker_test.unitjs",
"walkers/word_walker_test.unitjs",
]
gen_include_files = [
"testing/assert_additions.js",
"testing/callback_helper.js",
"testing/chromevox_unittest_base.js",
"testing/mock_feedback.js",
]
test_deps_js_outputs = get_target_outputs(":chromevox_test_deps_js")
deps_js = test_deps_js_outputs[0]
deps = [
":chromevox_test_deps_js",
]
defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
}
js2gtest("chromevox_extjs_tests") {
test_type = "extension"
sources = [
"braille/braille_table_test.extjs",
"braille/braille_translator_manager_test.extjs",
"braille/liblouis_test.extjs",
"cvox2/background/automation_util_test.extjs",
"cvox2/background/background_test.extjs",
"cvox2/background/cursors_test.extjs",
"cvox2/background/editing_test.extjs",
"cvox2/background/i_search_test.extjs",
"cvox2/background/live_regions_test.extjs",
"cvox2/background/log_store_test.extjs",
"cvox2/background/output_test.extjs",
"cvox2/background/panel_test.extjs",
"cvox2/background/recovery_strategy_test.extjs",
"cvox2/background/tree_walker_test.extjs",
"host/chrome/tts_background_test.extjs",
]
gen_include_files = [
"testing/assert_additions.js",
"testing/callback_helper.js",
"testing/chromevox_e2e_test_base.js",
"testing/chromevox_next_e2e_test_base.js",
"testing/mock_feedback.js",
]
# The test base classes generate C++ code with these deps.
deps = [
"//ash",
"//base",
"//chrome/browser/chromeos",
"//chrome/common",
]
defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
}
js_library("tree_walker") {
sources = [
"cvox2/background/tree_walker.js",
]
deps = [
":automation_predicate",
":constants",
]
externs_list = [
"$externs_path/automation.js",
"$externs_path/chrome_extensions.js",
]
}
js_library("automation_predicate") {
sources = [
"cvox2/background/automation_predicate.js",
]
deps = [
":constants",
]
externs_list = [
"$externs_path/automation.js",
"$externs_path/chrome_extensions.js",
]
}
js_library("constants") {
sources = [
"cvox2/background/constants.js",
]
}