* Tested against Google Chrome 67.0.3396.99  Built on OSX, thanks Travis CI
    * Tested against Chrome/75.0.3770.90 / Win64, thanks AppVeyor
    * Tested against Chromium HeadlessChrome/62.0.3202.94
    * Tested against Chromium HeadlessChrome/63.0.3239.132
    * Tested against Chromium HeadlessChrome/64.0.3282.119
    * Tested against Chromium HeadlessChrome/65.0.3325.181
    * Tested against Chromium HeadlessChrome/66.0.3359.139
    * Tested against Chromium HeadlessChrome/67.0.3396.99
    * Tested against Chromium HeadlessChrome/68.0.3440.84
    * Tested against Chromium HeadlessChrome/69.0.3497.100
    * Tested against Chromium HeadlessChrome/70.0.3538.102
    * Tested against Chromium HeadlessChrome/71.0.3578.98
    * Tested against Chrome   HeadlessChrome/72.0.3626.96
    * Tested against Chromium HeadlessChrome/73.0.3683.103
    * Tested against Chromium HeadlessChrome/74.0.3729.131
    * Tested against Chromium HeadlessChrome/75.0.3770.90
    * Tested against Chromium HeadlessChrome/76.0.3798.0
    * Tested against Chromium HeadlessChrome/77.0.3865.75
    * Tested against Chromium HeadlessChrome/78.0.3904.70
    * Tested against Chromium HeadlessChrome/79.0.3927.0
    * Tested against Chromium HeadlessChrome/80.0.3952.0
    * Tested against Chromium HeadlessChrome/73.0.3683.75 (Debian "Buster")
    * Tested against Chromium HeadlessChrome/76.0.3809.100 (Debian "Buster")

0.39 2019-11-08
    * Skip tests on unsupported Chrome versions
    * Switch default (prerequisite) backend to IO::Async
    * We now have a dynamic configuration again, because on Windows we need
      Win32::File::VersionInfo to determine the Chrome version without
      launching it.

0.38 2019-11-01
    * Added wait_file option to wait for a file to disappear so we know that
      this Chrome instance has quit.
    * Added ->close() method to disconnect the object. This is just parts of
      DESTROY().
    * The backend selection was improved. We now select the backend that is
      already loaded.
    * Some memory leaks/circular references eliminated

0.37 2019-09-30
    * WWW::Mechanize::Chrome now asks Chrome for the URL. This allows the test
      suite (and your programs) to run in parallel, each using their own
      Chrome instance without them treading onto each others toes.
    * WWW::Mechanize::Chrome can now talk to Chrome v72+ using pipes (fd 3 and
      fd 4) on unixish OSes. In theory, using fd 3 and fd 4 is possible on
      Windows as well but not yet implemented. Doing this allows you to
      avoid sockets in the local communication.

      Use

          pipe => 1

      in the constructor to switch to using pipes.

    * API change: Use ->getTargets->get() instead of ->list_tabs()
      ->list_tabs() will be unsupported in the future.

    * The following three Chrome versions are now unsupported, as they do
      not allow reading the websocket URL from Chrome:

        * Chrome/59.0.3071.115
        * HeadlessChrome/60.0.3110.0
        * HeadlessChrome/61.0.3141.0

      If you really, really need them, please contact me so that I know that
      I need to keep the old connection code around.

0.36 2019-09-27
    * Added cleanup_signal option to select the signal which is used for
      cleaning up Chrome instances. This is SIGKILL on Windows and SIGTERM
      everywhere else by default. Proposed and prototyped by Chris Novakovic.
    * First parts of talking to Chromium via IPC pipes instead of sockets
      The real change will come in the next versions, but you can enable
      using a pipe for communication already by using the
          pipe => 1
      option.
    * More lenient timeouts
    * Fix retrieving the Chrome version
      There was a spurious call to ->log() when we didn't have a logger. This
      resulted in empty Chrome versions.

0.35 2019-09-05
    * Documented `intrapage` option to ->click()
    * Added `chromium` to default list of browsers

