| Index: gpu/command_buffer/service/shader_manager.cc
 | 
| diff --git a/gpu/command_buffer/service/shader_manager.cc b/gpu/command_buffer/service/shader_manager.cc
 | 
| index 90b15760a5e8438a275047e8993e215905ffff5a..055cd707a539b3db87f6a1da81bb3476293ce5fb 100644
 | 
| --- a/gpu/command_buffer/service/shader_manager.cc
 | 
| +++ b/gpu/command_buffer/service/shader_manager.cc
 | 
| @@ -29,19 +29,22 @@ Shader::Shader(GLuint service_id, GLenum shader_type)
 | 
|          shader_state_(kShaderStateWaiting),
 | 
|          service_id_(service_id),
 | 
|          shader_type_(shader_type),
 | 
| +        source_type_(kANGLE),
 | 
|          valid_(false) {
 | 
|  }
 | 
|  
 | 
|  Shader::~Shader() {
 | 
|  }
 | 
|  
 | 
| -void Shader::RequestCompile() {
 | 
| +void Shader::RequestCompile(scoped_refptr<ShaderTranslatorInterface> translator,
 | 
| +                            TranslatedShaderSourceType type) {
 | 
|    shader_state_ = kShaderStateCompileRequested;
 | 
| +  translator_ = translator;
 | 
| +  source_type_ = type;
 | 
|    last_compiled_source_ = source_;
 | 
|  }
 | 
|  
 | 
| -void Shader::DoCompile(ShaderTranslatorInterface* translator,
 | 
| -                       TranslatedShaderSourceType type) {
 | 
| +void Shader::DoCompile() {
 | 
|    // We require that RequestCompile() must be called before DoCompile(),
 | 
|    // so we can return early if the shader state is not what we expect.
 | 
|    if (shader_state_ != kShaderStateCompileRequested) {
 | 
| @@ -51,19 +54,21 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator,
 | 
|    // Signify the shader has been compiled, whether or not it is valid
 | 
|    // is dependent on the |valid_| member variable.
 | 
|    shader_state_ = kShaderStateCompiled;
 | 
| +  valid_ = false;
 | 
|  
 | 
|    // Translate GL ES 2.0 shader to Desktop GL shader and pass that to
 | 
|    // glShaderSource and then glCompileShader.
 | 
|    const char* source_for_driver = last_compiled_source_.c_str();
 | 
| +  ShaderTranslatorInterface* translator = translator_.get();
 | 
|    if (translator) {
 | 
| -    valid_ = translator->Translate(last_compiled_source_,
 | 
| -                                   &log_info_,
 | 
| -                                   &translated_source_,
 | 
| -                                   &attrib_map_,
 | 
| -                                   &uniform_map_,
 | 
| -                                   &varying_map_,
 | 
| -                                   &name_map_);
 | 
| -    if (!valid_) {
 | 
| +    bool success = translator->Translate(last_compiled_source_,
 | 
| +                                         &log_info_,
 | 
| +                                         &translated_source_,
 | 
| +                                         &attrib_map_,
 | 
| +                                         &uniform_map_,
 | 
| +                                         &varying_map_,
 | 
| +                                         &name_map_);
 | 
| +    if (!success) {
 | 
|        return;
 | 
|      }
 | 
|      source_for_driver = translated_source_.c_str();
 | 
| @@ -71,7 +76,7 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator,
 | 
|  
 | 
|    glShaderSource(service_id_, 1, &source_for_driver, NULL);
 | 
|    glCompileShader(service_id_);
 | 
| -  if (type == kANGLE) {
 | 
| +  if (source_type_ == kANGLE) {
 | 
|      GLint max_len = 0;
 | 
|      glGetShaderiv(service_id_,
 | 
|                    GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
 | 
| @@ -84,11 +89,14 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator,
 | 
|      DCHECK(max_len == 0 || len < max_len);
 | 
|      DCHECK(len == 0 || translated_source_[len] == '\0');
 | 
|      translated_source_.resize(len);
 | 
| +    source_for_driver = translated_source_.c_str();
 | 
|    }
 | 
|  
 | 
|    GLint status = GL_FALSE;
 | 
|    glGetShaderiv(service_id_, GL_COMPILE_STATUS, &status);
 | 
| -  if (status != GL_TRUE) {
 | 
| +  if (status == GL_TRUE) {
 | 
| +    valid_ = true;
 | 
| +  } else {
 | 
|      // We cannot reach here if we are using the shader translator.
 | 
|      // All invalid shaders must be rejected by the translator.
 | 
|      // All translated shaders must compile.
 | 
| 
 |