| Index: gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
 | 
| diff --git a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
 | 
| index 4d44ad73b9f1be533f34bb8705877a0eb0b3b42a..845ab06118275acdcfea9c6fd6fb0e755560dd0a 100644
 | 
| --- a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
 | 
| +++ b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
 | 
| @@ -23,7 +23,7 @@ TEST_F(GLES2ImplementationTest, AttachShader) {
 | 
|    gl_->AttachShader(1, 2);
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
| -// TODO: Implement unit test for BindAttribLocation
 | 
| +// TODO(zmo): Implement unit test for BindAttribLocation
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, BindBuffer) {
 | 
|    struct Cmds {
 | 
| @@ -309,8 +309,8 @@ TEST_F(GLES2ImplementationTest, CompileShader) {
 | 
|    gl_->CompileShader(1);
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
| -// TODO: Implement unit test for CompressedTexImage2D
 | 
| -// TODO: Implement unit test for CompressedTexSubImage2D
 | 
| +// TODO(zmo): Implement unit test for CompressedTexImage2D
 | 
| +// TODO(zmo): Implement unit test for CompressedTexSubImage2D
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, CopyBufferSubData) {
 | 
|    struct Cmds {
 | 
| @@ -738,10 +738,10 @@ TEST_F(GLES2ImplementationTest, GenTransformFeedbacks) {
 | 
|    EXPECT_EQ(kTransformFeedbacksStartId, ids[0]);
 | 
|    EXPECT_EQ(kTransformFeedbacksStartId + 1, ids[1]);
 | 
|  }
 | 
| -// TODO: Implement unit test for GetActiveAttrib
 | 
| -// TODO: Implement unit test for GetActiveUniform
 | 
| -// TODO: Implement unit test for GetAttachedShaders
 | 
| -// TODO: Implement unit test for GetAttribLocation
 | 
| +// TODO(zmo): Implement unit test for GetActiveAttrib
 | 
| +// TODO(zmo): Implement unit test for GetActiveUniform
 | 
| +// TODO(zmo): Implement unit test for GetAttachedShaders
 | 
| +// TODO(zmo): Implement unit test for GetAttribLocation
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, GetBooleanv) {
 | 
|    struct Cmds {
 | 
| @@ -793,6 +793,7 @@ TEST_F(GLES2ImplementationTest, GetFloatv) {
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|    EXPECT_EQ(static_cast<Result::Type>(1), result);
 | 
|  }
 | 
| +// TODO(zmo): Implement unit test for GetFragDataLocation
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, GetFramebufferAttachmentParameteriv) {
 | 
|    struct Cmds {
 | 
| @@ -866,7 +867,7 @@ TEST_F(GLES2ImplementationTest, GetProgramiv) {
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|    EXPECT_EQ(static_cast<Result::Type>(1), result);
 | 
|  }
 | 
| -// TODO: Implement unit test for GetProgramInfoLog
 | 
| +// TODO(zmo): Implement unit test for GetProgramInfoLog
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, GetRenderbufferParameteriv) {
 | 
|    struct Cmds {
 | 
| @@ -935,8 +936,8 @@ TEST_F(GLES2ImplementationTest, GetShaderiv) {
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|    EXPECT_EQ(static_cast<Result::Type>(1), result);
 | 
|  }
 | 
| -// TODO: Implement unit test for GetShaderInfoLog
 | 
| -// TODO: Implement unit test for GetShaderPrecisionFormat
 | 
| +// TODO(zmo): Implement unit test for GetShaderInfoLog
 | 
| +// TODO(zmo): Implement unit test for GetShaderPrecisionFormat
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, GetTexParameterfv) {
 | 
|    struct Cmds {
 | 
| @@ -971,9 +972,9 @@ TEST_F(GLES2ImplementationTest, GetTexParameteriv) {
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|    EXPECT_EQ(static_cast<Result::Type>(1), result);
 | 
|  }
 | 
| -// TODO: Implement unit test for GetUniformfv
 | 
| -// TODO: Implement unit test for GetUniformiv
 | 
| -// TODO: Implement unit test for GetUniformLocation
 | 
| +// TODO(zmo): Implement unit test for GetUniformfv
 | 
| +// TODO(zmo): Implement unit test for GetUniformiv
 | 
| +// TODO(zmo): Implement unit test for GetUniformLocation
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, GetVertexAttribfv) {
 | 
|    struct Cmds {
 | 
| @@ -1404,6 +1405,93 @@ TEST_F(GLES2ImplementationTest, Scissor) {
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
|  
 | 
| +TEST_F(GLES2ImplementationTest, ShaderSource) {
 | 
| +  const uint32 kBucketId = GLES2Implementation::kResultBucketId;
 | 
| +  const char* kString1 = "happy";
 | 
| +  const char* kString2 = "ending";
 | 
| +  const size_t kString1Size = ::strlen(kString1) + 1;
 | 
| +  const size_t kString2Size = ::strlen(kString2) + 1;
 | 
| +  const size_t kHeaderSize = sizeof(GLint) * 3;
 | 
| +  const size_t kSourceSize = kHeaderSize + kString1Size + kString2Size;
 | 
| +  const size_t kPaddedHeaderSize =
 | 
| +      transfer_buffer_->RoundToAlignment(kHeaderSize);
 | 
| +  const size_t kPaddedString1Size =
 | 
| +      transfer_buffer_->RoundToAlignment(kString1Size);
 | 
| +  const size_t kPaddedString2Size =
 | 
| +      transfer_buffer_->RoundToAlignment(kString2Size);
 | 
| +  struct Cmds {
 | 
| +    cmd::SetBucketSize set_bucket_size;
 | 
| +    cmd::SetBucketData set_bucket_header;
 | 
| +    cmd::SetToken set_token1;
 | 
| +    cmd::SetBucketData set_bucket_data1;
 | 
| +    cmd::SetToken set_token2;
 | 
| +    cmd::SetBucketData set_bucket_data2;
 | 
| +    cmd::SetToken set_token3;
 | 
| +    cmds::ShaderSourceBucket shader_source_bucket;
 | 
| +    cmd::SetBucketSize clear_bucket_size;
 | 
| +  };
 | 
| +
 | 
| +  ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize);
 | 
| +  ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size);
 | 
| +  ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size);
 | 
| +
 | 
| +  Cmds expected;
 | 
| +  expected.set_bucket_size.Init(kBucketId, kSourceSize);
 | 
| +  expected.set_bucket_header.Init(kBucketId, 0, kHeaderSize, mem0.id,
 | 
| +                                  mem0.offset);
 | 
| +  expected.set_token1.Init(GetNextToken());
 | 
| +  expected.set_bucket_data1.Init(kBucketId, kHeaderSize, kString1Size, mem1.id,
 | 
| +                                 mem1.offset);
 | 
| +  expected.set_token2.Init(GetNextToken());
 | 
| +  expected.set_bucket_data2.Init(kBucketId, kHeaderSize + kString1Size,
 | 
| +                                 kString2Size, mem2.id, mem2.offset);
 | 
| +  expected.set_token3.Init(GetNextToken());
 | 
| +  expected.shader_source_bucket.Init(1, kBucketId);
 | 
| +  expected.clear_bucket_size.Init(kBucketId, 0);
 | 
| +  const char* kStrings[] = {kString1, kString2};
 | 
| +  gl_->ShaderSource(1, 2, kStrings, NULL);
 | 
| +  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
| +}
 | 
| +
 | 
| +TEST_F(GLES2ImplementationTest, ShaderSourceWithLength) {
 | 
| +  const uint32 kBucketId = GLES2Implementation::kResultBucketId;
 | 
| +  const char* kString = "foobar******";
 | 
| +  const size_t kStringSize = 6;  // We only need "foobar".
 | 
| +  const size_t kHeaderSize = sizeof(GLint) * 2;
 | 
| +  const size_t kSourceSize = kHeaderSize + kStringSize + 1;
 | 
| +  const size_t kPaddedHeaderSize =
 | 
| +      transfer_buffer_->RoundToAlignment(kHeaderSize);
 | 
| +  const size_t kPaddedStringSize =
 | 
| +      transfer_buffer_->RoundToAlignment(kStringSize + 1);
 | 
| +  struct Cmds {
 | 
| +    cmd::SetBucketSize set_bucket_size;
 | 
| +    cmd::SetBucketData set_bucket_header;
 | 
| +    cmd::SetToken set_token1;
 | 
| +    cmd::SetBucketData set_bucket_data;
 | 
| +    cmd::SetToken set_token2;
 | 
| +    cmds::ShaderSourceBucket shader_source_bucket;
 | 
| +    cmd::SetBucketSize clear_bucket_size;
 | 
| +  };
 | 
| +
 | 
| +  ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize);
 | 
| +  ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedStringSize);
 | 
| +
 | 
| +  Cmds expected;
 | 
| +  expected.set_bucket_size.Init(kBucketId, kSourceSize);
 | 
| +  expected.set_bucket_header.Init(kBucketId, 0, kHeaderSize, mem0.id,
 | 
| +                                  mem0.offset);
 | 
| +  expected.set_token1.Init(GetNextToken());
 | 
| +  expected.set_bucket_data.Init(kBucketId, kHeaderSize, kStringSize + 1,
 | 
| +                                mem1.id, mem1.offset);
 | 
| +  expected.set_token2.Init(GetNextToken());
 | 
| +  expected.shader_source_bucket.Init(1, kBucketId);
 | 
| +  expected.clear_bucket_size.Init(kBucketId, 0);
 | 
| +  const char* kStrings[] = {kString};
 | 
| +  const GLint kLength[] = {kStringSize};
 | 
| +  gl_->ShaderSource(1, 1, kStrings, kLength);
 | 
| +  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
| +}
 | 
| +
 | 
|  TEST_F(GLES2ImplementationTest, StencilFunc) {
 | 
|    struct Cmds {
 | 
|      cmds::StencilFunc cmd;
 | 
| @@ -2447,7 +2535,7 @@ TEST_F(GLES2ImplementationTest, DeleteQueriesEXT) {
 | 
|    gl_->DeleteQueriesEXT(arraysize(ids), &ids[0]);
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
| -// TODO: Implement unit test for BeginQueryEXT
 | 
| +// TODO(zmo): Implement unit test for BeginQueryEXT
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, BeginTransformFeedback) {
 | 
|    struct Cmds {
 | 
| @@ -2470,8 +2558,8 @@ TEST_F(GLES2ImplementationTest, EndTransformFeedback) {
 | 
|    gl_->EndTransformFeedback();
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
| -// TODO: Implement unit test for InsertEventMarkerEXT
 | 
| -// TODO: Implement unit test for PushGroupMarkerEXT
 | 
| +// TODO(zmo): Implement unit test for InsertEventMarkerEXT
 | 
| +// TODO(zmo): Implement unit test for PushGroupMarkerEXT
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, PopGroupMarkerEXT) {
 | 
|    struct Cmds {
 | 
| @@ -2534,7 +2622,7 @@ TEST_F(GLES2ImplementationTest, IsVertexArrayOES) {
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|    EXPECT_TRUE(result);
 | 
|  }
 | 
| -// TODO: Implement unit test for EnableFeatureCHROMIUM
 | 
| +// TODO(zmo): Implement unit test for EnableFeatureCHROMIUM
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, ResizeCHROMIUM) {
 | 
|    struct Cmds {
 | 
| @@ -2546,9 +2634,9 @@ TEST_F(GLES2ImplementationTest, ResizeCHROMIUM) {
 | 
|    gl_->ResizeCHROMIUM(1, 2, 3);
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
| -// TODO: Implement unit test for GetRequestableExtensionsCHROMIUM
 | 
| -// TODO: Implement unit test for CreateStreamTextureCHROMIUM
 | 
| -// TODO: Implement unit test for GetTranslatedShaderSourceANGLE
 | 
| +// TODO(zmo): Implement unit test for GetRequestableExtensionsCHROMIUM
 | 
| +// TODO(zmo): Implement unit test for CreateStreamTextureCHROMIUM
 | 
| +// TODO(zmo): Implement unit test for GetTranslatedShaderSourceANGLE
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, TexImageIOSurface2DCHROMIUM) {
 | 
|    struct Cmds {
 | 
| @@ -2593,8 +2681,8 @@ TEST_F(GLES2ImplementationTest, VertexAttribDivisorANGLE) {
 | 
|    gl_->VertexAttribDivisorANGLE(1, 2);
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
| -// TODO: Implement unit test for GenMailboxCHROMIUM
 | 
| -// TODO: Implement unit test for BindUniformLocationCHROMIUM
 | 
| +// TODO(zmo): Implement unit test for GenMailboxCHROMIUM
 | 
| +// TODO(zmo): Implement unit test for BindUniformLocationCHROMIUM
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, GenValuebuffersCHROMIUM) {
 | 
|    GLuint ids[2] = {
 | 
| @@ -2749,7 +2837,7 @@ TEST_F(GLES2ImplementationTest, LoseContextCHROMIUM) {
 | 
|                             GL_GUILTY_CONTEXT_RESET_ARB);
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
| -// TODO: Implement unit test for InsertSyncPointCHROMIUM
 | 
| +// TODO(zmo): Implement unit test for InsertSyncPointCHROMIUM
 | 
|  
 | 
|  TEST_F(GLES2ImplementationTest, WaitSyncPointCHROMIUM) {
 | 
|    struct Cmds {
 | 
| 
 |