Bug 775861 - e10s: propagate appId and isInBrowserElement from child to parent process r=jdm

This commit is contained in:
Jason Duell 2012-07-22 15:35:33 -07:00
Родитель 7f7428d402
Коммит 9a9096c83f
16 изменённых файлов: 167 добавлений и 29 удалений

Просмотреть файл

@ -164,6 +164,8 @@ FTPChannelChild::AsyncOpen(::nsIStreamListener* listener, nsISupports* aContext)
bool haveLoadContext = false;
bool isContent = false;
bool usePrivateBrowsing = false;
bool isInBrowserElement = false;
PRUint32 appId = 0;
nsCOMPtr<nsILoadContext> loadContext;
NS_QueryNotificationCallbacks(mCallbacks, mLoadGroup,
NS_GET_IID(nsILoadContext),
@ -172,11 +174,13 @@ FTPChannelChild::AsyncOpen(::nsIStreamListener* listener, nsISupports* aContext)
haveLoadContext = true;
loadContext->GetIsContent(&isContent);
loadContext->GetUsePrivateBrowsing(&usePrivateBrowsing);
loadContext->GetIsInBrowserElement(&isInBrowserElement);
loadContext->GetAppId(&appId);
}
SendAsyncOpen(nsBaseChannel::URI(), mStartPos, mEntityID,
IPC::InputStream(mUploadStream), haveLoadContext, isContent,
usePrivateBrowsing);
IPC::InputStream(mUploadStream), haveLoadContext, isContent,
usePrivateBrowsing, isInBrowserElement, appId);
// The socket transport layer in the chrome process now has a logical ref to
// us until OnStopRequest is called.

Просмотреть файл

@ -23,6 +23,8 @@ FTPChannelParent::FTPChannelParent()
, mHaveLoadContext(false)
, mIsContent(false)
, mUsePrivateBrowsing(false)
, mIsInBrowserElement(false)
, mAppId(0)
{
nsIProtocolHandler* handler;
CallGetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "ftp", &handler);
@ -64,7 +66,9 @@ FTPChannelParent::RecvAsyncOpen(const IPC::URI& aURI,
const IPC::InputStream& aUploadStream,
const bool& haveLoadContext,
const bool& isContent,
const bool& usePrivateBrowsing)
const bool& usePrivateBrowsing,
const bool& isInBrowserElement,
const PRUint32& appId)
{
nsCOMPtr<nsIURI> uri(aURI);
@ -103,6 +107,8 @@ FTPChannelParent::RecvAsyncOpen(const IPC::URI& aURI,
mHaveLoadContext = haveLoadContext;
mIsContent = isContent;
mUsePrivateBrowsing = usePrivateBrowsing;
mIsInBrowserElement = isInBrowserElement;
mAppId = appId;
mChannel->SetNotificationCallbacks(this);
rv = mChannel->AsyncOpen(this, nsnull);
@ -297,6 +303,23 @@ FTPChannelParent::SetUsePrivateBrowsing(bool aUsePrivateBrowsing)
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
FTPChannelParent::GetIsInBrowserElement(bool* aIsInBrowserElement)
{
NS_ENSURE_ARG_POINTER(aIsInBrowserElement);
*aIsInBrowserElement = mIsInBrowserElement;
return NS_OK;
}
NS_IMETHODIMP
FTPChannelParent::GetAppId(PRUint32* aAppId)
{
NS_ENSURE_ARG_POINTER(aAppId);
*aAppId = mAppId;
return NS_OK;
}
} // namespace net
} // namespace mozilla

Просмотреть файл

@ -42,7 +42,9 @@ protected:
const IPC::InputStream& uploadStream,
const bool& haveLoadContext,
const bool& isContent,
const bool& aUsePrivateBrowsing);
const bool& usingPrivateBrowsing,
const bool& isInBrowserElement,
const PRUint32& appId);
NS_OVERRIDE virtual bool RecvConnectChannel(const PRUint32& channelId);
NS_OVERRIDE virtual bool RecvCancel(const nsresult& status);
NS_OVERRIDE virtual bool RecvSuspend();
@ -58,6 +60,9 @@ protected:
bool mHaveLoadContext : 1;
bool mIsContent : 1;
bool mUsePrivateBrowsing : 1;
bool mIsInBrowserElement : 1;
PRUint32 mAppId;
};
} // namespace net

Просмотреть файл

@ -29,7 +29,9 @@ parent:
InputStream uploadStream,
bool haveLoadContext,
bool isContent,
bool usePrivateBrowsing);
bool usePrivateBrowsing,
bool isInBrowserElement,
PRUint32 appID);
ConnectChannel(PRUint32 channelId);
Cancel(nsresult status);
Suspend();

