| Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
 | 
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
 | 
| index fefaacf312123e4121b5b4ef44e4a009e1bd55be..bcfeb1bff2ebf872c3c244f59babb0dde5ba9c20 100644
 | 
| --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
 | 
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
 | 
| @@ -711,28 +711,19 @@ TEST_P(GLES2DecoderTest, ShaderSourceBucketAndGetShaderSourceValidArgs) {
 | 
|                        kSource0, bucket->size()));
 | 
|  }
 | 
|  
 | 
| -TEST_P(GLES2DecoderTest, ShaderSourceBucketInvalidArgs) {
 | 
| +#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
 | 
| +TEST_P(GLES2DecoderTest, ShaderSourceBucketWithProgramId) {
 | 
|    const uint32 kBucketId = 123;
 | 
|    const char kSource0[] = "hello";
 | 
|    const char* kSource[] = { kSource0 };
 | 
|    const char kValidStrEnd = 0;
 | 
| -  ShaderSourceBucket cmd;
 | 
| -  // Test no bucket.
 | 
| -  cmd.Init(client_shader_id_, kBucketId);
 | 
| -  EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
 | 
| -  // Test invalid client.
 | 
|    SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
 | 
| -  cmd.Init(kInvalidClientId, kBucketId);
 | 
| -  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
 | 
| -  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
 | 
| -#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
 | 
| -  SetBucketAsCStrings(kBucketId, 1, kSource);
 | 
| -  cmd.Init(
 | 
| -      client_program_id_, kBucketId);
 | 
| +  ShaderSourceBucket cmd;
 | 
| +  cmd.Init(client_program_id_, kBucketId);
 | 
|    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
 | 
|    EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
 | 
| -#endif  // GLES2_TEST_SHADER_VS_PROGRAM_IDS
 | 
|  }
 | 
| +#endif  // GLES2_TEST_SHADER_VS_PROGRAM_IDS
 | 
|  
 | 
|  TEST_P(GLES2DecoderTest, ShaderSourceStripComments) {
 | 
|    const uint32 kInBucketId = 123;
 | 
| @@ -746,45 +737,6 @@ TEST_P(GLES2DecoderTest, ShaderSourceStripComments) {
 | 
|    EXPECT_EQ(GL_NO_ERROR, GetGLError());
 | 
|  }
 | 
|  
 | 
| -TEST_P(GLES2DecoderTest, ShaderSourceInvalidHeader) {
 | 
| -  const uint32 kInBucketId = 123;
 | 
| -  const char kSource0[] = "hello";
 | 
| -  const char* kSource[] = { kSource0 };
 | 
| -  const char kValidStrEnd = 0;
 | 
| -  const GLsizei kCount = 1;
 | 
| -  const GLsizei kTests[] = {
 | 
| -      kCount + 1,
 | 
| -      0,
 | 
| -      std::numeric_limits<GLsizei>::max(),
 | 
| -      -1,
 | 
| -      kCount
 | 
| -  };
 | 
| -  size_t kTestCount = 5;
 | 
| -  for (size_t ii = 0; ii < kTestCount; ++ii) {
 | 
| -    SetBucketAsCStrings(kInBucketId, 1, kSource, kTests[ii], kValidStrEnd);
 | 
| -    ShaderSourceBucket cmd;
 | 
| -    cmd.Init(client_shader_id_, kInBucketId);
 | 
| -    if (kTests[ii] == kCount) {
 | 
| -      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
 | 
| -    } else {
 | 
| -      EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
 | 
| -    }
 | 
| -  }
 | 
| -  EXPECT_EQ(GL_NO_ERROR, GetGLError());
 | 
| -}
 | 
| -
 | 
| -TEST_P(GLES2DecoderTest, ShaderSourceInvalidStringEnding) {
 | 
| -  const uint32 kInBucketId = 123;
 | 
| -  const char kSource0[] = "hello";
 | 
| -  const char* kSource[] = { kSource0 };
 | 
| -  const char kInvalidStrEnd = '*';
 | 
| -  SetBucketAsCStrings(kInBucketId, 1, kSource, 1, kInvalidStrEnd);
 | 
| -  ShaderSourceBucket cmd;
 | 
| -  cmd.Init(client_shader_id_, kInBucketId);
 | 
| -  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
 | 
| -  EXPECT_EQ(GL_NO_ERROR, GetGLError());
 | 
| -}
 | 
| -
 | 
|  TEST_P(GLES2DecoderWithShaderTest, Uniform1iValidArgs) {
 | 
|    EXPECT_CALL(*gl_, Uniform1i(kUniform1RealLocation, 2));
 | 
|    Uniform1i cmd;
 | 
| @@ -923,6 +875,58 @@ TEST_P(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) {
 | 
|    EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
 | 
|  }
 | 
|  
 | 
| +TEST_P(GLES2DecoderWithShaderTest, GetFragDataLocation) {
 | 
| +  const uint32 kBucketId = 123;
 | 
| +  const GLint kLocation = 10;
 | 
| +  const char* kName = "color";
 | 
| +  typedef GetFragDataLocation::Result Result;
 | 
| +  Result* result = GetSharedMemoryAs<Result*>();
 | 
| +  SetBucketAsCString(kBucketId, kName);
 | 
| +  *result = -1;
 | 
| +  GetFragDataLocation cmd;
 | 
| +  cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
 | 
| +  EXPECT_CALL(*gl_, GetFragDataLocation(kServiceProgramId, StrEq(kName)))
 | 
| +      .WillOnce(Return(kLocation))
 | 
| +      .RetiresOnSaturation();
 | 
| +  decoder_->set_unsafe_es3_apis_enabled(true);
 | 
| +  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
 | 
| +  EXPECT_EQ(kLocation, *result);
 | 
| +  decoder_->set_unsafe_es3_apis_enabled(false);
 | 
| +  EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
 | 
| +}
 | 
| +
 | 
| +TEST_P(GLES2DecoderWithShaderTest, GetFragDataLocationInvalidArgs) {
 | 
| +  const uint32 kBucketId = 123;
 | 
| +  typedef GetFragDataLocation::Result Result;
 | 
| +  Result* result = GetSharedMemoryAs<Result*>();
 | 
| +  *result = -1;
 | 
| +  GetFragDataLocation cmd;
 | 
| +  decoder_->set_unsafe_es3_apis_enabled(true);
 | 
| +  // Check no bucket
 | 
| +  cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
 | 
| +  EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
 | 
| +  EXPECT_EQ(-1, *result);
 | 
| +  // Check bad program id.
 | 
| +  const char* kName = "color";
 | 
| +  SetBucketAsCString(kBucketId, kName);
 | 
| +  cmd.Init(kInvalidClientId, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
 | 
| +  *result = -1;
 | 
| +  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
 | 
| +  EXPECT_EQ(-1, *result);
 | 
| +  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
 | 
| +  // Check bad memory
 | 
| +  cmd.Init(client_program_id_,
 | 
| +           kBucketId,
 | 
| +           kInvalidSharedMemoryId,
 | 
| +           kSharedMemoryOffset);
 | 
| +  EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
 | 
| +  cmd.Init(client_program_id_,
 | 
| +           kBucketId,
 | 
| +           kSharedMemoryId,
 | 
| +           kInvalidSharedMemoryOffset);
 | 
| +  EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
 | 
| +}
 | 
| +
 | 
|  TEST_P(GLES2DecoderWithShaderTest, GetUniformLocation) {
 | 
|    const uint32 kBucketId = 123;
 | 
|    const char* kNonExistentName = "foobar";
 | 
| 
 |