| Index: media/filters/pipeline_integration_test.cc | 
| diff --git a/media/filters/pipeline_integration_test.cc b/media/filters/pipeline_integration_test.cc | 
| index eddf00e924a553df282d8fb2b367150a625267be..095b41136b22c1645afe6a28c49ff51adac14faa 100644 | 
| --- a/media/filters/pipeline_integration_test.cc | 
| +++ b/media/filters/pipeline_integration_test.cc | 
| @@ -305,15 +305,17 @@ class MockMediaSource { | 
| kSourceId, file_data_->data() + current_position_, size, | 
| base::TimeDelta(), kInfiniteDuration(), ×tamp_offset); | 
| current_position_ += size; | 
| +    last_timestamp_offset_ = timestamp_offset; | 
| } | 
|  | 
| -  void AppendAtTime(const base::TimeDelta& timestampOffset, | 
| -                    const uint8* pData, int size) { | 
| -    base::TimeDelta timestamp_offset = timestampOffset; | 
| +  void AppendAtTime(base::TimeDelta timestamp_offset, | 
| +                    const uint8* pData, | 
| +                    int size) { | 
| CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); | 
| chunk_demuxer_->AppendData(kSourceId, pData, size, | 
| base::TimeDelta(), kInfiniteDuration(), | 
| ×tamp_offset); | 
| +    last_timestamp_offset_ = timestamp_offset; | 
| } | 
|  | 
| void EndOfStream() { | 
| @@ -369,6 +371,10 @@ class MockMediaSource { | 
| need_key_cb_.Run(type, init_data); | 
| } | 
|  | 
| +  base::TimeDelta last_timestamp_offset() const { | 
| +    return last_timestamp_offset_; | 
| +  } | 
| + | 
| private: | 
| base::FilePath file_path_; | 
| scoped_refptr<DecoderBuffer> file_data_; | 
| @@ -378,6 +384,7 @@ class MockMediaSource { | 
| ChunkDemuxer* chunk_demuxer_; | 
| scoped_ptr<Demuxer> owned_chunk_demuxer_; | 
| Demuxer::NeedKeyCB need_key_cb_; | 
| +  base::TimeDelta last_timestamp_offset_; | 
| }; | 
|  | 
| class PipelineIntegrationTest | 
| @@ -725,6 +732,24 @@ TEST_F(PipelineIntegrationTest, MediaSource_MP3) { | 
| EXPECT_TRUE(WaitUntilOnEnded()); | 
| } | 
|  | 
| +TEST_F(PipelineIntegrationTest, MediaSource_MP3_TimestampOffset) { | 
| +  MockMediaSource source("sfx.mp3", kMP3, kAppendWholeFile); | 
| +  StartPipelineWithMediaSource(&source); | 
| +  EXPECT_EQ(339, source.last_timestamp_offset().InMilliseconds()); | 
| + | 
| +  scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.mp3"); | 
| +  source.AppendAtTime( | 
| +      source.last_timestamp_offset() - base::TimeDelta::FromMilliseconds(10), | 
| +      second_file->data(), | 
| +      second_file->data_size()); | 
| +  EXPECT_EQ(669, source.last_timestamp_offset().InMilliseconds()); | 
| +  ASSERT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 
| +  source.EndOfStream(); | 
| + | 
| +  Play(); | 
| + | 
| +  EXPECT_TRUE(WaitUntilOnEnded()); | 
| +} | 
|  | 
| TEST_F(PipelineIntegrationTest, MediaSource_MP3_Icecast) { | 
| MockMediaSource source("icy_sfx.mp3", kMP3, kAppendWholeFile); | 
|  |