зеркало из https://github.com/mozilla/pjs.git
Fixing 76356 -- plugin streams don't ask for byte range support, r=gagan, sr=darin
This commit is contained in:
Родитель
f68a4f9360
Коммит
555c6d166c
|
@ -1581,49 +1581,52 @@ nsresult nsPluginStreamListenerPeer::SetUpStreamListener(nsIRequest *request,
|
||||||
return NS_ERROR_NULL_POINTER;
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
|
||||||
|
// get httpChannel to retrieve some info we need for nsIPluginStreamInfo setup
|
||||||
|
nsCOMPtr<nsIChannel> channel = do_QueryInterface(request);
|
||||||
|
nsCOMPtr<nsIHTTPChannel> httpChannel = do_QueryInterface(channel);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
* Assumption
|
* Assumption
|
||||||
|
|
||||||
* By the time nsPluginStreamListenerPeer::OnDataAvailable() gets
|
* By the time nsPluginStreamListenerPeer::OnDataAvailable() gets
|
||||||
* called, all the headers have been read.
|
* called, all the headers have been read.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
nsCOMPtr<nsIHTTPHeaderListener> headerListener = do_QueryInterface(mPStreamListener);
|
||||||
nsCOMPtr<nsIHTTPHeaderListener> headerListener =
|
if (headerListener && httpChannel)
|
||||||
do_QueryInterface(mPStreamListener);
|
ReadHeadersFromChannelAndPostToListener(httpChannel, headerListener);
|
||||||
if (headerListener) {
|
|
||||||
|
|
||||||
nsCOMPtr<nsIChannel> channel = do_QueryInterface(request);
|
|
||||||
nsCOMPtr<nsIHTTPChannel> httpChannel = do_QueryInterface(channel);
|
|
||||||
if (httpChannel) {
|
|
||||||
ReadHeadersFromChannelAndPostToListener(httpChannel, headerListener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mSetUpListener = PR_TRUE;
|
mSetUpListener = PR_TRUE;
|
||||||
mPluginStreamInfo->SetSeekable(PR_FALSE);
|
|
||||||
|
// set seekability
|
||||||
|
PRBool bSeekable = PR_FALSE;
|
||||||
|
if (httpChannel)
|
||||||
|
{
|
||||||
|
nsXPIDLCString range;
|
||||||
|
nsCOMPtr<nsIAtom> header(dont_AddRef(NS_NewAtom("accept-ranges")));
|
||||||
|
if(NS_SUCCEEDED(httpChannel->GetResponseHeader(header, getter_Copies(range))))
|
||||||
|
{
|
||||||
|
if (0 == PL_strcmp(range.get(), "bytes"))
|
||||||
|
bSeekable = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mPluginStreamInfo->SetSeekable(bSeekable);
|
||||||
|
|
||||||
// get Last-Modified header for plugin info
|
// get Last-Modified header for plugin info
|
||||||
|
if (httpChannel)
|
||||||
|
{
|
||||||
|
char * lastModified;
|
||||||
|
nsCOMPtr<nsIAtom> header(dont_AddRef(NS_NewAtom("last-modified")));
|
||||||
|
httpChannel->GetResponseHeader(header, &lastModified);
|
||||||
|
if (lastModified)
|
||||||
|
{
|
||||||
|
PRTime time64;
|
||||||
|
PR_ParseTimeString(lastModified, PR_TRUE, &time64); //convert string time to interger time
|
||||||
|
|
||||||
nsCOMPtr<nsIChannel> channel = do_QueryInterface(request);
|
// Convert PRTime to unix-style time_t, i.e. seconds since the epoch
|
||||||
nsCOMPtr<nsIHTTPChannel> theHTTPChannel = do_QueryInterface(channel);
|
double fpTime;
|
||||||
if (theHTTPChannel) {
|
LL_L2D(fpTime, time64);
|
||||||
char * lastModified;
|
mPluginStreamInfo->SetLastModified((PRUint32)(fpTime * 1e-6 + 0.5));
|
||||||
nsCOMPtr<nsIAtom> header(dont_AddRef(NS_NewAtom("last-modified")));
|
nsCRT::free(lastModified);
|
||||||
|
}
|
||||||
theHTTPChannel->GetResponseHeader(header, &lastModified);
|
|
||||||
if (lastModified) {
|
|
||||||
PRTime time64;
|
|
||||||
PR_ParseTimeString(lastModified, PR_TRUE, &time64); //convert string time to interger time
|
|
||||||
|
|
||||||
// Convert PRTime to unix-style time_t, i.e. seconds since the epoch
|
|
||||||
double fpTime;
|
|
||||||
LL_L2D(fpTime, time64);
|
|
||||||
mPluginStreamInfo->SetLastModified((PRUint32)(fpTime * 1e-6 + 0.5));
|
|
||||||
nsCRT::free(lastModified);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* urlString;
|
char* urlString;
|
||||||
|
|
|
@ -1581,49 +1581,52 @@ nsresult nsPluginStreamListenerPeer::SetUpStreamListener(nsIRequest *request,
|
||||||
return NS_ERROR_NULL_POINTER;
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
|
||||||
|
// get httpChannel to retrieve some info we need for nsIPluginStreamInfo setup
|
||||||
|
nsCOMPtr<nsIChannel> channel = do_QueryInterface(request);
|
||||||
|
nsCOMPtr<nsIHTTPChannel> httpChannel = do_QueryInterface(channel);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
* Assumption
|
* Assumption
|
||||||
|
|
||||||
* By the time nsPluginStreamListenerPeer::OnDataAvailable() gets
|
* By the time nsPluginStreamListenerPeer::OnDataAvailable() gets
|
||||||
* called, all the headers have been read.
|
* called, all the headers have been read.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
nsCOMPtr<nsIHTTPHeaderListener> headerListener = do_QueryInterface(mPStreamListener);
|
||||||
nsCOMPtr<nsIHTTPHeaderListener> headerListener =
|
if (headerListener && httpChannel)
|
||||||
do_QueryInterface(mPStreamListener);
|
ReadHeadersFromChannelAndPostToListener(httpChannel, headerListener);
|
||||||
if (headerListener) {
|
|
||||||
|
|
||||||
nsCOMPtr<nsIChannel> channel = do_QueryInterface(request);
|
|
||||||
nsCOMPtr<nsIHTTPChannel> httpChannel = do_QueryInterface(channel);
|
|
||||||
if (httpChannel) {
|
|
||||||
ReadHeadersFromChannelAndPostToListener(httpChannel, headerListener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mSetUpListener = PR_TRUE;
|
mSetUpListener = PR_TRUE;
|
||||||
mPluginStreamInfo->SetSeekable(PR_FALSE);
|
|
||||||
|
// set seekability
|
||||||
|
PRBool bSeekable = PR_FALSE;
|
||||||
|
if (httpChannel)
|
||||||
|
{
|
||||||
|
nsXPIDLCString range;
|
||||||
|
nsCOMPtr<nsIAtom> header(dont_AddRef(NS_NewAtom("accept-ranges")));
|
||||||
|
if(NS_SUCCEEDED(httpChannel->GetResponseHeader(header, getter_Copies(range))))
|
||||||
|
{
|
||||||
|
if (0 == PL_strcmp(range.get(), "bytes"))
|
||||||
|
bSeekable = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mPluginStreamInfo->SetSeekable(bSeekable);
|
||||||
|
|
||||||
// get Last-Modified header for plugin info
|
// get Last-Modified header for plugin info
|
||||||
|
if (httpChannel)
|
||||||
|
{
|
||||||
|
char * lastModified;
|
||||||
|
nsCOMPtr<nsIAtom> header(dont_AddRef(NS_NewAtom("last-modified")));
|
||||||
|
httpChannel->GetResponseHeader(header, &lastModified);
|
||||||
|
if (lastModified)
|
||||||
|
{
|
||||||
|
PRTime time64;
|
||||||
|
PR_ParseTimeString(lastModified, PR_TRUE, &time64); //convert string time to interger time
|
||||||
|
|
||||||
nsCOMPtr<nsIChannel> channel = do_QueryInterface(request);
|
// Convert PRTime to unix-style time_t, i.e. seconds since the epoch
|
||||||
nsCOMPtr<nsIHTTPChannel> theHTTPChannel = do_QueryInterface(channel);
|
double fpTime;
|
||||||
if (theHTTPChannel) {
|
LL_L2D(fpTime, time64);
|
||||||
char * lastModified;
|
mPluginStreamInfo->SetLastModified((PRUint32)(fpTime * 1e-6 + 0.5));
|
||||||
nsCOMPtr<nsIAtom> header(dont_AddRef(NS_NewAtom("last-modified")));
|
nsCRT::free(lastModified);
|
||||||
|
}
|
||||||
theHTTPChannel->GetResponseHeader(header, &lastModified);
|
|
||||||
if (lastModified) {
|
|
||||||
PRTime time64;
|
|
||||||
PR_ParseTimeString(lastModified, PR_TRUE, &time64); //convert string time to interger time
|
|
||||||
|
|
||||||
// Convert PRTime to unix-style time_t, i.e. seconds since the epoch
|
|
||||||
double fpTime;
|
|
||||||
LL_L2D(fpTime, time64);
|
|
||||||
mPluginStreamInfo->SetLastModified((PRUint32)(fpTime * 1e-6 + 0.5));
|
|
||||||
nsCRT::free(lastModified);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* urlString;
|
char* urlString;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче