blob: 62f2bea442b101cbea962adc74687d0902c4b531 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_RENDERER_MEDIA_MOCK_AUDIO_DEVICE_FACTORY_H_
#define CONTENT_RENDERER_MEDIA_MOCK_AUDIO_DEVICE_FACTORY_H_
#include "content/renderer/media/audio_device_factory.h"
#include "media/base/audio_capturer_source.h"
#include "media/base/audio_renderer_sink.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace content {
// MockAudioDeviceFactory creates an instance of this.
class MockCapturerSource : public media::AudioCapturerSource {
public:
MockCapturerSource();
MOCK_METHOD3(Initialize, void(const media::AudioParameters& params,
CaptureCallback* callback,
int session_id));
MOCK_METHOD0(Start, void());
MOCK_METHOD0(Stop, void());
MOCK_METHOD1(SetAutomaticGainControl, void(bool enable));
void SetVolume(double volume) override;
protected:
~MockCapturerSource() override;
};
// Creates one MockCapturerSource instance for unit testing. This replaces the
// need for unit tests to open a real platform audio output. Instantiating this
// class sets the global content::AudioDeviceFactory implementation to |this|.
class MockAudioDeviceFactory : public AudioDeviceFactory {
public:
MockAudioDeviceFactory();
~MockAudioDeviceFactory() override;
// Returns the MockCapturerSource created by this factory.
const scoped_refptr<MockCapturerSource>& mock_capturer_source() const {
return mock_capturer_source_;
}
// These methods are just mocked because tests currently don't need them to be
// implemented.
MOCK_METHOD4(CreateFinalAudioRendererSink,
scoped_refptr<media::AudioRendererSink>(
int render_frame_id,
int sesssion_id,
const std::string& device_id,
const url::Origin& security_origin));
MOCK_METHOD5(CreateAudioRendererSink,
scoped_refptr<media::AudioRendererSink>(
SourceType source_type,
int render_frame_id,
int sesssion_id,
const std::string& device_id,
const url::Origin& security_origin));
MOCK_METHOD5(CreateSwitchableAudioRendererSink,
scoped_refptr<media::SwitchableAudioRendererSink>(
SourceType source_type,
int render_frame_id,
int sesssion_id,
const std::string& device_id,
const url::Origin& security_origin));
// Returns mock_capturer_source_ once. If called a second time, the process
// will crash.
scoped_refptr<media::AudioCapturerSource> CreateAudioCapturerSource(
int render_frame_id) override;
private:
scoped_refptr<MockCapturerSource> mock_capturer_source_;
bool did_create_once_;
DISALLOW_COPY_AND_ASSIGN(MockAudioDeviceFactory);
};
} // namespace content
#endif // CONTENT_RENDERER_MEDIA_AUDIO_DEVICE_FACTORY_H_