Bug 776331 - Avoid crash when trying to redraw a destroyed plugin on Android r=josh

This commit is contained in:
James Willcox
2012-07-26 09:39:21 -04:00
parent 66f69178bf
commit d27b667533
3 changed files with 14 additions and 1 deletions

View File

@@ -218,11 +218,15 @@ nsNPAPIPluginInstance::Destroy()
mPlugin = nsnull;
#if MOZ_WIDGET_ANDROID
if (mContentSurface)
mContentSurface->SetFrameAvailableCallback(nsnull);
mContentTexture = nsnull;
mContentSurface = nsnull;
std::map<void*, VideoInfo*>::iterator it;
for (it = mVideos.begin(); it != mVideos.end(); it++) {
it->second->mSurfaceTexture->SetFrameAvailableCallback(nsnull);
delete it->second;
}
mVideos.clear();
@@ -988,11 +992,17 @@ nsSurfaceTexture* nsNPAPIPluginInstance::CreateSurfaceTexture()
if (!surface)
return nsnull;
nsCOMPtr<nsIRunnable> frameCallback = NS_NewRunnableMethod(this, &nsNPAPIPluginInstance::RedrawPlugin);
nsCOMPtr<nsIRunnable> frameCallback = NS_NewRunnableMethod(this, &nsNPAPIPluginInstance::OnSurfaceTextureFrameAvailable);
surface->SetFrameAvailableCallback(frameCallback);
return surface;
}
void nsNPAPIPluginInstance::OnSurfaceTextureFrameAvailable()
{
if (mRunning == RUNNING && mOwner)
RedrawPlugin();
}
void* nsNPAPIPluginInstance::AcquireContentWindow()
{
if (!mContentSurface) {