0.34 2019-06-15
    * Add ->remove_listener to $mech to explicitly remove event listeners.
      The usual way is RAII-style, letting your event listener simply go out of
      scope. This is for times where you can't let your event listener go out
      of scope.
    * Be more defensive to avoid (unweak) circular references. This should clean
      out more memory leaks whenever a callback is set or a Future is returned
      from W:M:C.
    * Fix (partial code for) saving a page. I don't know how this test ever
      passed. This adresses RT #129821.

0.33 2019-05-29
    * Actually call waitpid to make sure our Chrome processes go away properly
      and to not accumulate zombies. Sent by Felipe Sologuren. This fixes
      RT #129805, thanks!
    * Fix memory leak caused by non-weakening of references in ->add_listener
        Diagnosed and reported by Felipe Sologuren. This fixes RT #129808,
        thanks!
    * Add ->event accessor to Chrome::DevToolsProtocol::EventListener, suggested
      by Felipe Sologuren, thanks!

0.32 2019-05-29
    * ->update_html now stringifies its argument. This allows to pass in objects
      with stringification overload instead of having to do the stringification
      yourself. Addresses GH #42.
    * Rename HTTP::Cookies::Chrome to HTTP::Cookies::ChromeDevTools to avoid
      the name clash.

0.31 2019-05-25
    * Silence HTTP::Cookies::Chrome debug output left over
    * ->eval() now takes options on whether object references or JSON-serialized
      data should be returned. This allows you to reference the "window"
      object, for example.
      Currently, these object references are kept as hashrefs instead of
      objects, and the handling needs to become more transparent with respect to
      the Chrome API, but that is planned for later versions.

0.30 2019-05-17
    * Disable the Host: header test for Chromer 76+, as this raises an error
      in those versions instead of just not working.
      I guess this is progress.

0.29 2019-04-23
    * Add ->cookie_jar support, this adresses GH #40
    * Document "autoclose" option

0.28 2019-01-07
    * More test resiliency against fake domains / links injected by bad ISPs
      (like frontier.com )
    * Link to WWW::Mechanize::Chrome::Troubleshooting from main documentation
    * Documentation improvements by SDONLEY
    * Up Future prerequisite to 0.35, earlier versions lack the features
      the module uses

0.27 2018-12-23
    * Properly handle Page.navigatedWithinDocument instead of raising an error.
      The synthetic response object doesn't help much, but on the other side,
      it's much better than raising an error and stopping the script.
      Reported by Steve Dondley, Github issue GH #34

0.26 2018-12-09
    * Actually do something if we timeout when connecting to Chrome.
      The main cause of the connetcion to Chrome failing is that there already
      is a non-devtools instance of Chrome running and is brought to the
      foreground instead of a new DevTools-enabled instance being launched.
      The best workaround is to launch it as

      use File::Temp 'tempdir';
      # create a fresh Chrome every time
      my $mech = WWW::Mechanize::Chrome->new(
          data_directory => tempdir(CLEANUP => 1 ),
      );

    * More log output in Chrome::DevToolsProtocol
    * Now testing up to Chrome 73
    * ExtUtils::MakeMaker minimum version 5.52_01, contributed by LorenzoTa
    * Fix the test skip counts for several tests

0.25 2018-11-23
    * Added one stray test to the distribution
    * Rework of the documentation, thanks to Harald Joerg
      This is a result of the PRC, thank you very much!
    * No code changes, no need to upgrade

0.24 2018-11-19
    * Fix for ->setRequestInterception_future
      and ->setRequestInterception, contributed by Enrique Pessoa
      This addresses RT #127738

0.23 2018-10-20
    * Spun off screencast client into Mojolicious::Plugin::PNGCast distribution
    * Documentation fixes (thanks Hacktoberfest!)
    * --enable-automation is now on by default
    * Document PDF paper size options (Thanks Eugen Konkov)
    * Slight logging improvements for the Net::Async backend

0.22 2018-09-23
    . Logging improvements
    . Documentation of the DevToolsProtocol class
    . Convenience parameter to ->click() to click on text
    . Developer tests now spawn a single Chrome test, speeding up the test run

