diff --git a/modules/plugin/base/src/ns4xPluginInstance.cpp b/modules/plugin/base/src/ns4xPluginInstance.cpp index 791d14cd4b90..94073419721a 100644 --- a/modules/plugin/base/src/ns4xPluginInstance.cpp +++ b/modules/plugin/base/src/ns4xPluginInstance.cpp @@ -56,6 +56,7 @@ ns4xPluginStreamListener::ns4xPluginStreamListener(nsIPluginInstance* inst, mInst = (ns4xPluginInstance*) inst; mStreamBuffer=nsnull; mPosition = 0; + mCurrentStreamOffset = -1; // Initialize the 4.x interface structure memset(&mNPStream, 0, sizeof(mNPStream)); @@ -291,10 +292,13 @@ ns4xPluginStreamListener::OnDataAvailable(nsIPluginStreamInfo* pluginInfo, PRUint32 leftToRead = 0; // just in case OnDataaAvail tries to overflow our buffer PRBool createdHere = PR_FALSE; // we did malloc in locally, so we must free locally - // we are getting a range request, reset mPosition since postion passed to plugin will - // be relative to the absolute position of the file. - if (sourceOffset != 0) + // if we are getting a range request, reset mPosition. + if (sourceOffset != mCurrentStreamOffset || + mCurrentStreamOffset == -1 ) + { mPosition = 0; + mCurrentStreamOffset = sourceOffset; + } pluginInfo->GetURL(&mNPStream.url); pluginInfo->GetLastModified((PRUint32*)&(mNPStream.lastmodified)); diff --git a/modules/plugin/base/src/ns4xPluginStreamListener.h b/modules/plugin/base/src/ns4xPluginStreamListener.h index e4987ccb664f..8eb3674d1207 100644 --- a/modules/plugin/base/src/ns4xPluginStreamListener.h +++ b/modules/plugin/base/src/ns4xPluginStreamListener.h @@ -55,6 +55,7 @@ protected: ns4xPluginInstance* mInst; NPStream mNPStream; PRUint32 mPosition; + PRUint32 mCurrentStreamOffset; nsPluginStreamType mStreamType; public: diff --git a/modules/plugin/nglsrc/ns4xPluginInstance.cpp b/modules/plugin/nglsrc/ns4xPluginInstance.cpp index 791d14cd4b90..94073419721a 100644 --- a/modules/plugin/nglsrc/ns4xPluginInstance.cpp +++ b/modules/plugin/nglsrc/ns4xPluginInstance.cpp @@ -56,6 +56,7 @@ ns4xPluginStreamListener::ns4xPluginStreamListener(nsIPluginInstance* inst, mInst = (ns4xPluginInstance*) inst; mStreamBuffer=nsnull; mPosition = 0; + mCurrentStreamOffset = -1; // Initialize the 4.x interface structure memset(&mNPStream, 0, sizeof(mNPStream)); @@ -291,10 +292,13 @@ ns4xPluginStreamListener::OnDataAvailable(nsIPluginStreamInfo* pluginInfo, PRUint32 leftToRead = 0; // just in case OnDataaAvail tries to overflow our buffer PRBool createdHere = PR_FALSE; // we did malloc in locally, so we must free locally - // we are getting a range request, reset mPosition since postion passed to plugin will - // be relative to the absolute position of the file. - if (sourceOffset != 0) + // if we are getting a range request, reset mPosition. + if (sourceOffset != mCurrentStreamOffset || + mCurrentStreamOffset == -1 ) + { mPosition = 0; + mCurrentStreamOffset = sourceOffset; + } pluginInfo->GetURL(&mNPStream.url); pluginInfo->GetLastModified((PRUint32*)&(mNPStream.lastmodified)); diff --git a/modules/plugin/nglsrc/ns4xPluginStreamListener.h b/modules/plugin/nglsrc/ns4xPluginStreamListener.h index e4987ccb664f..8eb3674d1207 100644 --- a/modules/plugin/nglsrc/ns4xPluginStreamListener.h +++ b/modules/plugin/nglsrc/ns4xPluginStreamListener.h @@ -55,6 +55,7 @@ protected: ns4xPluginInstance* mInst; NPStream mNPStream; PRUint32 mPosition; + PRUint32 mCurrentStreamOffset; nsPluginStreamType mStreamType; public: