testing/mochitest/pywebsocket/README-MOZILLA
author L10n Bumper Bot <release+l10nbumper@mozilla.com>
Thu, 26 Oct 2017 02:20:28 -0700
changeset 432753 205eb4e8ba0b4766e1a87a00dcc7eb2342f1b248
parent 247332 724f0a71d62171da1357e6c1f93453359e54206b
permissions -rw-r--r--
no bug - Bumping Fennec l10n changesets DONTBUILD r=release a=l10n-bump bg -> 9922c37681db bn-BD -> 2cfa6e05549e ff -> b51a5f090a5c gu-IN -> 155217fa8b4f hi-IN -> 84c5a3316a24 id -> 6622a47d4975 ms -> 962412ff56f3 th -> 8c8db81202a0 ur -> b6a15682304a

This pywebsocket code is mostly unchanged from the source at

  svn checkout http://pywebsocket.googlecode.com/svn/trunk/ pywebsocket-read-only

The current Mozilla code is based on

  svnversion:  860  (supports RFC 6455, permessage compression extension)

--------------------------------------------------------------------------------
STEPS TO UPDATE MOZILLA TO NEWER PYWEBSOCKET VERSION
--------------------------------------------------------------------------------
- Get new pywebsocket checkout from googlecode (into, for instance, 'src')

  svn checkout http://pywebsocket.googlecode.com/svn/trunk/ pywebsocket-read-only

- Export a version w/o SVN files:

    svn export src dist

- rsync new version into our tree, deleting files that aren't needed any more
  (NOTE: this will blow away this file!  hg revert it or keep a copy.)

    rsync -rv --delete dist/ $MOZ_SRC/testing/mochitest/pywebsocket

- Get rid of examples/test directory and some cruft:

    rm -rf example test setup.py MANIFEST.in

- Manually move the 'standalone.py' file from the mmod_pywebsocket/ directory to
  the parent directory (not sure why we moved it: probably no reason)

- hg add/rm appropriate files, and add/remove them from
  testing/mochitest/moz.build

- We need to apply the patch to hybi.py that makes HSTS work: (attached at end
  of this README)

- Test and make sure the code works:

    make mochitest-plain TEST_PATH=dom/base/test/test_websocket.html

- If this doesn't take a look at the pywebsocket server log,
  $OBJDIR/_tests/testing/mochitest/websock.log

- Upgrade the svnversion number at top of this file to whatever version we're
  now based off of.

--------------------------------------------------------------------------------
PATCH TO hybi.py for HSTS support:


diff --git a/testing/mochitest/pywebsocket/mod_pywebsocket/handshake/hybi.py b/testing/mochitest/pywebsocket/mod_pywebsocket/handshake/hybi.py
--- a/testing/mochitest/pywebsocket/mod_pywebsocket/handshake/hybi.py
+++ b/testing/mochitest/pywebsocket/mod_pywebsocket/handshake/hybi.py
@@ -299,16 +299,19 @@ class Handshaker(object):
                 status=common.HTTP_STATUS_BAD_REQUEST)
         raise VersionException(
             'Unsupported version %r for header %s' %
             (version, common.SEC_WEBSOCKET_VERSION_HEADER),
             supported_versions=', '.join(map(str, _SUPPORTED_VERSIONS)))
 
     def _set_protocol(self):
         self._request.ws_protocol = None
+        # MOZILLA
+        self._request.sts = None
+        # /MOZILLA
 
         protocol_header = self._request.headers_in.get(
             common.SEC_WEBSOCKET_PROTOCOL_HEADER)
 
         if protocol_header is None:
             self._request.ws_requested_protocols = None
             return
 
@@ -396,16 +399,21 @@ class Handshaker(object):
             response.append(format_header(
                 common.SEC_WEBSOCKET_PROTOCOL_HEADER,
                 self._request.ws_protocol))
         if (self._request.ws_extensions is not None and
             len(self._request.ws_extensions) != 0):
             response.append(format_header(
                 common.SEC_WEBSOCKET_EXTENSIONS_HEADER,
                 common.format_extensions(self._request.ws_extensions)))
+        # MOZILLA: Add HSTS header if requested to
+        if self._request.sts is not None:
+            response.append(format_header("Strict-Transport-Security",
+                                          self._request.sts))
+        # /MOZILLA
 
         # Headers not specific for WebSocket
         for name, value in self._request.extra_headers:
             response.append(format_header(name, value))
 
         response.append('\r\n')
 
         return ''.join(response)