зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset b29865f8d36b (bug 1356611) for frequent windows xpcshell failures a=backout
This commit is contained in:
Родитель
beeff82ee3
Коммит
c65c974a08
|
@ -89,7 +89,6 @@ Http2Session::Http2Session(nsISocketTransport *aSocketTransport, uint32_t versio
|
|||
, mShouldGoAway(false)
|
||||
, mClosed(false)
|
||||
, mCleanShutdown(false)
|
||||
, mReceivedSettings(false)
|
||||
, mTLSProfileConfirmed(false)
|
||||
, mGoAwayReason(NO_HTTP_ERROR)
|
||||
, mClientGoAwayReason(UNASSIGNED)
|
||||
|
@ -1505,8 +1504,6 @@ Http2Session::RecvSettings(Http2Session *self)
|
|||
RETURN_SESSION_ERROR(self, PROTOCOL_ERROR);
|
||||
}
|
||||
|
||||
self->mReceivedSettings = true;
|
||||
|
||||
uint32_t numEntries = self->mInputFrameDataSize / 6;
|
||||
LOG3(("Http2Session::RecvSettings %p SETTINGS Control Frame "
|
||||
"with %d entries ack=%X", self, numEntries,
|
||||
|
@ -4156,41 +4153,17 @@ Http2Session::TestOriginFrame(const nsACString &hostname, int32_t port)
|
|||
bool
|
||||
Http2Session::TestJoinConnection(const nsACString &hostname, int32_t port)
|
||||
{
|
||||
return RealJoinConnection(hostname, port, true);
|
||||
}
|
||||
|
||||
bool
|
||||
Http2Session::JoinConnection(const nsACString &hostname, int32_t port)
|
||||
{
|
||||
return RealJoinConnection(hostname, port, false);
|
||||
}
|
||||
|
||||
bool
|
||||
Http2Session::RealJoinConnection(const nsACString &hostname, int32_t port,
|
||||
bool justKidding)
|
||||
{
|
||||
if (!mConnection || mClosed || mShouldGoAway || !mReceivedSettings) {
|
||||
if (!mConnection || mClosed || mShouldGoAway) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mOriginFrameActivated) {
|
||||
bool originFrameResult = TestOriginFrame(hostname, port);
|
||||
if (!originFrameResult) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
LOG3(("JoinConnection %p no origin frame check used.\n", this));
|
||||
}
|
||||
|
||||
nsAutoCString key(hostname);
|
||||
key.Append(':');
|
||||
key.Append(justKidding ? 'k' : '.');
|
||||
key.AppendInt(port);
|
||||
bool cachedResult;
|
||||
if (mJoinConnectionCache.Get(key, &cachedResult)) {
|
||||
LOG(("joinconnection [%p %s] %s result=%d cache\n",
|
||||
this, ConnectionInfo()->HashKey().get(), key.get(),
|
||||
cachedResult));
|
||||
return cachedResult;
|
||||
LOG3(("TestJoinConnection %p no origin frame check used.\n", this));
|
||||
}
|
||||
|
||||
nsresult rv;
|
||||
|
@ -4207,35 +4180,57 @@ Http2Session::RealJoinConnection(const nsACString &hostname, int32_t port,
|
|||
|
||||
// try all the coalescable versions we support.
|
||||
const SpdyInformation *info = gHttpHandler->SpdyInfo();
|
||||
static_assert(SpdyInformation::kCount == 1, "assume 1 alpn version");
|
||||
bool joinedReturn = false;
|
||||
if (info->ProtocolEnabled(0)) {
|
||||
if (justKidding) {
|
||||
rv = sslSocketControl->TestJoinConnection(info->VersionString[0],
|
||||
for (uint32_t index = SpdyInformation::kCount; index > 0; --index) {
|
||||
if (info->ProtocolEnabled(index - 1)) {
|
||||
rv = sslSocketControl->TestJoinConnection(info->VersionString[index - 1],
|
||||
hostname, port, &isJoined);
|
||||
} else {
|
||||
rv = sslSocketControl->JoinConnection(info->VersionString[0],
|
||||
hostname, port, &isJoined);
|
||||
if (NS_SUCCEEDED(rv) && isJoined) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (NS_SUCCEEDED(rv) && isJoined) {
|
||||
joinedReturn = true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Http2Session::JoinConnection(const nsACString &hostname, int32_t port)
|
||||
{
|
||||
if (!mConnection || mClosed || mShouldGoAway) {
|
||||
return false;
|
||||
}
|
||||
if (mOriginFrameActivated) {
|
||||
bool originFrameResult = TestOriginFrame(hostname, port);
|
||||
if (!originFrameResult) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
LOG3(("JoinConnection %p no origin frame check used.\n", this));
|
||||
}
|
||||
|
||||
LOG(("joinconnection [%p %s] %s result=%d lookup\n",
|
||||
this, ConnectionInfo()->HashKey().get(), key.get(), joinedReturn));
|
||||
mJoinConnectionCache.Put(key, joinedReturn);
|
||||
if (!justKidding) {
|
||||
// cache a kidding entry too as this one is good for both
|
||||
nsAutoCString key2(hostname);
|
||||
key2.Append(':');
|
||||
key2.Append('k');
|
||||
key2.AppendInt(port);
|
||||
if (!mJoinConnectionCache.Get(key2)) {
|
||||
mJoinConnectionCache.Put(key2, joinedReturn);
|
||||
nsresult rv;
|
||||
bool isJoined = false;
|
||||
|
||||
nsCOMPtr<nsISupports> securityInfo;
|
||||
nsCOMPtr<nsISSLSocketControl> sslSocketControl;
|
||||
|
||||
mConnection->GetSecurityInfo(getter_AddRefs(securityInfo));
|
||||
sslSocketControl = do_QueryInterface(securityInfo, &rv);
|
||||
if (NS_FAILED(rv) || !sslSocketControl) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// try all the coalescable versions we support.
|
||||
const SpdyInformation *info = gHttpHandler->SpdyInfo();
|
||||
for (uint32_t index = SpdyInformation::kCount; index > 0; --index) {
|
||||
if (info->ProtocolEnabled(index - 1)) {
|
||||
rv = sslSocketControl->JoinConnection(info->VersionString[index - 1],
|
||||
hostname, port, &isJoined);
|
||||
if (NS_SUCCEEDED(rv) && isJoined) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return joinedReturn;
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -427,9 +427,6 @@ private:
|
|||
// the session received a GoAway frame with a valid GoAwayID
|
||||
bool mCleanShutdown;
|
||||
|
||||
// the session received the opening SETTINGS frame from the server
|
||||
bool mReceivedSettings;
|
||||
|
||||
// The TLS comlpiance checks are not done in the ctor beacuse of bad
|
||||
// exception handling - so we do them at IO time and cache the result
|
||||
bool mTLSProfileConfirmed;
|
||||
|
@ -521,13 +518,10 @@ private:
|
|||
// The ID(s) of the stream(s) that we are getting 0RTT data from.
|
||||
nsTArray<uint32_t> m0RTTStreams;
|
||||
|
||||
bool RealJoinConnection(const nsACString &hostname, int32_t port, bool jk);
|
||||
bool TestOriginFrame(const nsACString &name, int32_t port);
|
||||
bool mOriginFrameActivated;
|
||||
nsDataHashtable<nsCStringHashKey, bool> mOriginFrame;
|
||||
|
||||
nsDataHashtable<nsCStringHashKey, bool> mJoinConnectionCache;
|
||||
|
||||
private:
|
||||
/// connect tunnels
|
||||
void DispatchOnTunnel(nsAHttpTransaction *, nsIInterfaceRequestor *);
|
||||
|
|
Загрузка…
Ссылка в новой задаче