Chromium Code Reviews| Index: net/websockets/websocket_extension_parser.cc |
| diff --git a/net/websockets/websocket_extension_parser.cc b/net/websockets/websocket_extension_parser.cc |
| index 28a2db16f2775e3410a47e35d51ea12792f63682..0e6f1c4b1cad548883468ddbb541838e24a2cc5e 100644 |
| --- a/net/websockets/websocket_extension_parser.cc |
| +++ b/net/websockets/websocket_extension_parser.cc |
| @@ -16,11 +16,22 @@ void WebSocketExtensionParser::Parse(const char* data, size_t size) { |
| current_ = data; |
| end_ = data + size; |
| has_error_ = false; |
| + extensions_.clear(); |
| - ConsumeExtension(&extension_); |
| - if (has_error_) return; |
| - ConsumeSpaces(); |
| - has_error_ = has_error_ || (current_ != end_); |
| + while (true) { |
| + ConsumeExtension(); |
| + if (has_error_) |
| + return; |
| + |
| + ConsumeSpaces(); |
| + DCHECK(!has_error_); |
| + |
| + if (!ConsumeIfMatch(',')) { |
| + break; |
| + } |
| + } |
| + |
| + has_error_ |= current_ != end_; |
|
yhirano
2015/03/30 11:02:03
'|=' is a bitwise operation, so I prefer the origi
tyoshino (SeeGerritForStatus)
2015/03/31 06:17:44
Oops.. Fixed
|
| } |
| void WebSocketExtensionParser::Consume(char c) { |
| @@ -34,18 +45,18 @@ void WebSocketExtensionParser::Consume(char c) { |
| ++current_; |
| } |
| -void WebSocketExtensionParser::ConsumeExtension(WebSocketExtension* extension) { |
| +void WebSocketExtensionParser::ConsumeExtension() { |
| DCHECK(!has_error_); |
| base::StringPiece name; |
| ConsumeToken(&name); |
| if (has_error_) return; |
| - *extension = WebSocketExtension(name.as_string()); |
| + extensions_.push_back(WebSocketExtension(name.as_string())); |
| while (ConsumeIfMatch(';')) { |
| WebSocketExtension::Parameter parameter((std::string())); |
| ConsumeExtensionParameter(¶meter); |
| if (has_error_) return; |
| - extension->Add(parameter); |
| + extensions_.back().Add(parameter); |
| } |
| } |