device_request_message_filter.h revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
1// Copyright 2013 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_BROWSER_RENDERER_HOST_MEDIA_DEVICE_REQUEST_MESSAGE_FILTER_H_
6#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_DEVICE_REQUEST_MESSAGE_FILTER_H_
7
8#include <map>
9#include <string>
10
11#include "base/synchronization/lock.h"
12#include "content/browser/renderer_host/media/media_stream_requester.h"
13#include "content/common/content_export.h"
14#include "content/public/browser/browser_message_filter.h"
15
16namespace content {
17
18class MediaStreamManager;
19class ResourceContext;
20
21// DeviceRequestMessageFilter used to delegate requests from the
22// MediaStreamCenter.
23class CONTENT_EXPORT DeviceRequestMessageFilter : public BrowserMessageFilter,
24                                                  public MediaStreamRequester {
25 public:
26  DeviceRequestMessageFilter(ResourceContext* resource_context,
27                             MediaStreamManager* media_stream_manager);
28
29  // MediaStreamRequester implementation.
30  // TODO(vrk): Replace MediaStreamRequester interface with a single callback so
31  // we don't have to override all these callbacks we don't care about.
32  // (crbug.com/249476)
33  virtual void StreamGenerated(
34      const std::string& label, const StreamDeviceInfoArray& audio_devices,
35      const StreamDeviceInfoArray& video_devices) OVERRIDE;
36  virtual void StreamGenerationFailed(const std::string& label) OVERRIDE;
37  virtual void StopGeneratedStream(int render_view_id,
38                                   const std::string& label) OVERRIDE;
39  virtual void DeviceOpened(const std::string& label,
40                            const StreamDeviceInfo& video_device) OVERRIDE;
41  // DevicesEnumerated() is the only callback we're interested in.
42  virtual void DevicesEnumerated(const std::string& label,
43                                 const StreamDeviceInfoArray& devices) OVERRIDE;
44
45  // BrowserMessageFilter implementation.
46  virtual bool OnMessageReceived(const IPC::Message& message,
47                                 bool* message_was_ok) OVERRIDE;
48  virtual void OnChannelClosing() OVERRIDE;
49
50 protected:
51  virtual ~DeviceRequestMessageFilter();
52
53 private:
54  void OnGetSources(int request_id, const GURL& security_origin);
55
56  // Owned by ProfileIOData which is guaranteed to outlive DRMF.
57  ResourceContext* resource_context_;
58  MediaStreamManager* media_stream_manager_;
59
60  struct DeviceRequest;
61  typedef std::vector<DeviceRequest> DeviceRequestList;
62  // List of all requests.
63  DeviceRequestList requests_;
64
65  DISALLOW_COPY_AND_ASSIGN(DeviceRequestMessageFilter);
66};
67
68}  // namespace content
69
70#endif  // CONTENT_BROWSER_RENDERER_HOST_MEDIA_DEVICE_REQUEST_MESSAGE_FILTER_H_
71