Bug 1398493 - Improve testing/geckodriver Markdown docs. r?automatedtester draft
authorAndreas Tolfsen <ato@sny.no>
Sat, 09 Sep 2017 16:50:57 +0100
changeset 663942 8a02a065f35054e3ebfacf5a4dcbeb8ebb71daa8
parent 663831 1888ec2f277f6bb26271b8808e08914a21db9efe
child 663943 c6c759757dc39da2fb351965c0203f7add44f00e
push id79560
push userbmo:ato@sny.no
push dateWed, 13 Sep 2017 14:08:31 +0000
reviewersautomatedtester
bugs1398493
milestone57.0a1
Bug 1398493 - Improve testing/geckodriver Markdown docs. r?automatedtester This change, though unstubstantial, will make the Markdown documents under testing/geckodriver more readable in text editors. DONTBUILD MozReview-Commit-ID: 21yQUExNJhU
testing/geckodriver/CHANGES.md
testing/geckodriver/README.md
--- a/testing/geckodriver/CHANGES.md
+++ b/testing/geckodriver/CHANGES.md
@@ -1,378 +1,762 @@
-# Change log
+Change log
+==========
 
 All notable changes to this program is documented in this file.
 
-## Unreleased
+
+Unreleased
+----------
 
 ### Added
-- Added crashreporter environment variables to better control the browser in case of crashes.
-- Added preference `dom.file.createInChild` set to true to allow file object creation in content processes.
+
+- Added crashreporter environment variables to better control the browser
+  in case of crashes
+
+- Added preference `dom.file.createInChild` set to true to allow file
+  object creation in content processes
 
 ### Changed
