Bug 1291652 - Part 2: Make sure that we fetch originAttributes from the nsIloadInfo, but not from the nsIloadContext. r=mayhemer

--HG--
extra : rebase_source : 54ec153c713fe7262a793eb8d3cb53bd43075776
This commit is contained in:
Tim Huang 2016-08-23 07:20:00 -04:00
parent f31ae627b1
commit a6320a5184
4 changed files with 78 additions and 51 deletions

View File

@ -1266,17 +1266,14 @@ NS_GetAppInfo(nsIChannel *aChannel,
uint32_t *aAppID,
bool *aIsInIsolatedMozBrowserElement)
{
nsCOMPtr<nsILoadContext> loadContext;
NS_QueryNotificationCallbacks(aChannel, loadContext);
if (!loadContext) {
return false;
NeckoOriginAttributes attrs;
if (!NS_GetOriginAttributes(aChannel, attrs)) {
return false;
}
nsresult rv = loadContext->GetAppId(aAppID);
NS_ENSURE_SUCCESS(rv, false);
rv = loadContext->GetIsInIsolatedMozBrowserElement(aIsInIsolatedMozBrowserElement);
NS_ENSURE_SUCCESS(rv, false);
*aAppID = attrs.mAppId;
*aIsInIsolatedMozBrowserElement = attrs.mInIsolatedMozBrowser;
return true;
}

View File

@ -126,6 +126,8 @@ FTPChannelParent::DoAsyncOpen(const URIParams& aURI,
const OptionalInputStreamParams& aUploadStream,
const OptionalLoadInfoArgs& aLoadInfoArgs)
{
nsresult rv;
nsCOMPtr<nsIURI> uri = DeserializeURI(aURI);
if (!uri)
return false;
@ -137,8 +139,26 @@ FTPChannelParent::DoAsyncOpen(const URIParams& aURI,
this, uriSpec.get()));
#endif
nsCOMPtr<nsIIOService> ios(do_GetIOService(&rv));
if (NS_FAILED(rv)) {
return SendFailedAsyncOpen(rv);
}
nsCOMPtr<nsILoadInfo> loadInfo;
rv = mozilla::ipc::LoadInfoArgsToLoadInfo(aLoadInfoArgs,
getter_AddRefs(loadInfo));
if (NS_FAILED(rv)) {
return SendFailedAsyncOpen(rv);
}
NeckoOriginAttributes attrs;
rv = loadInfo->GetOriginAttributes(&attrs);
if (NS_FAILED(rv)) {
return SendFailedAsyncOpen(rv);
}
bool app_offline = false;
uint32_t appId = GetAppId();
uint32_t appId = attrs.mAppId;
if (appId != NECKO_UNKNOWN_APP_ID &&
appId != NECKO_NO_APP_ID) {
gIOService->IsAppOffline(appId, &app_offline);
@ -148,18 +168,6 @@ FTPChannelParent::DoAsyncOpen(const URIParams& aURI,
if (app_offline)
return SendFailedAsyncOpen(NS_ERROR_OFFLINE);
nsresult rv;
nsCOMPtr<nsIIOService> ios(do_GetIOService(&rv));
if (NS_FAILED(rv))
return SendFailedAsyncOpen(rv);
nsCOMPtr<nsILoadInfo> loadInfo;
rv = mozilla::ipc::LoadInfoArgsToLoadInfo(aLoadInfoArgs,
getter_AddRefs(loadInfo));
if (NS_FAILED(rv)) {
return SendFailedAsyncOpen(rv);
}
nsCOMPtr<nsIChannel> chan;
rv = NS_NewChannelInternal(getter_AddRefs(chan), uri, loadInfo,
nullptr, nullptr,
@ -883,8 +891,11 @@ uint32_t
FTPChannelParent::GetAppId()
{
uint32_t appId = NECKO_UNKNOWN_APP_ID;
if (mLoadContext) {
mLoadContext->GetAppId(&appId);
if (mChannel) {
NeckoOriginAttributes attrs;
if (NS_GetOriginAttributes(mChannel, attrs)) {
appId = attrs.mAppId;
}
}
return appId;
}

View File

@ -291,8 +291,21 @@ HttpChannelParent::DoAsyncOpen( const URIParams& aURI,
if (NS_FAILED(rv))
return SendFailedAsyncOpen(rv);
nsCOMPtr<nsILoadInfo> loadInfo;
rv = mozilla::ipc::LoadInfoArgsToLoadInfo(aLoadInfoArgs,
getter_AddRefs(loadInfo));
if (NS_FAILED(rv)) {
return SendFailedAsyncOpen(rv);
}
NeckoOriginAttributes attrs;
rv = loadInfo->GetOriginAttributes(&attrs);
if (NS_FAILED(rv)) {
return SendFailedAsyncOpen(rv);
}
bool appOffline = false;
uint32_t appId = GetAppId();
uint32_t appId = attrs.mAppId;
if (appId != NECKO_UNKNOWN_APP_ID &&
appId != NECKO_NO_APP_ID) {
gIOService->IsAppOffline(appId, &appOffline);
@ -305,13 +318,6 @@ HttpChannelParent::DoAsyncOpen( const URIParams& aURI,
loadFlags |= nsICachingChannel::LOAD_NO_NETWORK_IO;
}
nsCOMPtr<nsILoadInfo> loadInfo;
rv = mozilla::ipc::LoadInfoArgsToLoadInfo(aLoadInfoArgs,
getter_AddRefs(loadInfo));
if (NS_FAILED(rv)) {
return SendFailedAsyncOpen(rv);
}
nsCOMPtr<nsIChannel> channel;
rv = NS_NewChannelInternal(getter_AddRefs(channel), uri, loadInfo,
nullptr, nullptr, loadFlags, ios);
@ -459,16 +465,9 @@ HttpChannelParent::DoAsyncOpen( const URIParams& aURI,
}
if (setChooseApplicationCache) {
DocShellOriginAttributes docShellAttrs;
if (mLoadContext) {
bool result = mLoadContext->GetOriginAttributes(docShellAttrs);
if (!result) {
return SendFailedAsyncOpen(NS_ERROR_FAILURE);
}
}
NeckoOriginAttributes neckoAttrs;
neckoAttrs.InheritFromDocShellToNecko(docShellAttrs);
NS_GetOriginAttributes(mChannel, neckoAttrs);
PrincipalOriginAttributes attrs;
attrs.InheritFromNecko(neckoAttrs);
nsCOMPtr<nsIPrincipal> principal =
@ -1608,8 +1607,11 @@ uint32_t
HttpChannelParent::GetAppId()
{
uint32_t appId = NECKO_UNKNOWN_APP_ID;
if (mLoadContext) {
mLoadContext->GetAppId(&appId);
if (mChannel) {
NeckoOriginAttributes attrs;
if (NS_GetOriginAttributes(mChannel, attrs)) {
appId = attrs.mAppId;
}
}
return appId;
}

View File

@ -76,9 +76,21 @@ WebSocketChannelParent::RecvAsyncOpen(const OptionalURIParams& aURI,
nsresult rv;
nsCOMPtr<nsIURI> uri;
nsCOMPtr<nsILoadInfo> loadInfo;
bool appOffline = false;
uint32_t appId = GetAppId();
uint32_t appId = NECKO_NO_APP_ID;
NeckoOriginAttributes attrs;
rv = LoadInfoArgsToLoadInfo(aLoadInfoArgs, getter_AddRefs(loadInfo));
if (NS_FAILED(rv)) {
goto fail;
}
rv = loadInfo->GetOriginAttributes(&attrs);
if (NS_FAILED(rv)) {
goto fail;
}
appId = attrs.mAppId;
if (appId != NECKO_UNKNOWN_APP_ID &&
appId != NECKO_NO_APP_ID) {
gIOService->IsAppOffline(appId, &appOffline);
@ -102,10 +114,6 @@ WebSocketChannelParent::RecvAsyncOpen(const OptionalURIParams& aURI,
goto fail;
}
rv = LoadInfoArgsToLoadInfo(aLoadInfoArgs, getter_AddRefs(loadInfo));
if (NS_FAILED(rv))
goto fail;
rv = mChannel->SetLoadInfo(loadInfo);
if (NS_FAILED(rv)) {
goto fail;
@ -328,9 +336,18 @@ WebSocketChannelParent::OfflineDisconnect()
uint32_t
WebSocketChannelParent::GetAppId()
{
nsresult rv;
uint32_t appId = NECKO_UNKNOWN_APP_ID;
if (mLoadContext) {
mLoadContext->GetAppId(&appId);
if (mChannel) {
nsCOMPtr<nsILoadInfo> loadInfo;
rv = mChannel->GetLoadInfo(getter_AddRefs(loadInfo));
if (NS_SUCCEEDED(rv) && loadInfo) {
NeckoOriginAttributes attrs;
loadInfo->GetOriginAttributes(&attrs);
appId = attrs.mAppId;
}
}
return appId;
}