39474. r=rpotts,mscott. We now can load a stream directly into the uri loader (bypassing necko). built and pre-checkin tested on linux and win

git-svn-id: svn://10.0.0.236/trunk@73603 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
valeski%netscape.com
2000-06-30 23:39:30 +00:00
parent f831750c24
commit d2709265b5
3 changed files with 123 additions and 50 deletions

View File

@@ -78,6 +78,7 @@
static NS_DEFINE_IID(kDeviceContextCID, NS_DEVICE_CONTEXT_CID);
static NS_DEFINE_CID(kPlatformCharsetCID, NS_PLATFORMCHARSET_CID);
static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID);
static NS_DEFINE_CID(kSimpleURICID, NS_SIMPLEURI_CID);
//*****************************************************************************
//*** nsDocShell: Object Management
@@ -230,7 +231,6 @@ NS_IMETHODIMP nsDocShell::LoadURI(nsIURI* aURI, nsIDocShellLoadInfo* aLoadInfo)
aLoadInfo->GetSHEntry(getter_AddRefs(loadInfoSHEntry));
#endif
}
/* Check if we are in the middle of loading a subframe whose parent
* was originally loaded thro' Session History. ie., you were in a frameset
* page, went somewhere else and clicked 'back'. The loading of the root page
@@ -263,6 +263,50 @@ NS_IMETHODIMP nsDocShell::LoadURI(nsIURI* aURI, nsIDocShellLoadInfo* aLoadInfo)
return NS_OK;
}
NS_IMETHODIMP nsDocShell::LoadStream(nsIInputStream *aStream, nsIURI *aURI,
const char *aContentType, PRInt32 aContentLen,
nsIDocShellLoadInfo* aLoadInfo)
{
NS_ENSURE_ARG(aStream);
NS_ENSURE_ARG(aContentType);
NS_ENSURE_ARG(aContentLen);
// if the caller doesn't pass in a URI we need to create a dummy URI. necko
// currently requires a URI in various places during the load. Some consumers
// do as well.
nsCOMPtr<nsIURI> uri = aURI;
if (!uri) {
// HACK ALERT
nsresult rv = NS_OK;
uri = do_CreateInstance(kSimpleURICID, &rv);
if (NS_FAILED(rv)) return rv;
rv = uri->SetSpec("stream");
if (NS_FAILED(rv)) return rv;
}
nsDocShellInfoLoadType loadType = nsIDocShellLoadInfo::loadNormal;
if(aLoadInfo)
(void)aLoadInfo->GetLoadType(&loadType);
NS_ENSURE_SUCCESS(StopLoad(), NS_ERROR_FAILURE);
// Cancel any timers that were set for this loader.
(void)CancelRefreshURITimers();
mLoadType = loadType;
// build up a channel for this stream.
nsCOMPtr<nsIChannel> channel;
NS_ENSURE_SUCCESS(NS_NewInputStreamChannel(getter_AddRefs(channel), aURI, aStream,
aContentType, aContentLen), NS_ERROR_FAILURE);
nsCOMPtr<nsIURILoader> uriLoader(do_GetService(NS_URI_LOADER_PROGID));
NS_ENSURE_TRUE(uriLoader, NS_ERROR_FAILURE);
NS_ENSURE_SUCCESS(DoChannelLoad(channel, nsIURILoader::viewNormal, nsnull, uriLoader), NS_ERROR_FAILURE);
return NS_OK;
}
NS_IMETHODIMP nsDocShell::CreateLoadInfo(nsIDocShellLoadInfo** aLoadInfo)
{
nsDocShellLoadInfo* loadInfo = new nsDocShellLoadInfo();
@@ -2736,54 +2780,6 @@ NS_IMETHODIMP nsDocShell::DoURILoad(nsIURI* aURI, nsIURI* aReferrerURI,
}
channel->SetOriginalURI(aURI);
// Mark the channel as being a document URI...
nsLoadFlags loadAttribs = 0;
channel->GetLoadAttributes(&loadAttribs);
loadAttribs |= nsIChannel::LOAD_DOCUMENT_URI;
switch ( mLoadType )
{
case nsIDocShellLoadInfo::loadHistory:
loadAttribs |= nsIChannel::VALIDATE_NEVER;
break;
case nsIDocShellLoadInfo::loadReloadNormal:
loadAttribs |= nsIChannel::FORCE_VALIDATION;
break;
case nsIDocShellLoadInfo::loadReloadBypassProxyAndCache:
loadAttribs |= nsIChannel::FORCE_RELOAD;
break;
case nsIDocShellLoadInfo::loadRefresh:
loadAttribs |= nsIChannel::FORCE_RELOAD;
break;
case nsIDocShellLoadInfo::loadNormal:
case nsIDocShellLoadInfo::loadLink:
// Set cache checking flags
if ( mPrefs )
{
PRInt32 prefSetting;
if ( NS_SUCCEEDED( mPrefs->GetIntPref( "browser.cache.check_doc_frequency" , &prefSetting) ) )
{
switch ( prefSetting )
{
case 0:
loadAttribs |= nsIChannel::VALIDATE_ONCE_PER_SESSION;
break;
case 1:
loadAttribs |= nsIChannel::VALIDATE_ALWAYS;
break;
case 2:
loadAttribs |= nsIChannel::VALIDATE_NEVER;
break;
}
}
}
break;
}
channel->SetLoadAttributes(loadAttribs);
nsCOMPtr<nsIHTTPChannel> httpChannel(do_QueryInterface(channel));
if(httpChannel)
{
@@ -2830,7 +2826,62 @@ NS_IMETHODIMP nsDocShell::DoURILoad(nsIURI* aURI, nsIURI* aReferrerURI,
}
}
NS_ENSURE_SUCCESS(uriLoader->OpenURI(channel, aLoadCmd,
NS_ENSURE_SUCCESS(DoChannelLoad(channel, aLoadCmd, aWindowTarget, uriLoader), NS_ERROR_FAILURE);
return NS_OK;
}
NS_IMETHODIMP nsDocShell::DoChannelLoad(nsIChannel *aChannel, nsURILoadCommand aLoadCmd,
const char* aWindowTarget, nsIURILoader *aURILoader)
{
// Mark the channel as being a document URI...
nsLoadFlags loadAttribs = 0;
(void)aChannel->GetLoadAttributes(&loadAttribs);
loadAttribs |= nsIChannel::LOAD_DOCUMENT_URI;
switch ( mLoadType )
{
case nsIDocShellLoadInfo::loadHistory:
loadAttribs |= nsIChannel::VALIDATE_NEVER;
break;
case nsIDocShellLoadInfo::loadReloadNormal:
loadAttribs |= nsIChannel::FORCE_VALIDATION;
break;
case nsIDocShellLoadInfo::loadReloadBypassProxyAndCache:
loadAttribs |= nsIChannel::FORCE_RELOAD;
break;
case nsIDocShellLoadInfo::loadRefresh:
loadAttribs |= nsIChannel::FORCE_RELOAD;
break;
case nsIDocShellLoadInfo::loadNormal:
// Set cache checking flags
if ( mPrefs )
{
PRInt32 prefSetting;
if ( NS_SUCCEEDED( mPrefs->GetIntPref( "browser.cache.check_doc_frequency" , &prefSetting) ) )
{
switch ( prefSetting )
{
case 0:
loadAttribs |= nsIChannel::VALIDATE_ONCE_PER_SESSION;
break;
case 1:
loadAttribs |= nsIChannel::VALIDATE_ALWAYS;
break;
case 2:
loadAttribs |= nsIChannel::VALIDATE_NEVER;
break;
}
}
}
break;
}
NS_ENSURE_SUCCESS(aChannel->SetLoadAttributes(loadAttribs), NS_ERROR_FAILURE);
NS_ENSURE_SUCCESS(aURILoader->OpenURI(aChannel, aLoadCmd,
aWindowTarget, NS_STATIC_CAST(nsIDocShell*, this)), NS_ERROR_FAILURE);
return NS_OK;
@@ -3036,6 +3087,7 @@ nsDocShell::OnNewURI(nsIURI *aURI, nsIChannel *aChannel, nsDocShellInfoLoadType
}
}
nsXPIDLCString uriSpec;
aURI->GetSpec(getter_Copies(uriSpec));
printf("Adding url %s to SH\n", (const char *) uriSpec);