Index: docs/accessibility/chromevox.md |
diff --git a/docs/accessibility/chromevox.md b/docs/accessibility/chromevox.md |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ebc6f6f5ac07191fb8401ef15a177e50333cd813 |
--- /dev/null |
+++ b/docs/accessibility/chromevox.md |
@@ -0,0 +1,131 @@ |
+# ChromeVox (for developers) |
+ |
+ChromeVox is the built-in screen reader on Chrome OS. It was originally |
+developed as a separate extension but now the code lives inside of the Chromium |
+tree and it's built as part of Chrome OS. |
+ |
+To start or stop ChromeVox on Chrome OS, press Ctrl+Alt+Z at any time. |
+ |
+## Developer Info |
+ |
+Code location: ```chrome/browser/resources/chromeos/chromevox``` |
+ |
+Ninja target: it's built as part of "chrome", but you can build and run |
+chromevox_tests to test it (Chrome OS target only - you must have target_os = |
+"chromeos" in your GN args first). |
+ |
+## Developing On Linux |
+ |
+ChromeVox for Chrome OS development is done on Linux. |
+ |
+See [ChromeVox on Desktop Linux](chromevox_on_desktop_linux.md) |
+for more information. |
+ |
+## ChromeVox Next |
+ |
+ChromeVox Next is the code name we use for a major new rewrite to ChromeVox that |
+uses the automation API instead of content scripts. The code is part of |
+ChromeVox (unique ChromeVox Next code is found in |
+chrome/browser/resources/chromeos/chromevox/cvox2). |
+ |
+ChromeVox contains all of the classic and next code in the same codebase, it |
+switches its behavior dynamically based on the mode: |
+ |
+* Next: as of version 56 of Chrome/Chrome OS, this is default. ChromeVox uses new key/braille bindings, earcons, speech/braille output style, the Next engine (Automation API), and other major/minor improvements |
+* Next Compat: in order to maintain compatibility with some clients of the ChromeVox Classic js APIs, some sites have been whitelisted for this mode. ChromeVox will inject classic content scripts, but expose a Next-like user experience (like above) |
+* Classic: as of version 56 of Chrome/Chrome OS, this mode gets enabled via a keyboard toggle Search+Q. Once enabled, ChromeVox will behave like it did in the past including keyboard bindings, earcons, speech/braille output style, and the underlying engine (content scripts). |
+* Classic compat for some sites that require Next, while running in Classic, ChromeVox will use the Next engine but expose a Classic user experience (like above) |
+ |
+Once it's ready, the plan is to retire everything other than Next mode. |
+ |
+## ChromeVox Next |
+ |
+To test ChromeVox Next, click on the Gear icon in the upper-right of the screen |
+to open the ChromeVox options (or press the keyboard shortcut Search+Shift+O, O) |
+and then click the box to opt into ChromeVox Next. |
+ |
+If you are running m56 or later, you already have ChromeVox Next on by |
+default. To switch back to Classic, press Search+Q. |
+ |
+## Debugging ChromeVox |
+ |
+There are options available that may assist in debugging ChromeVox. Here are a |
+few use cases. |
+ |
+### Feature development |
+ |
+When developing a new feature, it may be helpful to save time by not having to |
+go through a compile cycle. This can be achieved by setting |
+```chromevox_compress_js``` to 0 in |
+chrome/browser/resources/chromeos/chromevox/BUILD.gn, or by using a debug build. |
+ |
+In a debug build or with chromevox_compress_js off, the unflattened files in the |
+Chrome out directory (e.g. out/Release/resources/chromeos/chromevox/). Now you |
+can hack directly on the copy of ChromeVox in out/ and toggle ChromeVox to pick |
+up your changes (via Ctrl+Alt+Z). |
+ |
+### Fixing bugs |
+ |
+The easiest way to debug ChromeVox is from an external browser. Start Chrome |
+with this command-line flag: |
+ |
+```out/Release/chrome --remote-debugging-port=9222``` |
+ |
+Now open http://localhost:9222 in a separate instance of the browser, and debug the ChromeVox extension background page from there. |
+ |
+Another option is to use emacs jade (available through -mx |
+package-list-packages). |
+ |
+It also talks to localhost:9222 but integrates more tightly into emacs instead. |
+ |
+Another option is to use the built-in developer console. Go to the |
+ChromeVox options page with Search+Shift+o, o; then, substitute the |
+“options.html” path with “background.html”, and then open up the |
+inspector. |
+ |
+### Running tests |
+ |
+Build the chromevox_tests target. To run |
+lots of tests in parallel, run it like this: |
+ |
+```out/Release/chromevox_tests --test-launcher-jobs=20``` |
+ |
+Use a test filter if you only want to run some of the tests from a |
+particular test suite - for example, most of the ChromeVox Next tests |
+have "E2E" in them (for "end-to-end"), so to only run those: |
+ |
+```out/Release/chromevox_tests --test-launcher-jobs=20 --gtest_filter="*E2E*"``` |
+ |
+## ChromeVox for other platforms |
+ |
+ChromeVox can be run as an installable extension, separate from a |
+linux Chrome OS build. |
+ |
+### From source |
+ |
+chrome/browser/resources/chromeos/chromevox/tools has the required scripts that pack ChromeVox as an extension and make any necessary manifest changes. |
+ |
+### From Webstore |
+ |
+Alternatively, the webstore has the stable version of ChromeVox. |
+ |
+To install without interacting with the webstore UI, place the |
+following json block in |
+/opt/google/chrome-unstable/extensions/kgejglhpjiefppelpmljglcjbhoiplfn.json |
+ |
+``` |
+{ |
+"external_update_url": "https://clients2.google.com/service/update2/crx" |
+} |
+``` |
+ |
+If you're using the desktop Linux version of Chrome, we recommend you |
+use Voxin for speech. Run chrome with: “google-chrome |
+--enable-speech-dispatcher” and select a voice provided by the speechd |
+package from the ChromeVox options page (ChromeVox+o, o). As of the |
+latest revision of Chrome 44, speechd support has become stable enough |
+to use with ChromeVox, but still requires the flag. |
+ |
+In the ChromeVox options page, select the flat keymap and use sticky |
+mode (double press quickly of insert) to emulate a modal screen |
+reader. |