Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(986)

Unified Diff: net/spdy/hpack_decoder.cc

Issue 265763011: Land recent SPDY changes (through 66310528) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/hpack_decoder.h ('k') | net/spdy/hpack_decoder_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/hpack_decoder.cc
diff --git a/net/spdy/hpack_decoder.cc b/net/spdy/hpack_decoder.cc
index 6aa4f59a4352196cd04654c7b14908ce0a24ec42..82abcab7ea5e9c18da413cea86f6e73a239c312f 100644
--- a/net/spdy/hpack_decoder.cc
+++ b/net/spdy/hpack_decoder.cc
@@ -6,7 +6,6 @@
#include "base/basictypes.h"
#include "base/logging.h"
-#include "base/strings/string_util.h"
#include "net/spdy/hpack_constants.h"
#include "net/spdy/hpack_output_stream.h"
@@ -21,6 +20,8 @@ const uint8 kNoState = 0;
// Set on entries added to the reference set during this decoding.
const uint8 kReferencedThisEncoding = 1;
+const char kCookieKey[] = "cookie";
+
} // namespace
HpackDecoder::HpackDecoder(const HpackHuffmanTable& table)
@@ -69,9 +70,8 @@ bool HpackDecoder::HandleControlFrameHeadersComplete(SpdyStreamId id) {
}
}
// Emit the Cookie header, if any crumbles were encountered.
- if (!cookie_name_.empty()) {
- decoded_block_[cookie_name_] = cookie_value_;
- cookie_name_.clear();
+ if (!cookie_value_.empty()) {
+ decoded_block_[kCookieKey] = cookie_value_;
cookie_value_.clear();
}
return true;
@@ -81,11 +81,8 @@ void HpackDecoder::HandleHeaderRepresentation(StringPiece name,
StringPiece value) {
typedef std::pair<std::map<string, string>::iterator, bool> InsertResult;
- // TODO(jgraettinger): HTTP/2 requires strict lowercasing of headers,
- // and the permissiveness here isn't wanted. Back this out in upstream.
- if (LowerCaseEqualsASCII(name.begin(), name.end(), "cookie")) {
- if (cookie_name_.empty()) {
- cookie_name_.assign(name.data(), name.size());
+ if (name == kCookieKey) {
+ if (cookie_value_.empty()) {
cookie_value_.assign(value.data(), value.size());
} else {
cookie_value_ += "; ";
@@ -104,11 +101,6 @@ void HpackDecoder::HandleHeaderRepresentation(StringPiece name,
}
bool HpackDecoder::DecodeNextOpcode(HpackInputStream* input_stream) {
- // Implements 4.4: Encoding context update. Context updates are a special-case
- // of indexed header, and must be tested prior to |kIndexedOpcode| below.
- if (input_stream->MatchPrefixAndConsume(kEncodingContextOpcode)) {
- return DecodeNextContextUpdate(input_stream);
- }
// Implements 4.2: Indexed Header Field Representation.
if (input_stream->MatchPrefixAndConsume(kIndexedOpcode)) {
return DecodeNextIndexedHeader(input_stream);
@@ -121,6 +113,15 @@ bool HpackDecoder::DecodeNextOpcode(HpackInputStream* input_stream) {
if (input_stream->MatchPrefixAndConsume(kLiteralIncrementalIndexOpcode)) {
return DecodeNextLiteralHeader(input_stream, true);
}
+ // Implements 4.3.3: Literal Header Field never Indexed.
+ // TODO(jgraettinger): Preserve the never-indexed bit.
+ if (input_stream->MatchPrefixAndConsume(kLiteralNeverIndexOpcode)) {
+ return DecodeNextLiteralHeader(input_stream, false);
+ }
+ // Implements 4.4: Encoding context update.
+ if (input_stream->MatchPrefixAndConsume(kEncodingContextOpcode)) {
+ return DecodeNextContextUpdate(input_stream);
+ }
// Unrecognized opcode.
return false;
}
@@ -150,9 +151,6 @@ bool HpackDecoder::DecodeNextIndexedHeader(HpackInputStream* input_stream) {
if (!input_stream->DecodeNextUint32(&index))
return false;
- // If index == 0, |kEncodingContextOpcode| would have matched.
- CHECK_NE(index, 0u);
-
HpackEntry* entry = header_table_.GetByIndex(index);
if (entry == NULL)
return false;
« no previous file with comments | « net/spdy/hpack_decoder.h ('k') | net/spdy/hpack_decoder_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698