Chromium Code Reviews| Index: net/websockets/websocket_basic_handshake_stream.cc |
| diff --git a/net/websockets/websocket_basic_handshake_stream.cc b/net/websockets/websocket_basic_handshake_stream.cc |
| index ecddd50fcfc850c88df9cd69a953773c971b1066..9c939a5e5bc5e541e3bb8a672ad23192a2ac4455 100644 |
| --- a/net/websockets/websocket_basic_handshake_stream.cc |
| +++ b/net/websockets/websocket_basic_handshake_stream.cc |
| @@ -303,47 +303,51 @@ bool ValidatePerMessageDeflateExtension(const WebSocketExtension& extension, |
| } |
| bool ValidateExtensions(const HttpResponseHeaders* headers, |
| - const std::vector<std::string>& requested_extensions, |
| - std::string* extensions, |
| + std::string* accepted_extensions_descriptor, |
| std::string* failure_message, |
| WebSocketExtensionParams* params) { |
| void* state = nullptr; |
| - std::string value; |
| - std::vector<std::string> accepted_extensions; |
| + std::string header_value; |
| + std::vector<std::string> header_values; |
| // TODO(ricea): If adding support for additional extensions, generalise this |
| // code. |
| bool seen_permessage_deflate = false; |
| - while (headers->EnumerateHeader( |
| - &state, websockets::kSecWebSocketExtensions, &value)) { |
| + while (headers->EnumerateHeader(&state, websockets::kSecWebSocketExtensions, |
| + &header_value)) { |
| WebSocketExtensionParser parser; |
| - parser.Parse(value); |
| + parser.Parse(header_value); |
| if (parser.has_error()) { |
| // TODO(yhirano) Set appropriate failure message. |
| *failure_message = |
| "'Sec-WebSocket-Extensions' header value is " |
| "rejected by the parser: " + |
| - value; |
| + header_value; |
| return false; |
| } |
| - if (parser.extension().name() == "permessage-deflate") { |
| - if (seen_permessage_deflate) { |
| - *failure_message = "Received duplicate permessage-deflate response"; |
| + |
| + const std::vector<WebSocketExtension>& extensions = parser.extensions(); |
| + for (size_t i = 0; i < extensions.size(); ++i) { |
|
eroman
2015/03/31 21:11:12
optional: "for-in" loop
tyoshino (SeeGerritForStatus)
2015/04/01 04:57:57
Done.
|
| + const WebSocketExtension& extension = extensions[i]; |
| + if (extension.name() == "permessage-deflate") { |
| + if (seen_permessage_deflate) { |
| + *failure_message = "Received duplicate permessage-deflate response"; |
| + return false; |
| + } |
| + seen_permessage_deflate = true; |
| + |
| + if (!ValidatePerMessageDeflateExtension(extension, failure_message, |
| + params)) |
|
eroman
2015/03/31 21:11:12
Add curly braces since the if occupies more than 1
tyoshino (SeeGerritForStatus)
2015/04/01 04:57:57
Done.
|
| + return false; |
| + header_values.push_back(header_value); |
| + } else { |
| + *failure_message = "Found an unsupported extension '" + |
| + extension.name() + |
| + "' in 'Sec-WebSocket-Extensions' header"; |
| return false; |
| } |
| - seen_permessage_deflate = true; |
| - if (!ValidatePerMessageDeflateExtension( |
| - parser.extension(), failure_message, params)) |
| - return false; |
| - } else { |
| - *failure_message = |
| - "Found an unsupported extension '" + |
| - parser.extension().name() + |
| - "' in 'Sec-WebSocket-Extensions' header"; |
| - return false; |
| } |
| - accepted_extensions.push_back(value); |
| } |
| - *extensions = JoinString(accepted_extensions, ", "); |
| + *accepted_extensions_descriptor = JoinString(header_values, ", "); |
| return true; |
| } |
| @@ -636,7 +640,6 @@ int WebSocketBasicHandshakeStream::ValidateUpgradeResponse( |
| &sub_protocol_, |
| &failure_message) && |
| ValidateExtensions(headers, |
| - requested_extensions_, |
| &extensions_, |
| &failure_message, |
| extension_params_.get())) { |