blob: d35130d120fa6a22d662a8a94d6191fe2c83260b [file] [log] [blame]
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +00001// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "media/midi/midi_manager.h"
6
avi793390d2015-12-22 22:22:36 -08007#include <stddef.h>
8#include <stdint.h>
9
danakj75afea02016-04-25 20:36:04 -070010#include <memory>
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +000011#include <vector>
12
toyoshimc9f52132014-10-15 05:50:07 -070013#include "base/bind.h"
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000014#include "base/logging.h"
avi793390d2015-12-22 22:22:36 -080015#include "base/macros.h"
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090016#include "base/memory/weak_ptr.h"
toyoshimc9f52132014-10-15 05:50:07 -070017#include "base/message_loop/message_loop.h"
toyoshim@chromium.orgc1e05fb2014-05-06 16:39:20 +000018#include "base/run_loop.h"
Sebastien Marchand21848772018-10-05 15:29:27 +000019#include "base/system/system_monitor.h"
avi793390d2015-12-22 22:22:36 -080020#include "build/build_config.h"
toyoshimf4d61522017-02-10 02:03:32 -080021#include "media/midi/midi_service.h"
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000022#include "testing/gtest/include/gtest/gtest.h"
23
toyoshime147c5e2015-05-07 21:58:31 -070024namespace midi {
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000025
26namespace {
27
toyoshimec2570a2016-10-21 02:15:27 -070028using mojom::PortState;
toyoshim2f3a48f2016-10-17 01:54:13 -070029using mojom::Result;
30
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000031class FakeMidiManager : public MidiManager {
32 public:
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +000033 explicit FakeMidiManager(MidiService* service)
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090034 : MidiManager(service), weak_factory_(this) {}
35
Takashi Toyoshimae8240ab2018-10-03 09:30:11 +000036 ~FakeMidiManager() override = default;
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090037
38 base::WeakPtr<FakeMidiManager> GetWeakPtr() {
39 return weak_factory_.GetWeakPtr();
40 }
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000041
42 // MidiManager implementation.
dcheng63ccbc32014-10-21 05:23:27 -070043 void StartInitialization() override {
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090044 DCHECK(!initialized_);
45 initialized_ = true;
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000046 }
dcheng63ccbc32014-10-21 05:23:27 -070047 void DispatchSendMidiData(MidiManagerClient* client,
Avi Drissman3528fd02015-12-18 20:11:31 -050048 uint32_t port_index,
49 const std::vector<uint8_t>& data,
tzik925e2c62018-02-02 07:39:45 +000050 base::TimeTicks timestamp) override {}
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000051
52 // Utility functions for testing.
toyoshimf1b88962015-07-09 14:14:51 -070053 void CallCompleteInitialization(Result result) {
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000054 CompleteInitialization(result);
55 }
56
Takashi Toyoshimad4f37cd2018-10-01 07:43:39 +000057 size_t GetClientCount() { return GetClientCountForTesting(); }
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000058
Takashi Toyoshimad4f37cd2018-10-01 07:43:39 +000059 size_t GetPendingClientCount() { return GetPendingClientCountForTesting(); }
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000060
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090061 bool IsInitialized() const { return initialized_; }
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000062
63 private:
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090064 bool initialized_ = false;
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090065
66 base::WeakPtrFactory<FakeMidiManager> weak_factory_;
67
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +000068 DISALLOW_COPY_AND_ASSIGN(FakeMidiManager);
69};
70
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +000071class FakeMidiManagerFactory : public MidiService::ManagerFactory {
72 public:
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090073 FakeMidiManagerFactory() : weak_factory_(this) {}
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +000074 ~FakeMidiManagerFactory() override = default;
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090075
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +000076 std::unique_ptr<MidiManager> Create(MidiService* service) override {
77 std::unique_ptr<FakeMidiManager> manager =
78 std::make_unique<FakeMidiManager>(service);
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090079 manager_ = manager->GetWeakPtr();
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +000080 return manager;
81 }
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +090082
83 base::WeakPtr<FakeMidiManagerFactory> GetWeakPtr() {
84 return weak_factory_.GetWeakPtr();
85 }
86
87 base::WeakPtr<FakeMidiManager> manager() {
88#if defined(OS_MACOSX)
89 // To avoid Core MIDI issues, MidiManager won't be destructed on macOS.
90 // See https://crbug.com/718140.
91 if (!manager_ ||
92 (!manager_->GetClientCount() && !manager_->GetPendingClientCount())) {
93 return nullptr;
94 }
95#endif
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +000096 return manager_;
97 }
98
99 private:
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900100 base::WeakPtr<FakeMidiManager> manager_ = nullptr;
101 base::WeakPtrFactory<FakeMidiManagerFactory> weak_factory_;
102
103 DISALLOW_COPY_AND_ASSIGN(FakeMidiManagerFactory);
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +0000104};
105
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000106class FakeMidiManagerClient : public MidiManagerClient {
107 public:
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900108 FakeMidiManagerClient() = default;
Chris Watkinsc6cbcf62017-12-01 03:08:01 +0000109 ~FakeMidiManagerClient() override = default;
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000110
111 // MidiManagerClient implementation.
toyoshima62d6742014-10-23 09:05:03 -0700112 void AddInputPort(const MidiPortInfo& info) override {}
113 void AddOutputPort(const MidiPortInfo& info) override {}
toyoshimec2570a2016-10-21 02:15:27 -0700114 void SetInputPortState(uint32_t port_index, PortState state) override {}
115 void SetOutputPortState(uint32_t port_index, PortState state) override {}
toyoshimf1b88962015-07-09 14:14:51 -0700116 void CompleteStartSession(Result result) override {
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000117 EXPECT_TRUE(wait_for_result_);
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000118 result_ = result;
toyoshim@chromium.orgc1e05fb2014-05-06 16:39:20 +0000119 wait_for_result_ = false;
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000120 }
Avi Drissman3528fd02015-12-18 20:11:31 -0500121 void ReceiveMidiData(uint32_t port_index,
122 const uint8_t* data,
dcheng63ccbc32014-10-21 05:23:27 -0700123 size_t size,
tzik925e2c62018-02-02 07:39:45 +0000124 base::TimeTicks timestamp) override {}
dcheng63ccbc32014-10-21 05:23:27 -0700125 void AccumulateMidiBytesSent(size_t size) override {}
toyoshim7a809662015-10-06 00:54:21 -0700126 void Detach() override {}
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000127
toyoshimf1b88962015-07-09 14:14:51 -0700128 Result result() const { return result_; }
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000129
toyoshimf1b88962015-07-09 14:14:51 -0700130 Result WaitForResult() {
toyoshim11f7d572014-10-20 02:37:10 -0700131 while (wait_for_result_) {
132 base::RunLoop run_loop;
133 run_loop.RunUntilIdle();
134 }
toyoshim@chromium.orga25e6832014-05-07 18:06:25 +0000135 return result();
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000136 }
137
138 private:
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900139 Result result_ = Result::NOT_SUPPORTED;
140 bool wait_for_result_ = true;
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000141
142 DISALLOW_COPY_AND_ASSIGN(FakeMidiManagerClient);
143};
144
145class MidiManagerTest : public ::testing::Test {
146 public:
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +0000147 MidiManagerTest() : message_loop_(std::make_unique<base::MessageLoop>()) {
148 std::unique_ptr<FakeMidiManagerFactory> factory =
149 std::make_unique<FakeMidiManagerFactory>();
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900150 factory_ = factory->GetWeakPtr();
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +0000151 service_ = std::make_unique<MidiService>(std::move(factory));
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +0000152 }
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900153
toyoshim7a809662015-10-06 00:54:21 -0700154 ~MidiManagerTest() override {
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900155 service_->Shutdown();
toyoshim7a809662015-10-06 00:54:21 -0700156 base::RunLoop run_loop;
157 run_loop.RunUntilIdle();
toyoshim7a809662015-10-06 00:54:21 -0700158 }
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000159
160 protected:
toyoshim@chromium.orgc1e05fb2014-05-06 16:39:20 +0000161 void StartTheFirstSession(FakeMidiManagerClient* client) {
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900162 DCHECK(factory_);
163
164 EXPECT_FALSE(factory_->manager());
165 service_->StartSession(client);
166 ASSERT_TRUE(factory_->manager());
167 EXPECT_TRUE(factory_->manager()->IsInitialized());
168 EXPECT_EQ(0U, factory_->manager()->GetClientCount());
169 EXPECT_EQ(1U, factory_->manager()->GetPendingClientCount());
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000170 }
171
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000172 void StartTheNthSession(FakeMidiManagerClient* client, size_t nth) {
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900173 DCHECK(factory_);
174 DCHECK_NE(1U, nth);
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000175
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900176 ASSERT_TRUE(factory_->manager());
177 EXPECT_TRUE(factory_->manager()->IsInitialized());
178 EXPECT_EQ(0U, factory_->manager()->GetClientCount());
179 EXPECT_EQ(nth - 1U, factory_->manager()->GetPendingClientCount());
180 service_->StartSession(client);
181 EXPECT_EQ(nth, factory_->manager()->GetPendingClientCount());
182 }
183
184 void StartSession(FakeMidiManagerClient* client) {
185 service_->StartSession(client);
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000186 }
187
188 void EndSession(FakeMidiManagerClient* client, size_t before, size_t after) {
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900189 DCHECK(factory_);
190
191 ASSERT_TRUE(factory_->manager());
192 EXPECT_EQ(before, factory_->manager()->GetClientCount());
193 EXPECT_TRUE(service_->EndSession(client));
194 if (after) {
195 ASSERT_TRUE(factory_->manager());
196 EXPECT_EQ(after, factory_->manager()->GetClientCount());
197 } else {
198 EXPECT_FALSE(factory_->manager());
199 }
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000200 }
201
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900202 bool CompleteInitialization(Result result) {
203 DCHECK(factory_);
204
205 if (!factory_->manager())
206 return false;
207
208 factory_->manager()->CallCompleteInitialization(result);
209 return true;
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000210 }
211
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000212 void RunLoopUntilIdle() {
213 base::RunLoop run_loop;
214 run_loop.RunUntilIdle();
215 }
216
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900217 base::WeakPtr<FakeMidiManagerFactory> factory() { return factory_; }
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000218
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000219 private:
danakj75afea02016-04-25 20:36:04 -0700220 std::unique_ptr<base::MessageLoop> message_loop_;
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900221 base::WeakPtr<FakeMidiManagerFactory> factory_;
222 std::unique_ptr<MidiService> service_;
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000223
224 DISALLOW_COPY_AND_ASSIGN(MidiManagerTest);
225};
226
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000227TEST_F(MidiManagerTest, StartAndEndSession) {
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900228 std::unique_ptr<FakeMidiManagerClient> client =
229 std::make_unique<FakeMidiManagerClient>();
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000230
toyoshim@chromium.orgc1e05fb2014-05-06 16:39:20 +0000231 StartTheFirstSession(client.get());
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900232 EXPECT_TRUE(CompleteInitialization(Result::OK));
toyoshimf1b88962015-07-09 14:14:51 -0700233 EXPECT_EQ(Result::OK, client->WaitForResult());
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000234 EndSession(client.get(), 1U, 0U);
235}
236
237TEST_F(MidiManagerTest, StartAndEndSessionWithError) {
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900238 std::unique_ptr<FakeMidiManagerClient> client =
239 std::make_unique<FakeMidiManagerClient>();
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000240
toyoshim@chromium.orgc1e05fb2014-05-06 16:39:20 +0000241 StartTheFirstSession(client.get());
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900242 EXPECT_TRUE(CompleteInitialization(Result::INITIALIZATION_ERROR));
toyoshimf1b88962015-07-09 14:14:51 -0700243 EXPECT_EQ(Result::INITIALIZATION_ERROR, client->WaitForResult());
Takashi Toyoshimaec05edf2017-11-28 11:21:20 +0000244 EndSession(client.get(), 1U, 0U);
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000245}
246
247TEST_F(MidiManagerTest, StartMultipleSessions) {
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900248 std::unique_ptr<FakeMidiManagerClient> client1 =
249 std::make_unique<FakeMidiManagerClient>();
250 std::unique_ptr<FakeMidiManagerClient> client2 =
251 std::make_unique<FakeMidiManagerClient>();
252 std::unique_ptr<FakeMidiManagerClient> client3 =
253 std::make_unique<FakeMidiManagerClient>();
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000254
toyoshim@chromium.orgc1e05fb2014-05-06 16:39:20 +0000255 StartTheFirstSession(client1.get());
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000256 StartTheNthSession(client2.get(), 2);
toyoshim@chromium.org1fa678a2014-06-13 09:40:33 +0000257 StartTheNthSession(client3.get(), 3);
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900258 EXPECT_TRUE(CompleteInitialization(Result::OK));
toyoshimf1b88962015-07-09 14:14:51 -0700259 EXPECT_EQ(Result::OK, client1->WaitForResult());
260 EXPECT_EQ(Result::OK, client2->WaitForResult());
261 EXPECT_EQ(Result::OK, client3->WaitForResult());
toyoshim@chromium.org1fa678a2014-06-13 09:40:33 +0000262 EndSession(client1.get(), 3U, 2U);
263 EndSession(client2.get(), 2U, 1U);
264 EndSession(client3.get(), 1U, 0U);
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000265}
266
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000267TEST_F(MidiManagerTest, TooManyPendingSessions) {
268 // Push as many client requests for starting session as possible.
xiaofeng.zhang06152d82017-05-21 04:39:34 -0700269 std::vector<std::unique_ptr<FakeMidiManagerClient>> many_existing_clients;
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000270 many_existing_clients.resize(MidiManager::kMaxPendingClientCount);
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900271 many_existing_clients[0] = std::make_unique<FakeMidiManagerClient>();
272 StartTheFirstSession(many_existing_clients[0].get());
273 for (size_t i = 1; i < MidiManager::kMaxPendingClientCount; ++i) {
Takashi Toyoshimaa88997d2017-09-07 08:30:18 +0000274 many_existing_clients[i] = std::make_unique<FakeMidiManagerClient>();
xiaofeng.zhang06152d82017-05-21 04:39:34 -0700275 StartTheNthSession(many_existing_clients[i].get(), i + 1);
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000276 }
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900277 ASSERT_TRUE(factory()->manager());
278 EXPECT_TRUE(factory()->manager()->IsInitialized());
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000279
280 // Push the last client that should be rejected for too many pending requests.
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900281 std::unique_ptr<FakeMidiManagerClient> additional_client =
282 std::make_unique<FakeMidiManagerClient>();
283 StartSession(additional_client.get());
toyoshimf1b88962015-07-09 14:14:51 -0700284 EXPECT_EQ(Result::INITIALIZATION_ERROR, additional_client->result());
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000285
286 // Other clients still should not receive a result.
287 RunLoopUntilIdle();
288 for (size_t i = 0; i < many_existing_clients.size(); ++i)
toyoshimf1b88962015-07-09 14:14:51 -0700289 EXPECT_EQ(Result::NOT_SUPPORTED, many_existing_clients[i]->result());
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000290
toyoshimf1b88962015-07-09 14:14:51 -0700291 // The Result::OK should be distributed to other clients.
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900292 EXPECT_TRUE(CompleteInitialization(Result::OK));
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000293 for (size_t i = 0; i < many_existing_clients.size(); ++i)
toyoshimf1b88962015-07-09 14:14:51 -0700294 EXPECT_EQ(Result::OK, many_existing_clients[i]->WaitForResult());
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000295
296 // Close all successful sessions in FIFO order.
297 size_t sessions = many_existing_clients.size();
298 for (size_t i = 0; i < many_existing_clients.size(); ++i, --sessions)
xiaofeng.zhang06152d82017-05-21 04:39:34 -0700299 EndSession(many_existing_clients[i].get(), sessions, sessions - 1);
toyoshim@chromium.orgfc2002e2014-05-07 08:10:34 +0000300}
301
toyoshim@chromium.org1fa678a2014-06-13 09:40:33 +0000302TEST_F(MidiManagerTest, AbortSession) {
303 // A client starting a session can be destructed while an asynchronous
304 // initialization is performed.
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900305 std::unique_ptr<FakeMidiManagerClient> client =
306 std::make_unique<FakeMidiManagerClient>();
toyoshim@chromium.org1fa678a2014-06-13 09:40:33 +0000307
308 StartTheFirstSession(client.get());
309 EndSession(client.get(), 0, 0);
310 client.reset();
311
312 // Following function should not call the destructed |client| function.
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900313 EXPECT_FALSE(CompleteInitialization(Result::OK));
toyoshim@chromium.org1fa678a2014-06-13 09:40:33 +0000314 base::RunLoop run_loop;
315 run_loop.RunUntilIdle();
316}
317
Hans Wennborg3b620e72018-05-17 16:58:16 +0000318#if defined(OS_ANDROID)
319// The test sometimes fails on Android. https://crbug.com/844027
320#define MAYBE_CreatePlatformMidiManager DISABLED_CreatePlatformMidiManager
321#else
322#define MAYBE_CreatePlatformMidiManager CreatePlatformMidiManager
323#endif
324TEST_F(MidiManagerTest, MAYBE_CreatePlatformMidiManager) {
toyoshim71818732015-04-07 04:15:44 -0700325 // SystemMonitor is needed on Windows.
326 base::SystemMonitor system_monitor;
327
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900328 std::unique_ptr<FakeMidiManagerClient> client =
329 std::make_unique<FakeMidiManagerClient>();
toyoshim@chromium.orgc1e05fb2014-05-06 16:39:20 +0000330
Takashi Toyoshimabc959ee2018-01-09 16:04:04 +0900331 // Use own MidiService instance to construct a real platform dependent
332 // MidiManager instance.
333 std::unique_ptr<MidiService> service = std::make_unique<MidiService>();
toyoshimf4d61522017-02-10 02:03:32 -0800334 service->StartSession(client.get());
toyoshim@chromium.orga25e6832014-05-07 18:06:25 +0000335
toyoshimf1b88962015-07-09 14:14:51 -0700336 Result result = client->WaitForResult();
toyoshim@chromium.orga25e6832014-05-07 18:06:25 +0000337 // This #ifdef needs to be identical to the one in media/midi/midi_manager.cc.
338 // Do not change the condition for disabling this test.
agoode7de413f2015-04-24 00:13:39 -0700339#if !defined(OS_MACOSX) && !defined(OS_WIN) && \
340 !(defined(USE_ALSA) && defined(USE_UDEV)) && !defined(OS_ANDROID)
toyoshimf1b88962015-07-09 14:14:51 -0700341 EXPECT_EQ(Result::NOT_SUPPORTED, result);
agoode@chromium.org25227512014-06-08 05:12:05 +0000342#elif defined(USE_ALSA)
343 // Temporary until http://crbug.com/371230 is resolved.
toyoshimf1b88962015-07-09 14:14:51 -0700344 EXPECT_TRUE(result == Result::OK || result == Result::INITIALIZATION_ERROR);
dnicoara@chromium.orgc404df62014-05-06 22:56:00 +0000345#else
toyoshimf1b88962015-07-09 14:14:51 -0700346 EXPECT_EQ(Result::OK, result);
dnicoara@chromium.orgc404df62014-05-06 22:56:00 +0000347#endif
toyoshim7a809662015-10-06 00:54:21 -0700348
toyoshimf4d61522017-02-10 02:03:32 -0800349 service->Shutdown();
toyoshim7a809662015-10-06 00:54:21 -0700350 base::RunLoop run_loop;
351 run_loop.RunUntilIdle();
toyoshim@chromium.orgc1e05fb2014-05-06 16:39:20 +0000352}
353
toyoshim@chromium.org51c7f532014-05-01 17:17:32 +0000354} // namespace
355
toyoshime147c5e2015-05-07 21:58:31 -0700356} // namespace midi