bug 1003450 - [3/3] Group Dependency Nodes require >= h2-16 r=hurley

This commit is contained in:
Patrick McManus 2014-12-11 17:00:19 -05:00
parent 7edbeec28f
commit bbf86bc8fc
5 changed files with 29 additions and 19 deletions

View File

@ -780,9 +780,10 @@ HttpConnInfo::SetHTTP2ProtocolVersion(uint8_t pv)
{
if (pv == SPDY_VERSION_31) {
protocolVersion.AssignLiteral(MOZ_UTF16("spdy/3.1"));
} else if (pv == NS_HTTP2_DRAFT_VERSION) {
MOZ_ASSERT (pv == NS_HTTP2_DRAFT_VERSION);
protocolVersion.Assign(NS_LITERAL_STRING(NS_HTTP2_DRAFT_TOKEN));
} else if (pv == HTTP_VERSION_2_DRAFT_15) {
protocolVersion.AssignLiteral(MOZ_UTF16("h2-14/15"));
} else if (pv == HTTP_VERSION_2_DRAFT_LATEST) {
protocolVersion.Assign(NS_LITERAL_STRING(HTTP2_DRAFT_LATEST_TOKEN));
} else {
MOZ_ASSERT (pv == HTTP_VERSION_2);
protocolVersion.Assign(MOZ_UTF16("h2"));

View File

@ -42,7 +42,8 @@ ASpdySession::NewSpdySession(uint32_t version,
// requests as a precondition
MOZ_ASSERT(version == SPDY_VERSION_31 ||
version == HTTP_VERSION_2 ||
version == NS_HTTP2_DRAFT_VERSION,
version == HTTP_VERSION_2_DRAFT_LATEST ||
version == HTTP_VERSION_2_DRAFT_15,
"Unsupported spdy version");
// Don't do a runtime check of IsSpdyV?Enabled() here because pref value
@ -54,8 +55,9 @@ ASpdySession::NewSpdySession(uint32_t version,
if (version == SPDY_VERSION_31) {
return new SpdySession31(aTransport);
} else if (version == NS_HTTP2_DRAFT_VERSION || version == HTTP_VERSION_2) {
return new Http2Session(aTransport);
} else if (version == HTTP_VERSION_2_DRAFT_LATEST || version == HTTP_VERSION_2 ||
version == HTTP_VERSION_2_DRAFT_15) {
return new Http2Session(aTransport, version);
}
return nullptr;
@ -77,16 +79,16 @@ SpdyInformation::SpdyInformation()
VersionString[1] = NS_LITERAL_CSTRING("h2");
ALPNCallbacks[1] = Http2Session::ALPNCallback;
Version[2] = NS_HTTP2_DRAFT_VERSION;
Version[2] = HTTP_VERSION_2_DRAFT_15; // 14 and 15 are aliased
VersionString[2] = NS_LITERAL_CSTRING("h2-14");
ALPNCallbacks[2] = Http2Session::ALPNCallback;
Version[3] = NS_HTTP2_DRAFT_VERSION;
Version[3] = HTTP_VERSION_2_DRAFT_15; // 14 and 15 are aliased
VersionString[3] = NS_LITERAL_CSTRING("h2-15");
ALPNCallbacks[3] = Http2Session::ALPNCallback;
Version[4] = NS_HTTP2_DRAFT_VERSION;
VersionString[4] = NS_LITERAL_CSTRING(NS_HTTP2_DRAFT_TOKEN);
Version[4] = HTTP_VERSION_2_DRAFT_LATEST;
VersionString[4] = NS_LITERAL_CSTRING(HTTP2_DRAFT_LATEST_TOKEN);
ALPNCallbacks[4] = Http2Session::ALPNCallback;
}

View File

@ -66,7 +66,7 @@ do { \
return NS_ERROR_ILLEGAL_VALUE; \
} while (0)
Http2Session::Http2Session(nsISocketTransport *aSocketTransport)
Http2Session::Http2Session(nsISocketTransport *aSocketTransport, uint32_t version)
: mSocketTransport(aSocketTransport)
, mSegmentReader(nullptr)
, mSegmentWriter(nullptr)
@ -104,6 +104,7 @@ Http2Session::Http2Session(nsISocketTransport *aSocketTransport)
, mWaitingForSettingsAck(false)
, mGoAwayOnPush(false)
, mUseH2Deps(false)
, mVersion(version)
{
MOZ_ASSERT(PR_GetCurrentThread() == gSocketThread);
@ -126,7 +127,7 @@ Http2Session::Http2Session(nsISocketTransport *aSocketTransport)
mPingThreshold = gHttpHandler->SpdyPingThreshold();
mNegotiatedToken.AssignLiteral(NS_HTTP2_DRAFT_TOKEN);
mNegotiatedToken.AssignLiteral(HTTP2_DRAFT_LATEST_TOKEN);
}
// Copy the 32 bit number into the destination, using network byte order
@ -876,7 +877,11 @@ Http2Session::SendHello()
LogIO(this, nullptr, "Session Window Bump ", packet, kFrameHeaderBytes + 4);
}
if (gHttpHandler->UseH2Deps() && gHttpHandler->CriticalRequestPrioritization()) {
// draft-14 and draft-15 are the only versions we support that do not
// allow our priority scheme. Blacklist them here - they are aliased
// as draft-15
if ((mVersion != HTTP_VERSION_2_DRAFT_15) &&
gHttpHandler->UseH2Deps() && gHttpHandler->CriticalRequestPrioritization()) {
mUseH2Deps = true;
MOZ_ASSERT(mNextStreamID == kLeaderGroupID);
CreatePriorityNode(kLeaderGroupID, 0, 200, "leader");
@ -3361,7 +3366,7 @@ Http2Session::ConfirmTLSProfile()
// Fallback to showing the draft version, just in case
LOG3(("Http2Session::ConfirmTLSProfile %p could not get negotiated token. "
"Falling back to draft token.", this));
mNegotiatedToken.AssignLiteral(NS_HTTP2_DRAFT_TOKEN);
mNegotiatedToken.AssignLiteral(HTTP2_DRAFT_LATEST_TOKEN);
}
mTLSProfileConfirmed = true;

View File

@ -41,7 +41,7 @@ public:
NS_DECL_NSAHTTPSEGMENTREADER
NS_DECL_NSAHTTPSEGMENTWRITER
explicit Http2Session(nsISocketTransport *);
Http2Session(nsISocketTransport *, uint32_t version);
bool AddStream(nsAHttpTransaction *, int32_t,
bool, nsIInterfaceRequestor *);
@ -481,6 +481,7 @@ private:
nsCString mNegotiatedToken;
bool mUseH2Deps;
uint32_t mVersion; // HTTP2_VERSION_ from nsHttp.h remove when draft support removed
private:
/// connect tunnels

View File

@ -39,15 +39,16 @@ namespace net {
// 27 was http/2-draft09, h2-10, and h2-11
// 28 was http/2-draft12
// 29 was http/2-draft13
// 30 was also h2-14 and -15. They're effectively the same, -15 added an
// 30 was also h2-14. They're effectively the same, -15 added an
// error code. So, we advertise all, but our "default position" is -16.
HTTP2_VERSION_DRAFT16 = 30
HTTP_VERSION_2_DRAFT_15 = 30,
HTTP_VERSION_2_DRAFT_16 = 31
};
typedef uint8_t nsHttpVersion;
#define NS_HTTP2_DRAFT_VERSION HTTP2_VERSION_DRAFT16
#define NS_HTTP2_DRAFT_TOKEN "h2-16"
#define HTTP_VERSION_2_DRAFT_LATEST HTTP_VERSION_2_DRAFT_16
#define HTTP2_DRAFT_LATEST_TOKEN "h2-16"
//-----------------------------------------------------------------------------
// http connection capabilities