0.21 2018-09-15
    . Fix ->sendkeys() to actually work
    . Fix crash in ->wait_until_visible()
    . Fix ->block_urls() to actually work
    . Make log output less verbose, log more information in onelines
    . "extra_headers" constructor argument works as documented
    . Added a (Mojolicious) receiver for screencasts to better observe
      what a headless Chrome is currently doing
    . Added a very experimental start of WWW::Mechanize::Edge for
      Microsoft Edge, which happens to use the same protocol as Chrome. This
      is largely undocumented.

0.20 2018-09-07
    . Add better diagnostics when the Chrome binary is not found
    . Better search logic for Chrome binary, also support chromium-browser
    . ->sendkeys() method to type input into browser
    . ->content_as_pdf() now can also save to a file (as documented)
    . Docfix for screencast data

0.19 2018-08-25
    . Make ->set_attribute() actually work
    . Recognize more intra-page navigation events
    . Tested against Chrome/59.0.3071.115
    . Tested against HeadlessChrome/60.0.3110.0
    . Tested against HeadlessChrome/61.0.3141.0
    . Tested against HeadlessChrome/62.0.3202.94
    . Tested against HeadlessChrome/63.0.3239.132
    . Tested against HeadlessChrome/64.0.3282.119
    . Tested against HeadlessChrome/65.0.3325.181
    . Tested against HeadlessChrome/66.0.3359.139
    . Tested against HeadlessChrome/67.0.3396.99
    . Tested against HeadlessChrome/68.0.3435.0
    . Tested against HeadlessChrome/68.0.3440.84
    . Tested against HeadlessChrome/69.0.3496.0
    . Tested against HeadlessChrome/70.0.3500.0
    . Tested against HeadlessChrome/70.0.3509.0
    . Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
    . Tested against Google Chrome 67.0.3396.99  Built on OSX, thanks Travis CI
    . Tested against Chrome/67.0.3396.99 / Win64, thanks AppVeyor

0.18 2018-08-03
    . Properly handling moving between fragments, for example
      from http://example.com/#1 to http://example.com#2
      (reported via Perlmonks.org)
      This kind of navigation does not work on Chrome 64 and Chrome 59.
    . Disable the "save password" bubble by default.
      You can re-enable this by passing a true value to the option
      save_password_bubble in the constructor.
    . Tested against Chrome/59.0.3071.115
    . Tested against HeadlessChrome/60.0.3110.0
    . Tested against HeadlessChrome/61.0.3141.0
    . Tested against HeadlessChrome/62.0.3202.94
    . Tested against HeadlessChrome/63.0.3239.132
    . Tested against HeadlessChrome/64.0.3282.119
    . Tested against HeadlessChrome/65.0.3325.181
    . Tested against HeadlessChrome/66.0.3359.139
    . Tested against HeadlessChrome/67.0.3396.99
    . Tested against HeadlessChrome/68.0.3435.0
    . Tested against HeadlessChrome/68.0.3440.84
    . Tested against HeadlessChrome/69.0.3496.0
    . Tested against HeadlessChrome/70.0.3500.0
    . Tested against HeadlessChrome/70.0.3509.0
    . Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
    . Tested against Google Chrome 67.0.3396.99  Built on OSX, thanks Travis CI
    . Tested against Chrome/67.0.3396.99 / Win64, thanks AppVeyor

0.17 2018-07-07
    . Added installation instructions for MacOS / OSX, contributed by Sdonley
    . Added default path on MacOS for using the default Chrome executable
    . Automatic testing for OSX on Travis CI is now enabled
    . We now always launch Chrome / Chromium with --no-zygote and --no-sandbox
      This behaviour can be disabled by passing
          no_zygote => 0,
          no_sandbox => 0,
      to the constructor
    . Skip constructor failure tests for Perl < 5.014
      $@ is not always preserved when a destructor calls eval{} on those
      versions of Perl.
    . Add ->infinite_scroll as experimental API, together with ->scroll_to_bottom
      Added by sdondley
    . Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
    . Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
    . Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
    . Tested against Chromium 63.0.3239.132 / Win64
    . Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
    . Tested against Chromium 66.0.3359.139 / Win64 (some tests skipped)
    . Tested against Chromium 67.0.3396.99 / Win64 (some tests skipped)
    . Tested against Chromium 68.0.3435.0 / Win64 (some tests skipped)
    . Tested against Chromium 69.0.3481.0 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
    . Tested against Google Chrome 67.0.3396.99  Built on OSX, thanks Travis CI
    . Tested against Chrome/67.0.3396.99 / Win64, thanks AppVeyor