Просмотреть файл

@ -1019,12 +1019,16 @@ HttpChannelChild::AsyncOpen(nsIStreamListener *listener, nsISupports *aContext)
bool haveLoadContext = false;
bool isContent = false;
bool usePrivateBrowsing = false;
bool isInBrowserElement = false;
PRUint32 appId = 0;
nsCOMPtr<nsILoadContext> loadContext;
GetCallback(loadContext);
if (loadContext) {
haveLoadContext = true;
loadContext->GetIsContent(&isContent);
loadContext->GetUsePrivateBrowsing(&usePrivateBrowsing);
loadContext->GetIsInBrowserElement(&isInBrowserElement);
loadContext->GetAppId(&appId);
}
//
@ -1054,7 +1058,7 @@ HttpChannelChild::AsyncOpen(nsIStreamListener *listener, nsISupports *aContext)
mForceAllowThirdPartyCookie, mSendResumeAt,
mStartPos, mEntityID, mChooseApplicationCache,
appCacheClientId, mAllowSpdy, haveLoadContext, isContent,
usePrivateBrowsing);
usePrivateBrowsing, isInBrowserElement, appId);
return NS_OK;
}

Просмотреть файл

@ -38,6 +38,8 @@ HttpChannelParent::HttpChannelParent(PBrowserParent* iframeEmbedding)
, mHaveLoadContext(false)
, mIsContent(false)
, mUsePrivateBrowsing(false)
, mIsInBrowserElement(false)
, mAppId(0)
{
// Ensure gHttpHandler is initialized: we need the atom table up and running.
nsIHttpProtocolHandler* handler;
@ -123,7 +125,9 @@ HttpChannelParent::RecvAsyncOpen(const IPC::URI& aURI,
const bool& allowSpdy,
const bool& haveLoadContext,
const bool& isContent,
const bool& usePrivateBrowsing)
const bool& usePrivateBrowsing,
const bool& isInBrowserElement,
const PRUint32& appId)
{
nsCOMPtr<nsIURI> uri(aURI);
nsCOMPtr<nsIURI> originalUri(aOriginalURI);
@ -149,6 +153,8 @@ HttpChannelParent::RecvAsyncOpen(const IPC::URI& aURI,
mHaveLoadContext = haveLoadContext;
mIsContent = isContent;
mUsePrivateBrowsing = usePrivateBrowsing;
mIsInBrowserElement = isInBrowserElement;
mAppId = appId;
nsHttpChannel *httpChan = static_cast<nsHttpChannel *>(mChannel.get());
@ -650,5 +656,22 @@ HttpChannelParent::SetUsePrivateBrowsing(bool aUsePrivateBrowsing)
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
HttpChannelParent::GetIsInBrowserElement(bool* aIsInBrowserElement)
{
NS_ENSURE_ARG_POINTER(aIsInBrowserElement);
*aIsInBrowserElement = mIsInBrowserElement;
return NS_OK;
}
NS_IMETHODIMP
HttpChannelParent::GetAppId(PRUint32* aAppId)
{
NS_ENSURE_ARG_POINTER(aAppId);
*aAppId = mAppId;
return NS_OK;
}
}} // mozilla::net

Просмотреть файл

@ -68,7 +68,9 @@ protected:
const bool& allowSpdy,
const bool & haveLoadContext,
const bool & isContent,
const bool& usingPrivateBrowsing);
const bool& usingPrivateBrowsing,
const bool& isInBrowserElement,
const PRUint32& appId);
virtual bool RecvConnectChannel(const PRUint32& channelId);
virtual bool RecvSetPriority(const PRUint16& priority);
@ -108,14 +110,17 @@ private:
PRUint64 mStoredProgress;
PRUint64 mStoredProgressMax;
bool mSentRedirect1Begin : 1;
bool mSentRedirect1BeginFailed : 1;
bool mReceivedRedirect2Verify : 1;
bool mSentRedirect1Begin : 1;
bool mSentRedirect1BeginFailed : 1;
bool mReceivedRedirect2Verify : 1;
// fields for impersonating nsILoadContext
bool mHaveLoadContext : 1;
bool mIsContent : 1;
bool mUsePrivateBrowsing : 1;
bool mHaveLoadContext : 1;
bool mIsContent : 1;
bool mUsePrivateBrowsing : 1;
bool mIsInBrowserElement : 1;
PRUint32 mAppId;
};
} // namespace net

Просмотреть файл

@ -54,7 +54,9 @@ parent:
// it in HttpChannelParent too
bool haveLoadContext,
bool isContent,
bool usePrivateBrowsing);
bool usePrivateBrowsing,
bool isInBrowserElement,
PRUint32 appID);
// Used to connect redirected-to channel on the parent with redirected-to
// channel on the child.

