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

Unified Diff: media/midi/midi_manager.h

Issue 261263002: Web MIDI: add an unit test to check MidiManager instantiation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win build fix Created 6 years, 7 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 | « no previous file | media/midi/midi_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/midi/midi_manager.h
diff --git a/media/midi/midi_manager.h b/media/midi/midi_manager.h
index 156a2465cb424bb943a271fdd4b7f99c53a669f5..46602c1df16bef9d293e99808bf81ec7747bb106 100644
--- a/media/midi/midi_manager.h
+++ b/media/midi/midi_manager.h
@@ -10,12 +10,17 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
#include "base/synchronization/lock.h"
#include "base/time/time.h"
#include "media/base/media_export.h"
#include "media/midi/midi_port_info.h"
#include "media/midi/midi_result.h"
+namespace base {
+class SingleThreadTaskRunner;
+} // namespace base
+
namespace media {
// A MidiManagerClient registers with the MidiManager to receive MIDI data.
@@ -50,6 +55,8 @@ class MEDIA_EXPORT MidiManagerClient {
// Manages access to all MIDI hardware.
class MEDIA_EXPORT MidiManager {
public:
+ // The constructor and the destructor will be called on the CrBrowserMain
+ // thread.
static MidiManager* Create();
MidiManager();
@@ -60,6 +67,8 @@ class MEDIA_EXPORT MidiManager {
// and the client is registered to receive MIDI data.
// CompleteStartSession() is called with MIDI_OK if the session is started.
// Otherwise CompleteStartSession() is called with proper MidiResult code.
+ // StartSession() and EndSession() can be called on the Chrome_IOThread.
+ // CompleteStartSession() will be invoked on the same Chrome_IOThread.
void StartSession(MidiManagerClient* client, int client_id);
// A client calls EndSession() to stop receiving MIDI data.
@@ -92,15 +101,20 @@ class MEDIA_EXPORT MidiManager {
protected:
friend class MidiManagerUsb;
- // Initializes the platform dependent MIDI system. It will call
- // CompleteInitialization() asynchronously when initialization is finished.
- // |result| of CompleteInitialization() will be MIDI_OK on success.
- // MidiManager has a default implementation that calls
- // CompleteInitialization() with MIDI_NOT_SUPPORTED.
+ // Initializes the platform dependent MIDI system. MidiManager class has a
+ // default implementation that synchronously calls CompleteInitialization()
+ // with MIDI_NOT_SUPPORTED on the caller thread. A derived class for a
+ // specific platform should override this method correctly.
+ // This method is called on Chrome_IOThread thread inside StartSession().
+ // Platform dependent initialization can be processed synchronously or
+ // asynchronously. When the initialization is completed,
+ // CompleteInitialization() should be called with |result|.
+ // |result| should be MIDI_OK on success, otherwise a proper MidiResult.
virtual void StartInitialization();
// Called from a platform dependent implementation of StartInitialization().
- // It will distribute |result| to MIDIManagerClient objects in
+ // It invokes CompleteInitializationInternal() on the thread that calls
+ // StartSession() and distributes |result| to MIDIManagerClient objects in
// |pending_clients_|.
void CompleteInitialization(MidiResult result);
@@ -123,8 +137,17 @@ class MEDIA_EXPORT MidiManager {
(time - base::TimeTicks()).InSecondsF());
}
- bool initialized_;
- MidiResult result_;
+ size_t get_clients_size_for_testing() const { return clients_.size(); }
+ size_t get_pending_clients_size_for_testing() const {
+ return pending_clients_.size();
+ }
+
+ // TODO(toyoshim): Make |input_ports_| and |output_ports_| private members.
+ MidiPortInfoList input_ports_;
+ MidiPortInfoList output_ports_;
+
+ private:
+ void CompleteInitializationInternal(MidiResult result);
// Keeps track of all clients who wish to receive MIDI data.
typedef std::set<MidiManagerClient*> ClientList;
@@ -134,13 +157,21 @@ class MEDIA_EXPORT MidiManager {
typedef std::map<int, MidiManagerClient*> PendingClientMap;
PendingClientMap pending_clients_;
- // Protects access to our clients, |clients_| and |pending_clients_|.
- base::Lock clients_lock_;
+ // Keeps a SingleThreadTaskRunner of the thread that calls StartSession in
+ // order to invoke CompleteStartSession() on the thread.
+ scoped_refptr<base::SingleThreadTaskRunner> session_thread_runner_;
- MidiPortInfoList input_ports_;
- MidiPortInfoList output_ports_;
+ // Keeps true if platform dependent initialization is already completed.
+ bool initialized_;
+
+ // Keeps the platform dependent initialization result if initialization is
+ // completed. Otherwise keeps MIDI_NOT_SUPPORTED.
+ MidiResult result_;
+
+ // Protects access to |clients_|, |pending_clients_|, |initialized_|, and
+ // |result_|.
+ base::Lock lock_;
- private:
DISALLOW_COPY_AND_ASSIGN(MidiManager);
};
« no previous file with comments | « no previous file | media/midi/midi_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698