-- Early abort connection attempts to Marionette if the Firefox process closed unexpectetly.
-- Removed deprecated `socksProxyVersion` in favor of `socksVersion`.
-- Removed `ftpProxyPort`, `httpProxyPort`, `sslProxyPort`, and `socksProxyPort` because _ports_ have to be set for `ftpProxy`, `httpProxy`, `sslProxy`, and `socksProxy` using ":<PORT>".
-- To make sure no browser process is left behind when the [`New Session` command](https://docs.rs/webdriver/0.27.0/webdriver/command/enum.WebDriverCommand.html#variant.NewSession) fails, the process is closed immediately now.
-- The `proxyType` `noproxy` has been replaced with `direct` in accordance with recent WebDriver specification changes
-- `/moz/addon/install` command accepts an `addon` parameter, in lieu of `path`, containing an addon as a Base64 string
-- The [`WindowRectParameters`](https://docs.rs/webdriver/0.30.0/webdriver/command/struct.WindowRectParameters.html have been updated to return signed 32-bit integers in accordance with the CSS and WebDriver specifications, and to be more liberal with the input types
-- [webdriver crate](https://crates.io/crates/webdriver) upgraded to version 0.30.0
-- [mozrunner crate](https://crates.io/crates/mozrunner) upgraded to version 0.5.0
+
+- Early abort connection attempts to Marionette if the Firefox process
+  closed unexpectetly
+
+- Removed deprecated `socksProxyVersion` in favor of `socksVersion`
+
+- Removed `ftpProxyPort`, `httpProxyPort`, `sslProxyPort`, and
+  `socksProxyPort` because _ports_ have to be set for `ftpProxy`,
+  `httpProxy`, `sslProxy`, and `socksProxy` using ":<PORT>"
+
+- To make sure no browser process is left behind when the [`NewSession`]
+  fails, the process is closed immediately now
 
-## 0.18.0 (2017-07-10)
+- The `proxyType` `noproxy` has been replaced with `direct` in accordance
+  with recent WebDriver specification changes
+
+- `/moz/addon/install` command accepts an `addon` parameter, in lieu of
+  `path`, containing an addon as a Base64 string
+
+- The [`WindowRectParameters`] have been updated to return signed 32-bit
+  integers in accordance with the CSS and WebDriver specifications, and
+  to be more liberal with the input types
+
+- [webdriver crate] upgraded to version 0.30.0
+
+- [mozrunner crate] upgraded to version 0.4.2
+
+
+0.18.0 (2017-07-10)
+-------------------
 
 ### Changed
-- [`RectResponse`](https://docs.rs/webdriver/0.27.0/webdriver/response/struct.RectResponse.html) permits returning floats for `width` and `height` fields
-- New type [`CookieResponse`](https://docs.rs/webdriver/0.27.0/webdriver/response/struct.CookieResponse.html) for the [`GetNamedCookie` command](https://docs.rs/webdriver/0.27.0/webdriver/command/enum.WebDriverCommand.html#variant.GetNamedCookie) returns a single cookie, as opposed to an array of a single cookie
-- To pick up a prepared profile from the filesystem, it is now possible to pass `["-profile", "/path/to/profile"]` in the `args` array on `moz:firefoxOptions`
+
+- [`RectResponse`] permits returning floats for `width` and `height`
+  fields
+
+- New type [`CookieResponse`] for the [`GetNamedCookie` command] returns
+  a single cookie, as opposed to an array of a single cookie
+
+- To pick up a prepared profile from the filesystem, it is now possible
+  to pass `["-profile", "/path/to/profile"]` in the `args` array on
+  `moz:firefoxOptions`
+
 - geckodriver now recommends Firefox 53 and greater
-- Version information (`--version`) contains the hash from from the commit used to build geckodriver
+
+- Version information (`--version`) contains the hash from from the
+  commit used to build geckodriver
+
 - geckodriver version logged on startup
-- [webdriver crate](https://crates.io/crates/webdriver) upgraded to version 0.27.0
-- [mozrunner crate](https://crates.io/crates/mozrunner) upgraded to version 0.4.1
+
+- [webdriver crate] upgraded to version 0.27.0
+
+- [mozrunner crate] upgraded to version 0.4.1
 
 ### Fixed
-- The [`SetTimeouts`](https://docs.rs/webdriver/0.27.0/webdriver/command/enum.WebDriverCommand.html#variant.SetTimeouts) command maps to the Marionette `setTimeouts` command, which makes geckodriver compatible with Firefox 56 and greater
+
+- The [`SetTimeouts`] command maps to the Marionette `setTimeouts`
+  command, which makes geckodriver compatible with Firefox 56 and greater
+
 - Linux x86 (i686-unknown-linux-musl) builds are fixed
 
-## 0.17.0 (2017-06-09)
+
+0.17.0 (2017-06-09)
+-------------------
 
 ### Added
+
 - Added endpoints:
-  - POST `/session/{session id}/window/fullscreen` to invoke the window manager-specific `full screen` operation
-  - POST `/session/{session id}/moz/addon/install` to install an extension [Gecko only]
-  - POST `/session/{session id}/moz/addon/uninstall` to uninstall an extension [Gecko only]
+  - POST `/session/{session id}/window/fullscreen` to invoke the window
+    manager-specific `full screen` operation
+  - POST `/session/{session id}/moz/addon/install` to install an extension
+    (Gecko only)
+  - POST `/session/{session id}/moz/addon/uninstall` to uninstall an
+    extension (Gecko only)
 
 ### Changed
-- Increasing the length of the `network.http.phishy-userpass-length` preference will cause Firefox to not prompt when navigating to a website with a username or password in the URL
-- Library dependencies upgraded to mozrunner 0.4 and mozprofile 0.3 to allow overriding of preferences via capabilities if those have been already set in the profile
-- Library dependencies upgraded to mozversion 0.1.2 to only use the normalized path of the Firefox binary for version checks but not to actually start the browser, which broke several components in Firefox on Windows
+
+- Increasing the length of the `network.http.phishy-userpass-length`
+  preference will cause Firefox to not prompt when navigating to a
+  website with a username or password in the URL
+
+- Library dependencies upgraded to mozrunner 0.4 and mozprofile 0.3
+  to allow overriding of preferences via capabilities if those have been
+  already set in the profile
+
+- Library dependencies upgraded to mozversion 0.1.2 to only use the
+  normalized path of the Firefox binary for version checks but not to
+  actually start the browser, which broke several components in Firefox
+  on Windows
 
 ### Fixed
-- The SetWindowRect command now returns the WindowRect when it is done
-- Use ASCII versions of array symbols to properly display them in the Windows command prompt
-- Use [`SessionNotCreated`](https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html#variant.SessionNotCreated) error instead of [`UnknownError`](https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html#variant.UnknownError) if there is no current session
+
+- The [SetWindowRect] command now returns the [WindowRectResponse]
+  when it is done
+
+- Use ASCII versions of array symbols to properly display them in the
+  Windows command prompt
 
-## 0.16.1 (2017-04-26)
+- Use [`SessionNotCreated`] error instead of [`UnknownError`] if there
+  is no current session
+
+
+0.16.1 (2017-04-26)
+-------------------
 
 ### Fixed
-- Read Firefox version number from stdout when failing to look for the application .ini file (fixes [Selenium #3884](https://github.com/SeleniumHQ/selenium/issues/3884))
-- Session is now ended when closing the last Firefox window (fixes [#613](https://github.com/mozilla/geckodriver/issues/613))
+
+- Read Firefox version number from stdout when failing
+  to look for the application .ini file (fixes [Selenium
+  #3884](https://github.com/SeleniumHQ/selenium/issues/3884))
 
-## 0.16.0 (2017-04-21)
+- Session is now ended when closing the last Firefox window (fixes
+  [#613](https://github.com/mozilla/geckodriver/issues/613))
+
 
-Note that geckodriver v0.16.0 is only compatible with Selenium 3.4 and greater.
+0.16.0 (2017-04-21)
+-------------------
+
+Note that geckodriver v0.16.0 is only compatible with Selenium 3.4
+and greater.
 
 ### Added
-- Support for WebDriver-conforming [New Session](https://w3c.github.io/webdriver/webdriver-spec.html#dfn-new-session) negotiation, with `desiredCapabilities`/`requiredCapabilities` negotiation as fallback
+
+- Support for WebDriver-conforming [New Session] negotiation, with
+  `desiredCapabilities`/`requiredCapabilities` negotiation as fallback
+
 - Added two new endpoints:
-  - GET `/session/{session id}/window/rect` for [Get Window Rect](https://w3c.github.io/webdriver/webdriver-spec.html#get-window-rect)
-  - POST `/session/{session id}/window/rect` for [Set Window Rect](https://w3c.github.io/webdriver/webdriver-spec.html#set-window-rect)
-- Align errors with the [WebDriver errors](https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors):
-  - Introduces new errors [`ElementClickIntercepted`](https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html#variant.ElementClickIntercepted), [`ElementNotInteractable`](https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html#variant.ElementNotInteractable), [`InvalidCoordinates`](https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html#variant.InvalidCoordinates), [`NoSuchCookie`](https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html#variant.NoSuchCookie), [`UnableToCaptureScreen`](https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html#variant.UnableToCaptureScreen), and [`UnknownCommand`](https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html#variant.UnknownCommand)
+  - GET `/session/{session id}/window/rect` for [Get Window Rect]
+  - POST `/session/{session id}/window/rect` for [Set Window Rect]
+
+- Align errors with the [WebDriver errors]:
+  - Introduces new errors [`ElementClickIntercepted`],
+  [`ElementNotInteractable`], [`InvalidCoordinates`], [`NoSuchCookie`],
+  [`UnableToCaptureScreen`], and [`UnknownCommand`]
   - Removes `ElementNotVisible` and `InvalidElementCoordinates` errors
 
 ### Removed
+
 - Removed following list of unused endpoints:
   - GET `/session/{session id}/alert_text`
   - POST `/session/{session id}/alert_text`
   - POST `/session/{session id}/accept_alert`
   - POST `/session/{session id}/dismiss_alert`
   - GET `/session/{session id}/window_handle`
   - DELETE `/session/{session id}/window_handle`
   - POST `/session/{session id}/execute_async`
   - POST `/session/{session id}/execute`
 
 ### Changed
-- [`SendKeysParameters`](https://docs.rs/webdriver/0.25.0/webdriver/command/struct.SendKeysParameters.html), which is used for the [Element Send Keys](https://w3c.github.io/webdriver/webdriver-spec.html#element-send-keys) and [Send Alert Text](https://w3c.github.io/webdriver/webdriver-spec.html#send-alert-text) commands, has been updated to take a string `text` field
-- [`CookieResponse`](https://docs.rs/webdriver/0.25.0/webdriver/response/struct.CookieResponse.html) and [`CloseWindowResponse`](https://docs.rs/webdriver/0.25.0/webdriver/response/struct.CloseWindowResponse.html) fixed to be properly wrapped in a `value` field, like other responses
+
+- [`SendKeysParameters`], which is used for the [Element Send Keys] and
+  [Send Alert Text] commands, has been updated to take a string `text`
+  field
+
+- [`CookieResponse`] and [`CloseWindowResponse`] fixed to be properly
+  wrapped in a `value` field, like other responses
+
 - Allow negative numbers for `x` and `y` fields in `pointerMove` action
-- Disable Flash and the plugin container in Firefox by default, which should help mitigate the “Plugin Container for Firefox has stopped wroking” problems [many users were reporting](https://github.com/mozilla/geckodriver/issues/225) when deleting a session
-- Preferences passed in a profile now take precedence over set of default preferences defined by geckodriver (fixed by [@DrMarcII](https://github.com/DrMarcII))
-  - The exceptions are the `marionette.port` and `marionette.log.level` preferences and their fallbacks, which are set unconditionally and cannot be overriden
+
+- Disable Flash and the plugin container in Firefox by
+  default, which should help mitigate the “Plugin Container
+  for Firefox has stopped wroking” problems [many users were
+  reporting](https://github.com/mozilla/geckodriver/issues/225) when
+  deleting a session
+
+- Preferences passed in a profile now take precedence over
+  set of default preferences defined by geckodriver (fixed by
+  [Marc Fisher](https://github.com/DrMarcII))
+  - The exceptions are the `marionette.port` and `marionette.log.level`
+    preferences and their fallbacks, which are set unconditionally and
+    cannot be overriden
+
 - Remove default preference that disables unsafe CPOW checks
+
 - WebDriver library updated to 0.25.2
 
 ### Fixed
-- Fix for the “corrupt deflate stream” exception that sometimes occured when trying to write an empty profile by [@kirhgoph](https://github.com/kirhgoph)
-- Recognise `sslProxy` and `sslProxyPort` entries in the proxy configuration object (fixed by [@juangj](https://github.com/juangj))
-- Fix “`httpProxyPort` was not an integer” error (fixed by [@juangj](https://github.com/juangj))
-- Fix broken unmarshaling of _Get Timeouts_ response format from Firefox 52 and earlier (fixed by [@juangj](https://github.com/juangj))
-- Allow preferences in `moz:firefoxOptions` to be both positive- and negative integers (fixed by [@juangj](https://github.com/juangj))
+
+- Fix for the “corrupt deflate stream” exception that
+  sometimes occured when trying to write an empty profile by
+  [@kirhgoph](https://github.com/kirhgoph)
+
+- Recognise `sslProxy` and `sslProxyPort` entries in the proxy
+  configuration object (fixed by [Jason Juang])
+
+- Fix “`httpProxyPort` was not an integer” error (fixed by [Jason
+  Juang])
+
+- Fix broken unmarshaling of _Get Timeouts_ response format from Firefox
+  52 and earlier (fixed by [Jason Juang])
+
+- Allow preferences in `moz:firefoxOptions` to be both positive- and
+  negative integers (fixed by [Jason Juang])
+
 - Allow IPv6 hostnames in the proxy configuration object
+
 - i686-unknown-linux-musl (Linux 32-bit) build fixed
+
 - Log messages from other Rust modules are now ignored
+
 - Improved log messages to the HTTPD
 
-## 0.15.0 (2017-03-08)
+
+0.15.0 (2017-03-08)
+-------------------
 
 ### Added
-- Added routing and parsing for the [Get Timeouts](https://w3c.github.io/webdriver/webdriver-spec.html#dfn-get-timeouts) command
+
+- Added routing and parsing for the [Get Timeouts] command
 
 ### Changed
-- All HTTP responses are now wrapped in `{value: …}` objects per the WebDriver specification; this may likely require you to update your client library
-- Pointer move action’s `element` key changed to `origin`, which lets pointer actions originate within the context of the viewport, the pointer’s current position, or from an element
-- Now uses about:blank as the new tab document; this was previously disabled due to [bug 1333736](https://bugzilla.mozilla.org/show_bug.cgi?id=1333736) in Marionette
+
+- All HTTP responses are now wrapped in `{value: …}` objects per the
+  WebDriver specification; this may likely require you to update your
+  client library
+
+- Pointer move action’s `element` key changed to `origin`, which
+  lets pointer actions originate within the context of the viewport,
+  the pointer’s current position, or from an element
+
+- Now uses about:blank as the new tab document; this was previously
+  disabled due to [bug 1333736](https://bugzil.la/1333736) in Marionette
+
 - WebDriver libary updated to 0.23.0
 
 ### Fixed
-- Aligned the data structure accepted by the [Set Timeouts](https://w3c.github.io/webdriver/webdriver-spec.html#set-timeouts) command with the WebDriver specification
+
+- Aligned the data structure accepted by the [Set Timeouts] command with
+  the WebDriver specification
 
-## 0.14.0 (2017-01-31)
+
+0.14.0 (2017-01-31)
+-------------------
 
 ### Changed
-- Firefox process is now terminated and session ended when the last window is closed
+
+- Firefox process is now terminated and session ended when the last
+  window is closed
+
 - WebDriver library updated to version 0.20.0
 
 ### Fixed
-- Stacktraces are now included when the error originates from within the Rust stack
-- HTTPD now returns correct response headers for `Content-Type` and `Cache-Control` thanks to @jugglinmike
+
+- Stacktraces are now included when the error originates from within
+  the Rust stack
 
-## 0.13.0 (2017-01-06)
+- HTTPD now returns correct response headers for `Content-Type` and
+  `Cache-Control` thanks to [Mike Pennisi]
+
+
+0.13.0 (2017-01-06)
+-------------------
 
 ### Changed
-- When navigating to a document with an insecure- or otherwise invalid TLS certificate, an [insecure certificate](https://w3c.github.io/webdriver/webdriver-spec.html#dfn-insecure-certificate) error will be returned
-- On macOS, deducing Firefox’ location on the system will look for _firefox-bin_ on the system path (`PATH` environmental variable) before looking in the applications folder
-- Window position coordinates are allowed to be negative numbers, to cater for maximised window positioning on Windows
+
+- When navigating to a document with an insecure- or otherwise invalid
+  TLS certificate, an [insecure certificate] error will be returned
+
+- On macOS, deducing Firefox’ location on the system will look for
+  _firefox-bin_ on the system path (`PATH` environmental variable) before
+  looking in the applications folder
+
+- Window position coordinates are allowed to be negative numbers, to
+  cater for maximised window positioning on Windows
+
 - WebDriver library updated to version 0.18.0
 
 ### Fixed
-- Check for single-character key codes in action sequences now counts characters instead of bytes
+
+- Check for single-character key codes in action sequences now counts
+  characters instead of bytes
 
-## 0.12.0 (2017-01-03)
+
+0.12.0 (2017-01-03)
+-------------------
 
 ### Added
-- Added [_Take Element Screenshot_](https://w3c.github.io/webdriver/webdriver-spec.html#take-element-screenshot) command
-- Added new [_Status_](https://w3c.github.io/webdriver/webdriver-spec.html#status) command
-- Added routing for the [_Get Timeouts_](https://w3c.github.io/webdriver/webdriver-spec.html#get-timeouts) command, but it is not yet implemented in Marionette, and will return an _unsupported operation_ error until it is
-- Implemented routing for [new actions API](https://w3c.github.io/webdriver/webdriver-spec.html#actions), but it too is not yet fully implemented in Marionette
+
+- Added [Take Element Screenshot] command
+
+- Added new [Status] command
+
+- Added routing for the [Get Timeouts] command, but it is not yet
+  implemented in Marionette, and will return an _unsupported operation_
+  error until it is
+
+- Implemented routing for [new actions API](Actions), but it too is not
+  yet fully implemented in Marionette
 
 ### Changed
-- [Synced Firefox preferences](https://github.com/mozilla/geckodriver/commit/2bfdc3ec8151c427a6a75a6ba3ad203459540495) with those used in Mozilla automation
-- Default log level for debug builds of Firefox, which used to be `DEBUG`, changed to `INFO`-level
+
+- [Synced Firefox
+  preferences](https://github.com/mozilla/geckodriver/commit/2bfdc3ec8151c427a6a75a6ba3ad203459540495)
+  with those used in Mozilla automation
+
+- Default log level for debug builds of Firefox, which used to be `DEBUG`,
+  changed to `INFO`-level
+
 - WebDriver library dependency upgraded to 0.17.1
+
 - Using _session not created_ error when failing to start session
-- geckodriver will exit with exit code 69 to indicate that the port is unavailable
+
+- geckodriver will exit with exit code 69 to indicate that the port
+  is unavailable
 
 ### Fixed
+
 - Improved logging when starting Firefox
-- Reverted to synchronous logging, which should address cases of inconsistent output when failing to bind to port
+
+- Reverted to synchronous logging, which should address cases of
+  inconsistent output when failing to bind to port
+
 - Clarified in README that geckodriver is not supported on Windows XP
-- Added documentation of supported capabilities to [README](https://github.com/mozilla/geckodriver/blob/master/README.md)
-- Included capabilities example in [README](https://github.com/mozilla/geckodriver/blob/master/README.md)
+
+- Added documentation of supported capabilities to [README]
 
-## 0.11.1 (2016-10-10)
+- Included capabilities example in the [README]
+
+
+0.11.1 (2016-10-10)
+-------------------
 
 ### Fixed
-- Version number in binary now reflects the release version.
+
+- Version number in binary now reflects the release version
 
-## 0.11.0 (2016-10-10)
+
+0.11.0 (2016-10-10)
+-------------------
 
 ### Added
-- Introduced continous integration builds for Linux- and Windows 32-bit binaries
+
+- Introduced continous integration builds for Linux- and Windows 32-bit
+  binaries
+
 - Added commands for setting- and getting the window position
-- Added new extension commands for finding an element’s anonymous children and querying its attributes; accessible through the `/session/{sessionId}/moz/xbl/{elementId}/anonymous_children` to return all anonymous children and `/session/{sessionId}/moz/xbl/{elementId}/anonymous_by_attribute` to return an anonymous element by a name and attribute query
-- Introduced a `moz:firefoxOptions` capability to customise a Firefox session:
-  - The `binary`, `args`, and `profile` entries on this dictionary is equivalent to the old `firefox_binary`, `firefox_args`, and `firefox_profile` capabilities, which have now all been removed
-  - The `log` capability takes a dictionary such as `{log: "trace"}` to enable trace level verbosity in Gecko
-  - The `prefs` capability lets you define Firefox preferences through capabilities
-- Re-introduced the `--webdriver-port` argument as a hidden alias to `--port`
+
+- Added new extension commands for finding an element’s anonymous
+  children and querying its attributes; accessible through the
+  `/session/{sessionId}/moz/xbl/{elementId}/anonymous_children`
+  to return all anonymous children and
+  `/session/{sessionId}/moz/xbl/{elementId}/anonymous_by_attribute` to
+  return an anonymous element by a name and attribute query
+
+- Introduced a `moz:firefoxOptions` capability to customise a Firefox
+  session:
+
+  - The `binary`, `args`, and `profile` entries on this dictionary
+    is equivalent to the old `firefox_binary`, `firefox_args`, and
+    `firefox_profile` capabilities, which have now all been removed
+
+  - The `log` capability takes a dictionary such as `{log: "trace"}`
+    to enable trace level verbosity in Gecko
+
+  - The `prefs` capability lets you define Firefox preferences through
+    capabilities
+
+- Re-introduced the `--webdriver-port` argument as a hidden alias to
+  `--port`
 
 ### Changed
-- `firefox_binary`, `firefox_args`, and `firefox_profile` capabilities removed in favour of the `moz:firefoxOptions` dictionary detailed above and in the README
-- Removed `--no-e10s` flag, and geckodriver will from now rely on the Firefox default multiprocessing settings (override using preferences)
+
+- `firefox_binary`, `firefox_args`, and `firefox_profile` capabilities
+  removed in favour of the `moz:firefoxOptions` dictionary detailed above
+  and in the [README]
+
+- Removed `--no-e10s` flag, and geckodriver will from now rely on the
+  Firefox default multiprocessing settings (override using preferences)
+
 - Disable pop-up blocker in the default profile by @juangj
-- Changed Rust compiler version to 1.12 (beta) temporarily because of [trouble linking Musl binaries](https://github.com/rust-lang/rust/issues/34978)
-- Replaced _env_logger_ logging facility with the _slog_ package, causing the `RUST_LOG` environment variable to no longer have any affect
-- Updated the WebDriver Rust library to version 0.15.
+
+- Changed Rust compiler version to 1.12 (beta)
+  temporarily because of [trouble linking Musl
+  binaries](https://github.com/rust-lang/rust/issues/34978)
+
+- Replaced _env_logger_ logging facility with the _slog_ package,
+  causing the `RUST_LOG` environment variable to no longer have any affect
+
+- Updated the WebDriver Rust library to version 0.15
 
 ### Fixed
+
 - Corrected link to repository in Cargo metadata
-- Verbosity shorthand flag `-v[v]` now works again, following the replacement of the argument parsing library in the previous release
+
+- Verbosity shorthand flag `-v[v]` now works again, following the
+  replacement of the argument parsing library in the previous release
+
 - When the HTTPD fails to start, errors are propagated to the user
-- Disabled the additional welcome URL (`startup.homepage_welcome_url.additional`) so that officially branded Firefox builds do not start with two open tabs in fresh profiles
-- Disabled homepage override URL redirection on milestone upgrades, which means a tab with an upgrade notice is not displayed when launching a new Firefox version
+
+- Disabled the additional welcome URL
+  (`startup.homepage_welcome_url.additional`) so that officially branded
+  Firefox builds do not start with two open tabs in fresh profiles
 
-## 0.10.0 (2016-08-02)
+- Disabled homepage override URL redirection on milestone upgrades,
+  which means a tab with an upgrade notice is not displayed when launching
+  a new Firefox version
+
+
+0.10.0 (2016-08-02)
+-------------------
 
 ### Changed
-- Use multi-process Firefox (e10s) by default, added flag `--no-e10s` to disable it and removed `--e10s` flag
-- Disable autofilling of forms by default by @mythsunwind
+
+- Use multi-process Firefox (e10s) by default, added flag `--no-e10s`
+  to disable it and removed `--e10s` flag
+
+- Disable autofilling of forms by default by [Sven Jost]
+
 - Replace _argparse_ with _clap_ for arguments parsing
 
 ### Fixed
+
 - Attempt to deploy a single file from Travis when making a release
-- Grammar fix in README
+
+- Grammar fix in [README]
 
 
-## 0.9.0 (2016-06-30)
+0.9.0 (2016-06-30)
+------------------
 
 ### Added
-- Add ability to use `firefox_binary` capability to define location of Firefox to use
+
+- Add ability to use `firefox_binary` capability to define location of
+  Firefox to use
+
 - Automatically detect the default Firefox path if one is not given
+
 - Cross-compile to Windows and ARMv7 (HF) in CI
+
 - Add Musl C library-backed static binaries in CI
+
 - Add `-v`, `-vv`, and `--log LEVEL` flags to increase Gecko verbosity
+
 - Add Get Element Property endpoint
-- Add new `--version` flag showing copying information and a link to the repository
+
+- Add new `--version` flag showing copying information and a link to
+  the repository
 
 ### Changed
+
 - Now connects to a Marionette on a random port by default
+
 - Update webdriver-rust library dependency
+
 - Migrated to use Travis to deploy new releases
+
 - Reduced amount of logging
+
 - Introduced a changelog (this)
 
 
-## 0.8.0 (2016-06-07)
+0.8.0 (2016-06-07)
+------------------
 
 ### Added
-- Allow specifying array of arguments to the Firefox binary through the `firefox_args` capability
-- Pass parameters with New Session command
+
+- Allow specifying array of arguments to the Firefox binary through the
+  `firefox_args` capability
+
+- Pass parameters with [New Session] command
 
 ### Changed
+
 - Change product name to _geckodriver_
+
 - Make README more exhaustive
+
 - Quit Firefox when deleting a session
+
 - Update webdriver-rust library
+
 - Update dependencies
 
 ### Fixed
+
 - Fix tests
+
 - FIx typo in error message for parsing errors
 
 
-## 0.7.1 (2016-04-27)
+0.7.1 (2016-04-27)
+------------------
 
 ### Added
-- Add command line flag for using e10s enabeld Firefox by @martionsideofthemoon
-- Allow providing custom profiels
+
+- Add command line flag for using e10s enabled Firefox by [Kalpesh
+  Krishna]
+
+- Allow providing custom profiles
 
 ### Changed
-- Allow binding to an IPv6 address by @juangj
-- By default, connect to host-agnostic localhost by @juangj
+
+- Allow binding to an IPv6 address by [Jason Juang]
+
+- By default, connect to host-agnostic localhost by [Jason Juang]
+
 - Make `GeckoContextParameters` public
+
 - Update dependencies
 
 ### Fixed
+
 - Squash rustc 1.6 warnings by using `std::thread::sleep(dur: Duration)`
 
 
-## 0.6.2 (2016-01-20)
+0.6.2 (2016-01-20)
+------------------
 
 ### Added
-- Add LICENSE file from @joshbruning
+
+- Add LICENSE file from [Joshua Burning]
+
 - Schedule builds in CI on pushes and pull requests
 
 ### Changed
+
 - Enable CPOWs in Marionette
 
 
-## 0.6.0 (2016-01-12)
+0.6.0 (2016-01-12)
+------------------
 
 ### Added
+
 - Add Get Page Source endpoint
 
 ### Changed
+
 - Handle arrays being sent from Marionette
-- Correct build steps in README
+
+- Correct build steps in [README]
+
 - Update what properties are read from errors sent by Marionette
+
 - Update dependencies
 
 
-## 0.5.0 (2015-12-10)
+0.5.0 (2015-12-10)
+------------------
 
 ### Changed
+
 - Update argparse dependency to use Cargo
+
 - Update to the latest version of the Marionette wire protocol
+
 - Update to latest webdriver-rust library
+
 - Update dependencies
 
 
-## 0.4.2 (2015-10-02)
+0.4.2 (2015-10-02)
+------------------
 
 ### Changed
+
 - Skip compiling optional items in hyper
 
 
-## 0.4.1 (2015-10-02)
+0.4.1 (2015-10-02)
+------------------
 
 ### Changed
+
 - Update webdriver-rust library
+
 - Update dependencies
 
 
-## 0.4.0 (2015-09-28)
+0.4.0 (2015-09-28)
+------------------
 
 ### Added
-- Add command extensions for switching between content- and chrome contexts
-- Add more documentation from @vladikoff
+
+- Add command extensions for switching between content- and chrome
+  contexts
+
+- Add more documentation from [Vlad Filippov]
 
 ### Changed
+
 - Update Cargo.lock with new dependencies for building
+
 - Update for protocol updates that flatten commands
+
 - Update to new protocol error handling
+
 - Update for Marionette protocol version 3 changes
-- Strip any leading and trailing `{}` from the `sessionId` Marionette returns
+
+- Strip any leading and trailing `{}` from the `sessionId` Marionette
+  returns
+
 - Update dependencies
 
 ### Fixed
+
 - Fix `GetCSSValue` message to send correct key `propertyName`
+
 - Fix example in documentation from @vladikoff
 
 
-## 0.3.0 (2015-08-17)
+0.3.0 (2015-08-17)
+------------------
 
 ### Added
+
 - Add support for finding elements in subtrees
 
 
-## 0.2.0 (2015-05-20)
+0.2.0 (2015-05-20)
+------------------
 
 ### Added
+
 - Extra debug messages
+
 - Add ability to set WebDriver port
+
 - Add support for getting the active element
+
 - Add support for `GetCookies` and `DeleteCookie`/`DeleteCookies`
-- Add preferences that switch off certain features not required for WebDriver tests
+
+- Add preferences that switch off certain features not required for
+  WebDriver tests
 
 ### Changed
-- Make failing to communicate with Firefox a fatal error that closes the session
+
+- Make failing to communicate with Firefox a fatal error that closes
+  the session
+
 - Shut down session only when loosing connection
+
 - Better handling of missing command line flags
+
 - Poll for connection every 100ms rather than every 100s
+
 - Switch to string-based error codes
+
 - Switch webdriver-rust library dependency to be pulled from git
+
 - Update dependencies
 
 ### Fixed
+
 - Handle null id for switching to frame more correctly
 
 
-## 0.1.0 (2015-04-09)
+0.1.0 (2015-04-09)
+------------------
 
 ### Added
+
 - Add proxy for converting WebDriver HTTP protocol to Marionette protocol
+
 - Add endpoints for modal dialogue support
+
 - Allow connecting to a running Firefox instance
+
 - Add explicit Cargo.lock file
-- Start Firefox when we get a New Session command
+
+- Start Firefox when we get a [NewSession] command
+
 - Add flag parsing and address parsing
+
 - Add basic error handling
 
 ### Changed
+
 - Update for Rust beta
+
 - Switch to new IO libraries
+
 - Pin webdriver-rust commit so we can upgrade rustc versions independently
+
 - Set preferences when starting Firefox
+
 - Improve some error messages
+
 - Re-enable environment variable based logging
 
 ### Fixed
+
 - Fix Get Element Rect command to return floats instead of integers
+
 - Fix passing of web elements to Switch To Frame command
+
 - Fix serialisation of script commands
+
 - Fix assorted bugs found by the Selenium test suite
-- Fix conversion of Find Element/Find Elements responses from Marionette to WebDriver
+
+- Fix conversion of Find Element/Find Elements responses from Marionette
+  to WebDriver
+
 - Fixed build by updating Cargo.lock with new dependencies for building
+
 - Squash compile warnings
+
+
+
+[README]: https://github.com/mozilla/geckodriver/blob/master/README.md
+
+[`CloseWindowResponse`]: https://docs.rs/webdriver/newest/webdriver/response/struct.CloseWindowResponse.html
+[`CookieResponse`]: https://docs.rs/webdriver/newest/webdriver/response/struct.CookieResponse.html
+[`ElementClickIntercepted`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.ElementClickIntercepted
+[`ElementNotInteractable`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.ElementNotInteractable
+[`FullscreenWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.FullscreenWindow
+[`GetNamedCookie`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.GetNamedCookie
+[`GetWindowRect`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.GetWindowRect
+[`InvalidCoordinates`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.InvalidCoordinates
+[`MaximizeWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.MaximizeWindow
+[`MinimizeWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.MinimizeWindow
+[`NewSession`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.NewSession
+[`NoSuchCookie`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.NoSuchCookie
+[`RectResponse`]: https://docs.rs/webdriver/0.27.0/webdriver/response/struct.RectResponse.html
+[`SendKeysParameters`]: https://docs.rs/webdriver/newest/webdriver/command/struct.SendKeysParameters.html
+[`SessionNotCreated`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.SessionNotCreated
+[`SetTimeouts`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.SetTimeouts
+[`SetWindowRect`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.SetWindowRect
+[`UnableToCaptureScreen`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnableToCaptureScreen
+[`UnknownCommand`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnknownCommand
+[`UnknownError`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnknownError
+[`WindowRectParameters`]: https://docs.rs/webdriver/newest/webdriver/command/struct.WindowRectParameters.html
+
+[mozrunner crate]: https://crates.io/crates/mozrunner
+[webdriver crate]: https://crates.io/crates/webdriver
+
+[Actions]: https://w3c.github.io/webdriver/webdriver-spec.html#actions
+[Get Timeouts]: https://w3c.github.io/webdriver/webdriver-spec.html#dfn-get-timeouts
+[Get Timeouts]: https://w3c.github.io/webdriver/webdriver-spec.html#set-timeouts
+[Get Window Rect]: https://w3c.github.io/webdriver/webdriver-spec.html#get-window-rect
+[Get Window Rect]: https://w3c.github.io/webdriver/webdriver-spec.html#set-window-rect
+[insecure certificate]: https://w3c.github.io/webdriver/webdriver-spec.html#dfn-insecure-certificate
+[New Session]: https://w3c.github.io/webdriver/webdriver-spec.html#dfn-new-session
+[Send Alert Text]: https://w3c.github.io/webdriver/webdriver-spec.html#send-alert-text
+[Status]: https://w3c.github.io/webdriver/webdriver-spec.html#status
+[Take Element Screenshot]: https://w3c.github.io/webdriver/webdriver-spec.html#take-element-screenshot
+[WebDriver errors]: https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors
+
+[Jason Juang]: https://github.com/juangj
+[Joshua Bruning]: https://github.com/joshbruning
+[Kalpesh Krishna]: https://github.com/martiansideofthemoon
+[Mike Pennisi]: https://github.com/jugglinmike
+[Sven Jost]: https://github/mythsunwind
+[Vlad Filippov]: https://github.com/vladikoff
--- a/testing/geckodriver/README.md
+++ b/testing/geckodriver/README.md
@@ -1,73 +1,83 @@
-# geckodriver [![Build Status](https://travis-ci.org/mozilla/geckodriver.svg?branch=release)](https://travis-ci.org/mozilla/geckodriver)
+geckodriver
+===========
 
-Proxy for using W3C WebDriver-compatible clients
-to interact with Gecko-based browsers.
+Proxy for using W3C WebDriver-compatible clients to interact with
+Gecko-based browsers.
 
 This program provides the HTTP API described by the [WebDriver protocol]
-to communicate with Gecko browsers, such as Firefox.
-It translates calls into the [Firefox remote protocol]
-by acting as a proxy between the local- and remote ends.
-
-You can consult the [change log] for a record of all notable changes to the program.
-[Releases] are made available on GitHub on [supported platforms].
+to communicate with Gecko browsers, such as Firefox.  It translates calls
+into the [Firefox remote protocol] by acting as a proxy between the local-
+and remote ends.
 
-The canonical source code repository for geckodriver
-now lives in [mozilla-central] under [testing/geckodriver].
-You can read more about [working with Mozilla source code] on MDN.
-This means we do no longer accept pull requests on GitHub.
-Patches should be uploaded to a bug
-in the [Testing :: GeckoDriver] component.
+You can consult the [change log] for a record of all notable changes
+to the program.  [Releases] are made available on GitHub on [supported
+platforms].
+
+The canonical source code repository for geckodriver now lives in
+[mozilla-central] under [testing/geckodriver].  You can read more about
+[working with Mozilla source code] on MDN.  This means we do no longer
+accept pull requests on GitHub.  Patches should be uploaded to a bug in
+the [Testing :: GeckoDriver] component.
 
 [WebDriver protocol]: http://w3c.github.io/webdriver/webdriver-spec.html#protocol
 [Firefox remote protocol]: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette
 [change log]: https://github.com/mozilla/geckodriver/blob/master/CHANGES.md
 [Releases]: https://github.com/mozilla/geckodriver/releases
 [supported platforms]: #supported-firefoxen
 [mozilla-central]: https://hg.mozilla.org/mozilla-central/
 [testing/geckodriver]: https://hg.mozilla.org/mozilla-central/file/tip/testing/geckodriver
 [working with Mozilla source code]: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Source_Code
 [Testing :: geckodriver]: https://bugzilla.mozilla.org/buglist.cgi?product=Testing&component=geckodriver&resolution=---&list_id=13613952
 
-## Supported clients
+
+Supported clients
+=================
+
+[Selenium] users must update to [version
+3.4](https://github.com/SeleniumHQ/selenium/releases/tag/selenium-3.4.0)
+or later to use geckodriver.  Other clients that follow the [W3C WebDriver
+specification] are also supported.
+
+[W3C WebDriver specification]: https://w3c.github.io/webdriver/webdriver-spec.html
 
-[Selenium](http://docs.seleniumhq.org/) users
-must update to [version 3.4](https://github.com/SeleniumHQ/selenium/releases/tag/selenium-3.4.0)
-or later to use geckodriver.
-Other clients that follow the [W3C WebDriver specification](https://w3c.github.io/webdriver/webdriver-spec.html) are also supported.
+
+Supported Firefoxen
+===================
 
-## Supported Firefoxen
+geckodriver is not yet feature complete.  This means that it does not
+yet offer full conformance with the [WebDriver] standard or complete
+compatibility with [Selenium].  You can track the [implementation
+status] of the latest [Firefox Nightly](http://whattrainisitnow.com/)
+on [MDN].  We also keep track of known [Selenium], [remote protocol],
+and [specification] problems in our [issue tracker].
 
-geckodriver is not yet feature complete.
-This means that it does not yet offer full conformance
-with the [WebDriver standard](https://w3c.github.io/webdriver/webdriver-spec.html)
-or complete compatibility with [Selenium](http://www.seleniumhq.org/).
-You can track the [implementation status](https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver/status)
-of the latest [Firefox Nightly](http://whattrainisitnow.com/) on
-[MDN](https://developer.mozilla.org/).
-We also keep track of known
-[Selenium](https://github.com/mozilla/geckodriver/issues?q=is%3Aissue+is%3Aopen+label%3Aselenium),
-[remote protocol](https://github.com/mozilla/geckodriver/issues?q=is%3Aissue+is%3Aopen+label%3Amarionette),
-and [specification](https://github.com/mozilla/geckodriver/issues?q=is%3Aissue+is%3Aopen+label%3Aspec)
-problems in our
-[issue tracker](https://github.com/mozilla/geckodriver/issues).
+Support is best in Firefox 53 and greater, although generally the more
+recent the Firefox version, the better the experience as they have more
+bug fixes and features.  Some features will only be available in the
+most recent Firefox versions, and we strongly advise using the latest
+[Firefox Nightly] with geckodriver.  Since Windows XP support in Firefox
+was dropped with Firefox 53, we do not support this platform.
 
-Support is best in Firefox 53 and greater,
-although generally the more recent the Firefox version,
-the better the experience as they have more bug fixes and features.
-Some features will only be available in the most recent Firefox versions,
-and we strongly advise using the [latest Firefox Nightly](https://nightly.mozilla.org/) with geckodriver.
-Since Windows XP support in Firefox was dropped with Firefox 53,
-we do not support this platform.
+[implementation status]: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver/status
+[MDN]: https://developer.mozilla.org/
+[selenium]: https://github.com/mozilla/geckodriver/issues?q=is%3Aissue+is%3Aopen+label%3Aselenium
+[remote protocol]: https://github.com/mozilla/geckodriver/issues?q=is%3Aissue+is%3Aopen+label%3Amarionette
+[specification]: https://github.com/mozilla/geckodriver/issues?q=is%3Aissue+is%3Aopen+label%3Aspec
+[issue tracker]: https://github.com/mozilla/geckodriver/issues
+[Firefox Nightly]: https://nightly.mozilla.org/
 
-## WebDriver capabilities
+
+WebDriver capabilities
+======================
 
-geckodriver supports a number of
-[WebDriver capabilities](https://w3c.github.io/webdriver/webdriver-spec.html#capabilities):
+geckodriver supports a number of [capabilities]:
+
+[capabilities]: https://w3c.github.io/webdriver/webdriver-spec.html#capabilities
 
 <table>
  <thead>
   <tr>
    <th>Name
    <th>Type
    <th>Default
    <th>Description
@@ -94,21 +104,24 @@ geckodriver supports a number of
    waiting for the <code>complete</code> ready state;
    or "<code>none</code>",
    which will return immediately after starting navigation.
  </tr>
 
  <tr>
   <td><code>proxy</code>
   <td><a href=#proxy-object><code>proxy</code></a>&nbsp;object
+  <td>
   <td>Sets browser proxy settings.
  </tr>
 </table>
 
-### `proxy` object
+
+`proxy` object
+--------------
 
 <table>
  <thead>
   <tr>
    <th>Name
    <th>Type
    <th>Description
   </tr>
@@ -187,17 +200,19 @@ geckodriver supports a number of
   <td>string
   <td>Defines the password used
    when authenticating with a SOCKS proxy.
    This property should only be set
    when <code>proxyType</code> is <code>manual</code>.
  </tr>
 </table>
 
-## Firefox capabilities
+
+Firefox capabilities
+====================
 
 geckodriver also supports a capability named `moz:firefoxOptions`
 which takes Firefox-specific options.
 This must be a dictionary
 and may contain any of the following fields:
 
 <table>
  <thead>
@@ -266,17 +281,19 @@ and may contain any of the following fie
  <tr id=capability-prefs>
   <td><code>prefs</code>
   <td><a href=#prefs-object><code>prefs</code></a>&nbsp;object
   <td>Map of preference name to preference value, which can be a
    string, a boolean or an integer.
  </tr>
 </table>
 
-### `log` object
+
+`log` object
+------------
 
 <table>
  <thead>
   <tr>
    <th>Name
    <th>Type
    <th>Description
   </tr>
@@ -289,17 +306,19 @@ and may contain any of the following fie
    Available levels are <code>trace</code>,
    <code>debug</code>, <code>config</code>,
    <code>info</code>, <code>warn</code>,
    <code>error</code>, and <code>fatal</code>.
    If left undefined the default is <code>info</code>.
  </tr>
 </table>
 
-### `prefs` object
+
+`prefs` object
+--------------
 
 <table>
  <thead>
   <tr>
    <th>Name
    <th>Type
    <th>Description
   </tr>
@@ -307,110 +326,109 @@ and may contain any of the following fie
 
  <tr>
   <td><var>preference name</var>
   <td>string, number, boolean
   <td>One entry per preference to override.
  </tr>
 </table>
 
-## Capabilities example
+
+Capabilities example
+====================
 
-The following example selects a specific Firefox binary
-to run with a prepared profile from the filesystem
-in headless mode (available on certain systems and recent Firefoxen).
-It also increases the number of IPC processes through a preference
-and enables more verbose logging.
+The following example selects a specific Firefox binary to run with
+a prepared profile from the filesystem in headless mode (available on
+certain systems and recent Firefoxen).  It also increases the number of
+IPC processes through a preference and enables more verbose logging.
 
-```js
-{
-	"capabilities": {
-		"alwaysMatch": {
-			"moz:firefoxOptions": {
-				"binary": "/usr/local/firefox/bin/firefox",
-				"args": ["-headless", "-profile", "/path/to/my/profile"],
-				"prefs": {
-					"dom.ipc.processCount": 8
-				},
-				"log": {
-					"level": "trace"
+	{
+		"capabilities": {
+			"alwaysMatch": {
+				"moz:firefoxOptions": {
+					"binary": "/usr/local/firefox/bin/firefox",
+					"args": ["-headless", "-profile", "/path/to/my/profile"],
+					"prefs": {
+						"dom.ipc.processCount": 8
+					},
+					"log": {
+						"level": "trace"
+					}
 				}
 			}
 		}
 	}
-}
-```
+
 
-## Usage
+Usage
+=====
 
-Usage steps are [documented on MDN](https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver),
+Usage steps are [documented on
+MDN](https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver),
 but how you invoke geckodriver largely depends on your use case.
 
-### Selenium
+
+Selenium
+--------
 
-If you are using geckodriver through [Selenium](http://seleniumhq.org/),
-you must ensure that you have version 3.4 and greater.
-Because geckodriver implements the [W3C WebDriver standard](https://w3c.github.io/webdriver/webdriver-spec.html)
-and not the same Selenium wire protocol older drivers are using,
-you may experience incompatibilities and migration problems
-when making the switch from FirefoxDriver to geckodriver.
+If you are using geckodriver through [Selenium], you must ensure that
+you have version 3.4 and greater.  Because geckodriver implements the
+[W3C WebDriver standard][WebDriver] and not the same Selenium wire
+protocol older drivers are using, you may experience incompatibilities
+and migration problems when making the switch from FirefoxDriver to
+geckodriver.
 
-Generally speaking, Selenium 3 enabled geckodriver
-as the default WebDriver implementation for Firefox.
-With the release of Firefox 47, FirefoxDriver had to be discontinued
-for its lack of support for the [new multi-processing architecture in Gecko](https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox).
+Generally speaking, Selenium 3 enabled geckodriver as the default
+WebDriver implementation for Firefox.  With the release of Firefox 47,
+FirefoxDriver had to be discontinued for its lack of support for the
+[new multi-processing architecture in Gecko][e10s].
 
 Selenium client bindings will pick up the _geckodriver_ binary executable
-from your [system’s `PATH` environmental variable](https://en.wikipedia.org/wiki/PATH_(variable))
-unless you override it by setting the `webdriver.gecko.driver`
-[Java VM system property](http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html):
+from your [system’s `PATH` environmental variable][PATH] unless you
+override it by setting the `webdriver.gecko.driver` [Java VM system
+property]:
 
-```java
-System.setProperty("webdriver.gecko.driver", "/home/user/bin");
-```
+	System.setProperty("webdriver.gecko.driver", "/home/user/bin");
 
-Or by passing it as a flag to the [java(1)](http://www.manpagez.com/man/1/java/) launcher:
+Or by passing it as a flag to the [java(1)] launcher:
 
 	% java -Dwebdriver.gecko.driver=/home/user/bin YourApplication
 
-Your milage with this approach may vary
-based on which programming language bindings you are using.
-It is in any case generally the case that geckodriver will be picked up
-if it is available on the system path.
-In a bash compatible shell,
-you can make other programs aware of its location
-by exporting or setting the `PATH` variable:
+Your milage with this approach may vary based on which programming
+language bindings you are using.  It is in any case generally the case
+that geckodriver will be picked up if it is available on the system path.
+In a bash compatible shell, you can make other programs aware of its
+location by exporting or setting the `PATH` variable:
 
 	% export PATH=$PATH:/home/user/bin
 	% whereis geckodriver
 	geckodriver: /home/user/bin/geckodriver
 
-On Window systems you can change the system path
-by right-clicking **My Computer** and choosing **Properties**.
-In the dialogue that appears, navigate
-**Advanced** → **Environmental Variables** → **Path**.
+On Window systems you can change the system path by right-clicking **My
+Computer** and choosing **Properties**.  In the dialogue that appears,
+navigate **Advanced** → **Environmental Variables** → **Path**.
 
 Or in the Windows console window:
 
 	$ set PATH=%PATH%;C:\bin\geckodriver
 
-### Standalone
+
+Standalone
+----------
 
-Since geckodriver is a separate HTTP server
-that is a complete remote end implementation
-of [WebDriver](https://w3c.github.io/webdriver/webdriver-spec.html),
-it is possible to avoid using the Selenium remote server
-if you have no requirements
-to distribute processes across a matrix of systems.
+Since geckodriver is a separate HTTP server that is a complete remote end
+implementation of [WebDriver], it is possible to avoid using the Selenium
+remote server if you have no requirements to distribute processes across
+a matrix of systems.
 
-Given a W3C WebDriver conforming client library (or _local end_)
-you may interact with the geckodriver HTTP server
-as if you were speaking to any Selenium server.
+Given a W3C WebDriver conforming client library (or _local end_) you
+may interact with the geckodriver HTTP server as if you were speaking
+to any Selenium server.
 
-Using [curl(1)](http://www.manpagez.com/man/1/curl/):
+Using [curl(1)]:
 
 	% geckodriver &
 	[1] 16010
 	% 1491834109194   geckodriver     INFO    Listening on 127.0.0.1:4444
 	% curl -d '{"capabilities": {"alwaysMatch": {"acceptInsecureCerts": true}}}' http://localhost:4444/session
 	{"sessionId":"d4605710-5a4e-4d64-a52a-778bb0c31e00","value":{"XULappId":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","acceptSslCerts":false,"appBuildId":"20160913030425","browserName":"firefox","browserVersion":"51.0a1","command_id":1,"platform":"LINUX","platformName":"linux","platformVersion":"4.9.0-1-amd64","processId":17474,"proxy":{},"raisesAccessibilityExceptions":false,"rotatable":false,"specificationLevel":0,"takesElementScreenshot":true,"takesScreenshot":true,"version":"51.0a1"}}
 	% curl -d '{"url": "https://mozilla.org"}' http://localhost:4444/session/d4605710-5a4e-4d64-a52a-778bb0c31e00/url
 	{}
@@ -418,118 +436,129 @@ Using [curl(1)](http://www.manpagez.com/
 	{"value":"https://www.mozilla.org/en-US/"
 	% curl -X DELETE http://localhost:4444/session/d4605710-5a4e-4d64-a52a-778bb0c31e00
 	{}
 	% fg
 	geckodriver
 	^C
 	%
 
-Using the Python [wdclient](https://github.com/w3c/wpt-tools/tree/master/webdriver) library:
+Using the Python [wdclient] library:
 
-```py
-import webdriver
+	import webdriver
 
-with webdriver.Session("127.0.0.1", 4444) as session:
-    session.url = "https://mozilla.org"
-    print "The current URL is %s" % session.url
-```
+	with webdriver.Session("127.0.0.1", 4444) as session:
+	    session.url = "https://mozilla.org"
+	    print "The current URL is %s" % session.url
 
 And to run:
 
 	% geckodriver &
 	[1] 16054
 	% python example.py
 	1491835308354   geckodriver     INFO    Listening on 127.0.0.1:4444
 	The current URL is https://www.mozilla.org/en-US/
 	% fg
 	geckodriver
 	^C
 	%
 
-## Flags
+[Selenium]: http://seleniumhq.org/
+[e10s]: https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox
+[PATH]: https://en.wikipedia.org/wiki/PATH_(variable)
+[Java VM system property]: http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
+[java(1)]: http://www.manpagez.com/man/1/java/
+[WebDriver]: https://w3c.github.io/webdriver/webdriver-spec.html
+[curl(1)]: http://www.manpagez.com/man/1/curl/
+[wdclient]: https://github.com/w3c/wpt-tools/tree/master/webdriver
+
+
+Flags
+=====
 
 #### <code>-b <var>BINARY</var></code>/<code>--binary <var>BINARY</var></code>
 
-Path to the Firefox binary to use.
-By default geckodriver tries to find and use
-the system installation of Firefox,
-but that behaviour can be changed by using this option.
-Note that the `binary` capability of the `moz:firefoxOptions` object
-that is passed when [creating a new session](https://w3c.github.io/webdriver/webdriver-spec.html#new-session)
+Path to the Firefox binary to use.  By default geckodriver tries to find
+and use the system installation of Firefox, but that behaviour can be
+changed by using this option.  Note that the `binary` capability of the
+`moz:firefoxOptions` object that is passed when [creating a new session]
 will override this option.
 
-On Linux systems it will use the first _firefox_ binary
-found by searching the `PATH` environmental variable,
-which is roughly equivalent to calling [whereis(1)](http://www.manpagez.com/man/1/whereis/)
-and extracting the second column:
+On Linux systems it will use the first _firefox_ binary found by searching
+the `PATH` environmental variable, which is roughly equivalent to calling
+[whereis(1)] and extracting the second column:
 
 	% whereis firefox
 	firefox: /usr/bin/firefox /usr/local/firefox
 
-On macOS, the binary is found by looking for the first _firefox-bin_ binary
-in the same fashion as on Linux systems.
-This means it is possible to also use `PATH`
-to control where geckodriver should find Firefox on macOS.
-It will then look for _/Applications/Firefox.app_.
+On macOS, the binary is found by looking for the first _firefox-bin_
+binary in the same fashion as on Linux systems.  This means it is
+possible to also use `PATH` to control where geckodriver should find
+Firefox on macOS.  It will then look for _/Applications/Firefox.app_.
 
-On Windows systems, geckodriver looks for the system Firefox
-by scanning the Windows registry.
+On Windows systems, geckodriver looks for the system Firefox by scanning
+the Windows registry.
+
+[creating a new session]: https://w3c.github.io/webdriver/webdriver-spec.html#new-session
+[whereis(1)]: http://www.manpagez.com/man/1/whereis/
+
 
 #### `--connect-existing`
 
-Connecting to an existing Firefox instance.
-The instance must have Marionette enabled.
+Connecting to an existing Firefox instance.  The instance must have
+Marionette enabled.
 
-To enable the Marionette remote protocol
-you can pass the `--marionette` flag to Firefox,
-or (in Firefox 54 or greater)
-flip the `marionette.enabled` preference in _about:config_ at runtime.
+To enable the Marionette remote protocol you can pass the `--marionette`
+flag to Firefox.
+
 
 #### <code>--host <var>HOST</var></code>
 
-Host to use for the WebDriver server.
-Defaults to 127.0.0.1.
+Host to use for the WebDriver server.  Defaults to 127.0.0.1.
+
 
 #### <code>--log <var>LEVEL</var></code>
 
-Set the Gecko and geckodriver log level.
-Possible values are `fatal`, `error`, `warn`, `info`, `config`, `debug`, and `trace`.
+Set the Gecko and geckodriver log level.  Possible values are `fatal`,
+`error`, `warn`, `info`, `config`, `debug`, and `trace`.
+
 
 #### <code>--marionette-port <var>PORT</var></code>
 
-Port to use for connecting to the Marionette remote protocol.
-By default it will pick a free port assigned by the system.
+Port to use for connecting to the Marionette remote protocol.  By default
+it will pick a free port assigned by the system.
+
 
 #### <code>-p <var>PORT</var></code>/<code>--port <var>PORT</var></code>
 
-Port to use for the WebDriver server.
-Defaults to 4444.
+Port to use for the WebDriver server.  Defaults to 4444.
 
-A helpful trick is that it is possible to bind to 0
-to get the system to atomically assign a free port.
+A helpful trick is that it is possible to bind to 0 to get the system
+to atomically assign a free port.
+
 
 #### <code>-v<var>[v]</var></code>
 
-Increases the logging verbosity by to debug level when passing a single `-v`,
-or to trace level if `-vv` is passed.
-This is analogous to passing `--log debug` and `--log trace`, respectively.
+Increases the logging verbosity by to debug level when passing a single
+`-v`, or to trace level if `-vv` is passed.  This is analogous to passing
+`--log debug` and `--log trace`, respectively.
 
-## Building
+
+Building
+========
 
-geckodriver is written in [Rust], a systems programming language from [Mozilla].
-Crucially, it relies on the [webdriver crate] to provide the HTTPD
-and do most of the heavy lifting of marshalling the WebDriver protocol.
-geckodriver translates WebDriver [commands], [responses], and [errors]
-to the [Marionette protocol],
-and acts as a proxy between [WebDriver] and [Marionette].
+geckodriver is written in [Rust], a systems programming language from
+[Mozilla].  Crucially, it relies on the [webdriver crate] to provide
+the HTTPD and do most of the heavy lifting of marshalling the WebDriver
+protocol.  geckodriver translates WebDriver [commands], [responses],
+and [errors] to the [Marionette protocol], and acts as a proxy between
+[WebDriver] and [Marionette].
 
-geckodriver is built in the [Firefox CI] by default
-but _not_ if you build Firefox locally.
-To enable building of geckodriver locally,
+geckodriver is built in the [Firefox CI] by default but _not_ if you
+build Firefox locally.  To enable building of geckodriver locally,
 ensure you put this in your [mozconfig]:
 
 	ac_add_options --enable-geckodriver
 
 The _geckodriver_ binary will appear in `${objdir}/dist/bin/geckodriver`
 alongside _firefox-bin_.
 
 [Rust]: https://www.rust-lang.org/
@@ -538,8 +567,21 @@ alongside _firefox-bin_.
 [commands]: https://docs.rs/webdriver/0.25.0/webdriver/command/index.html
 [responses]: https://docs.rs/webdriver/0.25.0/webdriver/response/index.html
 [errors]: https://docs.rs/webdriver/0.25.0/webdriver/error/enum.ErrorStatus.html
 [Marionette protocol]: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/Protocol
 [WebDriver]: https://w3c.github.io/webdriver/webdriver-spec.html
 [Marionette]: http://searchfox.org/mozilla-central/source/testing/marionette/README
 [Firefox CI]: https://treeherder.mozilla.org/
 [mozconfig]: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Configuring_Build_Options
+
+
+Contact
+=======
+
+The mailing list for geckodriver discussion is
+tools-marionette@lists.mozilla.org ([subscribe], [archive]).
+
+There is also an IRC channel to talk about using and developing
+geckodriver in #ateam on irc.mozilla.org.
+
+[subscribe]: https://lists.mozilla.org/listinfo/tools-marionette
+[archive]: http://groups.google.com/group/mozilla.tools.marionette