| Index: ui/gl/gl_gl_api_implementation.cc | 
| diff --git a/ui/gl/gl_gl_api_implementation.cc b/ui/gl/gl_gl_api_implementation.cc | 
| index 81a1b72657ba0d841f9fd8780f68f57260160609..5bea3f12ae977e0621f536b41d609b9b5a09daab 100644 | 
| --- a/ui/gl/gl_gl_api_implementation.cc | 
| +++ b/ui/gl/gl_gl_api_implementation.cc | 
| @@ -466,11 +466,15 @@ bool VirtualGLApi::MakeCurrent(GLContext* virtual_context, GLSurface* surface) { | 
| } | 
| } | 
|  | 
| +  bool state_dirtied_externally = real_context_->GetStateWasDirtiedExternally(); | 
| +  real_context_->SetStateWasDirtiedExternally(false); | 
| + | 
| DCHECK_EQ(real_context_, GLContext::GetRealCurrent()); | 
| DCHECK(real_context_->IsCurrent(NULL)); | 
| DCHECK(virtual_context->IsCurrent(surface)); | 
|  | 
| -  if (switched_contexts || virtual_context != current_context_) { | 
| +  if (state_dirtied_externally || switched_contexts || | 
| +      virtual_context != current_context_) { | 
| #if DCHECK_IS_ON() | 
| GLenum error = glGetErrorFn(); | 
| // Accepting a context loss error here enables using debug mode to work on | 
| @@ -485,7 +489,7 @@ bool VirtualGLApi::MakeCurrent(GLContext* virtual_context, GLSurface* surface) { | 
| SetGLToRealGLApi(); | 
| if (virtual_context->GetGLStateRestorer()->IsInitialized()) { | 
| virtual_context->GetGLStateRestorer()->RestoreState( | 
| -          (current_context_ && !switched_contexts) | 
| +          (current_context_ && !state_dirtied_externally && !switched_contexts) | 
| ? current_context_->GetGLStateRestorer() | 
| : NULL); | 
| } | 
|  |