12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/browser/media/capture/audio_mirroring_manager.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <utility> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind_helpers.h" 129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/synchronization/waitable_event.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/browser_thread_impl.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "media/audio/audio_parameters.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using media::AudioOutputStream; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using media::AudioParameters; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::_; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing testing::Invoke; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::NotNull; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::Ref; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::Return; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::ReturnRef; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockDiverter : public AudioMirroringManager::Diverter { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(GetAudioParameters, const AudioParameters&()); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(StartDiverting, void(AudioOutputStream*)); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(StopDiverting, void()); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockMirroringDestination 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public AudioMirroringManager::MirroringDestination { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef AudioMirroringManager::SourceFrameRef SourceFrameRef; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockMirroringDestination(int render_process_id, int render_frame_id) 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : render_process_id_(render_process_id), 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci render_frame_id_(render_frame_id), 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci query_count_(0) {} 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD2(QueryForMatches, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void(const std::set<SourceFrameRef>& candidates, 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const MatchesCallback& results_callback)); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(AddInput, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media::AudioOutputStream*(const media::AudioParameters& params)); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SimulateQuery(const std::set<SourceFrameRef>& candidates, 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const MatchesCallback& results_callback) { 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++query_count_; 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::set<SourceFrameRef> result; 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (candidates.find(SourceFrameRef(render_process_id_, render_frame_id_)) != 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci candidates.end()) { 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result.insert(SourceFrameRef(render_process_id_, render_frame_id_)); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci results_callback.Run(result); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci media::AudioOutputStream* SimulateAddInput( 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const media::AudioParameters& params) { 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static AudioOutputStream* const kNonNullPointer = 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci reinterpret_cast<AudioOutputStream*>(0x11111110); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kNonNullPointer; 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int query_count() const { 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return query_count_; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const int render_process_id_; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const int render_frame_id_; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int query_count_; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AudioMirroringManagerTest : public testing::Test { 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef AudioMirroringManager::Diverter Diverter; 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef AudioMirroringManager::MirroringDestination MirroringDestination; 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef AudioMirroringManager::StreamRoutes StreamRoutes; 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AudioMirroringManagerTest() 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : io_thread_(BrowserThread::IO, &message_loop_), 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params_(AudioParameters::AUDIO_FAKE, media::CHANNEL_LAYOUT_STEREO, 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AudioParameters::kAudioCDSampleRate, 16, 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AudioParameters::kAudioCDSampleRate / 10) {} 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockDiverter* CreateStream( 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int render_process_id, int render_frame_id, int expected_times_diverted) { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockDiverter* const diverter = new MockDiverter(); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (expected_times_diverted > 0) { 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*diverter, GetAudioParameters()) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(expected_times_diverted) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillRepeatedly(ReturnRef(params_)); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*diverter, StartDiverting(NotNull())) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(expected_times_diverted); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*diverter, StopDiverting()) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(expected_times_diverted); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mirroring_manager_.AddDiverter( 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci render_process_id, render_frame_id, diverter); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return diverter; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void KillStream(MockDiverter* diverter) { 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mirroring_manager_.RemoveDiverter(diverter); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete diverter; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void StartMirroringTo(const scoped_ptr<MockMirroringDestination>& dest, 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int expected_inputs_added) { 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*dest, QueryForMatches(_, _)) 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .WillRepeatedly(Invoke(dest.get(), 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &MockMirroringDestination::SimulateQuery)); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (expected_inputs_added > 0) { 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*dest, AddInput(Ref(params_))) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(expected_inputs_added) 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .WillRepeatedly(Invoke(dest.get(), 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &MockMirroringDestination::SimulateAddInput)) 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .RetiresOnSaturation(); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mirroring_manager_.StartMirroring(dest.get()); 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void StopMirroringTo(const scoped_ptr<MockMirroringDestination>& dest) { 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mirroring_manager_.StopMirroring(dest.get()); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int CountStreamsDivertedTo( 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination>& dest) const { 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int count = 0; 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (StreamRoutes::const_iterator it = mirroring_manager_.routes_.begin(); 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci it != mirroring_manager_.routes_.end(); ++it) { 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (it->destination == dest.get()) 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++count; 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return count; 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ExpectNoLongerManagingAnything() const { 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(mirroring_manager_.routes_.empty()); 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(mirroring_manager_.sessions_.empty()); 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopForIO message_loop_; 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserThreadImpl io_thread_; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AudioParameters params_; 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AudioMirroringManager mirroring_manager_; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AudioMirroringManagerTest); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kRenderProcessId = 123; 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kRenderFrameId = 456; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kAnotherRenderProcessId = 789; 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kAnotherRenderFrameId = 1234; 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kYetAnotherRenderProcessId = 4560; 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kYetAnotherRenderFrameId = 7890; 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AudioMirroringManagerTest, MirroringSessionOfNothing) { 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 0); 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, destination->query_count()); 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AudioMirroringManagerTest, TwoMirroringSessionsOfNothing) { 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 0); 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, destination->query_count()); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> another_destination( 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kAnotherRenderProcessId, 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kAnotherRenderFrameId)); 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(another_destination, 0); 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(another_destination)); 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(another_destination); 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, another_destination->query_count()); 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that a mirroring session starts after, and ends before, a stream that 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// will be diverted to it. 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AudioMirroringManagerTest, StreamLifetimeAroundMirroringSession) { 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockDiverter* const stream = 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 1); 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 1); 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream); 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that a mirroring session starts before, and ends after, a stream that 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// will be diverted to it. 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AudioMirroringManagerTest, StreamLifetimeWithinMirroringSession) { 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 1); 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, destination->query_count()); 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockDiverter* const stream = 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 1); 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream); 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that a stream is diverted correctly as two mirroring sessions come and 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// go. 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(AudioMirroringManagerTest, StreamLifetimeAcrossTwoMirroringSessions) { 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockDiverter* const stream = 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 2); 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 1); 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> second_destination( 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(second_destination, 1); 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, second_destination->query_count()); 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(second_destination)); 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(second_destination); 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, second_destination->query_count()); 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(second_destination)); 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream); 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, second_destination->query_count()); 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(second_destination)); 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that a stream does not flip-flop between two destinations that are a 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// match for it. 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(AudioMirroringManagerTest, StreamDivertingStickyToOneDestination_1) { 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockDiverter* const stream = 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 2); 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 1); 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> replacement_destination( 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(replacement_destination, 1); 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, replacement_destination->query_count()); 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, replacement_destination->query_count()); 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(replacement_destination)); 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(replacement_destination); 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, replacement_destination->query_count()); 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream); 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, replacement_destination->query_count()); 3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Same as StreamDivertingStickyToOneDestination_1, with a different order of 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// operations that should have the same effects. 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(AudioMirroringManagerTest, StreamDivertingStickyToOneDestination_2) { 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockDiverter* const stream = 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 2); 3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 1); 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> replacement_destination( 3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(replacement_destination, 1); 3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, replacement_destination->query_count()); 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, replacement_destination->query_count()); 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(replacement_destination)); 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream); 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, replacement_destination->query_count()); 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(replacement_destination); 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, replacement_destination->query_count()); 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Same as StreamDivertingStickyToOneDestination_1, except that the stream is 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// killed before the first destination is stopped. Therefore, the second 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// destination should never see the stream. 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(AudioMirroringManagerTest, StreamDivertingStickyToOneDestination_3) { 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockDiverter* const stream = 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 1); 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 1); 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> replacement_destination( 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(replacement_destination, 0); 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, replacement_destination->query_count()); 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream); 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, replacement_destination->query_count()); 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, replacement_destination->query_count()); 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(replacement_destination); 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, replacement_destination->query_count()); 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(replacement_destination)); 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that multiple streams are diverted/mixed to one destination. 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AudioMirroringManagerTest, MultipleStreamsInOneMirroringSession) { 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockDiverter* const stream1 = 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 1); 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 3); 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockDiverter* const stream2 = 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 1); 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, destination->query_count()); 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, CountStreamsDivertedTo(destination)); 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockDiverter* const stream3 = 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 1); 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, destination->query_count()); 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, CountStreamsDivertedTo(destination)); 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream2); 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, destination->query_count()); 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, CountStreamsDivertedTo(destination)); 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, destination->query_count()); 4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream3); 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, destination->query_count()); 4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream1); 4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, destination->query_count()); 4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A random interleaving of operations for three separate targets, each of which 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// has one stream mirrored to one destination. 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AudioMirroringManagerTest, ThreeSeparateMirroringSessions) { 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockDiverter* const stream = 4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kRenderProcessId, kRenderFrameId, 1); 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> destination( 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kRenderProcessId, kRenderFrameId)); 4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(destination, 1); 4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> another_destination( 4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kAnotherRenderProcessId, 4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kAnotherRenderFrameId)); 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(another_destination, 1); 4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, destination->query_count()); 4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, another_destination->query_count()); 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(another_destination)); 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockDiverter* const another_stream = 4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kAnotherRenderProcessId, kAnotherRenderFrameId, 1); 4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, destination->query_count()); 4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(destination)); 4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, another_destination->query_count()); 4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(another_destination)); 4861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(stream); 4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, destination->query_count()); 4891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, another_destination->query_count()); 4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(another_destination)); 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockDiverter* const yet_another_stream = 4941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateStream(kYetAnotherRenderProcessId, kYetAnotherRenderFrameId, 1); 4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, destination->query_count()); 4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, another_destination->query_count()); 4981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(another_destination)); 4991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_ptr<MockMirroringDestination> yet_another_destination( 5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new MockMirroringDestination(kYetAnotherRenderProcessId, 5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kYetAnotherRenderFrameId)); 5031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartMirroringTo(yet_another_destination, 1); 5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, destination->query_count()); 5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, another_destination->query_count()); 5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(another_destination)); 5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, yet_another_destination->query_count()); 5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(yet_another_destination)); 5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(another_destination); 5121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(4, destination->query_count()); 5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 5141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, another_destination->query_count()); 5151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(another_destination)); 5161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, yet_another_destination->query_count()); 5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, CountStreamsDivertedTo(yet_another_destination)); 5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(yet_another_destination); 5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(5, destination->query_count()); 5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, another_destination->query_count()); 5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(another_destination)); 5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, yet_another_destination->query_count()); 5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(yet_another_destination)); 5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StopMirroringTo(destination); 5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(5, destination->query_count()); 5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, another_destination->query_count()); 5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(another_destination)); 5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, yet_another_destination->query_count()); 5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(yet_another_destination)); 5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(another_stream); 5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(5, destination->query_count()); 5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, another_destination->query_count()); 5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(another_destination)); 5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, yet_another_destination->query_count()); 5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(yet_another_destination)); 5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KillStream(yet_another_stream); 5441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(5, destination->query_count()); 5451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(destination)); 5461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, another_destination->query_count()); 5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(another_destination)); 5481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, yet_another_destination->query_count()); 5491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, CountStreamsDivertedTo(yet_another_destination)); 5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectNoLongerManagingAnything(); 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 555