| Index: net/spdy/spdy_network_transaction_unittest.cc
|
| diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc
|
| index fa4f03b21431a16fe57ed472594ed308e81b5630..fa6294ad0001bdc4db5e77627492b0cbaf1d886b 100644
|
| --- a/net/spdy/spdy_network_transaction_unittest.cc
|
| +++ b/net/spdy/spdy_network_transaction_unittest.cc
|
| @@ -2994,9 +2994,9 @@ TEST_P(SpdyNetworkTransactionTest, ServerPushNoURL) {
|
| scoped_ptr<SpdyFrame>
|
| stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
|
| scoped_ptr<SpdyHeaderBlock> incomplete_headers(new SpdyHeaderBlock());
|
| - (*incomplete_headers)["hello"] = "bye";
|
| (*incomplete_headers)[spdy_util_.GetStatusKey()] = "200 OK";
|
| (*incomplete_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
|
| + (*incomplete_headers)["hello"] = "bye";
|
| scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
|
| incomplete_headers.Pass(), 2, 1));
|
| MockRead reads[] = {
|
| @@ -3060,26 +3060,24 @@ TEST_P(SpdyNetworkTransactionTest, SynReplyHeaders) {
|
| }
|
| };
|
|
|
| - test_cases[0].expected_headers["cookie"] = "val1";
|
| - test_cases[0].expected_headers["cookie"] += '\0';
|
| - test_cases[0].expected_headers["cookie"] += "val2";
|
| - test_cases[0].expected_headers["hello"] = "bye";
|
| test_cases[0].expected_headers["status"] = "200";
|
| -
|
| - test_cases[1].expected_headers["hello"] = "bye";
|
| test_cases[1].expected_headers["status"] = "200";
|
| -
|
| - test_cases[2].expected_headers["cookie"] = "val1,val2";
|
| - test_cases[2].expected_headers["hello"] = "bye";
|
| test_cases[2].expected_headers["status"] = "200";
|
|
|
| + // HTTP/2 eliminates use of the :version header.
|
| if (spdy_util_.spdy_version() < HTTP2) {
|
| - // HTTP/2 eliminates use of the :version header.
|
| test_cases[0].expected_headers["version"] = "HTTP/1.1";
|
| test_cases[1].expected_headers["version"] = "HTTP/1.1";
|
| test_cases[2].expected_headers["version"] = "HTTP/1.1";
|
| }
|
|
|
| + test_cases[0].expected_headers["hello"] = "bye";
|
| + test_cases[1].expected_headers["hello"] = "bye";
|
| + test_cases[2].expected_headers["hello"] = "bye";
|
| +
|
| + test_cases[0].expected_headers["cookie"] = StringPiece("val1\0val2", 9);
|
| + test_cases[2].expected_headers["cookie"] = "val1,val2";
|
| +
|
| for (size_t i = 0; i < arraysize(test_cases); ++i) {
|
| scoped_ptr<SpdyFrame> req(
|
| spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
|
| @@ -3113,11 +3111,15 @@ TEST_P(SpdyNetworkTransactionTest, SynReplyHeaders) {
|
| std::string name, value;
|
| SpdyHeaderBlock header_block;
|
| while (headers->EnumerateHeaderLines(&iter, &name, &value)) {
|
| - if (header_block[name].empty()) {
|
| - header_block[name] = value;
|
| + SpdyHeaderBlock::StringPieceProxy mutable_header_block_value =
|
| + header_block[name];
|
| + if (static_cast<StringPiece>(mutable_header_block_value).empty()) {
|
| + mutable_header_block_value = value;
|
| } else {
|
| - header_block[name] += '\0';
|
| - header_block[name] += value;
|
| + std::string joint_value = mutable_header_block_value.as_string();
|
| + joint_value.append(1, '\0');
|
| + joint_value.append(value);
|
| + mutable_header_block_value = joint_value;
|
| }
|
| }
|
| EXPECT_EQ(test_cases[i].expected_headers, header_block);
|
| @@ -3133,65 +3135,35 @@ TEST_P(SpdyNetworkTransactionTest, SynReplyHeadersVary) {
|
| int num_headers[2];
|
| const char* extra_headers[2][16];
|
| } test_cases[] = {
|
| - // Test the case of a multi-valued cookie. When the value is delimited
|
| - // with NUL characters, it needs to be unfolded into multiple headers.
|
| - {
|
| - true,
|
| - { 1, 4 },
|
| - { { "cookie", "val1,val2",
|
| - NULL
|
| - },
|
| - { "vary", "cookie",
|
| - spdy_util_.GetStatusKey(), "200",
|
| - spdy_util_.GetPathKey(), "/index.php",
|
| - spdy_util_.GetVersionKey(), "HTTP/1.1",
|
| - NULL
|
| - }
|
| - }
|
| - }, { // Multiple vary fields.
|
| - true,
|
| - { 2, 5 },
|
| - { { "friend", "barney",
|
| - "enemy", "snaggletooth",
|
| - NULL
|
| - },
|
| - { "vary", "friend",
|
| - "vary", "enemy",
|
| - spdy_util_.GetStatusKey(), "200",
|
| - spdy_util_.GetPathKey(), "/index.php",
|
| - spdy_util_.GetVersionKey(), "HTTP/1.1",
|
| - NULL
|
| - }
|
| - }
|
| - }, { // Test a '*' vary field.
|
| - false,
|
| - { 1, 4 },
|
| - { { "cookie", "val1,val2",
|
| - NULL
|
| - },
|
| - { "vary", "*",
|
| - spdy_util_.GetStatusKey(), "200",
|
| - spdy_util_.GetPathKey(), "/index.php",
|
| - spdy_util_.GetVersionKey(), "HTTP/1.1",
|
| - NULL
|
| - }
|
| - }
|
| - }, { // Multiple comma-separated vary fields.
|
| - true,
|
| - { 2, 4 },
|
| - { { "friend", "barney",
|
| - "enemy", "snaggletooth",
|
| - NULL
|
| - },
|
| - { "vary", "friend,enemy",
|
| - spdy_util_.GetStatusKey(), "200",
|
| - spdy_util_.GetPathKey(), "/index.php",
|
| - spdy_util_.GetVersionKey(), "HTTP/1.1",
|
| - NULL
|
| - }
|
| - }
|
| - }
|
| - };
|
| + // Test the case of a multi-valued cookie. When the value is delimited
|
| + // with NUL characters, it needs to be unfolded into multiple headers.
|
| + {true,
|
| + {1, 4},
|
| + {{"cookie", "val1,val2", NULL},
|
| + {spdy_util_.GetStatusKey(), "200", spdy_util_.GetPathKey(),
|
| + "/index.php", spdy_util_.GetVersionKey(), "HTTP/1.1", "vary", "cookie",
|
| + NULL}}},
|
| + {// Multiple vary fields.
|
| + true,
|
| + {2, 5},
|
| + {{"friend", "barney", "enemy", "snaggletooth", NULL},
|
| + {spdy_util_.GetStatusKey(), "200", spdy_util_.GetPathKey(),
|
| + "/index.php", spdy_util_.GetVersionKey(), "HTTP/1.1", "vary", "friend",
|
| + "vary", "enemy", NULL}}},
|
| + {// Test a '*' vary field.
|
| + false,
|
| + {1, 4},
|
| + {{"cookie", "val1,val2", NULL},
|
| + {spdy_util_.GetStatusKey(), "200", spdy_util_.GetPathKey(),
|
| + "/index.php", spdy_util_.GetVersionKey(), "HTTP/1.1", "vary", "*",
|
| + NULL}}},
|
| + {// Multiple comma-separated vary fields.
|
| + true,
|
| + {2, 4},
|
| + {{"friend", "barney", "enemy", "snaggletooth", NULL},
|
| + {spdy_util_.GetStatusKey(), "200", spdy_util_.GetPathKey(),
|
| + "/index.php", spdy_util_.GetVersionKey(), "HTTP/1.1", "vary",
|
| + "friend,enemy", NULL}}}};
|
|
|
| for (size_t i = 0; i < arraysize(test_cases); ++i) {
|
| // Construct the request.
|
| @@ -3269,24 +3241,20 @@ TEST_P(SpdyNetworkTransactionTest, InvalidSynReply) {
|
| int num_headers;
|
| const char* headers[10];
|
| } test_cases[] = {
|
| - // SYN_REPLY missing status header
|
| - { 4,
|
| - { "cookie", "val1",
|
| - "cookie", "val2",
|
| - spdy_util_.GetPathKey(), "/index.php",
|
| - spdy_util_.GetVersionKey(), "HTTP/1.1",
|
| - NULL
|
| + // SYN_REPLY missing status header
|
| + {
|
| + 4,
|
| + {spdy_util_.GetPathKey(), "/index.php", spdy_util_.GetVersionKey(),
|
| + "HTTP/1.1", "cookie", "val1", "cookie", "val2", NULL},
|
| },
|
| - },
|
| - // SYN_REPLY missing version header
|
| - { 2,
|
| - { "status", "200",
|
| - spdy_util_.GetPathKey(), "/index.php",
|
| - NULL
|
| + // SYN_REPLY missing version header
|
| + {
|
| + 2, {spdy_util_.GetPathKey(), "/index.php", "status", "200", NULL},
|
| + },
|
| + // SYN_REPLY with no headers
|
| + {
|
| + 0, {NULL},
|
| },
|
| - },
|
| - // SYN_REPLY with no headers
|
| - { 0, { NULL }, },
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(test_cases); ++i) {
|
| @@ -5015,9 +4983,9 @@ TEST_P(SpdyNetworkTransactionTest, ServerPushWithHeaders) {
|
| spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1));
|
|
|
| scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
|
| - (*late_headers)["hello"] = "bye";
|
| (*late_headers)[spdy_util_.GetStatusKey()] = "200";
|
| (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
|
| + (*late_headers)["hello"] = "bye";
|
| scoped_ptr<SpdyFrame> stream2_headers(
|
| spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(),
|
| false,
|
| @@ -5077,9 +5045,9 @@ TEST_P(SpdyNetworkTransactionTest, ServerPushClaimBeforeHeaders) {
|
| spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1));
|
|
|
| scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
|
| - (*late_headers)["hello"] = "bye";
|
| (*late_headers)[spdy_util_.GetStatusKey()] = "200";
|
| (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
|
| + (*late_headers)["hello"] = "bye";
|
| scoped_ptr<SpdyFrame> stream2_headers(
|
| spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(),
|
| false,
|
|
|