Index: content/browser/media/audio_stream_monitor_unittest.cc |
diff --git a/content/browser/media/audio_stream_monitor_unittest.cc b/content/browser/media/audio_stream_monitor_unittest.cc |
index d9999bf9db3948ef6259f7559fac2974f56719ce..b90e6d7361c99f25d4ed8801b9915955d664719f 100644 |
--- a/content/browser/media/audio_stream_monitor_unittest.cc |
+++ b/content/browser/media/audio_stream_monitor_unittest.cc |
@@ -93,16 +93,37 @@ class AudioStreamMonitorTest : public RenderViewHostTestHarness { |
monitor_->off_timer_.IsRunning()); |
} |
- void ExpectWebContentsWillBeNotifiedOnce(bool should_be_audible) { |
+ void ExpectIsCurrentlyAudible() const { |
+ EXPECT_TRUE(monitor_->IsCurrentlyAudible()); |
+ } |
+ |
+ void ExpectNotCurrentlyAudible() const { |
+ EXPECT_FALSE(monitor_->IsCurrentlyAudible()); |
+ } |
+ |
+ void ExpectRecentlyAudbileChangeNotification(bool new_recently_audible) { |
DaleCurtis
2016/01/19 19:32:57
Audible
mlamouri (slow - plz ping)
2016/01/19 19:55:10
Done.
|
+ EXPECT_CALL( |
+ mock_web_contents_delegate_, |
+ NavigationStateChanged(RenderViewHostTestHarness::web_contents(), |
+ INVALIDATE_TYPE_TAB)) |
+ .WillOnce(InvokeWithoutArgs( |
+ this, |
+ new_recently_audible |
+ ? &AudioStreamMonitorTest::ExpectWasRecentlyAudible |
+ : &AudioStreamMonitorTest::ExpectNotRecentlyAudible)) |
+ .RetiresOnSaturation(); |
+ } |
+ |
+ void ExpectCurrentlyAudbileChangeNotification(bool new_audible) { |
DaleCurtis
2016/01/19 19:32:57
Audible
mlamouri (slow - plz ping)
2016/01/19 19:55:10
Done.
|
EXPECT_CALL( |
mock_web_contents_delegate_, |
NavigationStateChanged(RenderViewHostTestHarness::web_contents(), |
INVALIDATE_TYPE_TAB)) |
.WillOnce(InvokeWithoutArgs( |
this, |
- should_be_audible |
- ? &AudioStreamMonitorTest::ExpectIsNotifyingForToggleOn |
- : &AudioStreamMonitorTest::ExpectIsNotifyingForToggleOff)) |
+ new_audible |
+ ? &AudioStreamMonitorTest::ExpectIsCurrentlyAudible |
+ : &AudioStreamMonitorTest::ExpectNotCurrentlyAudible)) |
.RetiresOnSaturation(); |
} |
@@ -136,11 +157,11 @@ class AudioStreamMonitorTest : public RenderViewHostTestHarness { |
return std::make_pair(current_power_[stream_id], false); |
} |
- void ExpectIsNotifyingForToggleOn() { |
+ void ExpectWasRecentlyAudible() const { |
EXPECT_TRUE(monitor_->WasRecentlyAudible()); |
} |
- void ExpectIsNotifyingForToggleOff() { |
+ void ExpectNotRecentlyAudible() const { |
EXPECT_FALSE(monitor_->WasRecentlyAudible()); |
} |
@@ -155,14 +176,17 @@ class AudioStreamMonitorTest : public RenderViewHostTestHarness { |
// ReadPowerAndClipCallback, and is not polling at other times. |
TEST_F(AudioStreamMonitorTest, PollsWhenProvidedACallback) { |
EXPECT_FALSE(monitor_->WasRecentlyAudible()); |
+ ExpectNotCurrentlyAudible(); |
ExpectIsPolling(kRenderProcessId, kStreamId, false); |
StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId)); |
EXPECT_FALSE(monitor_->WasRecentlyAudible()); |
+ ExpectNotCurrentlyAudible(); |
ExpectIsPolling(kRenderProcessId, kStreamId, true); |
StopMonitoring(kRenderProcessId, kStreamId); |
EXPECT_FALSE(monitor_->WasRecentlyAudible()); |
+ ExpectNotCurrentlyAudible(); |
ExpectIsPolling(kRenderProcessId, kStreamId, false); |
} |
@@ -175,13 +199,16 @@ TEST_F(AudioStreamMonitorTest, |
// Expect WebContents will get one call form AudioStreamMonitor to toggle the |
// indicator on upon the very first poll. |
- ExpectWebContentsWillBeNotifiedOnce(true); |
+ ExpectRecentlyAudbileChangeNotification(true); |
// Loop, each time testing a slightly longer period of polled silence. The |
- // indicator should remain on throughout. |
- int num_silence_polls = 0; |
+ // recently audible state should not change while the currently audible one |
+ // should. |
+ int num_silence_polls = 1; |
base::TimeTicks last_blurt_time; |
do { |
+ ExpectCurrentlyAudbileChangeNotification(true); |
+ |
// Poll an audible signal, and expect tab indicator state is on. |
SetStreamPower(kStreamId, media::AudioPowerMonitor::max_power()); |
last_blurt_time = GetTestClockTime(); |
@@ -189,6 +216,8 @@ TEST_F(AudioStreamMonitorTest, |
ExpectTabWasRecentlyAudible(true, last_blurt_time); |
AdvanceClock(one_polling_interval()); |
+ ExpectCurrentlyAudbileChangeNotification(false); |
+ |
// Poll a silent signal repeatedly, ensuring that the indicator is being |
// held on during the holding period. |
SetStreamPower(kStreamId, media::AudioPowerMonitor::zero_power()); |
@@ -207,7 +236,7 @@ TEST_F(AudioStreamMonitorTest, |
// At this point, the clock has just advanced to beyond the holding period, so |
// the next firing of the off timer should turn off the tab indicator. Also, |
// make sure it stays off for several cycles thereafter. |
- ExpectWebContentsWillBeNotifiedOnce(false); |
+ ExpectRecentlyAudbileChangeNotification(false); |
for (int i = 0; i < 10; ++i) { |
SimulateOffTimerFired(); |
ExpectTabWasRecentlyAudible(false, last_blurt_time); |
@@ -224,15 +253,19 @@ TEST_F(AudioStreamMonitorTest, HandlesMultipleStreamsBlurting) { |
base::TimeTicks last_blurt_time; |
ExpectTabWasRecentlyAudible(false, last_blurt_time); |
+ ExpectNotCurrentlyAudible(); |
// Measure audible sound from the first stream and silence from the second. |
- // The indicator turns on (i.e., tab was recently audible). |
- ExpectWebContentsWillBeNotifiedOnce(true); |
+ // The tab becomes audible. |
+ ExpectRecentlyAudbileChangeNotification(true); |
+ ExpectCurrentlyAudbileChangeNotification(true); |
+ |
SetStreamPower(kStreamId, media::AudioPowerMonitor::max_power()); |
SetStreamPower(kAnotherStreamId, media::AudioPowerMonitor::zero_power()); |
last_blurt_time = GetTestClockTime(); |
SimulatePollTimerFired(); |
ExpectTabWasRecentlyAudible(true, last_blurt_time); |
+ ExpectIsCurrentlyAudible(); |
// Halfway through the holding period, the second stream joins in. The |
// indicator stays on. |
@@ -242,39 +275,52 @@ TEST_F(AudioStreamMonitorTest, HandlesMultipleStreamsBlurting) { |
last_blurt_time = GetTestClockTime(); |
SimulatePollTimerFired(); // Restarts holding period. |
ExpectTabWasRecentlyAudible(true, last_blurt_time); |
+ ExpectIsCurrentlyAudible(); |
// Now, measure silence from both streams. After an entire holding period |
- // has passed (since the second stream joined in), the indicator should turn |
- // off. |
- ExpectWebContentsWillBeNotifiedOnce(false); |
+ // has passed (since the second stream joined in), the tab will no longer |
+ // become audible nor recently audible. |
+ ExpectCurrentlyAudbileChangeNotification(false); |
+ ExpectRecentlyAudbileChangeNotification(false); |
+ |
AdvanceClock(holding_period()); |
SimulateOffTimerFired(); |
SetStreamPower(kStreamId, media::AudioPowerMonitor::zero_power()); |
SetStreamPower(kAnotherStreamId, media::AudioPowerMonitor::zero_power()); |
SimulatePollTimerFired(); |
ExpectTabWasRecentlyAudible(false, last_blurt_time); |
+ ExpectNotCurrentlyAudible(); |
// Now, measure silence from the first stream and audible sound from the |
- // second. The indicator turns back on. |
- ExpectWebContentsWillBeNotifiedOnce(true); |
+ // second. The tab becomes audible again. |
+ ExpectRecentlyAudbileChangeNotification(true); |
+ ExpectCurrentlyAudbileChangeNotification(true); |
+ |
SetStreamPower(kAnotherStreamId, media::AudioPowerMonitor::max_power()); |
last_blurt_time = GetTestClockTime(); |
SimulatePollTimerFired(); |
ExpectTabWasRecentlyAudible(true, last_blurt_time); |
+ ExpectIsCurrentlyAudible(); |
// From here onwards, both streams are silent. Halfway through the holding |
- // period, the indicator should not have changed. |
+ // period, the tab is no longer audible but stays as recently audible. |
+ ExpectCurrentlyAudbileChangeNotification(false); |
+ |
SetStreamPower(kAnotherStreamId, media::AudioPowerMonitor::zero_power()); |
AdvanceClock(holding_period() / 2); |
SimulatePollTimerFired(); |
SimulateOffTimerFired(); |
ExpectTabWasRecentlyAudible(true, last_blurt_time); |
+ ExpectNotCurrentlyAudible(); |
+ |
+ // Just past the holding period, the tab is no longer marked as recently |
+ // audible. |
+ ExpectRecentlyAudbileChangeNotification(false); |
- // Just past the holding period, the indicator should be turned off. |
- ExpectWebContentsWillBeNotifiedOnce(false); |
AdvanceClock(holding_period() - (GetTestClockTime() - last_blurt_time)); |
SimulateOffTimerFired(); |
ExpectTabWasRecentlyAudible(false, last_blurt_time); |
+ ExpectNotCurrentlyAudible(); |
// Polling should not turn the indicator back while both streams are remaining |
// silent. |
@@ -282,6 +328,7 @@ TEST_F(AudioStreamMonitorTest, HandlesMultipleStreamsBlurting) { |
AdvanceClock(one_polling_interval()); |
SimulatePollTimerFired(); |
ExpectTabWasRecentlyAudible(false, last_blurt_time); |
+ ExpectNotCurrentlyAudible(); |
} |
} |