1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <vector> 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/callback_helpers.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_vector.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/message_loop/message_loop.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/audio_decoder_config.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/decoder_buffer.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/demuxer_stream.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/fake_text_track_stream.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/text_renderer.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/text_track_config.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/video_decoder_config.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/filters/webvtt_util.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace media { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Local implementation of the TextTrack interface. 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FakeTextTrack : public TextTrack { 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeTextTrack(const base::Closure& destroy_cb, 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TextTrackConfig& config) 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : destroy_cb_(destroy_cb), 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) config_(config) { 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~FakeTextTrack() { 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) destroy_cb_.Run(); 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MOCK_METHOD5(addWebVTTCue, void(const base::TimeDelta& start, 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::TimeDelta& end, 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& id, 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& content, 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& settings)); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::Closure destroy_cb_; 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TextTrackConfig config_; 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeTextTrack); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TextRendererTest : public testing::Test { 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TextRendererTest() {} 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void CreateTextRenderer() { 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!text_renderer_); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_.reset( 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new TextRenderer(message_loop_.message_loop_proxy(), 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&TextRendererTest::OnAddTextTrack, 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(this)))); 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_->Initialize(base::Bind(&TextRendererTest::OnEnd, 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(this))); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void Destroy() { 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_.reset(); 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) message_loop_.RunUntilIdle(); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AddTextTrack(TextKind kind, 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& name, 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& language, 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool expect_read) { 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const size_t idx = text_track_streams_.size(); 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_track_streams_.push_back(new FakeTextTrackStream); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (expect_read) 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(idx); 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TextTrackConfig config(kind, name, language, std::string()); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_->AddTextStream(text_track_streams_.back(), config); 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_loop_.RunUntilIdle(); 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(text_tracks_.size(), text_track_streams_.size()); 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeTextTrack* const text_track = text_tracks_.back(); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_track); 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_track->config_.Matches(config)); 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnAddTextTrack(const TextTrackConfig& config, 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const AddTextTrackDoneCB& done_cb) { 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Closure destroy_cb = 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&TextRendererTest::OnDestroyTextTrack, 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(this), 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_tracks_.size()); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Text track objects are owned by the text renderer, but we cache them 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // here so we can inspect them. They get removed from our cache when the 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // text renderer deallocates them. 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_tracks_.push_back(new FakeTextTrack(destroy_cb, config)); 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<TextTrack> text_track(text_tracks_.back()); 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) done_cb.Run(text_track.Pass()); 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RemoveTextTrack(unsigned idx) { 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeTextTrackStream* const stream = text_track_streams_[idx]; 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_->RemoveTextStream(stream); 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_tracks_[idx]); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SatisfyPendingReads(const base::TimeDelta& start, 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::TimeDelta& duration, 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& id, 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& content, 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& settings) { 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (TextTrackStreams::iterator itr = text_track_streams_.begin(); 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) itr != text_track_streams_.end(); ++itr) { 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (*itr)->SatisfyPendingRead(start, duration, id, content, settings); 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AbortPendingRead(unsigned idx) { 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeTextTrackStream* const stream = text_track_streams_[idx]; 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) stream->AbortPendingRead(); 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_loop_.RunUntilIdle(); 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AbortPendingReads() { 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t idx = 0; idx < text_track_streams_.size(); ++idx) { 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(idx); 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendEosNotification(unsigned idx) { 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeTextTrackStream* const stream = text_track_streams_[idx]; 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) stream->SendEosNotification(); 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_loop_.RunUntilIdle(); 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendEosNotifications() { 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t idx = 0; idx < text_track_streams_.size(); ++idx) { 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(idx); 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendCue(unsigned idx, bool expect_cue) { 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeTextTrackStream* const text_stream = text_track_streams_[idx]; 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::TimeDelta start; 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::TimeDelta duration = base::TimeDelta::FromSeconds(42); 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string id = "id"; 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string content = "subtitle"; 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string settings; 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (expect_cue) { 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeTextTrack* const text_track = text_tracks_[idx]; 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*text_track, addWebVTTCue(start, 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) start + duration, 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) id, 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content, 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) settings)); 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_stream->SatisfyPendingRead(start, duration, id, content, settings); 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_loop_.RunUntilIdle(); 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendCues(bool expect_cue) { 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t idx = 0; idx < text_track_streams_.size(); ++idx) { 168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(idx, expect_cue); 169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnDestroyTextTrack(unsigned idx) { 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_tracks_[idx] = NULL; 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Play() { 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch text_renderer_->StartPlaying(); 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Pause() { 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_->Pause(base::Bind(&TextRendererTest::OnPause, 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(this))); 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_loop_.RunUntilIdle(); 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Flush() { 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnFlush()); 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_->Flush(base::Bind(&TextRendererTest::OnFlush, 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(this))); 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void ExpectRead(size_t idx) { 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeTextTrackStream* const stream = text_track_streams_[idx]; 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*stream, OnRead()); 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MOCK_METHOD0(OnEnd, void()); 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MOCK_METHOD0(OnPause, void()); 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MOCK_METHOD0(OnFlush, void()); 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoop message_loop_; 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef ScopedVector<FakeTextTrackStream> TextTrackStreams; 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TextTrackStreams text_track_streams_; 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef std::vector<FakeTextTrack*> TextTracks; 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TextTracks text_tracks_; 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<TextRenderer> text_renderer_; 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TextRendererTest); 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, CreateTextRendererNoInit) { 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_.reset( 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new TextRenderer(message_loop_.message_loop_proxy(), 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&TextRendererTest::OnAddTextTrack, 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(this)))); 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) text_renderer_.reset(); 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, Create) { 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTextTrackOnly_OneTrack) { 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", false); 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTextTrackOnly_TwoTracks) { 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "track 1", "", false); 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "track 2", "", false); 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayOnly) { 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlay_OneTrack) { 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlay_TwoTracks) { 251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlay_OneTrackAfter) { 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlay_TwoTracksAfter) { 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlay_OneTrackBeforeOneTrackAfter) { 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayAddCue_OneTrack) { 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayAddCue_TwoTracks) { 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(1); 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosOnly_OneTrack) { 302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosOnly_TwoTracks) { 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueEos_OneTrack) { 319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueEos_TwoTracks) { 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(1); 335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, DestroyPending_OneTrack) { 341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Destroy(); 345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, DestroyPending_TwoTracks) { 349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Destroy(); 354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPause_OneTrack) { 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPause_TwoTracks) { 367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePending_OneTrack) { 377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 384f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePending_TwoTracks) { 386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePending_OneTrack) { 396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePending_TwoTracks) { 405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_OneTrack) { 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_TwoTracks) { 425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_SplitEos) { 436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlush_OneTrack) { 448f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 449f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 450f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Flush(); 456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlush_TwoTracks) { 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Flush(); 472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(1); 474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 477f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 478f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTextTrackOnlyRemove_OneTrack) { 480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 481f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", false); 482f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTextTrackOnlyRemove_TwoTracks) { 486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "track 1", "", false); 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "track 2", "", false); 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_OneTrack) { 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_TwoTracks) { 505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 510f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 511f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_SeparateCancel) { 517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 525f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 529f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_RemoveOneThenPlay) { 530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 531f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", false); 532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_RemoveTwoThenPlay) { 542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", false); 544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", false); 545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 548f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 549f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 550f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 551f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlayRemove_OneTrack) { 553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 554f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 557f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 559f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 560f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlayRemove_TwoTracks) { 562f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 563f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 564f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 565f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 566f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 567f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 568f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 569f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 570f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 571f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 572f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 573f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlayRemove_SplitCancel) { 574f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 575f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 576f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 577f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 578f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 579f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 580f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 581f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 583f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 584f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 586f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlayRemove_SplitAdd) { 587f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 588f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 589f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 590f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 591f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 592f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 594f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 595f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayAddCueRemove_OneTrack) { 600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 601f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 610f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayAddCueRemove_TwoTracks) { 611f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 616f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(1); 617f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 618f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosOnlyRemove_OneTrack) { 627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosOnlyRemove_TwoTracks) { 637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 645f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueEosRemove_OneTrack) { 650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueEosRemove_TwoTracks) { 662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(1); 668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 674f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_PauseThenRemove) { 678f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 679f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 680f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 681f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 682f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 683f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 684f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 685f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 687f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 688f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_RemoveThanPause) { 689f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 690f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 694f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 695f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 696f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 697f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 698f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 699f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPause_PauseThenRemoveTwoTracks) { 700f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 701f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 702f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 703f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 704f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 705f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 706f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 707f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 708f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 709f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 711f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 712f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 713f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_RemoveThenPauseTwoTracks) { 714f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 715f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 716f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 717f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 718f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingReads(); 719f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 721f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 722f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 723f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 724f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 725f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_SplitCancel) { 728f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 729f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 730f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 731f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 732f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 733f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 734f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 735f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 736f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 737f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 739f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 740f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 741f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 742f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 743f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_PauseLast) { 744f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 745f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 746f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 748f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 749f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 750f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 751f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 752f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 753f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 755f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 756f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 757f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 758f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePendingRemove_OneTrack) { 759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 760f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 761f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 765f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 766f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 767f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 768f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 769f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePendingRemove_TwoTracks) { 770f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 771f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 773f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 774f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 777f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 778f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePendingRemove_SplitEos) { 785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 788f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 789f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 791f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 798f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingRemove_OneTrack) { 800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCues(true); 806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 807f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 810f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingRemove_TwoTracks) { 811f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 812f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 813f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 815f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 816f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(0, true); 817f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 818f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(1, true); 819f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 820f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 821f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 822f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 823f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 824f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 825f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingRemove_SplitSendCue) { 826f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 827f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 828f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 829f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 830f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 831f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(0, true); 832f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 833f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 834f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 835f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(1, true); 836f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 837f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 838f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 839f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 840f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPauseRemove_PauseThenRemove) { 841f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 842f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 843f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 844f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 845f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 846f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 847f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 848f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 849f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 850f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 851f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 852f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPauseRemove_RemoveThenPause) { 853f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 854f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 855f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 856f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 857f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 858f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 859f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 860f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 861f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 862f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 863f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 864f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_PauseThenRemoveTwoTracks) { 865f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 866f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 867f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 868f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 869f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 870f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 871f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 872f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 873f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 874f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 875f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 876f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 877f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 878f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 879f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 880f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_RemovePauseRemove) { 881f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 882f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 883f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 884f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 886f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 888f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 889f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 890f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 891f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 892f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 893f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 894f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 895f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 896f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosThenPause) { 897f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 898f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 899f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 900f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 901f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 902f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 903f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 904f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 905f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 906f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 907f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 909f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 910f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 911f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 912f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_PauseLast) { 913f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 914f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 915f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 916f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 917f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 918f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 919f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 920f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 921f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 923f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 925f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 926f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 927f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 928f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosPauseRemove) { 929f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 930f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 931f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 932f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 933f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 934f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 935f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 936f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 937f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 938f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 939f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 940f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 941f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 942f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 943f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 944f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosRemovePause) { 945f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 946f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 947f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 948f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 949f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 950f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 951f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 952f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 953f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 954f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 955f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 956f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 957f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 958f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 959f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 960f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosRemoveEosPause) { 961f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 962f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 963f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 964f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 965f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 966f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 967f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 968f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 970f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 971f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 972f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 973f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 974f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 975f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 976f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosRemoveEosRemovePause) { 977f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 978f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 979f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 980f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 981f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 982f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 983f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 984f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 985f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 986f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 987f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 988f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 989f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 990f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 991f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 992f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlushRemove_OneTrack) { 993f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 994f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 995f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 996f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 997f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 998f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 999f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1000f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Flush(); 1001f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 1002f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1003f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 1004f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 1005f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 1006f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 1007f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1008f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1009f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlushRemove_TwoTracks) { 1010f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1011f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1012f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1013f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1014f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 1015f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 1016f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1017f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1018f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Flush(); 1019f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 1020f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(1); 1021f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1022f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 1023f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 1024f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 1025f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 1026f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 1027f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 1028f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 1029f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1030f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1031f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlushRemove_EosRemove) { 1032f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1033f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1034f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1035f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1036f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 1037f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotifications(); 1038f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1039f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1040f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Flush(); 1041f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(0); 1042f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExpectRead(1); 1043f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1044f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 1045f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 1046f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 1047f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 1048f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 1049f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 1050f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 1051f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1052f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1053f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayShort_SendCueThenEos) { 1054f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1055f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1056f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1057f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1058f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1059f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(0, true); 1060f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1061f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 1062f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1063f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1064f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayShort_EosThenSendCue) { 1065f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1066f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1067f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1068f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1069f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1070f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(0); 1071f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1072f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(1, true); 1073f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1074f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1075f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayShortRemove_SendEosRemove) { 1076f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1077f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1078f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1079f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1080f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1081f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(0, true); 1082f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1083f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 1084f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 1085f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 1086f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 1087f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 1088f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1089f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1090f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayShortRemove_SendRemoveEos) { 1091f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1092f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1093f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1094f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1095f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1096f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(0, true); 1097f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 1098f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 1099f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 1101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(1); 1102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(text_renderer_->HasTracks()); 1103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingCancel_OneTrack) { 1106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 1108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 1112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingCancel_SendThenCancel) { 1115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(0, true); 1121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 1123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingCancel_CancelThenSend) { 1126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 1132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(1, true); 1134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_OneTrack) { 1137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 1139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 11415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 11425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Destroy(); 1143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 1144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_SendThenCancel) { 1147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 11525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 11535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Destroy(); 1154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(0, false); 1155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(1); 1156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_CancelThenSend) { 1159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 11645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 11655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Destroy(); 1166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 1167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendCue(1, false); 1168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddRemoveAdd) { 1171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 1173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 1175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "", "", true); 1179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 1181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 1182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddRemoveEos) { 1185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 1190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 1191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 1192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnEnd()); 1193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 1194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddRemovePause) { 1197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTextRenderer(); 1198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "1", "", true); 1199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddTextTrack(kTextSubtitles, "2", "", true); 1200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Play(); 1201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AbortPendingRead(0); 1202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveTextTrack(0); 1203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(text_renderer_->HasTracks()); 1204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Pause(); 1205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*this, OnPause()); 1206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendEosNotification(1); 1207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace media 1210