| Index: media/midi/midi_service_impl.h
|
| diff --git a/content/browser/media/midi_host.h b/media/midi/midi_service_impl.h
|
| similarity index 53%
|
| copy from content/browser/media/midi_host.h
|
| copy to media/midi/midi_service_impl.h
|
| index 3a469bf93b9e2eef4ab6a2656f7e899877e15736..287e0d202fea491f97406df817784979cf885b2f 100644
|
| --- a/content/browser/media/midi_host.h
|
| +++ b/media/midi/midi_service_impl.h
|
| @@ -1,39 +1,54 @@
|
| -// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Copyright 2014 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_BROWSER_MEDIA_MIDI_HOST_H_
|
| -#define CONTENT_BROWSER_MEDIA_MIDI_HOST_H_
|
| +#ifndef MIDI_SERVICE_IMPL_H_
|
| +#define MIDI_SERVICE_IMPL_H_
|
|
|
| -#include <vector>
|
| -
|
| -#include "base/gtest_prod_util.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| +#include "base/macros.h"
|
| #include "base/memory/scoped_vector.h"
|
| #include "base/synchronization/lock.h"
|
| -#include "content/common/content_export.h"
|
| -#include "content/public/browser/browser_message_filter.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| +#include "media/base/media_export.h"
|
| #include "media/midi/midi_manager.h"
|
| +#include "media/midi/midi_message_queue.h"
|
| +#include "media/midi/midi_service.mojom.h"
|
| +#include "mojo/public/cpp/bindings/strong_binding.h"
|
|
|
| namespace media {
|
| -class MidiManager;
|
| -class MidiMessageQueue;
|
| -}
|
| -
|
| -namespace content {
|
|
|
| -class CONTENT_EXPORT MidiHost
|
| - : public BrowserMessageFilter,
|
| - public media::MidiManagerClient {
|
| +class MidiServiceImpl : public MidiService,
|
| + public MidiManagerClient {
|
| public:
|
| - // Called from UI thread from the owner of this object.
|
| - MidiHost(int renderer_process_id, media::MidiManager* midi_manager);
|
| + MEDIA_EXPORT static void Create(
|
| + int renderer_process_id,
|
| + MidiManager* midi_manager,
|
| + mojo::InterfaceRequest<MidiService> request);
|
| +
|
| + private:
|
| + typedef mojo::Callback<void(MidiResultMojo)> StartSessionCallback;
|
| + typedef mojo::Callback<void(uint32_t)> SendDataCallback;
|
| +
|
| + explicit MidiServiceImpl(
|
| + int renderer_process_id,
|
| + MidiManager* midi_manager,
|
| + mojo::InterfaceRequest<MidiService> request);
|
| + ~MidiServiceImpl() override;
|
| +
|
| + // Returns true if |data| fulfills the requirements of MidiOutput.send API
|
| + // defined in the WebMIDI spec.
|
| + // - |data| must be any number of complete MIDI messages (data abbreviation
|
| + // called "running status" is disallowed).
|
| + // - 1-byte MIDI realtime messages can be placed at any position of |data|.
|
| + static bool IsValidWebMIDIData(const std::vector<uint8_t>& data);
|
|
|
| - // BrowserMessageFilter implementation.
|
| - void OnDestruct() const override;
|
| - bool OnMessageReceived(const IPC::Message& message) override;
|
| + // MidiService methods.
|
| + void StartSession(
|
| + MidiServiceClientPtr client,
|
| + const StartSessionCallback& callback) override;
|
| + void EndSession() override;
|
| + void SendData(uint32_t port,
|
| + mojo::Array<uint8_t> data,
|
| + double timestamp) override;
|
|
|
| // MidiManagerClient implementation.
|
| void CompleteStartSession(media::MidiResult result) override;
|
| @@ -45,66 +60,46 @@ class CONTENT_EXPORT MidiHost
|
| double timestamp) override;
|
| void AccumulateMidiBytesSent(size_t n) override;
|
|
|
| - // Start session to access MIDI hardware.
|
| - void OnStartSession();
|
| -
|
| - // Data to be sent to a MIDI output port.
|
| - void OnSendData(uint32 port,
|
| - const std::vector<uint8>& data,
|
| - double timestamp);
|
| -
|
| - void OnEndSession();
|
| -
|
| - private:
|
| - FRIEND_TEST_ALL_PREFIXES(MidiHostTest, IsValidWebMIDIData);
|
| - friend class base::DeleteHelper<MidiHost>;
|
| - friend class BrowserThread;
|
| -
|
| - ~MidiHost() override;
|
| -
|
| - // Returns true if |data| fulfills the requirements of MidiOutput.send API
|
| - // defined in the WebMIDI spec.
|
| - // - |data| must be any number of complete MIDI messages (data abbreviation
|
| - // called "running status" is disallowed).
|
| - // - 1-byte MIDI realtime messages can be placed at any position of |data|.
|
| - static bool IsValidWebMIDIData(const std::vector<uint8>& data);
|
| + mojo::StrongBinding<MidiService> binding_;
|
| + MidiServiceClientPtr client_;
|
| + StartSessionCallback start_session_callback_;
|
|
|
| int renderer_process_id_;
|
|
|
| // Represents if the renderer has a permission to send/receive MIDI SysEX
|
| // messages.
|
| - bool has_sys_ex_permission_;
|
| + bool has_sys_ex_permission_ = false;
|
|
|
| // Represents if a session is requested to start.
|
| - bool is_session_requested_;
|
| + bool is_session_requested_ = false;
|
|
|
| // |midi_manager_| talks to the platform-specific MIDI APIs.
|
| // It can be NULL if the platform (or our current implementation)
|
| // does not support MIDI. If not supported then a call to
|
| // OnRequestAccess() will always refuse access and a call to
|
| // OnSendData() will do nothing.
|
| - media::MidiManager* const midi_manager_;
|
| + MidiManager* const midi_manager_ = nullptr;
|
|
|
| // Buffers where data sent from each MIDI input port is stored.
|
| - ScopedVector<media::MidiMessageQueue> received_messages_queues_;
|
| + ScopedVector<MidiMessageQueue> received_messages_queues_;
|
|
|
| // Protects access to |received_messages_queues_|;
|
| base::Lock messages_queues_lock_;
|
|
|
| // The number of bytes sent to the platform-specific MIDI sending
|
| // system, but not yet completed.
|
| - size_t sent_bytes_in_flight_;
|
| + size_t sent_bytes_in_flight_ = 0;
|
|
|
| // The number of bytes successfully sent since the last time
|
| // we've acknowledged back to the renderer.
|
| - size_t bytes_sent_since_last_acknowledgement_;
|
| + size_t bytes_sent_since_last_acknowledgement_ = 0;
|
|
|
| // Protects access to |sent_bytes_in_flight_|.
|
| base::Lock in_flight_lock_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(MidiHost);
|
| + DISALLOW_COPY_AND_ASSIGN(MidiServiceImpl);
|
| };
|
|
|
| -} // namespace content
|
| +} // namespace media
|
|
|
| -#endif // CONTENT_BROWSER_MEDIA_MIDI_HOST_H_
|
| +#endif // MIDI_SERVICE_IMPL_H_
|
|
|