Bug 1282554 - Provide helper function to check if channel can be openen using open2() and asyncOpen2() r=bholly

This commit is contained in:
Christoph Kerschbaumer 2016-06-28 19:03:56 +02:00
Родитель 1956523e8c
Коммит 71fde070bb
7 изменённых файлов: 47 добавлений и 58 удалений

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

@ -1471,16 +1471,10 @@ nsresult nsWebBrowserPersist::SaveChannelInternal(
nsCOMPtr<nsIFileChannel> fc(do_QueryInterface(aChannel));
nsCOMPtr<nsIFileURL> fu(do_QueryInterface(aFile));
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo();
if (fc && !fu) {
nsCOMPtr<nsIInputStream> fileInputStream, bufferedInputStream;
nsresult rv;
if (loadInfo && loadInfo->GetSecurityMode()) {
rv = aChannel->Open2(getter_AddRefs(fileInputStream));
}
else {
rv = aChannel->Open(getter_AddRefs(fileInputStream));
}
nsresult rv = NS_MaybeOpenChannelUsingOpen2(aChannel,
getter_AddRefs(fileInputStream));
NS_ENSURE_SUCCESS(rv, rv);
rv = NS_NewBufferedInputStream(getter_AddRefs(bufferedInputStream),
fileInputStream, BUFFERED_OUTPUT_SIZE);
@ -1491,13 +1485,7 @@ nsresult nsWebBrowserPersist::SaveChannelInternal(
}
// Read from the input channel
nsresult rv;
if (loadInfo && loadInfo->GetSecurityMode()) {
rv = aChannel->AsyncOpen2(this);
}
else {
rv = aChannel->AsyncOpen(this, nullptr);
}
nsresult rv = NS_MaybeOpenChannelUsingAsyncOpen2(aChannel, this);
if (rv == NS_ERROR_NO_CONTENT)
{
// Assume this is a protocol such as mailto: which does not feed out

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

@ -418,14 +418,9 @@ NS_IMETHODIMP nsZipWriter::AddEntryChannel(const nsACString & aZipEntry,
return NS_ERROR_FILE_ALREADY_EXISTS;
nsCOMPtr<nsIInputStream> inputStream;
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo();
nsresult rv;
if (loadInfo && loadInfo->GetSecurityMode()) {
rv = aChannel->Open2(getter_AddRefs(inputStream));
}
else {
rv = aChannel->Open(getter_AddRefs(inputStream));
}
nsresult rv = NS_MaybeOpenChannelUsingOpen2(aChannel,
getter_AddRefs(inputStream));
NS_ENSURE_SUCCESS(rv, rv);
rv = AddEntryStream(aZipEntry, aModTime, aCompression, inputStream,
@ -1001,13 +996,7 @@ inline nsresult nsZipWriter::BeginProcessingAddition(nsZipQueueItem* aItem,
NS_ENSURE_SUCCESS(rv, rv);
}
else {
nsCOMPtr<nsILoadInfo> loadInfo = aItem->mChannel->GetLoadInfo();
if (loadInfo && loadInfo->GetSecurityMode()) {
rv = aItem->mChannel->AsyncOpen2(stream);
}
else {
rv = aItem->mChannel->AsyncOpen(stream, nullptr);
}
rv = NS_MaybeOpenChannelUsingAsyncOpen2(aItem->mChannel, stream);
NS_ENSURE_SUCCESS(rv, rv);
}

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

@ -751,13 +751,7 @@ NS_ImplementChannelOpen(nsIChannel *channel,
getter_AddRefs(stream));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsILoadInfo> loadInfo = channel->GetLoadInfo();
if (loadInfo && loadInfo->GetEnforceSecurity()) {
rv = channel->AsyncOpen2(listener);
}
else {
rv = channel->AsyncOpen(listener, nullptr);
}
rv = NS_MaybeOpenChannelUsingAsyncOpen2(channel, listener);
NS_ENSURE_SUCCESS(rv, rv);
uint64_t n;
@ -2003,6 +1997,26 @@ nsresult NS_MakeRandomInvalidURLString(nsCString &result)
#undef NS_FAKE_SCHEME
#undef NS_FAKE_TLD
nsresult NS_MaybeOpenChannelUsingOpen2(nsIChannel* aChannel,
nsIInputStream **aStream)
{
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo();
if (loadInfo && loadInfo->GetSecurityMode() != 0) {
return aChannel->Open2(aStream);
}
return aChannel->Open(aStream);
}
nsresult NS_MaybeOpenChannelUsingAsyncOpen2(nsIChannel* aChannel,
nsIStreamListener *aListener)
{
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo();
if (loadInfo && loadInfo->GetSecurityMode() != 0) {
return aChannel->AsyncOpen2(aListener);
}
return aChannel->AsyncOpen(aListener, nullptr);
}
nsresult
NS_CheckIsJavaCompatibleURLString(nsCString &urlString, bool *result)
{

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

@ -909,6 +909,22 @@ nsresult NS_LinkRedirectChannels(uint32_t channelId,
*/
nsresult NS_MakeRandomInvalidURLString(nsCString &result);
/**
* Helper function which checks whether the channel can be
* openend using Open2() or has to fall back to opening
* the channel using Open().
*/
nsresult NS_MaybeOpenChannelUsingOpen2(nsIChannel* aChannel,
nsIInputStream **aStream);
/**
* Helper function which checks whether the channel can be
* openend using AsyncOpen2() or has to fall back to opening
* the channel using AsyncOpen().
*/
nsresult NS_MaybeOpenChannelUsingAsyncOpen2(nsIChannel* aChannel,
nsIStreamListener *aListener);
/**
* Helper function to determine whether urlString is Java-compatible --
* whether it can be passed to the Java URL(String) constructor without the

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

@ -1160,12 +1160,7 @@ PackagedAppService::GetResource(nsIChannel *aChannel,
if (loadContext) {
channel->SetNotificationCallbacks(loadContext);
}
if (loadInfo && loadInfo->GetEnforceSecurity()) {
return channel->AsyncOpen2(listener);
}
return channel->AsyncOpen(listener, nullptr);
return NS_MaybeOpenChannelUsingAsyncOpen2(channel, listener);
}
nsresult

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

@ -251,14 +251,7 @@ nsViewSourceChannel::Open(nsIInputStream **_retval)
{
NS_ENSURE_TRUE(mChannel, NS_ERROR_FAILURE);
nsresult rv = NS_OK;
nsCOMPtr<nsILoadInfo> loadInfo = mChannel->GetLoadInfo();
if (loadInfo && loadInfo->GetEnforceSecurity()) {
mChannel->Open2(_retval);
}
else {
mChannel->Open(_retval);
}
nsresult rv = NS_MaybeOpenChannelUsingOpen2(mChannel, _retval);
if (NS_SUCCEEDED(rv)) {
mOpened = true;
}

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

@ -1402,13 +1402,7 @@ WebSocketChannel::BeginOpenInternal()
}
#endif
nsCOMPtr<nsILoadInfo> loadInfo = localChannel->GetLoadInfo();
if (loadInfo && loadInfo->GetSecurityMode()) {
rv = localChannel->AsyncOpen2(this);
}
else {
rv = localChannel->AsyncOpen(this, nullptr);
}
rv = NS_MaybeOpenChannelUsingAsyncOpen2(localChannel, this);
if (NS_FAILED(rv)) {
LOG(("WebSocketChannel::BeginOpenInternal: cannot async open\n"));