Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(453)

Side by Side Diff: content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc

Issue 364123002: [Cross-Site Isolation] Migrate entire MediaStream verticals to be per-RenderFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: It's random enough. + REBASE Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 #include <queue> 6 #include <queue>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 MOCK_METHOD4(OnStreamGenerated, 63 MOCK_METHOD4(OnStreamGenerated,
64 void(int routing_id, int request_id, int audio_array_size, 64 void(int routing_id, int request_id, int audio_array_size,
65 int video_array_size)); 65 int video_array_size));
66 MOCK_METHOD3(OnStreamGenerationFailed, void(int routing_id, 66 MOCK_METHOD3(OnStreamGenerationFailed, void(int routing_id,
67 int request_id, 67 int request_id,
68 MediaStreamRequestResult result)); 68 MediaStreamRequestResult result));
69 MOCK_METHOD1(OnDeviceStopped, void(int routing_id)); 69 MOCK_METHOD1(OnDeviceStopped, void(int routing_id));
70 MOCK_METHOD2(OnDeviceOpened, void(int routing_id, int request_id)); 70 MOCK_METHOD2(OnDeviceOpened, void(int routing_id, int request_id));
71 71
72 // Accessor to private functions. 72 // Accessor to private functions.
73 void OnGenerateStream(int render_view_id, 73 void OnGenerateStream(int render_frame_id,
74 int page_request_id, 74 int page_request_id,
75 const StreamOptions& components, 75 const StreamOptions& components,
76 const GURL& security_origin, 76 const GURL& security_origin,
77 const base::Closure& quit_closure) { 77 const base::Closure& quit_closure) {
78 quit_closures_.push(quit_closure); 78 quit_closures_.push(quit_closure);
79 MediaStreamDispatcherHost::OnGenerateStream( 79 MediaStreamDispatcherHost::OnGenerateStream(
80 render_view_id, page_request_id, components, security_origin, false); 80 render_frame_id, page_request_id, components, security_origin, false);
81 } 81 }
82 82
83 void OnStopStreamDevice(int render_view_id, 83 void OnStopStreamDevice(int render_frame_id,
84 const std::string& device_id) { 84 const std::string& device_id) {
85 MediaStreamDispatcherHost::OnStopStreamDevice(render_view_id, device_id); 85 MediaStreamDispatcherHost::OnStopStreamDevice(render_frame_id, device_id);
86 } 86 }
87 87
88 void OnOpenDevice(int render_view_id, 88 void OnOpenDevice(int render_frame_id,
89 int page_request_id, 89 int page_request_id,
90 const std::string& device_id, 90 const std::string& device_id,
91 MediaStreamType type, 91 MediaStreamType type,
92 const GURL& security_origin, 92 const GURL& security_origin,
93 const base::Closure& quit_closure) { 93 const base::Closure& quit_closure) {
94 quit_closures_.push(quit_closure); 94 quit_closures_.push(quit_closure);
95 MediaStreamDispatcherHost::OnOpenDevice( 95 MediaStreamDispatcherHost::OnOpenDevice(
96 render_view_id, page_request_id, device_id, type, security_origin); 96 render_frame_id, page_request_id, device_id, type, security_origin);
97 } 97 }
98 98
99 void OnEnumerateDevices(int render_view_id, 99 void OnEnumerateDevices(int render_frame_id,
100 int page_request_id, 100 int page_request_id,
101 MediaStreamType type, 101 MediaStreamType type,
102 const GURL& security_origin, 102 const GURL& security_origin,
103 bool hide_labels_if_no_access, 103 bool hide_labels_if_no_access,
104 const base::Closure& quit_closure) { 104 const base::Closure& quit_closure) {
105 quit_closures_.push(quit_closure); 105 quit_closures_.push(quit_closure);
106 MediaStreamDispatcherHost::OnEnumerateDevices( 106 MediaStreamDispatcherHost::OnEnumerateDevices(
107 render_view_id, page_request_id, type, security_origin, 107 render_frame_id, page_request_id, type, security_origin,
108 hide_labels_if_no_access); 108 hide_labels_if_no_access);
109 } 109 }
110 110
111 std::string label_; 111 std::string label_;
112 StreamDeviceInfoArray audio_devices_; 112 StreamDeviceInfoArray audio_devices_;
113 StreamDeviceInfoArray video_devices_; 113 StreamDeviceInfoArray video_devices_;
114 StreamDeviceInfo opened_device_; 114 StreamDeviceInfo opened_device_;
115 StreamDeviceInfoArray enumerated_devices_; 115 StreamDeviceInfoArray enumerated_devices_;
116 116
117 private: 117 private:
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 protected: 272 protected:
273 virtual void SetupFakeUI(bool expect_started) { 273 virtual void SetupFakeUI(bool expect_started) {
274 scoped_ptr<MockMediaStreamUIProxy> stream_ui(new MockMediaStreamUIProxy()); 274 scoped_ptr<MockMediaStreamUIProxy> stream_ui(new MockMediaStreamUIProxy());
275 if (expect_started) { 275 if (expect_started) {
276 EXPECT_CALL(*stream_ui, OnStarted(_, _)); 276 EXPECT_CALL(*stream_ui, OnStarted(_, _));
277 } 277 }
278 media_stream_manager_->UseFakeUI( 278 media_stream_manager_->UseFakeUI(
279 stream_ui.PassAs<FakeMediaStreamUIProxy>()); 279 stream_ui.PassAs<FakeMediaStreamUIProxy>());
280 } 280 }
281 281
282 void GenerateStreamAndWaitForResult(int render_view_id, 282 void GenerateStreamAndWaitForResult(int render_frame_id,
283 int page_request_id, 283 int page_request_id,
284 const StreamOptions& options) { 284 const StreamOptions& options) {
285 base::RunLoop run_loop; 285 base::RunLoop run_loop;
286 int expected_audio_array_size = 286 int expected_audio_array_size =
287 (options.audio_requested && 287 (options.audio_requested &&
288 physical_audio_devices_.size() > 0) ? 1 : 0; 288 physical_audio_devices_.size() > 0) ? 1 : 0;
289 int expected_video_array_size = 289 int expected_video_array_size =
290 (options.video_requested && 290 (options.video_requested &&
291 physical_video_devices_.size() > 0) ? 1 : 0; 291 physical_video_devices_.size() > 0) ? 1 : 0;
292 EXPECT_CALL(*host_.get(), OnStreamGenerated(render_view_id, page_request_id, 292 EXPECT_CALL(*host_.get(), OnStreamGenerated(render_frame_id,
293 page_request_id,
293 expected_audio_array_size, 294 expected_audio_array_size,
294 expected_video_array_size)); 295 expected_video_array_size));
295 host_->OnGenerateStream(render_view_id, page_request_id, options, origin_, 296 host_->OnGenerateStream(render_frame_id, page_request_id, options, origin_,
296 run_loop.QuitClosure()); 297 run_loop.QuitClosure());
297 run_loop.Run(); 298 run_loop.Run();
298 EXPECT_FALSE(DoesContainRawIds(host_->audio_devices_)); 299 EXPECT_FALSE(DoesContainRawIds(host_->audio_devices_));
299 EXPECT_FALSE(DoesContainRawIds(host_->video_devices_)); 300 EXPECT_FALSE(DoesContainRawIds(host_->video_devices_));
300 EXPECT_TRUE(DoesEveryDeviceMapToRawId(host_->audio_devices_, origin_)); 301 EXPECT_TRUE(DoesEveryDeviceMapToRawId(host_->audio_devices_, origin_));
301 EXPECT_TRUE(DoesEveryDeviceMapToRawId(host_->video_devices_, origin_)); 302 EXPECT_TRUE(DoesEveryDeviceMapToRawId(host_->video_devices_, origin_));
302 } 303 }
303 304
304 void GenerateStreamAndWaitForFailure( 305 void GenerateStreamAndWaitForFailure(
305 int render_view_id, 306 int render_frame_id,
306 int page_request_id, 307 int page_request_id,
307 const StreamOptions& options, 308 const StreamOptions& options,
308 MediaStreamRequestResult expected_result) { 309 MediaStreamRequestResult expected_result) {
309 base::RunLoop run_loop; 310 base::RunLoop run_loop;
310 EXPECT_CALL(*host_.get(), 311 EXPECT_CALL(*host_.get(),
311 OnStreamGenerationFailed(render_view_id, 312 OnStreamGenerationFailed(render_frame_id,
312 page_request_id, 313 page_request_id,
313 expected_result)); 314 expected_result));
314 host_->OnGenerateStream(render_view_id, page_request_id, options, origin_, 315 host_->OnGenerateStream(render_frame_id, page_request_id, options,
315 run_loop.QuitClosure()); 316 origin_, run_loop.QuitClosure());
316 run_loop.Run(); 317 run_loop.Run();
317 } 318 }
318 319
319 void OpenVideoDeviceAndWaitForResult(int render_view_id, 320 void OpenVideoDeviceAndWaitForResult(int render_frame_id,
320 int page_request_id, 321 int page_request_id,
321 const std::string& device_id) { 322 const std::string& device_id) {
322 base::RunLoop run_loop; 323 base::RunLoop run_loop;
323 host_->OnOpenDevice(render_view_id, page_request_id, device_id, 324 host_->OnOpenDevice(render_frame_id, page_request_id, device_id,
324 MEDIA_DEVICE_VIDEO_CAPTURE, origin_, 325 MEDIA_DEVICE_VIDEO_CAPTURE, origin_,
325 run_loop.QuitClosure()); 326 run_loop.QuitClosure());
326 run_loop.Run(); 327 run_loop.Run();
327 EXPECT_FALSE(DoesContainRawIds(host_->video_devices_)); 328 EXPECT_FALSE(DoesContainRawIds(host_->video_devices_));
328 EXPECT_TRUE(DoesEveryDeviceMapToRawId(host_->video_devices_, origin_)); 329 EXPECT_TRUE(DoesEveryDeviceMapToRawId(host_->video_devices_, origin_));
329 } 330 }
330 331
331 void EnumerateDevicesAndWaitForResult(int render_view_id, 332 void EnumerateDevicesAndWaitForResult(int render_frame_id,
332 int page_request_id, 333 int page_request_id,
333 MediaStreamType type, 334 MediaStreamType type,
334 bool hide_labels_if_no_access) { 335 bool hide_labels_if_no_access) {
335 base::RunLoop run_loop; 336 base::RunLoop run_loop;
336 host_->OnEnumerateDevices(render_view_id, page_request_id, type, origin_, 337 host_->OnEnumerateDevices(render_frame_id, page_request_id, type, origin_,
337 hide_labels_if_no_access, run_loop.QuitClosure()); 338 hide_labels_if_no_access, run_loop.QuitClosure());
338 run_loop.Run(); 339 run_loop.Run();
339 ASSERT_FALSE(host_->enumerated_devices_.empty()); 340 ASSERT_FALSE(host_->enumerated_devices_.empty());
340 EXPECT_FALSE(DoesContainRawIds(host_->enumerated_devices_)); 341 EXPECT_FALSE(DoesContainRawIds(host_->enumerated_devices_));
341 EXPECT_TRUE(DoesEveryDeviceMapToRawId(host_->enumerated_devices_, origin_)); 342 EXPECT_TRUE(DoesEveryDeviceMapToRawId(host_->enumerated_devices_, origin_));
342 } 343 }
343 344
344 bool DoesContainRawIds(const StreamDeviceInfoArray& devices) { 345 bool DoesContainRawIds(const StreamDeviceInfoArray& devices) {
345 for (size_t i = 0; i < devices.size(); ++i) { 346 for (size_t i = 0; i < devices.size(); ++i) {
346 media::AudioDeviceNames::const_iterator audio_it = 347 media::AudioDeviceNames::const_iterator audio_it =
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamWithAudioAndVideo) { 464 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamWithAudioAndVideo) {
464 StreamOptions options(true, true); 465 StreamOptions options(true, true);
465 466
466 SetupFakeUI(true); 467 SetupFakeUI(true);
467 GenerateStreamAndWaitForResult(kRenderId, kPageRequestId, options); 468 GenerateStreamAndWaitForResult(kRenderId, kPageRequestId, options);
468 469
469 EXPECT_EQ(host_->audio_devices_.size(), 1u); 470 EXPECT_EQ(host_->audio_devices_.size(), 1u);
470 EXPECT_EQ(host_->video_devices_.size(), 1u); 471 EXPECT_EQ(host_->video_devices_.size(), 1u);
471 } 472 }
472 473
473 // This test generates two streams with video only using the same render view 474 // This test generates two streams with video only using the same render frame
474 // id. The same capture device with the same device and session id is expected 475 // id. The same capture device with the same device and session id is expected
475 // to be used. 476 // to be used.
476 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamsFromSameRenderId) { 477 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamsFromSameRenderId) {
477 StreamOptions options(false, true); 478 StreamOptions options(false, true);
478 479
479 // Generate first stream. 480 // Generate first stream.
480 SetupFakeUI(true); 481 SetupFakeUI(true);
481 GenerateStreamAndWaitForResult(kRenderId, kPageRequestId, options); 482 GenerateStreamAndWaitForResult(kRenderId, kPageRequestId, options);
482 483
483 // Check the latest generated stream. 484 // Check the latest generated stream.
484 EXPECT_EQ(host_->audio_devices_.size(), 0u); 485 EXPECT_EQ(host_->audio_devices_.size(), 0u);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 const int session_id2 = host_->opened_device_.session_id; 524 const int session_id2 = host_->opened_device_.session_id;
524 const std::string label2 = host_->label_; 525 const std::string label2 = host_->label_;
525 526
526 EXPECT_EQ(device_id1, device_id2); 527 EXPECT_EQ(device_id1, device_id2);
527 EXPECT_NE(session_id1, session_id2); 528 EXPECT_NE(session_id1, session_id2);
528 EXPECT_NE(label1, label2); 529 EXPECT_NE(label1, label2);
529 } 530 }
530 531
531 532
532 // This test generates two streams with video only using two separate render 533 // This test generates two streams with video only using two separate render
533 // view ids. The same device id but different session ids are expected. 534 // frame ids. The same device id but different session ids are expected.
534 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamsDifferentRenderId) { 535 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamsDifferentRenderId) {
535 StreamOptions options(false, true); 536 StreamOptions options(false, true);
536 537
537 // Generate first stream. 538 // Generate first stream.
538 SetupFakeUI(true); 539 SetupFakeUI(true);
539 GenerateStreamAndWaitForResult(kRenderId, kPageRequestId, options); 540 GenerateStreamAndWaitForResult(kRenderId, kPageRequestId, options);
540 541
541 // Check the latest generated stream. 542 // Check the latest generated stream.
542 EXPECT_EQ(host_->audio_devices_.size(), 0u); 543 EXPECT_EQ(host_->audio_devices_.size(), 0u);
543 EXPECT_EQ(host_->video_devices_.size(), 1u); 544 EXPECT_EQ(host_->video_devices_.size(), 1u);
544 const std::string label1 = host_->label_; 545 const std::string label1 = host_->label_;
545 const std::string device_id1 = host_->video_devices_.front().device.id; 546 const std::string device_id1 = host_->video_devices_.front().device.id;
546 const int session_id1 = host_->video_devices_.front().session_id; 547 const int session_id1 = host_->video_devices_.front().session_id;
547 548
548 // Generate second stream from another render view. 549 // Generate second stream from another render frame.
549 SetupFakeUI(true); 550 SetupFakeUI(true);
550 GenerateStreamAndWaitForResult(kRenderId+1, kPageRequestId + 1, options); 551 GenerateStreamAndWaitForResult(kRenderId+1, kPageRequestId + 1, options);
551 552
552 // Check the latest generated stream. 553 // Check the latest generated stream.
553 EXPECT_EQ(host_->audio_devices_.size(), 0u); 554 EXPECT_EQ(host_->audio_devices_.size(), 0u);
554 EXPECT_EQ(host_->video_devices_.size(), 1u); 555 EXPECT_EQ(host_->video_devices_.size(), 1u);
555 const std::string label2 = host_->label_; 556 const std::string label2 = host_->label_;
556 const std::string device_id2 = host_->video_devices_.front().device.id; 557 const std::string device_id2 = host_->video_devices_.front().device.id;
557 const int session_id2 = host_->video_devices_.front().session_id; 558 const int session_id2 = host_->video_devices_.front().session_id;
558 EXPECT_EQ(device_id1, device_id2); 559 EXPECT_EQ(device_id1, device_id2);
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 EnumerateVideoDevicesNoAccessNoHideLabels) { 928 EnumerateVideoDevicesNoAccessNoHideLabels) {
928 MockResourceContext* mock_resource_context = 929 MockResourceContext* mock_resource_context =
929 static_cast<MockResourceContext*>(browser_context_.GetResourceContext()); 930 static_cast<MockResourceContext*>(browser_context_.GetResourceContext());
930 mock_resource_context->set_camera_access(false); 931 mock_resource_context->set_camera_access(false);
931 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, 932 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId,
932 MEDIA_DEVICE_VIDEO_CAPTURE, false); 933 MEDIA_DEVICE_VIDEO_CAPTURE, false);
933 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); 934 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_));
934 } 935 }
935 936
936 }; // namespace content 937 }; // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698