mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 22:01:30 +00:00
bug 1027364 - multiple http/2 header frames on same stream r=hurley
This commit is contained in:
parent
1d6c3f7bc3
commit
68ae085486
@ -1159,9 +1159,25 @@ Http2Session::ResponseHeadersComplete()
|
||||
LOG3(("Http2Session::ResponseHeadersComplete %p for 0x%X fin=%d",
|
||||
this, mInputFrameDataStream->StreamID(), mInputFrameFinal));
|
||||
|
||||
// only do this once, afterwards ignore trailers
|
||||
if (mInputFrameDataStream->AllHeadersReceived())
|
||||
// only interpret headers once, afterwards ignore trailers
|
||||
if (mInputFrameDataStream->AllHeadersReceived()) {
|
||||
LOG3(("Http2Session::ResponseHeadersComplete extra headers"));
|
||||
nsresult rv = UncompressAndDiscard();
|
||||
if (NS_FAILED(rv)) {
|
||||
LOG3(("Http2Session::ResponseHeadersComplete extra uncompress failed\n"));
|
||||
return rv;
|
||||
}
|
||||
mFlatHTTPResponseHeadersOut = 0;
|
||||
mFlatHTTPResponseHeaders.Truncate();
|
||||
if (mInputFrameFinal) {
|
||||
// need to process the fin
|
||||
ChangeDownstreamState(PROCESSING_COMPLETE_HEADERS);
|
||||
} else {
|
||||
ResetDownstreamState();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
mInputFrameDataStream->SetAllHeadersReceived();
|
||||
|
||||
// The stream needs to see flattened http headers
|
||||
|
@ -292,6 +292,14 @@ function test_http2_push4() {
|
||||
chan.asyncOpen(listener, chan);
|
||||
}
|
||||
|
||||
// this is a basic test where the server sends a simple document with 2 header
|
||||
// blocks. bug 1027364
|
||||
function test_http2_doubleheader() {
|
||||
var chan = makeChan("https://localhost:6944/doubleheader");
|
||||
var listener = new Http2CheckListener();
|
||||
chan.asyncOpen(listener, null);
|
||||
}
|
||||
|
||||
// Make sure we handle GETs that cover more than 2 frames properly
|
||||
function test_http2_big() {
|
||||
var chan = makeChan("https://localhost:6944/big");
|
||||
@ -338,6 +346,7 @@ var tests = [ test_http2_post_big
|
||||
, test_http2_push2
|
||||
, test_http2_push3
|
||||
, test_http2_push4
|
||||
, test_http2_doubleheader
|
||||
, test_http2_xhr
|
||||
, test_http2_header
|
||||
, test_http2_cookie_crumbling
|
||||
|
@ -114,6 +114,15 @@ function handleRequest(req, res) {
|
||||
}
|
||||
}
|
||||
|
||||
else if (u.pathname === "/doubleheader") {
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
res.writeHead(200);
|
||||
res.write(content);
|
||||
res.writeHead(200);
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
else if (u.pathname === "/cookie_crumbling") {
|
||||
res.setHeader("X-Received-Header-Pairs", JSON.stringify(decompressedPairs));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user