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

Side by Side Diff: android_webview/native/permission/media_access_permission_request.cc

Issue 239793002: Handle media access permission request (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix error, landed it again Created 6 years, 7 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
OLDNEW
(Empty)
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 #include "android_webview/native/permission/media_access_permission_request.h"
6
7 #include "android_webview/native/permission/aw_permission_request.h"
8 #include "content/public/browser/media_capture_devices.h"
9
10 using content::MediaCaptureDevices;
11 using content::MediaStreamDevice;
12 using content::MediaStreamDevices;
13
14 namespace android_webview {
15
16 namespace {
17
18 // Return the device specified by |device_id| if exists, otherwise the first
19 // available device is returned.
20 const MediaStreamDevice* GetDeviceByIdOrFirstAvailable(
21 const MediaStreamDevices& devices,
22 const std::string& device_id) {
23 if (devices.empty())
24 return NULL;
25
26 if (!device_id.empty()) {
27 for (size_t i = 0; i < devices.size(); ++i) {
28 if (devices[i].id == device_id)
29 return &devices[i];
30 }
31 }
32
33 return &devices[0];
34 }
35
36 } // namespace
37
38 MediaAccessPermissionRequest::MediaAccessPermissionRequest(
39 const content::MediaStreamRequest& request,
40 const content::MediaResponseCallback& callback)
41 : request_(request),
42 callback_(callback) {
43 }
44
45 MediaAccessPermissionRequest::~MediaAccessPermissionRequest() {
46 }
47
48 void MediaAccessPermissionRequest::NotifyRequestResult(bool allowed) {
49 scoped_ptr<content::MediaStreamUI> ui;
50 MediaStreamDevices devices;
51 if (!allowed) {
52 callback_.Run(devices, content::MEDIA_DEVICE_PERMISSION_DENIED, ui.Pass());
53 return;
54 }
55
56 if (request_.audio_type == content::MEDIA_DEVICE_AUDIO_CAPTURE) {
57 const MediaStreamDevices& audio_devices = audio_test_devices_.empty()?
58 MediaCaptureDevices::GetInstance()->GetAudioCaptureDevices() :
59 audio_test_devices_;
60 const MediaStreamDevice* device = GetDeviceByIdOrFirstAvailable(
61 audio_devices, request_.requested_audio_device_id);
62 if (device)
63 devices.push_back(*device);
64 }
65
66 if (request_.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE) {
67 const MediaStreamDevices& video_devices = video_test_devices_.empty()?
68 MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices() :
69 video_test_devices_;
70 const MediaStreamDevice* device = GetDeviceByIdOrFirstAvailable(
71 video_devices, request_.requested_video_device_id);
72 if (device)
73 devices.push_back(*device);
74 }
75 callback_.Run(devices, devices.empty() ?
76 content::MEDIA_DEVICE_NO_HARDWARE : content::MEDIA_DEVICE_OK,
77 ui.Pass());
78 }
79
80 const GURL& MediaAccessPermissionRequest::GetOrigin() {
81 return request_.security_origin;
82 }
83
84 int64 MediaAccessPermissionRequest::GetResources() {
85 return (request_.audio_type == content::MEDIA_DEVICE_AUDIO_CAPTURE ?
86 AwPermissionRequest::AudioCapture : 0) |
87 (request_.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE ?
88 AwPermissionRequest::VideoCapture : 0);
89 }
90
91 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698