This pywebsocket code is mostly unchanged from the source at https://github.com/GoogleChromeLabs/pywebsocket3 -------------------------------------------------------------------------------- STEPS TO UPDATE MOZILLA TO NEWER PYWEBSOCKET VERSION -------------------------------------------------------------------------------- - Get new pywebsocket checkout from googlecode (into, for instance, 'src') git clone https://github.com/GoogleChromeLabs/pywebsocket3 pywebsocket-read-only cp -r pywebsocket-read-only/mod_pywebsocket testing/mochitest/pywebsocket3 - 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: mach mochitest dom/websocket/tests - If this doesn't take a look at the pywebsocket server log, $OBJDIR/_tests/testing/mochitest/websock.log -------------------------------------------------------------------------------- PATCH TO hybi.py for HSTS support: diff --git a/testing/mochitest/pywebsocket3/mod_pywebsocket/handshake/hybi.py b/testing/mochitest/pywebsocket3/mod_pywebsocket/handshake/hybi.py --- a/testing/mochitest/pywebsocket3/mod_pywebsocket/handshake/hybi.py +++ b/testing/mochitest/pywebsocket3/mod_pywebsocket/handshake/hybi.py @@ -273,16 +273,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 @@ -371,16 +374,21 @@ class Handshaker(object): 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 + 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(u'\r\n') return u''.join(response)