0.16 2018-06-23
    + Added ->is_visible, ->wait_until_visible and ->wait_until_invisible
    + Better way to find the system browser by default
      This can be overridden by explicitly specifying the executable to use
    . Rename ->agent_async() to ->agent_future()
    . Add ->callFunctionOn_future() and ->callFunctionOn()
    ! "start_url" now actually gets you the first URL
    ! Fixed ->viewport_size() to actually work
    . Experimental prototype of self-implemented Save Page As feature
      (undocumented)

0.15 2018-05-30
    . Added ->links() method, pasted from WWW::Mechanize::PhantomJS
      Thanks to Alain Rioux for spotting
    + Add some more command line switches to disable more background behaviour
      of Chrome by default:
        background_networking
        client_side_phishing_detection
        component_update
        hang_monitor
        prompt_on_repost
        sync
        web_resources
        default_apps
        infobars
        default_apps
        popup_blocking
      You can re-enable this by passing a true value to the option in
      the constructor

0.14 2018-05-27
    + The "tab" parameter to ->new() was documented
    ! The "reuse" parameter to reconnect to an existing Chrome instance is
      not needed anymore if you pass in a true value for the "tab" parameter.
    ! Downloads are now detected in a better way on Chrome 66+
      This needed some general rework in how responses are treated, so please
      retest your scripts and send me failing tests if a case has now become
      time-critical.
    . Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
    . Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
    . Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
    . Tested against Chromium 63.0.3239.132 / Win64
    . Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
    . Tested against Chromium 66.0.3359.139 / Win64 (some tests skipped)
    . Tested against Chromium 67.0.3394.0 / Win64 (some tests skipped)
    . Tested against Chromium 68.0.3417.0 / Win64 (some tests skipped)
    . Tested against Chromium 69.0.3443.0 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI

0.13 2018-04-24
    . More test stability
    . Actually exit() after a failed fork() call
      This fixes RT 125162, diagnosed by Slaven Rezic
    . Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
    . Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
    . Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
    . Tested against Chromium 63.0.3239.132 / Win64
    . Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
    . Tested against Chromium 66.0.3346.0 / Win64 (some tests skipped)
    . Tested against Chromium 67.0.3394.0 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI

0.12 2018-04-21
    . Fix erroneous use of IO::Async::Loop in the tests
      This fixes RT 125156, diagnosed by Slaven Rezic
    . Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
    . Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
    . Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
    . Tested against Chromium 63.0.3239.132 / Win64
    . Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
    . Tested against Chromium 66.0.3346.0 / Win64 (some tests skipped)
    . Tested against Chromium 67.0.3394.0 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI

0.11 2018-04-14
    + Support ->reload on Chrome v66+ by adding --disable-prompt-on-repost
      This globally disables the prompting on repost for the process. If you
      need to test for these prompts, add
        disable_prompt_on_repost => 0
      to the options for the WWW::Mechanize::Chrome object. To my knowledge,
      there is no way to programmatically find whether Chrome is prompting for
      a repost or not. See also
          https://bugs.chromium.org/p/chromium/issues/detail?id=804371
    + Support ->getRequestPostData() to retrieve the data when sending a POST
	  request
    + Support ->searchInResponseBody() to search in a response body without
	  retrieving the body to Perl space. This doesn't work reliably in my
	  experience, as Chrome seems to forget response bodies rather quickly.
    + outerHTML is now a gettable property
	+ The User-Agent string can be set in the constructor
	+ Fixes for Chrome v67 when retrieving file:// resources
	  These fixes might have unwanted side-effects for other versions of Chrome
	  and other protocols, but the test suite doesn't show any of them. If this
	  change breaks your workflow, please submit a (failing) test case.
    . Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
    . Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
    . Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
    . Tested against Chromium 63.0.3239.132 / Win64
    . Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
    . Tested against Chromium 66.0.3346.0 / Win64 (some tests skipped)
    . Tested against Chromium 67.0.3394.0 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI

