#ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_
#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_PROVIDER_H_
#include "base/memory/ref_counted.h"
#include "base/unguessable_token.h"
#include "third_party/blink/public/common/mediastream/media_stream_request.h"
namespace content {
enum MediaStreamProviderError {
kMediaStreamOk = 0,
kInvalidMediaStreamType,
kInvalidSession,
kUnknownSession,
kDeviceNotAvailable,
kDeviceAlreadyInUse,
kUnknownError
};
class MediaStreamProviderListener {
public:
virtual void Opened(blink::mojom::MediaStreamType stream_type,
const base::UnguessableToken& capture_session_id) = 0;
virtual void Closed(blink::mojom::MediaStreamType stream_type,
const base::UnguessableToken& capture_session_id) = 0;
virtual void Aborted(blink::mojom::MediaStreamType stream_type,
const base::UnguessableToken& capture_session_id) = 0;
#if BUILDFLAG(ARKWEB_EX_SCREEN_CAPTURE)
virtual void OnScreenCaptureOpened(const std::string& session_id) {}
#endif
protected:
virtual ~MediaStreamProviderListener() {}
};
class MediaStreamProvider
: public base::RefCountedThreadSafe<MediaStreamProvider> {
public:
virtual void RegisterListener(MediaStreamProviderListener* listener) = 0;
virtual void UnregisterListener(MediaStreamProviderListener* listener) = 0;
virtual base::UnguessableToken Open(
const blink::MediaStreamDevice& device) = 0;
virtual void Close(const base::UnguessableToken& capture_session_id) = 0;
protected:
friend class base::RefCountedThreadSafe<MediaStreamProvider>;
virtual ~MediaStreamProvider() {}
};
}
#endif