Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(610)

Unified Diff: media/audio/audio_output_device_unittest.cc

Issue 2043883005: Implementing AudioOutputDevice authorization timeout (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Dale's comments addressed: code simplified, comments fixed. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/audio_output_device.cc ('k') | media/base/output_device_info.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_output_device_unittest.cc
diff --git a/media/audio/audio_output_device_unittest.cc b/media/audio/audio_output_device_unittest.cc
index 4ce521f64137eefecb4b1fa583b9a6f7b162b36e..3fe5b01d58e217fd0a36edc105d58593047f3157 100644
--- a/media/audio/audio_output_device_unittest.cc
+++ b/media/audio/audio_output_device_unittest.cc
@@ -17,9 +17,11 @@
#include "base/sync_socket.h"
#include "base/task_runner.h"
#include "base/test/test_timeouts.h"
+#include "base/threading/thread.h"
#include "base/threading/thread_task_runner_handle.h"
#include "media/audio/audio_output_device.h"
#include "media/audio/sample_rates.h"
+#include "media/base/test_helpers.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gmock_mutant.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -42,6 +44,7 @@ namespace {
const char kDefaultDeviceId[] = "";
const char kNonDefaultDeviceId[] = "valid-nondefault-device-id";
const char kUnauthorizedDeviceId[] = "unauthorized-device-id";
+const int kAuthTimeoutForTestingMs = 500;
class MockRenderCallback : public AudioRendererSink::RenderCallback {
public:
@@ -99,7 +102,9 @@ class AudioOutputDeviceTest
void ExpectRenderCallback();
void WaitUntilRenderCallback();
void StopAudioDevice();
+ void CreateDevice(const std::string& device_id);
void SetDevice(const std::string& device_id);
+ void CheckDeviceStatus(OutputDeviceStatus device_status);
protected:
// Used to clean up TLS pointers that the test(s) will initialize.
@@ -139,11 +144,16 @@ AudioOutputDeviceTest::~AudioOutputDeviceTest() {
audio_device_ = NULL;
}
-void AudioOutputDeviceTest::SetDevice(const std::string& device_id) {
+void AudioOutputDeviceTest::CreateDevice(const std::string& device_id) {
audio_output_ipc_ = new MockAudioOutputIPC();
- audio_device_ = new AudioOutputDevice(base::WrapUnique(audio_output_ipc_),
- io_loop_.task_runner(), 0, device_id,
- url::Origin());
+ audio_device_ = new AudioOutputDevice(
+ base::WrapUnique(audio_output_ipc_), io_loop_.task_runner(), 0, device_id,
+ url::Origin(),
+ base::TimeDelta::FromMilliseconds(kAuthTimeoutForTestingMs));
+}
+
+void AudioOutputDeviceTest::SetDevice(const std::string& device_id) {
+ CreateDevice(device_id);
EXPECT_CALL(*audio_output_ipc_,
RequestDeviceAuthorization(audio_device_.get(), 0, device_id, _));
audio_device_->RequestDeviceAuthorization();
@@ -160,6 +170,11 @@ void AudioOutputDeviceTest::SetDevice(const std::string& device_id) {
&callback_);
}
+void AudioOutputDeviceTest::CheckDeviceStatus(OutputDeviceStatus status) {
+ DCHECK(!io_loop_.task_runner()->BelongsToCurrentThread());
+ EXPECT_EQ(status, audio_device_->GetOutputDeviceInfo().device_status());
+}
+
void AudioOutputDeviceTest::ReceiveAuthorization(OutputDeviceStatus status) {
device_status_ = status;
if (device_status_ != OUTPUT_DEVICE_STATUS_OK)
@@ -318,6 +333,37 @@ TEST_P(AudioOutputDeviceTest, UnauthorizedDevice) {
StopAudioDevice();
}
+TEST_P(AudioOutputDeviceTest, AuthorizationTimedOut) {
+ base::Thread thread("DeviceInfo");
+ thread.Start();
+
+ CreateDevice(kNonDefaultDeviceId);
+ EXPECT_CALL(*audio_output_ipc_,
+ RequestDeviceAuthorization(audio_device_.get(), 0,
+ kNonDefaultDeviceId, _));
+ EXPECT_CALL(*audio_output_ipc_, CloseStream());
+
+ // Request authorization; no reply from the browser.
+ audio_device_->RequestDeviceAuthorization();
+
+ media::WaitableMessageLoopEvent event;
+
+ // Request device info on another thread.
+ thread.task_runner()->PostTaskAndReply(
+ FROM_HERE,
+ base::Bind(&AudioOutputDeviceTest::CheckDeviceStatus,
+ base::Unretained(this), OUTPUT_DEVICE_STATUS_ERROR_TIMED_OUT),
+ event.GetClosure());
+
+ io_loop_.RunUntilIdle();
+
+ // Runs the loop and waits for |thread| to call event's closure.
+ event.RunAndWait();
+
+ audio_device_->Stop();
+ io_loop_.RunUntilIdle();
+}
+
INSTANTIATE_TEST_CASE_P(Render, AudioOutputDeviceTest, Values(false));
} // namespace media.
« no previous file with comments | « media/audio/audio_output_device.cc ('k') | media/base/output_device_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698