OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 // MediaStreamUIController is used to decide which of the available capture | |
6 // device to use as well as getting user permission to use the capture device. | |
7 // There will be one instance of MediaStreamDeviceSettings handling all | |
8 // requests. | |
9 | |
10 // Expected call flow: | |
11 // 1. MakeUIRequest() is called to create a new request to the UI for capture | |
12 // device access. | |
13 // 2. Pick device and get user confirmation. | |
14 // 3. Confirm by calling SettingsRequester::DevicesAccepted(). | |
15 // Repeat step 1 - 3 for new device requests. | |
16 | |
17 #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_UI_CONTROLLER_H_ | |
18 #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_UI_CONTROLLER_H_ | |
19 | |
20 #include <map> | |
21 #include <string> | |
22 | |
23 #include "base/basictypes.h" | |
24 #include "content/browser/renderer_host/media/media_stream_provider.h" | |
25 #include "content/public/browser/web_contents_delegate.h" | |
26 | |
27 namespace content { | |
28 | |
29 class MediaStreamRequestForUI; | |
30 class SettingsRequester; | |
31 | |
32 // MediaStreamUIController is responsible for getting user permission to use | |
33 // a media capture device as well as selecting what device to use. | |
34 class CONTENT_EXPORT MediaStreamUIController { | |
35 public: | |
36 explicit MediaStreamUIController(SettingsRequester* requester); | |
37 virtual ~MediaStreamUIController(); | |
38 | |
39 // Called when a new request for the capture device access is made. | |
40 // Users are responsible for canceling the pending request if they don't wait | |
41 // for the result from the UI. | |
42 void MakeUIRequest(const std::string& label, | |
43 int render_process_id, | |
44 int render_view_id, | |
45 const StreamOptions& stream_components, | |
46 const GURL& security_origin, | |
47 MediaStreamRequestType request_type, | |
48 const std::string& requested_device_id); | |
49 | |
50 // Called to cancel a pending UI request of capture device access when the | |
51 // user has no action for the media stream InfoBar. | |
52 void CancelUIRequest(const std::string& label); | |
53 | |
54 // Called to signal the UI indicator that the devices are opened. | |
55 void NotifyUIIndicatorDevicesOpened(const std::string& label); | |
56 | |
57 // Called to signal the UI indicator that the devices are closed. | |
58 void NotifyUIIndicatorDevicesClosed(const std::string& label); | |
59 | |
60 // Used for testing only. This function is called to use faked UI, which is | |
61 // needed for server based tests. The first non-opened device(s) will be | |
62 // picked. | |
63 void UseFakeUI(scoped_ptr<MediaStreamUI> fake_ui); | |
64 | |
65 private: | |
66 typedef std::map<std::string, MediaStreamRequestForUI*> UIRequests; | |
67 typedef std::map<std::string, MediaStreamUI*> IndicatorsMap; | |
68 | |
69 // Returns true if the UI is already processing a request for this render | |
70 // view. | |
71 bool IsUIBusy(int render_process_id, int render_view_id); | |
72 | |
73 // Process the next pending request and bring it up to the UI on the given | |
74 // page for user approval. | |
75 void ProcessNextRequestForView(int render_process_id, int render_view_id); | |
76 | |
77 // Posts a request to be approved/denied by UI. | |
78 void PostRequestToUI(const std::string& label); | |
79 | |
80 // Posts a request to fake UI which is used for testing purpose. | |
81 void PostRequestToFakeUI(const std::string& label); | |
82 | |
83 // Callback handler for WebContents::RequestMediaAccessPermission(). | |
84 void ProcessAccessRequestResponse(const std::string& label, | |
85 const MediaStreamDevices& devices, | |
86 scoped_ptr<MediaStreamUI> stream_ui); | |
87 | |
88 // Callback for UI called when user requests a stream to be stopped. | |
89 void OnStopStreamFromUI(const std::string& label); | |
90 | |
91 SettingsRequester* requester_; | |
92 UIRequests requests_; | |
93 | |
94 // See comment above for method UseFakeUI. Used for automated testing. | |
95 bool use_fake_ui_; | |
96 scoped_ptr<MediaStreamUI> fake_ui_; | |
97 | |
98 // Container MediaStreamUI objects for currently active streams. | |
99 IndicatorsMap stream_indicators_; | |
100 | |
101 DISALLOW_COPY_AND_ASSIGN(MediaStreamUIController); | |
102 }; | |
103 | |
104 } // namespace content | |
105 | |
106 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_UI_CONTROLLER_H_ | |
OLD | NEW |