| Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
 | 
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
 | 
| index 0b167790a8878e26f804351e11257870c9b15da5..ee2c4965889669cb4eadded17cd454994e9a4b1f 100644
 | 
| --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
 | 
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
 | 
| @@ -3416,9 +3416,11 @@ TEST_P(GLES2DecoderTest, CreateAndConsumeTextureCHROMIUMInvalidMailbox) {
 | 
|    EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, _))
 | 
|          .Times(2)
 | 
|          .RetiresOnSaturation();
 | 
| -  EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
 | 
| -      .Times(1)
 | 
| -      .RetiresOnSaturation();
 | 
| +  EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)).Times(1).RetiresOnSaturation();
 | 
| +
 | 
| +  ActiveTexture& texture_cmd = *GetImmediateAs<ActiveTexture>();
 | 
| +  texture_cmd.Init(GL_TEXTURE1);
 | 
| +  EXPECT_EQ(error::kNoError, ExecuteCmd(texture_cmd));
 | 
|  
 | 
|    CreateAndConsumeTextureINTERNALImmediate& consume_cmd =
 | 
|        *GetImmediateAs<CreateAndConsumeTextureINTERNALImmediate>();
 | 
| @@ -3463,9 +3465,11 @@ TEST_P(GLES2DecoderTest, CreateAndConsumeTextureCHROMIUMInvalidTarget) {
 | 
|    EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, _))
 | 
|          .Times(2)
 | 
|          .RetiresOnSaturation();
 | 
| -  EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
 | 
| -        .Times(1)
 | 
| -        .RetiresOnSaturation();
 | 
| +  EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)).Times(1).RetiresOnSaturation();
 | 
| +
 | 
| +  ActiveTexture& texture_cmd = *GetImmediateAs<ActiveTexture>();
 | 
| +  texture_cmd.Init(GL_TEXTURE1);
 | 
| +  EXPECT_EQ(error::kNoError, ExecuteCmd(texture_cmd));
 | 
|  
 | 
|    // Attempt to consume the mailbox with a different target.
 | 
|    GLuint new_texture_id = kNewClientId;
 | 
| @@ -3872,7 +3876,7 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
 | 
|    // Bind image to texture.
 | 
|    EXPECT_CALL(*image.get(), BindTexImage(GL_TEXTURE_2D))
 | 
|        .Times(1)
 | 
| -      .WillOnce(Return(false))
 | 
| +      .WillRepeatedly(Return(false))
 | 
|        .RetiresOnSaturation();
 | 
|    EXPECT_CALL(*image.get(), GetSize())
 | 
|        .Times(1)
 | 
| @@ -3884,6 +3888,13 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
 | 
|        .RetiresOnSaturation();
 | 
|    // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
 | 
|    DoBindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId);
 | 
| +  Mock::VerifyAndClearExpectations(gl_.get());
 | 
| +
 | 
| +  EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)).Times(1).RetiresOnSaturation();
 | 
| +  ActiveTexture texture_cmd;
 | 
| +  texture_cmd.Init(GL_TEXTURE1);
 | 
| +  EXPECT_EQ(error::kNoError, ExecuteCmd(texture_cmd));
 | 
| +  Mock::VerifyAndClearExpectations(gl_.get());
 | 
|  
 | 
|    AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
 | 
|    SetupExpectationsForApplyingDefaultDirtyState();
 | 
| @@ -3893,27 +3904,45 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
 | 
|        .WillOnce(Return(GL_NO_ERROR))
 | 
|        .WillOnce(Return(GL_NO_ERROR))
 | 
|        .RetiresOnSaturation();
 | 
| -  EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)).Times(2).RetiresOnSaturation();
 | 
| -  EXPECT_CALL(*image.get(), CopyTexImage(GL_TEXTURE_2D))
 | 
| -      .Times(1)
 | 
| -      .WillOnce(Return(true))
 | 
| -      .RetiresOnSaturation();
 | 
| -  EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
 | 
| +  EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
 | 
|        .Times(1)
 | 
|        .RetiresOnSaturation();
 | 
| +  {
 | 
| +    InSequence seq;
 | 
| +    EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
 | 
| +        .Times(1)
 | 
| +        .RetiresOnSaturation();
 | 
| +    EXPECT_CALL(*image.get(), BindTexImage(GL_TEXTURE_2D))
 | 
| +        .Times(1)
 | 
| +        .WillRepeatedly(Return(false))
 | 
| +        .RetiresOnSaturation();
 | 
| +    EXPECT_CALL(*image.get(), CopyTexImage(GL_TEXTURE_2D))
 | 
| +        .Times(1)
 | 
| +        .WillOnce(Return(true))
 | 
| +        .RetiresOnSaturation();
 | 
| +    EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
 | 
| +        .Times(1)
 | 
| +        .RetiresOnSaturation();
 | 
| +    EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1))
 | 
| +        .Times(1)
 | 
| +        .RetiresOnSaturation();
 | 
| +  }
 | 
| +
 | 
|    DrawArrays cmd;
 | 
|    cmd.Init(GL_TRIANGLES, 0, kNumVertices);
 | 
|    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
 | 
|    EXPECT_EQ(GL_NO_ERROR, GetGLError());
 | 
|  
 | 
|    DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
 | 
| +
 | 
| +  Mock::VerifyAndClearExpectations(gl_.get());
 | 
|    // Re-bind image to texture.
 | 
|    ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd;
 | 
|    release_tex_image_2d_cmd.Init(GL_TEXTURE_2D, kImageId);
 | 
|    EXPECT_EQ(error::kNoError, ExecuteCmd(release_tex_image_2d_cmd));
 | 
|    EXPECT_CALL(*image.get(), BindTexImage(GL_TEXTURE_2D))
 | 
| -      .Times(1)
 | 
| -      .WillOnce(Return(false))
 | 
| +      .Times(2)
 | 
| +      .WillRepeatedly(Return(false))
 | 
|        .RetiresOnSaturation();
 | 
|    EXPECT_CALL(*image.get(), GetSize())
 | 
|        .Times(1)
 | 
| @@ -3932,7 +3961,6 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
 | 
|        .WillOnce(Return(GL_NO_ERROR))
 | 
|        .WillOnce(Return(GL_NO_ERROR))
 | 
|        .RetiresOnSaturation();
 | 
| -  EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)).Times(1).RetiresOnSaturation();
 | 
|    EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
 | 
|        .Times(2)
 | 
|        .RetiresOnSaturation();
 | 
| 
 |