Bug 1263991 part 6: Add e10s support for incoming websocket connections to FlyWebPublishedServer. r=baku,michal

This commit is contained in:
Jonas Sicking
2016-06-07 02:46:03 -07:00
parent 4fcf417e8c
commit 67b7663b81
19 changed files with 533 additions and 26 deletions

View File

@@ -436,7 +436,9 @@ WebSocketChannelChild::AsyncOpen(nsIURI *aURI,
LOG(("WebSocketChannelChild::AsyncOpen() %p\n", this));
MOZ_ASSERT(NS_IsMainThread(), "not main thread");
MOZ_ASSERT(aURI && aListener && !mListenerMT,
MOZ_ASSERT((aURI && !mIsServerSide) || (!aURI && mIsServerSide),
"Invalid aURI for WebSocketChannelChild::AsyncOpen");
MOZ_ASSERT(aListener && !mListenerMT,
"Invalid state for WebSocketChannelChild::AsyncOpen");
mozilla::dom::TabChild* tabChild = nullptr;
@@ -451,25 +453,42 @@ WebSocketChannelChild::AsyncOpen(nsIURI *aURI,
return NS_ERROR_ILLEGAL_VALUE;
}
URIParams uri;
SerializeURI(aURI, uri);
// Corresponding release in DeallocPWebSocket
AddIPDLReference();
OptionalURIParams uri;
OptionalLoadInfoArgs loadInfoArgs;
nsresult rv = LoadInfoToLoadInfoArgs(mLoadInfo, &loadInfoArgs);
NS_ENSURE_SUCCESS(rv, rv);
OptionalTransportProvider transportProvider;
if (!mIsServerSide) {
uri = URIParams();
SerializeURI(aURI, uri.get_URIParams());
nsresult rv = LoadInfoToLoadInfoArgs(mLoadInfo, &loadInfoArgs);
NS_ENSURE_SUCCESS(rv, rv);
transportProvider = void_t();
} else {
uri = void_t();
loadInfoArgs = void_t();
MOZ_ASSERT(mServerTransportProvider);
transportProvider = mServerTransportProvider->GetIPCChild();
}
gNeckoChild->SendPWebSocketConstructor(this, tabChild,
IPC::SerializedLoadContext(this),
mSerial);
if (!SendAsyncOpen(uri, nsCString(aOrigin), aInnerWindowID, mProtocol,
mEncrypted, mPingInterval, mClientSetPingInterval,
mPingResponseTimeout, mClientSetPingTimeout, loadInfoArgs)) {
mPingResponseTimeout, mClientSetPingTimeout, loadInfoArgs,
transportProvider, mNegotiatedExtensions)) {
return NS_ERROR_UNEXPECTED;
}
if (mIsServerSide) {
mServerTransportProvider = nullptr;
}
mOriginalURI = aURI;
mURI = mOriginalURI;
mListenerMT = new ListenerAndContextContainer(aListener, aContext);