1// 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#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_SOURCE_H_
6#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_SOURCE_H_
7
8#include "base/callback.h"
9#include "base/compiler_specific.h"
10#include "base/logging.h"
11#include "content/common/content_export.h"
12#include "content/common/media/media_stream_options.h"
13#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
14
15namespace blink {
16class WebMediaStreamTrack;
17}  // namespace blink
18
19namespace content {
20
21class CONTENT_EXPORT MediaStreamSource
22    : NON_EXPORTED_BASE(public blink::WebMediaStreamSource::ExtraData) {
23 public:
24  typedef base::Callback<void(const blink::WebMediaStreamSource& source)>
25      SourceStoppedCallback;
26
27  typedef base::Callback<void(MediaStreamSource* source,
28                              MediaStreamRequestResult result,
29                              const blink::WebString& result_name)>
30      ConstraintsCallback;
31
32  // Source constraints key for
33  // http://dev.w3.org/2011/webrtc/editor/getusermedia.html.
34  static const char kSourceId[];
35
36  MediaStreamSource();
37  virtual ~MediaStreamSource();
38
39  // Returns device information about a source that has been created by a
40  // JavaScript call to GetUserMedia, e.g., a camera or microphone.
41  const StreamDeviceInfo& device_info() const {
42    return device_info_;
43  }
44
45  // Stops the source (by calling DoStopSource()). This sets the
46  // WebMediaStreamSource::readyState to ended, triggers the |stop_callback_|
47  // if set. All pointers to this object are invalid after calling this.
48  void StopSource();
49
50  void ResetSourceStoppedCallback() {
51    DCHECK(!stop_callback_.is_null());
52    stop_callback_.Reset();
53  }
54
55 protected:
56  // Called when StopSource is called. It allows derived classes to implement
57  // its  own Stop method.
58  virtual void DoStopSource() = 0;
59
60  // Sets device information about a source that has been created by a
61  // JavaScript call to GetUserMedia. F.E a camera or microphone.
62  void SetDeviceInfo(const StreamDeviceInfo& device_info) {
63    device_info_ = device_info;
64  }
65
66  // Sets a callback that will be triggered when StopSource is called.
67  void SetStopCallback(const SourceStoppedCallback& stop_callback) {
68    DCHECK(stop_callback_.is_null());
69    stop_callback_ = stop_callback;
70  }
71
72 private:
73  StreamDeviceInfo device_info_;
74  SourceStoppedCallback stop_callback_;
75
76  DISALLOW_COPY_AND_ASSIGN(MediaStreamSource);
77};
78
79}  // namespace content
80
81#endif  // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_SOURCE_H_
82