0.10 2018-02-02
    + IO::Async / Net::Async support
      This was mostly held back by me not understanding the API of
      Net::Async::WebSocket::Protocol. This needs
      Net::Async::WebSocket::Client 0.12 (or higher) installed.
    + Workarounds in tests for new, incompatible Chrome behaviour
    . Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
    . Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
    . Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
    . Tested against Chromium 63.0.3239.132 / Win64
    . Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3317.0 / Win64 (some tests skipped)
    . Tested against Chromium 66.0.3335.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 Built on Ubuntu, thanks Travis CI

0.09 2018-01-04
    ! ->js_errors() now only returns error messages
    ! ->js_console_entries returns all entries in the browser console
    ! Errors in JS code from ->eval_in_page are now fatal errors in Perl too
    + The ->reload() method works now
    . Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
    . Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
    . Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
    . Tested against Chromium 63.0.3239.108 / Win64
    . Tested against Chromium 64.0.3282.0 / Win64 (some tests skipped)
    . Tested against Chromium 65.0.3311.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 Built on Ubuntu, thanks Travis CI

0.08 2017-11-30
    + Implemented file downloads and their storage for v62 and v63
      You can't find out the name a file was saved as, and you can't find out
      when the download is done.
      Chrome v64 doesn't notify us at all about downloads.
    ! Redid success/failure logic of responses
      We try harder to associate a response with something that we actually
      initiated.
    ! Selecting different backends now actually works
    . Tested against Chromium 59.0.3071.115 / Win64
    . Tested against Chromium 60.0.3110.0 / Win64
    . Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 / Win64
    . Tested against Chromium 63.0.3205.0 / Win64
    . Tested against Chromium 64.0.3282.0 / Win64 (some tests skipped)
    . Tested against Chromium 62.0.3202.94 Built on Ubuntu, thanks Travis CI

0.07 2017-09-02
    ! Fix timers firing or not
    ! Implement a workaround for Chrome (not) navigating
      This workaround means sleeping 0.1s to see whether the notification comes
      in from Chrome after the "navigation complete" message has arrived.
      Ideally we will find a way to make Chrome tell us when it will perform
      HTTP transactions instead of having to wait.
    . Tested against Chromium 59.0.3071.115 / Win64
    . Tested against Chromium 60.0.3110.0 / Win64
    . Tested against Chromium 61.0.3141.0 / Win64
    . Tested against Chromium 62.0.3189.0 / Win64
    . Tested against Chromium 63.0.3205.0 / Win64
    . Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI

0.06 2017-08-06
    . Correct the name of the examples module
    . No code changes, no need to upgrade

0.05 2017-08-06
    + More robust handling of Chrome disconnects
      It seems that Chromium 62+ disconnects all clients when a tab is closed
    ! ->get now always waits for an HTTP response
    . Tested against Chromium 59.0.3071.115 / Win64
    . Tested against Chromium 60.0.3110.0 / Win64
    . Tested against Chromium 61.0.3140.0 / Win64
    . Tested against Chromium 61.0.3141.0 / Win64
    . Tested against Chromium 62.0.3178.0 / Win64
    . Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI

0.04 2017-07-01
    + Fix maximum websocket message size
      This was "randomly" breaking transfers with large assets.

0.03 2017-06-30
    ! The "profile" option now really uses the profile, not the data directory.
    + New option "data_directory" to set the base data directory.
    + We run all tests with a temporary user now instead of the default user
      that might be your current Chrome user
    + Tests now run headless by default
    + The backend event loop can be selected from the environment
    . Tested against Chromium 59.0.3071.115 / Win64
    . Tested against Chromium 60.0.3110.0 / Win64
    . Tested against Chromium 61.0.3140.0 / Win64
    . Tested against Chromium 61.0.3141.0 / Win64
    . Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI

0.02 2017-06-23
    + Many more functions
    + Screencast ability
    + ->stop() function
    + Handling of Javascript dialogs
    . Tested against Chromium 60.0.3110.0 / Win64
    . Tested against Chromium 61.0.3140.0 / Win64
    . Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI

0.01 2017-06-02
    . Released unto an unsuspecting audience
    . Tested against Chromium 60.0.3110.0 / Win64
    . Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI