Commit f0627b97 authored by David Tseng's avatar David Tseng Committed by Commit Bot

Add a build file for ChromeVox Classic

This is the on-going process to finish up the fork of ChromeVox Classic.

Adding a build file will allow us to:
- compress the ChromeVox Classic source*
- remove deps.js which is a maintenance burden *
- share string resources *
- migrate all tests only for ChromeVox Classic to ui/accessibility/extensions
- delete all Classic only js, assets from mainline ChromeVox

* denotes things that happened in this change.

Change-Id: I317be0ff2107eeb1f688da8690c38d191a55310b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1874256
Commit-Queue: David Tseng <dtseng@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#708822}
parent a9552714
...@@ -9,6 +9,7 @@ import("//chromecast/chromecast.gni") ...@@ -9,6 +9,7 @@ import("//chromecast/chromecast.gni")
import("//testing/test.gni") import("//testing/test.gni")
import("//third_party/closure_compiler/compile_js.gni") import("//third_party/closure_compiler/compile_js.gni")
import("run_jsbundler.gni") import("run_jsbundler.gni")
import("strings/chromevox_strings.gni")
assert(is_chromeos || is_chromecast) assert(is_chromeos || is_chromecast)
...@@ -230,8 +231,8 @@ group("chromevox") { ...@@ -230,8 +231,8 @@ group("chromevox") {
":chromevox_copied_files", ":chromevox_copied_files",
":chromevox_guest_manifest", ":chromevox_guest_manifest",
":chromevox_manifest", ":chromevox_manifest",
":chromevox_strings",
"//chrome/browser/resources/chromeos/braille_ime:braille_ime_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", "//third_party/chromevox:chromevox_third_party_resources",
"//third_party/liblouis", "//third_party/liblouis",
] ]
...@@ -388,6 +389,10 @@ manifest("chromevox_guest_manifest") { ...@@ -388,6 +389,10 @@ manifest("chromevox_guest_manifest") {
is_guest_manifest = true is_guest_manifest = true
} }
chromevox_strings("chromevox_strings") {
out_dir = chromevox_out_dir
}
template("generate_deps_js") { template("generate_deps_js") {
if (defined(invoker.rewrite_rules)) { if (defined(invoker.rewrite_rules)) {
rewrite_rules = invoker.rewrite_rules rewrite_rules = invoker.rewrite_rules
...@@ -533,7 +538,7 @@ action("chromevox_test_messages_js") { ...@@ -533,7 +538,7 @@ action("chromevox_test_messages_js") {
output_file, output_file,
] ]
deps = [ deps = [
"strings:chromevox_strings", ":chromevox_strings",
] ]
args = [ args = [
"-o", "-o",
......
...@@ -8,15 +8,12 @@ assert(is_chromeos || is_chromecast) ...@@ -8,15 +8,12 @@ assert(is_chromeos || is_chromecast)
closure_library_dir = closure_library_dir =
"//third_party/chromevox/third_party/closure-library/closure/goog" "//third_party/chromevox/third_party/closure-library/closure/goog"
jsbundler_modules = rebase_path([ jsbundler_modules = [
"depstree.py", "//third_party/chromevox/third_party/closure-library/closure/bin/build/depstree.py",
"source.py", "//third_party/chromevox/third_party/closure-library/closure/bin/build/source.py",
"treescan.py", "//third_party/chromevox/third_party/closure-library/closure/bin/build/treescan.py",
], "//third_party/devtools-frontend/src/scripts/build/rjsmin.py",
".", ]
"$closure_library_dir/../bin/build")
jsbundler_modules +=
[ "//third_party/devtools-frontend/src/scripts/build/rjsmin.py" ]
template("run_jsbundler") { template("run_jsbundler") {
assert(defined(invoker.mode)) assert(defined(invoker.mode))
......
# 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("//chrome/common/features.gni")
import("//tools/grit/grit_rule.gni")
chromevox_out_dir = "$root_out_dir/resources/chromeos/chromevox"
grit("chromevox_strings") {
source = "chromevox_strings.grd"
defines = chrome_grit_defines
outputs = [
"_locales/am/messages.json",
"_locales/ar/messages.json",
"_locales/bg/messages.json",
"_locales/bn/messages.json",
"_locales/ca/messages.json",
"_locales/cs/messages.json",
"_locales/da/messages.json",
"_locales/de/messages.json",
"_locales/el/messages.json",
"_locales/en_GB/messages.json",
"_locales/en/messages.json",
"_locales/es/messages.json",
"_locales/es_419/messages.json",
"_locales/et/messages.json",
"_locales/fa/messages.json",
"_locales/fi/messages.json",
"_locales/fil/messages.json",
"_locales/fr/messages.json",
"_locales/gu/messages.json",
"_locales/he/messages.json",
"_locales/hi/messages.json",
"_locales/hr/messages.json",
"_locales/hu/messages.json",
"_locales/id/messages.json",
"_locales/it/messages.json",
"_locales/ja/messages.json",
"_locales/kn/messages.json",
"_locales/ko/messages.json",
"_locales/lt/messages.json",
"_locales/lv/messages.json",
"_locales/ml/messages.json",
"_locales/mr/messages.json",
"_locales/ms/messages.json",
"_locales/nl/messages.json",
"_locales/nb/messages.json",
"_locales/pl/messages.json",
"_locales/pt_BR/messages.json",
"_locales/pt_PT/messages.json",
"_locales/ro/messages.json",
"_locales/ru/messages.json",
"_locales/sk/messages.json",
"_locales/sl/messages.json",
"_locales/sr/messages.json",
"_locales/sv/messages.json",
"_locales/sw/messages.json",
"_locales/ta/messages.json",
"_locales/te/messages.json",
"_locales/th/messages.json",
"_locales/tr/messages.json",
"_locales/uk/messages.json",
"_locales/vi/messages.json",
"_locales/zh_CN/messages.json",
"_locales/zh_TW/messages.json",
]
output_dir = chromevox_out_dir
# Don't polute the extension directory with stamp and .d files.
depfile_dir = target_out_dir
resource_ids = ""
}
# 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("//chrome/common/features.gni")
import("//tools/grit/grit_rule.gni")
template("chromevox_strings") {
grit(target_name) {
source = "//chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings.grd"
defines = chrome_grit_defines
outputs = [
"_locales/am/messages.json",
"_locales/ar/messages.json",
"_locales/bg/messages.json",
"_locales/bn/messages.json",
"_locales/ca/messages.json",
"_locales/cs/messages.json",
"_locales/da/messages.json",
"_locales/de/messages.json",
"_locales/el/messages.json",
"_locales/en_GB/messages.json",
"_locales/en/messages.json",
"_locales/es/messages.json",
"_locales/es_419/messages.json",
"_locales/et/messages.json",
"_locales/fa/messages.json",
"_locales/fi/messages.json",
"_locales/fil/messages.json",
"_locales/fr/messages.json",
"_locales/gu/messages.json",
"_locales/he/messages.json",
"_locales/hi/messages.json",
"_locales/hr/messages.json",
"_locales/hu/messages.json",
"_locales/id/messages.json",
"_locales/it/messages.json",
"_locales/ja/messages.json",
"_locales/kn/messages.json",
"_locales/ko/messages.json",
"_locales/lt/messages.json",
"_locales/lv/messages.json",
"_locales/ml/messages.json",
"_locales/mr/messages.json",
"_locales/ms/messages.json",
"_locales/nl/messages.json",
"_locales/nb/messages.json",
"_locales/pl/messages.json",
"_locales/pt_BR/messages.json",
"_locales/pt_PT/messages.json",
"_locales/ro/messages.json",
"_locales/ru/messages.json",
"_locales/sk/messages.json",
"_locales/sl/messages.json",
"_locales/sr/messages.json",
"_locales/sv/messages.json",
"_locales/sw/messages.json",
"_locales/ta/messages.json",
"_locales/te/messages.json",
"_locales/th/messages.json",
"_locales/tr/messages.json",
"_locales/uk/messages.json",
"_locales/vi/messages.json",
"_locales/zh_CN/messages.json",
"_locales/zh_TW/messages.json",
]
output_dir = invoker.out_dir
# Don't polute the extension directory with stamp and .d files.
depfile_dir = target_out_dir
resource_ids = ""
}
}
...@@ -9,6 +9,9 @@ group("extensions") { ...@@ -9,6 +9,9 @@ group("extensions") {
":caretbrowsing", ":caretbrowsing",
":colorenhancer", ":colorenhancer",
] ]
if (is_chromeos) {
deps += [ "chromevoxclassic:chromevox" ]
}
} }
locale_files = [ locale_files = [
......
# Copyright 2019 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/browser/resources/chromeos/chromevox/run_jsbundler.gni")
import(
"//chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings.gni")
import("//chrome/common/features.gni")
import("//chrome/test/base/js2gtest.gni")
import("//testing/test.gni")
import("//third_party/closure_compiler/compile_js.gni")
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_types.js",
"braille/braille_table.js",
"braille/braille_translator_manager.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/mathmaps/math_map.js",
"chromevox/background/options.js",
"chromevox/background/prefs.js",
"chromevox/background/tabs_api_handler.js",
"chromevox/injected/active_indicator.js",
"chromevox/injected/api.js",
"chromevox/injected/api_implementation.js",
"chromevox/injected/api_util.js",
"chromevox/injected/console_tts.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/mathjax.js",
"chromevox/injected/mathjax_external_util.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/pdf_processor.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/math_semantic_attr.js",
"common/math_semantic_tree.js",
"common/math_semantic_util.js",
"common/math_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_math.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/chromevox_state.js",
"cvox2/background/constants.js",
"cvox2/background/cursors.js",
"cvox2/background/desktop_automation_handler.js",
"cvox2/background/earcon_engine.js",
"cvox2/background/editing.js",
"cvox2/background/i_search.js",
"cvox2/background/live_regions.js",
"cvox2/background/next_earcons.js",
"cvox2/background/notifications.js",
"cvox2/background/output.js",
"cvox2/background/panel.js",
"cvox2/background/panel_command.js",
"cvox2/background/panel_menu.js",
"cvox2/background/panel_menu_item.js",
"cvox2/background/sre_browser.js",
"cvox2/background/tabs_automation_handler.js",
"cvox2/background/tree_walker.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/mathjax.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_mathjax.js",
"host/interface/abstract_tts.js",
"host/interface/braille_interface.js",
"host/interface/mathjax_interface.js",
"host/interface/host_factory.js",
"host/interface/tts_interface.js",
"speech_rules/base_rule_store.js",
"speech_rules/mathml_store.js",
"speech_rules/mathml_store_rules.js",
"speech_rules/mathml_store_util.js",
"speech_rules/math_simple_store.js",
"speech_rules/math_store.js",
"speech_rules/speech_rule_engine.js",
"speech_rules/speech_rule_evaluator.js",
"speech_rules/speech_rule_functions.js",
"speech_rules/speech_rule.js",
"speech_rules/speech_rule_store.js",
"speech_rules/store_util.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/math_shifter.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/chromevoxclassic"
group("chromevox") {
deps = [
":chromevox_background_script",
":chromevox_content_script",
":chromevox_copied_files",
":chromevox_kbexplorer_script",
":chromevox_manifest",
":chromevox_options_script",
":chromevox_strings",
"//third_party/chromevox:chromevox_third_party_resources",
"//third_party/liblouis",
]
}
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_options_script_loader_file = "chromevox/background/options_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/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/mathmaps/functions/algebra.json",
"chromevox/background/mathmaps/functions/elementary.json",
"chromevox/background/mathmaps/functions/hyperbolic.json",
"chromevox/background/mathmaps/functions/trigonometry.json",
"chromevox/background/mathmaps/symbols/greek-capital.json",
"chromevox/background/mathmaps/symbols/greek-mathfonts.json",
"chromevox/background/mathmaps/symbols/greek-scripts.json",
"chromevox/background/mathmaps/symbols/greek-small.json",
"chromevox/background/mathmaps/symbols/greek-symbols.json",
"chromevox/background/mathmaps/symbols/hebrew_letters.json",
"chromevox/background/mathmaps/symbols/latin-lower-double-accent.json",
"chromevox/background/mathmaps/symbols/latin-lower-normal.json",
"chromevox/background/mathmaps/symbols/latin-lower-phonetic.json",
"chromevox/background/mathmaps/symbols/latin-lower-single-accent.json",
"chromevox/background/mathmaps/symbols/latin-mathfonts.json",
"chromevox/background/mathmaps/symbols/latin-rest.json",
"chromevox/background/mathmaps/symbols/latin-upper-double-accent.json",
"chromevox/background/mathmaps/symbols/latin-upper-normal.json",
"chromevox/background/mathmaps/symbols/latin-upper-single-accent.json",
"chromevox/background/mathmaps/symbols/math_angles.json",
"chromevox/background/mathmaps/symbols/math_arrows.json",
"chromevox/background/mathmaps/symbols/math_characters.json",
"chromevox/background/mathmaps/symbols/math_delimiters.json",
"chromevox/background/mathmaps/symbols/math_digits.json",
"chromevox/background/mathmaps/symbols/math_geometry.json",
"chromevox/background/mathmaps/symbols/math_harpoons.json",
"chromevox/background/mathmaps/symbols/math_non_characters.json",
"chromevox/background/mathmaps/symbols/math_symbols.json",
"chromevox/background/mathmaps/symbols/math_whitespace.json",
"chromevox/background/mathmaps/symbols/other_stars.json",
"chromevox/background/options.html",
"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/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",
]
rewrite_rules = [
rebase_path(".", root_build_dir) + ":",
rebase_path(closure_library_dir, root_build_dir) + ":closure",
]
}
# TODO(crbug/978200): 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 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGBi/oD7Yl/Y16w3+gee/95/EUpRZ2U6c+8orV5ei+3CRsBsoXI/DPGBauZ3rWQ47aQnfoG00sXigFdJA2NhNK9OgmRA2evnsRRbjYm2BG1twpaLsgQPPus3PyczbDCvhFu8k24wzFyEtxLrfxAGBseBPb9QrCz7B4k2QgxD/CwIDAQAB"
action(target_name) {
script = "//chrome/browser/resources/chromeos/chromevox/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),
]
args += rebase_path(sources, root_build_dir)
}
}
manifest("chromevox_manifest") {
output_file = "$chromevox_out_dir/manifest.json"
}
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
}
}
}
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_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"
}
chromevox_strings("chromevox_strings") {
out_dir = chromevox_out_dir
}
if (is_chromeos) {
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",
]
}
}
generate_deps_js("chromevox_test_deps_js") {
sources = closure_library_modules + chromevox_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 = [
"//chrome/browser/resources/chromeos/chromevox: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" ]
}
if (is_chromeos) {
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/braille_command_data_test.extjs",
"cvox2/background/color_test.extjs",
"cvox2/background/cursors_test.extjs",
"cvox2/background/download_handler_test.extjs",
"cvox2/background/editing_test.extjs",
"cvox2/background/i_search_test.extjs",
"cvox2/background/language_switching_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",
]
}
...@@ -4,20 +4,31 @@ ...@@ -4,20 +4,31 @@
ChromeVox Classic is a screen reader built utilizing only web api's available ChromeVox Classic is a screen reader built utilizing only web api's available
through the use of a content script (e.g. DOM). through the use of a content script (e.g. DOM).
Over time, this project diverged from the approach taken by ChromeVox in Chrome Over time, this project diverged from the approach taken by ChromeVox
OS, which takes an approach closer to other OS-level screen readers which talk in Chrome OS, which acts upon Chrome's intermediate accessibility api
to each renderering surface directly without direct knowledge of the specifics layer. ChromeVox on Chrome OS talks to each renderering surface
within each renderer (due to an accessibility api abstraction). through this middle accessibility layer whereas ChromeVox Classic
talks directly to a webpage DOM.
## Building ## Building
This directly contains everything you need. It can be loaded into Chrome as an ChromeVox Classic uses the same compression script as ChromeVox for
unpacked extension and ready to use. Go to chrome://extensions, and click "Load Chrome OS. You can build it by executing
Unpacked".
ninja -C out/Release ui/accessibility/extensions
The final extension, including all json, image, html, css, and other
assets, gets placed in
out/Release/chromevoxclassic.
#Loading and Testing
Go to chrome://extensions, and click "Load
Unpacked". Select out/Release/chromevoxclassic.
## Maintenance/Contributions ## Maintenance/Contributions
Tooling is minimal for this fork of ChromeVox. Much of what's available for Tooling is minimal for this fork of ChromeVox. Much of what's available for
ChromeVox in Chrome OS (chrome/browser/resources/chromeos/chromevox/tools is ChromeVox in Chrome OS (chrome/browser/resources/chromeos/chromevox/tools is
applicable) including deps.js generation, but requires adaptation. applicable.
## Release/Testing ## Release/Testing
Load ChromeVox Classic on at least Mac and Linux Chrome. Verify web content and Load ChromeVox Classic on at least Mac and Linux Chrome. Verify web content and
......
goog.addDependency('../cvox2/background/automation_object_constructor_installer.js', ['AutomationObjectConstructorInstaller'], []);
goog.addDependency('../cvox2/background/automation_predicate.js', ['AutomationPredicate', 'AutomationPredicate.Binary', 'AutomationPredicate.Unary'], []);
goog.addDependency('../cvox2/background/automation_util.js', ['AutomationUtil'], ['AutomationPredicate', 'AutomationTreeWalker', 'constants']);
goog.addDependency('../cvox2/background/background.js', ['Background'], ['AutomationPredicate', 'AutomationUtil', 'ChromeVoxState', 'LiveRegions', 'NextEarcons', 'Notifications', 'Output', 'Output.EventType', 'PanelCommand', 'constants', 'cursors.Cursor', 'cvox.BrailleKeyCommand', 'cvox.ChromeVoxBackground', 'cvox.ChromeVoxEditableTextBase', 'cvox.ChromeVoxKbHandler', 'cvox.ClassicEarcons', 'cvox.ExtensionBridge', 'cvox.NavBraille']);
goog.addDependency('../cvox2/background/base_automation_handler.js', ['BaseAutomationHandler'], []);
goog.addDependency('../cvox2/background/chromevox_state.js', ['ChromeVoxMode', 'ChromeVoxState'], ['cursors.Cursor']);
goog.addDependency('../cvox2/background/constants.js', ['constants'], []);
goog.addDependency('../cvox2/background/cursors.js', ['cursors.Cursor', 'cursors.Movement', 'cursors.Range', 'cursors.Unit'], ['AutomationPredicate', 'AutomationUtil', 'StringUtil', 'constants']);
goog.addDependency('../cvox2/background/desktop_automation_handler.js', ['DesktopAutomationHandler'], ['AutomationObjectConstructorInstaller', 'BaseAutomationHandler', 'ChromeVoxState', 'editing.TextEditHandler']);
goog.addDependency('../cvox2/background/earcon_engine.js', ['EarconEngine'], []);
goog.addDependency('../cvox2/background/editing.js', ['editing.TextEditHandler'], ['AutomationTreeWalker', 'AutomationUtil', 'Output', 'Output.EventType', 'cursors.Cursor', 'cursors.Range', 'cvox.ChromeVoxEditableTextBase']);
goog.addDependency('../cvox2/background/i_search.js', ['ISearch', 'ISearchHandler', 'ISearchUI'], ['AutomationUtil', 'ChromeVoxState', 'Output', 'constants', 'cursors.Cursor']);
goog.addDependency('../cvox2/background/live_regions.js', ['LiveRegions'], ['ChromeVoxState']);
goog.addDependency('../cvox2/background/next_earcons.js', ['NextEarcons'], ['EarconEngine', 'cvox.AbstractEarcons']);
goog.addDependency('../cvox2/background/notifications.js', ['Notifications'], []);
goog.addDependency('../cvox2/background/output.js', ['Output', 'Output.EventType'], ['EarconEngine', 'Spannable', 'constants', 'cursors.Cursor', 'cursors.Range', 'cursors.Unit', 'cvox.AbstractEarcons', 'cvox.ChromeVox', 'cvox.NavBraille', 'cvox.TtsCategory', 'cvox.ValueSelectionSpan', 'cvox.ValueSpan', 'goog.i18n.MessageFormat']);
goog.addDependency('../cvox2/background/panel.js', ['Panel'], ['ISearchUI', 'Msgs', 'PanelCommand', 'PanelMenu', 'PanelMenuItem', 'cvox.ChromeVoxKbHandler', 'cvox.CommandStore']);
goog.addDependency('../cvox2/background/panel_command.js', ['PanelCommand', 'PanelCommandType'], []);
goog.addDependency('../cvox2/background/panel_menu.js', ['PanelMenu', 'PanelNodeMenu'], ['PanelMenuItem', 'constants']);
goog.addDependency('../cvox2/background/panel_menu_item.js', ['PanelMenuItem'], []);
goog.addDependency('../cvox2/background/tabs_automation_handler.js', ['TabsAutomationHandler'], ['DesktopAutomationHandler']);
goog.addDependency('../cvox2/background/tree_walker.js', ['AutomationTreeWalker', 'AutomationTreeWalkerPhase', 'AutomationTreeWalkerRestriction'], ['constants']);
goog.addDependency('../cvox2/injected/keyboard_handler.js', ['KeyboardHandler'], []);
goog.addDependency('../cvox2/injected/loader.js', [], ['KeyboardHandler']);
goog.addDependency('../braille/braille_display_manager.js', ['cvox.BrailleDisplayManager'], ['cvox.BrailleCaptionsBackground', 'cvox.BrailleDisplayState', 'cvox.ExpandingBrailleTranslator', 'cvox.LibLouis', 'cvox.NavBraille', 'cvox.PanStrategy']);
goog.addDependency('../braille/braille_input_handler.js', ['cvox.BrailleInputHandler'], ['StringUtil', 'cvox.BrailleKeyCommand', 'cvox.BrailleKeyEvent', 'cvox.ExpandingBrailleTranslator']);
goog.addDependency('../braille/braille_key_types.js', ['cvox.BrailleDisplayState', 'cvox.BrailleKeyCommand', 'cvox.BrailleKeyEvent'], []);
goog.addDependency('../braille/braille_table.js', ['cvox.BrailleTable'], []);
goog.addDependency('../braille/braille_translator_manager.js', ['cvox.BrailleTranslatorManager'], ['cvox.BrailleTable', 'cvox.ExpandingBrailleTranslator', 'cvox.LibLouis']);
goog.addDependency('../braille/expanding_braille_translator.js', ['cvox.ExpandingBrailleTranslator'], ['Spannable', 'cvox.ExtraCellsSpan', 'cvox.LibLouis', 'cvox.ValueSelectionSpan', 'cvox.ValueSpan']);
goog.addDependency('../braille/liblouis.js', ['cvox.LibLouis'], []);
goog.addDependency('../braille/nav_braille.js', ['cvox.NavBraille'], ['Spannable']);
goog.addDependency('../braille/pan_strategy.js', ['cvox.PanStrategy'], []);
goog.addDependency('../braille/spans.js', ['cvox.ExtraCellsSpan', 'cvox.ValueSelectionSpan', 'cvox.ValueSpan'], ['Spannable']);
goog.addDependency('../chromevox/background/background.js', ['cvox.ChromeVoxBackground'], ['ChromeVoxState', 'Msgs', 'cvox.AbstractEarcons', 'cvox.BrailleBackground', 'cvox.BrailleCaptionsBackground', 'cvox.ChromeVox', 'cvox.ChromeVoxEditableTextBase', 'cvox.ChromeVoxPrefs', 'cvox.ClassicEarcons', 'cvox.CompositeTts', 'cvox.ConsoleTts', 'cvox.ExtensionBridge', 'cvox.InjectedScriptLoader', 'cvox.NavBraille', 'cvox.PlatformFilter', 'cvox.PlatformUtil', 'cvox.QueueMode', 'cvox.TabsApiHandler', 'cvox.TtsBackground']);
goog.addDependency('../chromevox/background/braille_captions_background.js', ['cvox.BrailleCaptionsBackground'], ['PanelCommand', 'cvox.BrailleDisplayState', 'cvox.ExtensionBridge']);
goog.addDependency('../chromevox/background/injected_script_loader.js', ['cvox.InjectedScriptLoader'], []);
goog.addDependency('../chromevox/background/kbexplorer.js', ['cvox.KbExplorer'], ['cvox.KeyUtil']);
goog.addDependency('../chromevox/background/keymaps/key_map.js', ['cvox.KeyMap'], ['cvox.KeyUtil', 'cvox.PlatformUtil']);
goog.addDependency('../chromevox/background/mathmaps/math_map.js', ['cvox.MathMap'], ['cvox.MathCompoundStore', 'cvox.MathUtil']);
goog.addDependency('../chromevox/background/options.js', ['cvox.OptionsPage'], ['Msgs', 'cvox.BrailleTable', 'cvox.BrailleTranslatorManager', 'cvox.ChromeEarcons', 'cvox.ChromeTts', 'cvox.ChromeVox', 'cvox.ChromeVoxPrefs', 'cvox.CommandStore', 'cvox.ExtensionBridge', 'cvox.KeyMap', 'cvox.KeySequence', 'cvox.PlatformFilter', 'cvox.PlatformUtil']);
goog.addDependency('../chromevox/background/prefs.js', ['cvox.ChromeVoxPrefs'], ['cvox.ChromeVox', 'cvox.ExtensionBridge', 'cvox.KeyMap']);
goog.addDependency('../chromevox/background/tabs_api_handler.js', ['cvox.TabsApiHandler'], ['TabsAutomationHandler', 'cvox.AbstractEarcons', 'cvox.AbstractTts', 'cvox.BrailleInterface', 'cvox.ChromeVox', 'cvox.NavBraille']);
goog.addDependency('../chromevox/injected/active_indicator.js', ['cvox.ActiveIndicator'], ['cvox.Cursor', 'cvox.DomUtil']);
goog.addDependency('../chromevox/injected/api_implementation.js', ['cvox.ApiImplementation', 'cvox.ApiImplementation.Math'], ['cvox.ApiUtil', 'cvox.AriaUtil', 'cvox.BuildInfo', 'cvox.ChromeVox', 'cvox.ChromeVoxJSON', 'cvox.DomUtil', 'cvox.ScriptInstaller']);
goog.addDependency('../chromevox/injected/api_implementation.js', ['cvox.ApiImplementation', 'cvox.ApiImplementation.Math'], ['cvox.ApiUtil', 'cvox.AriaUtil', 'cvox.BuildInfo', 'cvox.ChromeVox', 'cvox.ChromeVoxJSON', 'cvox.DomUtil', 'cvox.ScriptInstaller']);
goog.addDependency('../chromevox/injected/api_util.js', ['cvox.ApiUtil'], []);
goog.addDependency('../chromevox/injected/console_tts.js', ['cvox.ConsoleTts'], ['cvox.AbstractTts', 'cvox.TtsInterface']);
goog.addDependency('../chromevox/injected/event_suspender.js', ['cvox.ChromeVoxEventSuspender'], []);
goog.addDependency('../chromevox/injected/event_watcher.js', ['cvox.ChromeVoxEventWatcher', 'cvox.ChromeVoxEventWatcherUtil'], ['cvox.ActiveIndicator', 'cvox.ApiImplementation', 'cvox.AriaUtil', 'cvox.ChromeVox', 'cvox.ChromeVoxEditableTextBase', 'cvox.ChromeVoxEventSuspender', 'cvox.ChromeVoxHTMLDateWidget', 'cvox.ChromeVoxHTMLMediaWidget', 'cvox.ChromeVoxHTMLTimeWidget', 'cvox.ChromeVoxKbHandler', 'cvox.ChromeVoxUserCommands', 'cvox.DomUtil', 'cvox.Focuser', 'cvox.History', 'cvox.LiveRegions', 'cvox.Memoize', 'cvox.NavigationSpeaker', 'cvox.PlatformFilter', 'cvox.PlatformUtil', 'cvox.QueueMode', 'cvox.TextHandlerInterface', 'cvox.UserEventDetail']);
goog.addDependency('../chromevox/injected/history.js', ['cvox.History'], ['cvox.DomUtil', 'cvox.NodeBreadcrumb']);
goog.addDependency('../chromevox/injected/init_document.js', ['cvox.ChromeVoxInit'], ['cvox.ChromeVox', 'cvox.ExtensionBridge', 'cvox.HostFactory', 'cvox.InitGlobals']);
goog.addDependency('../chromevox/injected/init_globals.js', ['cvox.InitGlobals'], ['cvox.ApiImplementation', 'cvox.ChromeVox', 'cvox.ChromeVoxEventWatcher', 'cvox.CompositeTts', 'cvox.ConsoleTts', 'cvox.HostFactory', 'cvox.NavigationManager', 'cvox.Serializer']);
goog.addDependency('../chromevox/injected/initial_speech.js', ['cvox.InitialSpeech'], ['cvox.AbstractTts', 'cvox.BrailleOverlayWidget', 'cvox.ChromeVox', 'cvox.CursorSelection', 'cvox.DescriptionUtil', 'cvox.DomUtil', 'cvox.LiveRegions']);
goog.addDependency('../chromevox/injected/keyboard_handler.js', ['cvox.ChromeVoxKbHandler'], ['cvox.ChromeVox', 'cvox.KeyMap', 'cvox.KeySequence', 'cvox.KeyUtil']);
goog.addDependency('../chromevox/injected/live_regions.js', ['cvox.LiveRegions'], ['cvox.AriaUtil', 'cvox.ChromeVox', 'cvox.DescriptionUtil', 'cvox.DomUtil', 'cvox.Interframe', 'cvox.NavDescription', 'cvox.NavigationSpeaker']);
goog.addDependency('../chromevox/injected/navigation_history.js', ['cvox.NavigationHistory'], ['cvox.DomUtil']);
goog.addDependency('../chromevox/injected/navigation_manager.js', ['cvox.NavigationManager'], ['cvox.ActiveIndicator', 'cvox.ChromeVox', 'cvox.ChromeVoxEventSuspender', 'cvox.CursorSelection', 'cvox.DescriptionUtil', 'cvox.DomUtil', 'cvox.FindUtil', 'cvox.Focuser', 'cvox.Interframe', 'cvox.MathShifter', 'cvox.NavBraille', 'cvox.NavDescription', 'cvox.NavigationHistory', 'cvox.NavigationShifter', 'cvox.NavigationSpeaker', 'cvox.PageSelection', 'cvox.SelectionUtil', 'cvox.TableShifter', 'cvox.TraverseMath', 'cvox.Widget']);
goog.addDependency('../chromevox/injected/navigation_shifter.js', ['cvox.NavigationShifter'], ['cvox.AbstractShifter', 'cvox.CharacterWalker', 'cvox.GroupWalker', 'cvox.LayoutLineWalker', 'cvox.ObjectWalker', 'cvox.SentenceWalker', 'cvox.TraverseContent', 'cvox.WordWalker']);
goog.addDependency('../chromevox/injected/navigation_speaker.js', ['cvox.NavigationSpeaker'], ['cvox.NavDescription']);
goog.addDependency('../chromevox/injected/node_breadcrumb.js', ['cvox.NodeBreadcrumb'], ['cvox.ChromeVox']);
goog.addDependency('../chromevox/injected/pdf_processor.js', ['cvox.PdfProcessor'], ['cvox.QueueMode']);
goog.addDependency('../chromevox/injected/script_installer.js', ['cvox.ScriptInstaller'], ['cvox.DomUtil']);
goog.addDependency('../chromevox/injected/serializer.js', ['cvox.Serializer'], ['cvox.ChromeVox', 'cvox.ChromeVoxEventWatcher']);
goog.addDependency('../chromevox/injected/ui/braille_overlay_widget.js', ['cvox.BrailleOverlayWidget'], ['cvox.ExtensionBridge']);
goog.addDependency('../chromevox/injected/ui/context_menu_widget.js', ['cvox.ContextMenuWidget'], ['cvox.ChromeVox', 'cvox.OverlayWidget', 'cvox.UserEventDetail']);
goog.addDependency('../chromevox/injected/ui/keyboard_help_widget.js', ['cvox.KeyboardHelpWidget'], ['cvox.ChromeVox', 'cvox.CommandStore', 'cvox.KeyUtil', 'cvox.OverlayWidget']);
goog.addDependency('../chromevox/injected/ui/node_search_widget.js', ['cvox.NodeSearchWidget'], ['cvox.ChromeVox', 'cvox.DomUtil', 'cvox.SearchWidget']);
goog.addDependency('../chromevox/injected/ui/overlay_widget.js', ['cvox.OverlayWidget'], ['cvox.DomUtil', 'cvox.SearchWidget']);
goog.addDependency('../chromevox/injected/ui/search_widget.js', ['cvox.SearchWidget'], ['cvox.AbstractEarcons', 'cvox.ApiImplementation', 'cvox.ChromeVox', 'cvox.CursorSelection', 'cvox.NavigationManager', 'cvox.SpokenMessages', 'cvox.Widget']);
goog.addDependency('../chromevox/injected/ui/select_widget.js', ['cvox.SelectWidget'], ['cvox.OverlayWidget']);
goog.addDependency('../chromevox/injected/ui/spoken_messages.js', ['cvox.SpokenMessage', 'cvox.SpokenMessages'], ['cvox.AbstractTts', 'cvox.ChromeVox']);
goog.addDependency('../chromevox/injected/ui/widget.js', ['cvox.Widget'], ['cvox.AbstractEarcons', 'cvox.ApiImplementation', 'cvox.ChromeVox', 'cvox.SpokenMessages']);
goog.addDependency('../chromevox/injected/user_commands.js', ['cvox.ChromeVoxUserCommands'], ['cvox.BrailleKeyCommand', 'cvox.BrailleOverlayWidget', 'cvox.ChromeVox', 'cvox.ChromeVoxKbHandler', 'cvox.CommandStore', 'cvox.ConsoleTts', 'cvox.ContextMenuWidget', 'cvox.DomPredicates', 'cvox.DomUtil', 'cvox.FocusUtil', 'cvox.History', 'cvox.KeyboardHelpWidget', 'cvox.NodeSearchWidget', 'cvox.PlatformUtil', 'cvox.SearchWidget', 'cvox.SelectWidget', 'cvox.TypingEcho', 'cvox.UserEventDetail', 'goog.object']);
goog.addDependency('../chromevox/injected/user_event_detail.js', ['cvox.UserEventDetail'], ['cvox.ChromeVox']);
goog.addDependency('../common/aria_util.js', ['cvox.AriaUtil'], ['cvox.AbstractEarcons', 'cvox.ChromeVox', 'cvox.NodeState', 'cvox.NodeStateUtil']);
goog.addDependency('../common/aural_style_util.js', ['cvox.AuralProperty', 'cvox.AuralStyleConverter', 'cvox.AuralStyleUtil'], []);
goog.addDependency('../common/braille_text_handler.js', ['cvox.BrailleTextHandler'], ['cvox.BrailleInterface', 'cvox.BrailleUtil', 'cvox.ChromeVox', 'cvox.NavBraille']);
goog.addDependency('../common/braille_util.js', ['cvox.BrailleUtil'], ['Spannable', 'cvox.ChromeVox', 'cvox.DomUtil', 'cvox.EditableTextAreaShadow', 'cvox.Focuser', 'cvox.NavBraille', 'cvox.NodeStateUtil', 'cvox.ValueSelectionSpan', 'cvox.ValueSpan']);
goog.addDependency('../common/buildinfo.js', ['cvox.BuildInfo'], []);
goog.addDependency('../common/chromevox.js', ['cvox.ChromeVox'], []);
goog.addDependency('../common/chromevox_json.js', ['cvox.ChromeVoxJSON'], []);
goog.addDependency('../common/command_store.js', ['cvox.CommandStore'], ['cvox.PlatformFilter']);
goog.addDependency('../common/composite_tts.js', ['cvox.CompositeTts'], ['cvox.TtsInterface']);
goog.addDependency('../common/content_editable_extractor.js', ['cvox.ContentEditableExtractor'], ['cvox.Cursor', 'cvox.TraverseUtil']);
goog.addDependency('../common/cursor.js', ['cvox.Cursor'], []);
goog.addDependency('../common/cursor_selection.js', ['cvox.CursorSelection'], ['cvox.Cursor', 'cvox.SelectionUtil', 'cvox.TraverseUtil']);
goog.addDependency('../common/date_widget.js', ['cvox.ChromeVoxHTMLDateWidget'], ['Msgs']);
goog.addDependency('../common/description_util.js', ['cvox.DescriptionUtil'], ['cvox.AriaUtil', 'cvox.AuralStyleUtil', 'cvox.BareObjectWalker', 'cvox.CursorSelection', 'cvox.DomUtil', 'cvox.EarconUtil', 'cvox.MathmlStore', 'cvox.NavDescription', 'cvox.SpeechRuleEngine', 'cvox.TraverseMath']);
goog.addDependency('../common/dom_predicates.js', ['cvox.DomPredicates'], []);
goog.addDependency('../common/dom_util.js', ['cvox.DomUtil'], ['cvox.AbstractTts', 'cvox.AriaUtil', 'cvox.ChromeVox', 'cvox.DomPredicates', 'cvox.Memoize', 'cvox.NodeState', 'cvox.XpathUtil']);
goog.addDependency('../common/earcon_util.js', ['cvox.EarconUtil'], ['cvox.AbstractEarcons', 'cvox.AriaUtil', 'cvox.DomUtil']);
goog.addDependency('../common/editable_text.js', ['cvox.ChromeVoxEditableContentEditable', 'cvox.ChromeVoxEditableElement', 'cvox.ChromeVoxEditableHTMLInput', 'cvox.ChromeVoxEditableTextArea', 'cvox.TextHandlerInterface'], ['cvox.BrailleTextHandler', 'cvox.ChromeVoxEditableTextBase', 'cvox.ContentEditableExtractor', 'cvox.DomUtil', 'cvox.EditableTextAreaShadow', 'cvox.TextChangeEvent', 'cvox.TtsInterface']);
goog.addDependency('../common/editable_text_area_shadow.js', ['cvox.EditableTextAreaShadow'], []);
goog.addDependency('../common/editable_text_base.js', ['cvox.ChromeVoxEditableTextBase', 'cvox.TextChangeEvent', 'cvox.TypingEcho'], ['cvox.AbstractTts', 'cvox.ChromeVox', 'cvox.TtsInterface', 'goog.i18n.MessageFormat']);
goog.addDependency('../common/find_util.js', ['cvox.FindUtil'], ['cvox.BareObjectWalker', 'cvox.CursorSelection']);
goog.addDependency('../common/focus_util.js', ['cvox.FocusUtil'], []);
goog.addDependency('../common/focuser.js', ['cvox.Focuser'], ['cvox.ChromeVoxEventSuspender', 'cvox.DomUtil']);
goog.addDependency('../common/group_util.js', ['cvox.GroupUtil'], ['cvox.AriaUtil', 'cvox.DomUtil']);
goog.addDependency('../common/interframe.js', ['cvox.Interframe'], ['cvox.ChromeVoxJSON', 'cvox.DomUtil']);
goog.addDependency('../common/key_sequence.js', ['cvox.KeySequence'], ['cvox.ChromeVox', 'cvox.PlatformFilter']);
goog.addDependency('../common/key_util.js', ['cvox.KeyUtil', 'cvox.SimpleKeyEvent'], ['Msgs', 'cvox.ChromeVox', 'cvox.KeySequence']);
goog.addDependency('../common/math_semantic_attr.js', ['cvox.SemanticAttr'], ['cvox.SemanticUtil']);
goog.addDependency('../common/math_semantic_tree.js', ['cvox.SemanticTree', 'cvox.SemanticTree.Node'], ['cvox.DomUtil', 'cvox.SemanticAttr', 'cvox.SemanticUtil']);
goog.addDependency('../common/math_semantic_util.js', ['cvox.SemanticUtil'], []);
goog.addDependency('../common/math_util.js', ['cvox.MathUtil'], ['cvox.ChromeVox', 'cvox.XpathUtil']);
goog.addDependency('../common/media_widget.js', ['cvox.ChromeVoxHTMLMediaWidget'], []);
goog.addDependency('../common/memoize.js', ['cvox.Memoize'], []);
goog.addDependency('../common/msgs.js', ['Msgs'], []);
goog.addDependency('../common/nav_description.js', ['cvox.NavDescription'], ['cvox.AbstractTts', 'cvox.ChromeVox', 'cvox.CursorSelection', 'cvox.QueueMode']);
goog.addDependency('../common/nav_math_description.js', ['cvox.NavMathDescription'], ['cvox.NavDescription']);
goog.addDependency('../common/node_state.js', ['cvox.NodeState', 'cvox.NodeStateUtil'], ['Msgs']);
goog.addDependency('../common/page_selection.js', ['cvox.PageSelection'], ['cvox.AbstractEarcons', 'cvox.CursorSelection', 'cvox.NavDescription']);
goog.addDependency('../common/platform_util.js', ['cvox.PlatformFilter', 'cvox.PlatformUtil'], ['cvox.ChromeVox']);
goog.addDependency('../common/selection_util.js', ['cvox.SelectionUtil'], ['cvox.DomUtil', 'cvox.XpathUtil']);
goog.addDependency('../common/spannable.js', ['Spannable'], []);
goog.addDependency('../common/string_util.js', ['StringUtil'], []);
goog.addDependency('../common/table_util.js', ['cvox.TableUtil'], ['cvox.XpathUtil']);
goog.addDependency('../common/time_widget.js', ['cvox.ChromeVoxHTMLTimeWidget'], []);
goog.addDependency('../common/traverse_content.js', ['cvox.TraverseContent'], ['cvox.CursorSelection', 'cvox.DomUtil', 'cvox.SelectionUtil', 'cvox.TraverseUtil']);
goog.addDependency('../common/traverse_math.js', ['cvox.TraverseMath'], ['cvox.ChromeVox', 'cvox.DomUtil', 'cvox.SemanticTree']);
goog.addDependency('../common/traverse_table.js', ['cvox.TraverseTable'], ['cvox.DomPredicates', 'cvox.DomUtil', 'cvox.SelectionUtil', 'cvox.TableUtil', 'cvox.TraverseUtil']);
goog.addDependency('../common/traverse_util.js', ['cvox.TraverseUtil'], ['cvox.Cursor', 'cvox.DomPredicates', 'cvox.DomUtil']);
goog.addDependency('../common/xpath_util.js', ['cvox.XpathUtil'], []);
goog.addDependency('../extensions/searchvox/abstract_result.js', ['cvox.AbstractResult'], ['cvox.SearchUtil']);
goog.addDependency('../extensions/searchvox/constants.js', ['cvox.SearchConstants'], []);
goog.addDependency('../extensions/searchvox/context_menu.js', ['cvox.SearchContextMenu'], ['cvox.ChromeVoxKbHandler', 'cvox.KeySequence', 'cvox.Search', 'cvox.SearchTool']);
goog.addDependency('../extensions/searchvox/loader.js', ['cvox.SearchLoader'], ['cvox.SearchContextMenu']);
goog.addDependency('../extensions/searchvox/results.js', ['cvox.SearchResults', 'cvox.UnknownResult'], ['cvox.AbstractResult', 'cvox.ChromeVox', 'cvox.SearchUtil']);
goog.addDependency('../extensions/searchvox/search.js', ['cvox.Search'], ['cvox.ChromeVox', 'cvox.SearchConstants', 'cvox.SearchResults', 'cvox.SearchUtil', 'cvox.UnknownResult']);
goog.addDependency('../extensions/searchvox/search_tools.js', ['cvox.SearchTool'], ['cvox.ChromeVox', 'cvox.DomUtil', 'cvox.Search', 'cvox.SearchConstants', 'cvox.SearchUtil']);
goog.addDependency('../extensions/searchvox/util.js', ['cvox.SearchUtil'], []);
goog.addDependency('../host/chrome/braille.js', ['cvox.ChromeBraille'], ['cvox.BrailleInterface', 'cvox.BrailleKeyEvent', 'cvox.ChromeVoxUserCommands', 'cvox.HostFactory']);
goog.addDependency('../host/chrome/braille_background.js', ['cvox.BrailleBackground'], ['ChromeVoxState', 'cvox.BrailleDisplayManager', 'cvox.BrailleInputHandler', 'cvox.BrailleInterface', 'cvox.BrailleKeyEvent', 'cvox.BrailleTranslatorManager']);
goog.addDependency('../host/chrome/classic_earcons.js', ['cvox.ClassicEarcons'], ['cvox.AbstractEarcons']);
goog.addDependency('../host/chrome/earcons.js', ['cvox.ChromeEarcons'], ['cvox.AbstractEarcons', 'cvox.ExtensionBridge', 'cvox.HostFactory']);
goog.addDependency('../host/chrome/extension_bridge.js', ['cvox.ExtensionBridge'], ['cvox.ChromeVoxJSON']);
goog.addDependency('../host/chrome/host.js', ['cvox.ChromeHost'], ['cvox.AbstractHost', 'cvox.ApiImplementation', 'cvox.BrailleOverlayWidget', 'cvox.ChromeVox', 'cvox.ChromeVoxEventWatcher', 'cvox.ChromeVoxKbHandler', 'cvox.ExtensionBridge', 'cvox.HostFactory', 'cvox.InitialSpeech', 'cvox.PdfProcessor', 'cvox.SearchLoader', 'cvox.TraverseMath']);
goog.addDependency('../host/chrome/mathjax.js', ['cvox.ChromeMathJax'], ['cvox.AbstractMathJax', 'cvox.ApiImplementation', 'cvox.ChromeVox', 'cvox.HostFactory', 'cvox.ScriptInstaller']);
goog.addDependency('../host/chrome/tts.js', ['cvox.ChromeTts'], ['cvox.ChromeTtsBase', 'cvox.HostFactory']);
goog.addDependency('../host/chrome/tts_background.js', ['cvox.TtsBackground'], ['PanelCommand', 'cvox.AbstractTts', 'cvox.ChromeTtsBase', 'cvox.ChromeVox', 'cvox.MathMap', 'goog.i18n.MessageFormat']);
goog.addDependency('../host/chrome/tts_base.js', ['cvox.ChromeTtsBase'], ['cvox.AbstractTts']);
goog.addDependency('../host/interface/abstract_earcons.js', ['cvox.AbstractEarcons', 'cvox.Earcon'], []);
goog.addDependency('../host/interface/abstract_host.js', ['cvox.AbstractHost'], ['cvox.ChromeVoxEventWatcher']);
goog.addDependency('../host/interface/abstract_mathjax.js', ['cvox.AbstractMathJax'], ['cvox.MathJaxInterface']);
goog.addDependency('../host/interface/abstract_tts.js', ['cvox.AbstractTts'], ['Msgs', 'cvox.TtsInterface', 'goog.i18n.MessageFormat']);
goog.addDependency('../host/interface/braille_interface.js', ['cvox.BrailleInterface'], ['cvox.BrailleKeyCommand', 'cvox.BrailleKeyEvent', 'cvox.NavBraille']);
goog.addDependency('../host/interface/host_factory.js', ['cvox.HostFactory'], ['cvox.AbstractEarcons', 'cvox.AbstractHost', 'cvox.AbstractMathJax', 'cvox.AbstractTts']);
goog.addDependency('../host/interface/mathjax_interface.js', ['cvox.MathJaxInterface'], []);
goog.addDependency('../host/interface/tts_interface.js', ['cvox.QueueMode', 'cvox.TtsCapturingEventListener', 'cvox.TtsCategory', 'cvox.TtsInterface'], []);
goog.addDependency('../speech_rules/base_rule_store.js', ['cvox.BaseRuleStore'], ['cvox.MathUtil', 'cvox.SpeechRule', 'cvox.SpeechRuleEvaluator', 'cvox.SpeechRuleFunctions', 'cvox.SpeechRuleStore']);
goog.addDependency('../speech_rules/math_simple_store.js', ['cvox.MathCompoundStore', 'cvox.MathSimpleStore'], ['cvox.MathStore', 'cvox.SpeechRule']);
goog.addDependency('../speech_rules/math_store.js', ['cvox.MathStore'], ['cvox.AbstractTts', 'cvox.BaseRuleStore', 'cvox.ChromeVox', 'cvox.NavMathDescription', 'cvox.SpeechRule', 'cvox.TraverseMath']);
goog.addDependency('../speech_rules/mathml_store.js', ['cvox.MathmlStore'], ['cvox.MathStore']);
goog.addDependency('../speech_rules/mathml_store_rules.js', ['cvox.MathmlStoreRules'], ['cvox.MathStore', 'cvox.MathmlStore', 'cvox.MathmlStoreUtil', 'cvox.StoreUtil']);
goog.addDependency('../speech_rules/mathml_store_util.js', ['cvox.MathmlStoreUtil'], ['cvox.MathUtil', 'cvox.TraverseMath']);
goog.addDependency('../speech_rules/speech_rule.js', ['cvox.SpeechRule', 'cvox.SpeechRule.Action', 'cvox.SpeechRule.Component', 'cvox.SpeechRule.DynamicCstr', 'cvox.SpeechRule.Precondition', 'cvox.SpeechRule.Type'], []);
goog.addDependency('../speech_rules/speech_rule_engine.js', ['cvox.SpeechRuleEngine'], ['cvox.BaseRuleStore', 'cvox.NavDescription', 'cvox.NavMathDescription', 'cvox.SpeechRule']);
goog.addDependency('../speech_rules/speech_rule_evaluator.js', ['cvox.SpeechRuleEvaluator'], ['cvox.SpeechRule']);
goog.addDependency('../speech_rules/speech_rule_functions.js', ['cvox.SpeechRuleFunctions', 'cvox.SpeechRuleFunctions.ContextFunctions', 'cvox.SpeechRuleFunctions.CustomQueries', 'cvox.SpeechRuleFunctions.CustomStrings'], []);
goog.addDependency('../speech_rules/speech_rule_store.js', ['cvox.SpeechRuleStore'], []);
goog.addDependency('../speech_rules/store_util.js', ['cvox.StoreUtil'], []);
goog.addDependency('../walkers/abstract_node_walker.js', ['cvox.AbstractNodeWalker'], ['cvox.AbstractWalker', 'cvox.CursorSelection', 'cvox.DomUtil']);
goog.addDependency('../walkers/abstract_selection_walker.js', ['cvox.AbstractSelectionWalker'], ['Spannable', 'cvox.AbstractWalker', 'cvox.BareObjectWalker', 'cvox.DescriptionUtil', 'cvox.DomUtil', 'cvox.TraverseContent']);
goog.addDependency('../walkers/abstract_shifter.js', ['cvox.AbstractShifter'], ['cvox.AbstractWalker', 'cvox.CursorSelection', 'cvox.NavBraille']);
goog.addDependency('../walkers/abstract_walker.js', ['cvox.AbstractWalker'], ['cvox.CursorSelection', 'cvox.NavBraille']);
goog.addDependency('../walkers/bare_object_walker.js', ['cvox.BareObjectWalker'], ['cvox.AbstractNodeWalker']);
goog.addDependency('../walkers/character_walker.js', ['cvox.CharacterWalker'], ['cvox.AbstractSelectionWalker', 'cvox.TraverseContent']);
goog.addDependency('../walkers/column_walker.js', ['cvox.ColumnWalker'], ['cvox.TableWalker']);
goog.addDependency('../walkers/group_walker.js', ['cvox.GroupWalker'], ['cvox.AbstractNodeWalker', 'cvox.BrailleUtil', 'cvox.CursorSelection', 'cvox.DescriptionUtil', 'cvox.DomUtil', 'cvox.GroupUtil']);
goog.addDependency('../walkers/layout_line_walker.js', ['cvox.LayoutLineWalker'], ['cvox.AbstractWalker', 'cvox.StructuralLineWalker']);
goog.addDependency('../walkers/math_shifter.js', ['cvox.MathShifter'], ['cvox.AbstractShifter', 'cvox.BrailleUtil', 'cvox.CursorSelection', 'cvox.DomUtil', 'cvox.MathmlStore', 'cvox.MathmlStoreRules', 'cvox.NavDescription', 'cvox.SpeechRuleEngine', 'cvox.TraverseMath']);
goog.addDependency('../walkers/object_walker.js', ['cvox.ObjectWalker'], ['cvox.AbstractNodeWalker', 'cvox.BrailleUtil', 'cvox.DescriptionUtil']);
goog.addDependency('../walkers/row_walker.js', ['cvox.RowWalker'], ['cvox.TableWalker']);
goog.addDependency('../walkers/sentence_walker.js', ['cvox.SentenceWalker'], ['cvox.AbstractSelectionWalker', 'cvox.TraverseContent']);
goog.addDependency('../walkers/structural_line_walker.js', ['cvox.StructuralLineWalker'], ['cvox.AbstractSelectionWalker', 'cvox.BrailleUtil', 'cvox.TraverseContent']);
goog.addDependency('../walkers/table_shifter.js', ['cvox.TableShifter'], ['cvox.AbstractShifter', 'cvox.ColumnWalker', 'cvox.CursorSelection', 'cvox.DomPredicates', 'cvox.DomUtil', 'cvox.NavBraille', 'cvox.RowWalker']);
goog.addDependency('../walkers/table_walker.js', ['cvox.TableWalker'], ['cvox.AbstractWalker', 'cvox.BrailleUtil', 'cvox.DescriptionUtil', 'cvox.DomUtil', 'cvox.NavDescription', 'cvox.QueueMode', 'cvox.TraverseTable']);
goog.addDependency('../walkers/word_walker.js', ['cvox.WordWalker'], ['cvox.AbstractSelectionWalker', 'cvox.TraverseContent']);
goog.addDependency('../closure/i18n/pluralrules.js', ['goog.i18n.pluralRules'], []);
goog.addDependency('../closure/i18n/ordinalrules.js', ['goog.i18n.ordinalRules'], []);
goog.addDependency('../closure/i18n/messageformat.js', ['goog.i18n.MessageFormat'], ['goog.asserts', 'goog.i18n.ordinalRules', 'goog.i18n.pluralRules']);
goog.addDependency('../closure/string/string.js', ['goog.string'], []);
goog.addDependency('../closure/dom/nodetype.js', ['goog.dom.NodeType'], []);
goog.addDependency('../closure/base.js', ['goog'], []);
goog.addDependency('../closure/asserts/asserts.js', ['goog.asserts', 'goog.asserts.AssertionError'], ['goog.debug.Error', 'goog.dom.NodeType', 'goog.string']);
goog.addDependency('../closure/debug/error.js', ['goog.debug.Error'], []);
goog.addDependency('../closure/object/object.js', ['goog.object'], []);
{
"key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGBi/oD7Yl/Y16w3+gee/95/EUpRZ2U6c+8orV5ei+3CRsBsoXI/DPGBauZ3rWQ47aQnfoG00sXigFdJA2NhNK9OgmRA2evnsRRbjYm2BG1twpaLsgQPPus3PyczbDCvhFu8k24wzFyEtxLrfxAGBseBPb9QrCz7B4k2QgxD/CwIDAQAB",
"manifest_version": 2,
"name": "__MSG_CHROMEVOX_NAME__",
"version": "78.0.3902.0",
"description": "__MSG_CHROMEVOX_DESCRIPTION__",
"background": {
"page": "cvox2/background/background.html"
},
"permissions": [
"accessibilityPrivate",
"bookmarks",
"brailleDisplayPrivate",
"commands.accessibility",
"commandLinePrivate",
"experimental",
"history",
"notifications",
"storage",
"tabs",
"tts",
"virtualKeyboardPrivate",
"<all_urls>"
],
"content_scripts": [
{
"matches": [ "<all_urls>" ],
"exclude_globs": [ ],
"all_frames": true,
"js": [
"closure/closure_preinit.js",
"closure/base.js",
"deps.js",
"chromevox/injected/loader.js"
]
}
],
"web_accessible_resources": [
"chromevox/background/keymaps/next_keymap.json",
"chromevox/injected/api.js",
"chromevox/injected/api_util.js",
"chromevox/injected/mathjax.js",
"chromevox/injected/mathjax_external_util.js"
],
"automation": {
"desktop": true
},
"commands": {
"nextObject": {
"description": "__MSG_CHROMEVOX_NEXT_OBJECT__",
"suggested_key": {
"default": "Alt+Shift+Right"
}
},
"previousObject": {
"description": "__MSG_CHROMEVOX_PREVIOUS_OBJECT__",
"suggested_key": {
"default": "Alt+Shift+Left"
}
},
"performDefaultAction": {
"description": "__MSG_CHROMEVOX_PERFORM_DEFAULT_ACTION__",
"suggested_key": {
"default": "Alt+Shift+Space"
}
},
"toggleChromeVoxVersion": {
"description": "__MSG_CHROMEVOX_TOGGLE_CHROMEVOX__",
"suggested_key": {
"default": "Alt+Shift+Q"
}
},
"readFromHere": {
"description": "__MSG_CHROMEVOX_READ_FROM_HERE__",
"suggested_key": {
"default": "Alt+Shift+R"
}
}
},
"options_page": "chromevox/background/options.html",
"default_locale": "en",
"icons": {
"16": "images/chromevox-16.png",
"48": "images/chromevox-48.png",
"128": "images/chromevox-128.png"
}
}
{
"automation": {
"desktop": true
},
"background": {
"page": "cvox2/background/background.html"
},
"commands": {
"nextObject": {
"description": "__MSG_CHROMEVOX_NEXT_OBJECT__",
"suggested_key": {
"default": "Alt+Shift+Right"
}
},
"performDefaultAction": {
"description": "__MSG_CHROMEVOX_PERFORM_DEFAULT_ACTION__",
"suggested_key": {
"default": "Alt+Shift+Space"
}
},
"previousObject": {
"description": "__MSG_CHROMEVOX_PREVIOUS_OBJECT__",
"suggested_key": {
"default": "Alt+Shift+Left"
}
},
"readFromHere": {
"description": "__MSG_CHROMEVOX_READ_FROM_HERE__",
"suggested_key": {
"default": "Alt+Shift+R"
}
},
"toggleChromeVoxVersion": {
"description": "__MSG_CHROMEVOX_TOGGLE_CHROMEVOX__",
"suggested_key": {
"default": "Alt+Shift+Q"
}
}
},
"content_scripts": [ {
"all_frames": true,
"exclude_globs": [ ],
"js": [ "chromeVoxChromePageScript.js" ],
"matches": [ "\u003Call_urls>" ]
} ],
"default_locale": "en",
"description": "__MSG_CHROMEVOX_DESCRIPTION__",
"icons": {
"128": "images/chromevox-128.png",
"16": "images/chromevox-16.png",
"48": "images/chromevox-48.png"
},
"key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGBi/oD7Yl/Y16w3+gee/95/EUpRZ2U6c+8orV5ei+3CRsBsoXI/DPGBauZ3rWQ47aQnfoG00sXigFdJA2NhNK9OgmRA2evnsRRbjYm2BG1twpaLsgQPPus3PyczbDCvhFu8k24wzFyEtxLrfxAGBseBPb9QrCz7B4k2QgxD/CwIDAQAB",
"manifest_version": 2,
"name": "__MSG_CHROMEVOX_NAME__",
"options_page": "chromevox/background/options.html",
"permissions": [ "accessibilityPrivate", "bookmarks", "brailleDisplayPrivate", "commands.accessibility", "commandLinePrivate", "experimental", "history", "notifications", "storage", "tabs", "tts", "virtualKeyboardPrivate", "\u003Call_urls>" ],
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "53.0.2784.6",
"web_accessible_resources": [ "chromevox/background/keymaps/next_keymap.json", "chromevox/injected/api.js", "chromevox/injected/api_util.js", "chromevox/injected/mathjax.js", "chromevox/injected/mathjax_external_util.js" ]
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment