summaryrefslogtreecommitdiffstats
path: root/chrome/plugin/webplugin_accelerated_surface_proxy_mac.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/plugin/webplugin_accelerated_surface_proxy_mac.cc')
-rw-r--r--chrome/plugin/webplugin_accelerated_surface_proxy_mac.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/chrome/plugin/webplugin_accelerated_surface_proxy_mac.cc b/chrome/plugin/webplugin_accelerated_surface_proxy_mac.cc
index 6e3540e..9dcacb9 100644
--- a/chrome/plugin/webplugin_accelerated_surface_proxy_mac.cc
+++ b/chrome/plugin/webplugin_accelerated_surface_proxy_mac.cc
@@ -15,7 +15,13 @@ WebPluginAcceleratedSurfaceProxy::WebPluginAcceleratedSurfaceProxy(
: plugin_proxy_(plugin_proxy),
window_handle_(NULL) {
surface_ = new AcceleratedSurface;
- surface_->Initialize(NULL, true);
+ // It's possible for OpenGL to fail to initialze (e.g., if an incompatible
+ // mode is forced via flags), so handle that gracefully.
+ if (!surface_->Initialize(NULL, true)) {
+ delete surface_;
+ surface_ = NULL;
+ return;
+ }
// Only used for 10.5 support, but harmless on 10.6+.
surface_->SetTransportDIBAllocAndFree(
@@ -37,6 +43,9 @@ void WebPluginAcceleratedSurfaceProxy::SetWindowHandle(
}
void WebPluginAcceleratedSurfaceProxy::SetSize(const gfx::Size& size) {
+ if (!surface_)
+ return;
+
uint64 io_surface_id = surface_->SetSurfaceSize(size);
if (io_surface_id) {
plugin_proxy_->SetAcceleratedSurface(window_handle_, size, io_surface_id);
@@ -49,15 +58,21 @@ void WebPluginAcceleratedSurfaceProxy::SetSize(const gfx::Size& size) {
}
CGLContextObj WebPluginAcceleratedSurfaceProxy::context() {
- return surface_->context();
+ return surface_ ? surface_->context() : NULL;
}
void WebPluginAcceleratedSurfaceProxy::StartDrawing() {
+ if (!surface_)
+ return;
+
surface_->MakeCurrent();
surface_->Clear(gfx::Rect(surface_->GetSize()));
}
void WebPluginAcceleratedSurfaceProxy::EndDrawing() {
+ if (!surface_)
+ return;
+
surface_->SwapBuffers();
plugin_proxy_->AcceleratedFrameBuffersDidSwap(
window_handle_, surface_->GetSurfaceId());