| Index: chrome/browser/media/audio_stream_monitor_unittest.cc
|
| diff --git a/content/browser/media/audio_stream_monitor_unittest.cc b/chrome/browser/media/audio_stream_monitor_unittest.cc
|
| similarity index 68%
|
| rename from content/browser/media/audio_stream_monitor_unittest.cc
|
| rename to chrome/browser/media/audio_stream_monitor_unittest.cc
|
| index b8871af65636e896ebe4b84eba3787ca67961b6a..58c4adbbcef579bc7c6b09736bcc1abc0d189697 100644
|
| --- a/content/browser/media/audio_stream_monitor_unittest.cc
|
| +++ b/chrome/browser/media/audio_stream_monitor_unittest.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "content/browser/media/audio_stream_monitor.h"
|
| +#include "chrome/browser/media/audio_stream_monitor.h"
|
|
|
| #include <map>
|
| #include <utility>
|
| @@ -11,49 +11,52 @@
|
| #include "base/bind_helpers.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/test/simple_test_tick_clock.h"
|
| -#include "content/browser/web_contents/web_contents_impl.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| #include "content/public/browser/invalidate_type.h"
|
| +#include "content/public/browser/web_contents.h"
|
| #include "content/public/browser/web_contents_delegate.h"
|
| -#include "content/public/test/test_renderer_host.h"
|
| +#include "content/public/test/test_browser_thread_bundle.h"
|
| #include "media/audio/audio_power_monitor.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| using ::testing::InvokeWithoutArgs;
|
|
|
| -namespace content {
|
| -
|
| namespace {
|
|
|
| -const int kRenderProcessId = 1;
|
| -const int kAnotherRenderProcessId = 2;
|
| const int kStreamId = 3;
|
| const int kAnotherStreamId = 6;
|
|
|
| // Used to confirm audio indicator state changes occur at the correct times.
|
| -class MockWebContentsDelegate : public WebContentsDelegate {
|
| +class MockWebContentsDelegate : public content::WebContentsDelegate {
|
| public:
|
| MOCK_METHOD2(NavigationStateChanged,
|
| - void(const WebContents* source, InvalidateTypes changed_flags));
|
| + void(const content::WebContents* source,
|
| + content::InvalidateTypes changed_flags));
|
| };
|
|
|
| } // namespace
|
|
|
| -class AudioStreamMonitorTest : public RenderViewHostTestHarness {
|
| +class AudioStreamMonitorTest : public testing::Test {
|
| public:
|
| AudioStreamMonitorTest() {
|
| // Start |clock_| at non-zero.
|
| clock_.Advance(base::TimeDelta::FromSeconds(1000000));
|
| - }
|
|
|
| - virtual void SetUp() OVERRIDE {
|
| - RenderViewHostTestHarness::SetUp();
|
| + // Create a WebContents instance and set it to use our mock delegate.
|
| + web_contents_.reset(content::WebContents::Create(
|
| + content::WebContents::CreateParams(&profile_, NULL)));
|
| + web_contents_->SetDelegate(&mock_web_contents_delegate_);
|
| +
|
| + // Create an AudioStreamMonitor instance whose lifecycle is tied to that of
|
| + // |web_contents_|, and override its clock with the test clock.
|
| + AudioStreamMonitor::CreateForWebContents(web_contents_.get());
|
| + CHECK(audio_stream_monitor());
|
| + const_cast<base::TickClock*&>(audio_stream_monitor()->clock_) = &clock_;
|
| + }
|
|
|
| - WebContentsImpl* web_contents = reinterpret_cast<WebContentsImpl*>(
|
| - RenderViewHostTestHarness::web_contents());
|
| - web_contents->SetDelegate(&mock_web_contents_delegate_);
|
| - monitor_ = web_contents->audio_stream_monitor();
|
| - const_cast<base::TickClock*&>(monitor_->clock_) = &clock_;
|
| + AudioStreamMonitor* audio_stream_monitor() {
|
| + return AudioStreamMonitor::FromWebContents(web_contents_.get());
|
| }
|
|
|
| base::TimeTicks GetTestClockTime() { return clock_.NowTicks(); }
|
| @@ -70,32 +73,31 @@ class AudioStreamMonitorTest : public RenderViewHostTestHarness {
|
| current_power_[stream_id] = power;
|
| }
|
|
|
| - void SimulatePollTimerFired() { monitor_->Poll(); }
|
| + void SimulatePollTimerFired() { audio_stream_monitor()->Poll(); }
|
|
|
| - void SimulateOffTimerFired() { monitor_->MaybeToggle(); }
|
| + void SimulateOffTimerFired() { audio_stream_monitor()->MaybeToggle(); }
|
|
|
| - void ExpectIsPolling(int render_process_id, int stream_id, bool is_polling) {
|
| - const AudioStreamMonitor::StreamID key(render_process_id, stream_id);
|
| - EXPECT_EQ(
|
| - is_polling,
|
| - monitor_->poll_callbacks_.find(key) != monitor_->poll_callbacks_.end());
|
| - EXPECT_EQ(!monitor_->poll_callbacks_.empty(),
|
| - monitor_->poll_timer_.IsRunning());
|
| + void ExpectIsPolling(int stream_id, bool is_polling) {
|
| + AudioStreamMonitor* const monitor = audio_stream_monitor();
|
| + EXPECT_EQ(is_polling,
|
| + monitor->poll_callbacks_.find(stream_id) !=
|
| + monitor->poll_callbacks_.end());
|
| + EXPECT_EQ(!monitor->poll_callbacks_.empty(),
|
| + monitor->poll_timer_.IsRunning());
|
| }
|
|
|
| void ExpectTabWasRecentlyAudible(bool was_audible,
|
| const base::TimeTicks& last_blurt_time) {
|
| - EXPECT_EQ(was_audible, monitor_->was_recently_audible_);
|
| - EXPECT_EQ(last_blurt_time, monitor_->last_blurt_time_);
|
| - EXPECT_EQ(monitor_->was_recently_audible_,
|
| - monitor_->off_timer_.IsRunning());
|
| + AudioStreamMonitor* const monitor = audio_stream_monitor();
|
| + EXPECT_EQ(was_audible, monitor->was_recently_audible_);
|
| + EXPECT_EQ(last_blurt_time, monitor->last_blurt_time_);
|
| + EXPECT_EQ(monitor->was_recently_audible_, monitor->off_timer_.IsRunning());
|
| }
|
|
|
| void ExpectWebContentsWillBeNotifiedOnce(bool should_be_audible) {
|
| - EXPECT_CALL(
|
| - mock_web_contents_delegate_,
|
| - NavigationStateChanged(RenderViewHostTestHarness::web_contents(),
|
| - INVALIDATE_TYPE_TAB))
|
| + EXPECT_CALL(mock_web_contents_delegate_,
|
| + NavigationStateChanged(web_contents_.get(),
|
| + content::INVALIDATE_TYPE_TAB))
|
| .WillOnce(InvokeWithoutArgs(
|
| this,
|
| should_be_audible
|
| @@ -114,37 +116,25 @@ class AudioStreamMonitorTest : public RenderViewHostTestHarness {
|
| AudioStreamMonitor::kHoldOnMilliseconds);
|
| }
|
|
|
| - void StartMonitoring(
|
| - int render_process_id,
|
| - int stream_id,
|
| - const AudioStreamMonitor::ReadPowerAndClipCallback& callback) {
|
| - monitor_->StartMonitoringStreamOnUIThread(
|
| - render_process_id, stream_id, callback);
|
| - }
|
| -
|
| - void StopMonitoring(int render_process_id, int stream_id) {
|
| - monitor_->StopMonitoringStreamOnUIThread(render_process_id, stream_id);
|
| - }
|
| -
|
| - protected:
|
| - AudioStreamMonitor* monitor_;
|
| -
|
| private:
|
| std::pair<float, bool> ReadPower(int stream_id) {
|
| return std::make_pair(current_power_[stream_id], false);
|
| }
|
|
|
| void ExpectIsNotifyingForToggleOn() {
|
| - EXPECT_TRUE(monitor_->WasRecentlyAudible());
|
| + EXPECT_TRUE(audio_stream_monitor()->WasRecentlyAudible());
|
| }
|
|
|
| void ExpectIsNotifyingForToggleOff() {
|
| - EXPECT_FALSE(monitor_->WasRecentlyAudible());
|
| + EXPECT_FALSE(audio_stream_monitor()->WasRecentlyAudible());
|
| }
|
|
|
| + content::TestBrowserThreadBundle browser_thread_bundle_;
|
| + TestingProfile profile_;
|
| MockWebContentsDelegate mock_web_contents_delegate_;
|
| base::SimpleTestTickClock clock_;
|
| std::map<int, float> current_power_;
|
| + scoped_ptr<content::WebContents> web_contents_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AudioStreamMonitorTest);
|
| };
|
| @@ -152,16 +142,17 @@ class AudioStreamMonitorTest : public RenderViewHostTestHarness {
|
| // Tests that AudioStreamMonitor is polling while it has a
|
| // ReadPowerAndClipCallback, and is not polling at other times.
|
| TEST_F(AudioStreamMonitorTest, PollsWhenProvidedACallback) {
|
| - EXPECT_FALSE(monitor_->WasRecentlyAudible());
|
| - ExpectIsPolling(kRenderProcessId, kStreamId, false);
|
| + EXPECT_FALSE(audio_stream_monitor()->WasRecentlyAudible());
|
| + ExpectIsPolling(kStreamId, false);
|
|
|
| - StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId));
|
| - EXPECT_FALSE(monitor_->WasRecentlyAudible());
|
| - ExpectIsPolling(kRenderProcessId, kStreamId, true);
|
| + audio_stream_monitor()->StartMonitoringStream(kStreamId,
|
| + CreatePollCallback(kStreamId));
|
| + EXPECT_FALSE(audio_stream_monitor()->WasRecentlyAudible());
|
| + ExpectIsPolling(kStreamId, true);
|
|
|
| - StopMonitoring(kRenderProcessId, kStreamId);
|
| - EXPECT_FALSE(monitor_->WasRecentlyAudible());
|
| - ExpectIsPolling(kRenderProcessId, kStreamId, false);
|
| + audio_stream_monitor()->StopMonitoringStream(kStreamId);
|
| + EXPECT_FALSE(audio_stream_monitor()->WasRecentlyAudible());
|
| + ExpectIsPolling(kStreamId, false);
|
| }
|
|
|
| // Tests that AudioStreamMonitor debounces the power level readings it's taking,
|
| @@ -169,7 +160,8 @@ TEST_F(AudioStreamMonitorTest, PollsWhenProvidedACallback) {
|
| // threshold. See comments in audio_stream_monitor.h for expected behavior.
|
| TEST_F(AudioStreamMonitorTest,
|
| ImpulsesKeepIndicatorOnUntilHoldingPeriodHasPassed) {
|
| - StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId));
|
| + audio_stream_monitor()->StartMonitoringStream(kStreamId,
|
| + CreatePollCallback(kStreamId));
|
|
|
| // Expect WebContents will get one call form AudioStreamMonitor to toggle the
|
| // indicator on upon the very first poll.
|
| @@ -216,9 +208,11 @@ TEST_F(AudioStreamMonitorTest,
|
| // Tests that the AudioStreamMonitor correctly processes the blurts from two
|
| // different streams in the same tab.
|
| TEST_F(AudioStreamMonitorTest, HandlesMultipleStreamsBlurting) {
|
| - StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId));
|
| - StartMonitoring(
|
| - kRenderProcessId, kAnotherStreamId, CreatePollCallback(kAnotherStreamId));
|
| + audio_stream_monitor()->StartMonitoringStream(kStreamId,
|
| + CreatePollCallback(kStreamId));
|
| + audio_stream_monitor()->StartMonitoringStream(
|
| + kAnotherStreamId,
|
| + CreatePollCallback(kAnotherStreamId));
|
|
|
| base::TimeTicks last_blurt_time;
|
| ExpectTabWasRecentlyAudible(false, last_blurt_time);
|
| @@ -282,16 +276,3 @@ TEST_F(AudioStreamMonitorTest, HandlesMultipleStreamsBlurting) {
|
| ExpectTabWasRecentlyAudible(false, last_blurt_time);
|
| }
|
| }
|
| -
|
| -TEST_F(AudioStreamMonitorTest, MultipleRendererProcesses) {
|
| - StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId));
|
| - StartMonitoring(
|
| - kAnotherRenderProcessId, kStreamId, CreatePollCallback(kStreamId));
|
| - ExpectIsPolling(kRenderProcessId, kStreamId, true);
|
| - ExpectIsPolling(kAnotherRenderProcessId, kStreamId, true);
|
| - StopMonitoring(kAnotherRenderProcessId, kStreamId);
|
| - ExpectIsPolling(kRenderProcessId, kStreamId, true);
|
| - ExpectIsPolling(kAnotherRenderProcessId, kStreamId, false);
|
| -}
|
| -
|
| -} // namespace content
|
|
|