Просмотреть файл

@ -28,7 +28,9 @@ parent:
bool aSecure,
bool haveLoadContext,
bool isContent,
bool usingPrivateBrowsing);
bool usePrivateBrowsing,
bool isInBrowserElement,
PRUint32 appID);
Close(PRUint16 code, nsCString reason);
SendMsg(nsCString aMsg);
SendBinaryMsg(nsCString aMsg);

Просмотреть файл

@ -332,6 +332,8 @@ WebSocketChannelChild::AsyncOpen(nsIURI *aURI,
bool haveLoadContext = false;
bool isContent = false;
bool usePrivateBrowsing = false;
bool isInBrowserElement = false;
PRUint32 appId = 0;
nsCOMPtr<nsILoadContext> loadContext;
NS_QueryNotificationCallbacks(mCallbacks, mLoadGroup,
NS_GET_IID(nsILoadContext),
@ -340,6 +342,8 @@ WebSocketChannelChild::AsyncOpen(nsIURI *aURI,
haveLoadContext = true;
loadContext->GetIsContent(&isContent);
loadContext->GetUsePrivateBrowsing(&usePrivateBrowsing);
loadContext->GetIsInBrowserElement(&isInBrowserElement);
loadContext->GetAppId(&appId);
}
// Corresponding release in DeallocPWebSocket
@ -347,7 +351,8 @@ WebSocketChannelChild::AsyncOpen(nsIURI *aURI,
gNeckoChild->SendPWebSocketConstructor(this, tabChild);
if (!SendAsyncOpen(aURI, nsCString(aOrigin), mProtocol, mEncrypted,
haveLoadContext, isContent, usePrivateBrowsing))
haveLoadContext, isContent, usePrivateBrowsing,
isInBrowserElement, appId))
return NS_ERROR_UNEXPECTED;
mOriginalURI = aURI;

Просмотреть файл

@ -22,6 +22,8 @@ WebSocketChannelParent::WebSocketChannelParent(nsIAuthPromptProvider* aAuthProvi
, mHaveLoadContext(false)
, mIsContent(false)
, mUsePrivateBrowsing(false)
, mIsInBrowserElement(false)
, mAppId(0)
{
#if defined(PR_LOGGING)
if (!webSocketLog)
@ -49,7 +51,9 @@ WebSocketChannelParent::RecvAsyncOpen(const IPC::URI& aURI,
const bool& aSecure,
const bool& haveLoadContext,
const bool& isContent,
const bool& usePrivateBrowsing)
const bool& usePrivateBrowsing,
const bool& isInBrowserElement,
const PRUint32& appId)
{
LOG(("WebSocketChannelParent::RecvAsyncOpen() %p\n", this));
nsresult rv;
@ -67,6 +71,8 @@ WebSocketChannelParent::RecvAsyncOpen(const IPC::URI& aURI,
mHaveLoadContext = haveLoadContext;
mIsContent = isContent;
mUsePrivateBrowsing = usePrivateBrowsing;
mIsInBrowserElement = isInBrowserElement;
mAppId = appId;
rv = mChannel->SetNotificationCallbacks(this);
if (NS_FAILED(rv))
goto fail;
@ -278,6 +284,24 @@ WebSocketChannelParent::SetUsePrivateBrowsing(bool aUsePrivateBrowsing)
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
WebSocketChannelParent::GetIsInBrowserElement(bool* aIsInBrowserElement)
{
NS_ENSURE_ARG_POINTER(aIsInBrowserElement);
*aIsInBrowserElement = mIsInBrowserElement;
return NS_OK;
}
NS_IMETHODIMP
WebSocketChannelParent::GetAppId(PRUint32* aAppId)
{
NS_ENSURE_ARG_POINTER(aAppId);
*aAppId = mAppId;
return NS_OK;
}
} // namespace net
} // namespace mozilla

Просмотреть файл

@ -39,7 +39,9 @@ class WebSocketChannelParent : public PWebSocketParent,
const bool& aSecure,
const bool& haveLoadContext,
const bool& isContent,
const bool& usingPrivateBrowsing);
const bool& usingPrivateBrowsing,
const bool& isInBrowserElement,
const PRUint32& appId);
bool RecvClose(const PRUint16 & code, const nsCString & reason);
bool RecvSendMsg(const nsCString& aMsg);
bool RecvSendBinaryMsg(const nsCString& aMsg);
@ -54,9 +56,12 @@ class WebSocketChannelParent : public PWebSocketParent,
bool mIPCOpen;
// fields for impersonating nsILoadContext
bool mHaveLoadContext : 1;
bool mIsContent : 1;
bool mUsePrivateBrowsing : 1;
bool mHaveLoadContext : 1;
bool mIsContent : 1;
bool mUsePrivateBrowsing : 1;
bool mIsInBrowserElement : 1;
PRUint32 mAppId;
};
} // namespace net

