diff options
author | kbr@google.com <kbr@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-14 00:41:11 +0000 |
---|---|---|
committer | kbr@google.com <kbr@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-14 00:41:11 +0000 |
commit | c36a9b69927d60cd846e6c60a9a87a1edc650df7 (patch) | |
tree | efd2d572e0aa381de10a972637b8b651ef5a7710 /chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc | |
parent | 76eb0247d08fa6c503517ec1a0cb8e6566cd39c7 (diff) | |
download | chromium_src-c36a9b69927d60cd846e6c60a9a87a1edc650df7.zip chromium_src-c36a9b69927d60cd846e6c60a9a87a1edc650df7.tar.gz chromium_src-c36a9b69927d60cd846e6c60a9a87a1edc650df7.tar.bz2 |
Made RenderView keep track of the fake plugin window handles it
allocates for the compositor and accelerated plugins, and clean them
up upon destruction. Guarded against potentially NULL RenderView in
WebGraphicsContext3DCommandBufferImpl's destructor.
Verified by loading http://twitter.com/henrikbennetsen# on Mac OS X,
then repeatedly clicking WebGL demos and closing them and verifying
that there are no renderer crashes.
BUG=58554
TEST=none
Review URL: http://codereview.chromium.org/3808004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62484 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc')
-rw-r--r-- | chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc b/chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc index 2933472..8254c290 100644 --- a/chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc +++ b/chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc @@ -38,9 +38,14 @@ WebGraphicsContext3DCommandBufferImpl:: ~WebGraphicsContext3DCommandBufferImpl() { #if defined(OS_MACOSX) if (web_view_) { - RenderView* renderview = RenderView::FromWebView(web_view_); DCHECK(plugin_handle_ != gfx::kNullPluginWindow); - renderview->DestroyFakePluginWindowHandle(plugin_handle_); + RenderView* renderview = RenderView::FromWebView(web_view_); + // The RenderView might already have been freed, but in its + // destructor it destroys all fake plugin window handles it + // allocated. + if (renderview) { + renderview->DestroyFakePluginWindowHandle(plugin_handle_); + } plugin_handle_ = gfx::kNullPluginWindow; } #endif @@ -190,7 +195,8 @@ bool WebGraphicsContext3DCommandBufferImpl::isGLES2NPOTStrict() { return false; } -bool WebGraphicsContext3DCommandBufferImpl::isErrorGeneratedOnOutOfBoundsAccesses() { +bool WebGraphicsContext3DCommandBufferImpl:: + isErrorGeneratedOnOutOfBoundsAccesses() { return false; } |