Ignore non-active fullscreen windows for shelf state.
[chromium-blink-merge.git] / content / browser / renderer_host / media / media_stream_ui_proxy_unittest.cc
blobbff55c618ccec08b48fe9140be7a1c573d118f46
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.
5 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h"
7 #include "base/message_loop/message_loop.h"
8 #include "content/browser/renderer_host/render_view_host_delegate.h"
9 #include "content/public/common/renderer_preferences.h"
10 #include "content/public/test/test_browser_thread.h"
11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "ui/gfx/rect.h"
15 using testing::_;
16 using testing::SaveArg;
18 namespace content {
19 namespace {
21 class MockRenderViewHostDelegate : public RenderViewHostDelegate {
22 public:
23 MOCK_METHOD2(RequestMediaAccessPermission,
24 void(const MediaStreamRequest& request,
25 const MediaResponseCallback& callback));
27 // Stubs for pure virtual methods we don't care about.
28 virtual gfx::Rect GetRootWindowResizerRect() const OVERRIDE {
29 NOTREACHED();
30 return gfx::Rect();
32 virtual RendererPreferences GetRendererPrefs(
33 BrowserContext* browser_context) const OVERRIDE {
34 NOTREACHED();
35 return RendererPreferences();
39 class MockResponseCallback {
40 public:
41 MOCK_METHOD1(OnAccessRequestResponse,
42 void(const MediaStreamDevices& devices));
45 class MockMediaStreamUI : public MediaStreamUI {
46 public:
47 MOCK_METHOD1(OnStarted, void(const base::Closure& stop));
50 class MockStopStreamHandler {
51 public:
52 MOCK_METHOD0(OnStop, void());
56 } // namespace
58 class MediaStreamUIProxyTest : public testing::Test {
59 public:
60 MediaStreamUIProxyTest()
61 : ui_thread_(BrowserThread::UI, &message_loop_),
62 io_thread_(BrowserThread::IO, &message_loop_) {
63 proxy_ = MediaStreamUIProxy::CreateForTests(&delegate_);
66 virtual ~MediaStreamUIProxyTest() {
67 proxy_.reset();
68 message_loop_.RunUntilIdle();
71 protected:
72 base::MessageLoop message_loop_;
73 TestBrowserThread ui_thread_;
74 TestBrowserThread io_thread_;
76 MockRenderViewHostDelegate delegate_;
77 MockResponseCallback response_callback_;
78 scoped_ptr<MediaStreamUIProxy> proxy_;
81 MATCHER_P(SameRequest, expected, "") {
82 return
83 expected.render_process_id == arg.render_process_id &&
84 expected.render_view_id == arg.render_view_id &&
85 expected.tab_capture_device_id == arg.tab_capture_device_id &&
86 expected.security_origin == arg.security_origin &&
87 expected.request_type == arg.request_type &&
88 expected.requested_audio_device_id == arg.requested_audio_device_id &&
89 expected.requested_video_device_id == arg.requested_video_device_id &&
90 expected.audio_type == arg.audio_type &&
91 expected.video_type == arg.video_type;
94 TEST_F(MediaStreamUIProxyTest, Deny) {
95 MediaStreamRequest request(0, 0, 0, GURL("http://origin/"),
96 MEDIA_GENERATE_STREAM, std::string(),
97 std::string(),
98 MEDIA_DEVICE_AUDIO_CAPTURE,
99 MEDIA_DEVICE_VIDEO_CAPTURE);
100 proxy_->RequestAccess(
101 request, base::Bind(&MockResponseCallback::OnAccessRequestResponse,
102 base::Unretained(&response_callback_)));
103 MediaResponseCallback callback;
104 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request), _))
105 .WillOnce(SaveArg<1>(&callback));
106 message_loop_.RunUntilIdle();
107 ASSERT_FALSE(callback.is_null());
109 MediaStreamDevices devices;
110 callback.Run(devices, scoped_ptr<MediaStreamUI>());
112 MediaStreamDevices response;
113 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_))
114 .WillOnce(SaveArg<0>(&response));
115 message_loop_.RunUntilIdle();
117 EXPECT_TRUE(response.empty());
120 TEST_F(MediaStreamUIProxyTest, AcceptAndStart) {
121 MediaStreamRequest request(0, 0, 0, GURL("http://origin/"),
122 MEDIA_GENERATE_STREAM, std::string(),
123 std::string(),
124 MEDIA_DEVICE_AUDIO_CAPTURE,
125 MEDIA_DEVICE_VIDEO_CAPTURE);
126 proxy_->RequestAccess(
127 request, base::Bind(&MockResponseCallback::OnAccessRequestResponse,
128 base::Unretained(&response_callback_)));
129 MediaResponseCallback callback;
130 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request), _))
131 .WillOnce(SaveArg<1>(&callback));
132 message_loop_.RunUntilIdle();
133 ASSERT_FALSE(callback.is_null());
135 MediaStreamDevices devices;
136 devices.push_back(
137 MediaStreamDevice(MEDIA_DEVICE_AUDIO_CAPTURE, "Mic", "Mic"));
138 scoped_ptr<MockMediaStreamUI> ui(new MockMediaStreamUI());
139 EXPECT_CALL(*ui, OnStarted(_));
140 callback.Run(devices, ui.PassAs<MediaStreamUI>());
142 MediaStreamDevices response;
143 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_))
144 .WillOnce(SaveArg<0>(&response));
145 message_loop_.RunUntilIdle();
147 EXPECT_FALSE(response.empty());
149 proxy_->OnStarted(base::Closure());
150 message_loop_.RunUntilIdle();
153 // Verify that the proxy can be deleted before the request is processed.
154 TEST_F(MediaStreamUIProxyTest, DeleteBeforeAccepted) {
155 MediaStreamRequest request(0, 0, 0, GURL("http://origin/"),
156 MEDIA_GENERATE_STREAM, std::string(),
157 std::string(),
158 MEDIA_DEVICE_AUDIO_CAPTURE,
159 MEDIA_DEVICE_VIDEO_CAPTURE);
160 proxy_->RequestAccess(
161 request, base::Bind(&MockResponseCallback::OnAccessRequestResponse,
162 base::Unretained(&response_callback_)));
163 MediaResponseCallback callback;
164 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request), _))
165 .WillOnce(SaveArg<1>(&callback));
166 message_loop_.RunUntilIdle();
167 ASSERT_FALSE(callback.is_null());
169 proxy_.reset();
171 MediaStreamDevices devices;
172 scoped_ptr<MediaStreamUI> ui;
173 callback.Run(devices, ui.Pass());
176 TEST_F(MediaStreamUIProxyTest, StopFromUI) {
177 MediaStreamRequest request(0, 0, 0, GURL("http://origin/"),
178 MEDIA_GENERATE_STREAM, std::string(),
179 std::string(),
180 MEDIA_DEVICE_AUDIO_CAPTURE,
181 MEDIA_DEVICE_VIDEO_CAPTURE);
182 proxy_->RequestAccess(
183 request, base::Bind(&MockResponseCallback::OnAccessRequestResponse,
184 base::Unretained(&response_callback_)));
185 MediaResponseCallback callback;
186 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request), _))
187 .WillOnce(SaveArg<1>(&callback));
188 message_loop_.RunUntilIdle();
189 ASSERT_FALSE(callback.is_null());
191 base::Closure stop_callback;
193 MediaStreamDevices devices;
194 devices.push_back(
195 MediaStreamDevice(MEDIA_DEVICE_AUDIO_CAPTURE, "Mic", "Mic"));
196 scoped_ptr<MockMediaStreamUI> ui(new MockMediaStreamUI());
197 EXPECT_CALL(*ui, OnStarted(_))
198 .WillOnce(SaveArg<0>(&stop_callback));
199 callback.Run(devices, ui.PassAs<MediaStreamUI>());
201 MediaStreamDevices response;
202 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_))
203 .WillOnce(SaveArg<0>(&response));
204 message_loop_.RunUntilIdle();
206 EXPECT_FALSE(response.empty());
208 MockStopStreamHandler stop_handler;
209 proxy_->OnStarted(base::Bind(&MockStopStreamHandler::OnStop,
210 base::Unretained(&stop_handler)));
211 message_loop_.RunUntilIdle();
213 ASSERT_FALSE(stop_callback.is_null());
214 EXPECT_CALL(stop_handler, OnStop());
215 stop_callback.Run();
216 message_loop_.RunUntilIdle();
219 } // content