Просмотреть файл

@ -24,7 +24,9 @@ parent:
PRUint32 loadFlags,
bool haveLoadContext,
bool isContent,
bool usingPrivateBrowsing);
bool usePrivateBrowsing,
bool isInBrowserElement,
PRUint32 appID);
// methods corresponding to those of nsIWyciwygChannel
WriteToCacheEntry(nsString data);

Просмотреть файл

@ -566,6 +566,8 @@ WyciwygChannelChild::AsyncOpen(nsIStreamListener *aListener, nsISupports *aConte
bool haveLoadContext = false;
bool isContent = false;
bool usePrivateBrowsing = false;
bool isInBrowserElement = false;
PRUint32 appId = 0;
nsCOMPtr<nsILoadContext> loadContext;
NS_QueryNotificationCallbacks(mCallbacks, mLoadGroup,
NS_GET_IID(nsILoadContext),
@ -574,10 +576,12 @@ WyciwygChannelChild::AsyncOpen(nsIStreamListener *aListener, nsISupports *aConte
haveLoadContext = true;
loadContext->GetIsContent(&isContent);
loadContext->GetUsePrivateBrowsing(&usePrivateBrowsing);
loadContext->GetIsInBrowserElement(&isInBrowserElement);
loadContext->GetAppId(&appId);
}
SendAsyncOpen(IPC::URI(mOriginalURI), mLoadFlags, haveLoadContext, isContent,
usePrivateBrowsing);
usePrivateBrowsing, isInBrowserElement, appId);
mState = WCC_OPENED;

Просмотреть файл

@ -20,6 +20,8 @@ WyciwygChannelParent::WyciwygChannelParent()
, mHaveLoadContext(false)
, mIsContent(false)
, mUsePrivateBrowsing(false)
, mIsInBrowserElement(false)
, mAppId(0)
{
#if defined(PR_LOGGING)
if (!gWyciwygLog)
@ -86,7 +88,9 @@ WyciwygChannelParent::RecvAsyncOpen(const IPC::URI& aOriginal,
const PRUint32& aLoadFlags,
const bool& haveLoadContext,
const bool& isContent,
const bool& usePrivateBrowsing)
const bool& usePrivateBrowsing,
const bool& isInBrowserElement,
const PRUint32& appId)
{
nsCOMPtr<nsIURI> original(aOriginal);
@ -109,6 +113,8 @@ WyciwygChannelParent::RecvAsyncOpen(const IPC::URI& aOriginal,
mHaveLoadContext = haveLoadContext;
mIsContent = isContent;
mUsePrivateBrowsing = usePrivateBrowsing;
mIsInBrowserElement = isInBrowserElement;
mAppId = appId;
mChannel->SetNotificationCallbacks(this);
rv = mChannel->AsyncOpen(this, nsnull);
@ -316,5 +322,22 @@ WyciwygChannelParent::SetUsePrivateBrowsing(bool aUsePrivateBrowsing)
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
WyciwygChannelParent::GetIsInBrowserElement(bool* aIsInBrowserElement)
{
NS_ENSURE_ARG_POINTER(aIsInBrowserElement);
*aIsInBrowserElement = mIsInBrowserElement;
return NS_OK;
}
NS_IMETHODIMP
WyciwygChannelParent::GetAppId(PRUint32* aAppId)
{
NS_ENSURE_ARG_POINTER(aAppId);
*aAppId = mAppId;
return NS_OK;
}
}} // mozilla::net

Просмотреть файл

@ -37,7 +37,9 @@ protected:
const PRUint32& loadFlags,
const bool& haveLoadContext,
const bool& isContent,
const bool& usingPrivateBrowsing);
const bool& usingPrivateBrowsing,
const bool& isInBrowserElement,
const PRUint32& appId);
virtual bool RecvWriteToCacheEntry(const nsString& data);
virtual bool RecvCloseCacheEntry(const nsresult& reason);
virtual bool RecvSetCharsetAndSource(const PRInt32& source,
@ -51,9 +53,12 @@ protected:
bool mIPCClosed;
// fields for impersonating nsILoadContext
bool mHaveLoadContext : 1;
bool mIsContent : 1;
bool mUsePrivateBrowsing : 1;
bool mHaveLoadContext : 1;
bool mIsContent : 1;
bool mUsePrivateBrowsing : 1;
bool mIsInBrowserElement : 1;
PRUint32 mAppId;
};
} // namespace net