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

Unified Diff: chrome/browser/media/webrtc/media_stream_devices_controller.cc

Issue 2829123003: Make media permission requests go through the PermissionManager (Closed)
Patch Set: Grouped requests Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media/webrtc/media_stream_devices_controller.cc
diff --git a/chrome/browser/media/webrtc/media_stream_devices_controller.cc b/chrome/browser/media/webrtc/media_stream_devices_controller.cc
index 9a867c301c00791fd34809f48f475edc0d427cda..cb0f2e664f9ef7034a428a30ed13384310738335 100644
--- a/chrome/browser/media/webrtc/media_stream_devices_controller.cc
+++ b/chrome/browser/media/webrtc/media_stream_devices_controller.cc
@@ -8,6 +8,7 @@
#include <utility>
#include "base/callback_helpers.h"
+#include "base/feature_list.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/utf_string_conversions.h"
@@ -23,7 +24,7 @@
#include "chrome/browser/permissions/permission_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
-#include "chrome/common/chrome_switches.h"
+#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "chrome/grit/generated_resources.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
@@ -387,6 +388,29 @@ void MediaStreamDevicesController::PromptAnswered(ContentSetting setting,
RunCallback();
}
+void MediaStreamDevicesController::PromptAnsweredGroupedRequest(
+ const std::vector<ContentSetting>& response) {
+ DCHECK(response.size() == 1 || response.size() == 2);
+
+ // The audio setting will always be the first one in the vector, if it was
+ // requested.
+ if (audio_setting_ == CONTENT_SETTING_ASK)
+ audio_setting_ = response.front();
+
+ if (video_setting_ == CONTENT_SETTING_ASK)
+ video_setting_ = response.back();
+
+ if (audio_setting_ == CONTENT_SETTING_BLOCK ||
Timothy Loh 2017/04/24 04:18:57 Should this be an &&? Looks like RunCallback() wil
raymes 2017/04/26 00:10:30 We should only really be updating |denial_reason_|
Timothy Loh 2017/04/26 01:40:25 OK, sounds reasonable.
+ video_setting_ == CONTENT_SETTING_BLOCK) {
+ denial_reason_ = content::MEDIA_DEVICE_PERMISSION_DENIED;
+ } else if (audio_setting_ == CONTENT_SETTING_ASK ||
+ video_setting_ == CONTENT_SETTING_ASK) {
+ denial_reason_ = content::MEDIA_DEVICE_PERMISSION_DISMISSED;
+ }
+
+ RunCallback();
+}
+
#if defined(OS_ANDROID)
void MediaStreamDevicesController::AndroidOSPromptAnswered(bool allowed) {
DCHECK(audio_setting_ != CONTENT_SETTING_ASK &&
@@ -416,10 +440,10 @@ void MediaStreamDevicesController::RequestPermissionsWithDelegate(
const content::MediaStreamRequest& request,
const content::MediaResponseCallback& callback,
PermissionPromptDelegate* delegate) {
+ content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
+ request.render_process_id, request.render_frame_id);
content::WebContents* web_contents =
- content::WebContents::FromRenderFrameHost(
- content::RenderFrameHost::FromID(request.render_process_id,
- request.render_frame_id));
+ content::WebContents::FromRenderFrameHost(rfh);
if (request.request_type == content::MEDIA_OPEN_DEVICE_PEPPER_ONLY) {
MediaPermissionRequestLogger::LogRequest(
web_contents, request.render_process_id, request.render_frame_id,
@@ -433,13 +457,32 @@ void MediaStreamDevicesController::RequestPermissionsWithDelegate(
if (controller->IsAskingForAudio() || controller->IsAskingForVideo()) {
Profile* profile =
Profile::FromBrowserContext(web_contents->GetBrowserContext());
- delegate->ShowPrompt(
- request.user_gesture, web_contents,
- base::MakeUnique<Request>(
- profile, controller->IsAskingForAudio(),
- controller->IsAskingForVideo(), request.security_origin,
- base::Bind(&MediaStreamDevicesController::PromptAnswered,
- base::Passed(&controller))));
+ if (base::FeatureList::IsEnabled(
+ features::kUsePermissionManagerForMediaRequests)) {
+ std::vector<ContentSettingsType> content_settings_types;
+
+ if (controller->IsAskingForAudio())
+ content_settings_types.push_back(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC);
+ if (controller->IsAskingForVideo()) {
+ content_settings_types.push_back(
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA);
+ }
+
+ PermissionManager::Get(profile)->RequestPermissions(
+ content_settings_types, rfh, request.security_origin,
+ request.user_gesture,
+ base::Bind(
+ &MediaStreamDevicesController::PromptAnsweredGroupedRequest,
+ base::Passed(&controller)));
+ } else {
+ delegate->ShowPrompt(
+ request.user_gesture, web_contents,
+ base::MakeUnique<Request>(
+ profile, controller->IsAskingForAudio(),
+ controller->IsAskingForVideo(), request.security_origin,
+ base::Bind(&MediaStreamDevicesController::PromptAnswered,
+ base::Passed(&controller))));
+ }
return;
}
« no previous file with comments | « chrome/browser/media/webrtc/media_stream_devices_controller.h ('k') | chrome/browser/permissions/permission_request.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698