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

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 768ef2b0fc9b8e5b0b2fcc5ff5592526b00fd55b..2ee1bf2bafb9861b76a3de6018ff83ad81b0987b 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,28 @@ void MediaStreamDevicesController::PromptAnswered(ContentSetting setting,
RunCallback();
}
+void MediaStreamDevicesController::PromptAnsweredGroupedRequest(
+ const std::vector<ContentSetting>& responses) {
+ DCHECK(responses.size() == 1 || responses.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_ = responses.front();
+
+ if (video_setting_ == CONTENT_SETTING_ASK)
+ video_setting_ = responses.back();
+
+ for (ContentSetting response : responses) {
+ if (response == CONTENT_SETTING_BLOCK)
+ denial_reason_ = content::MEDIA_DEVICE_PERMISSION_DENIED;
+ else if (response == 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 +439,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,
@@ -435,13 +458,32 @@ void MediaStreamDevicesController::RequestPermissionsWithDelegate(
if (is_asking_for_audio || is_asking_for_video) {
Profile* profile =
Profile::FromBrowserContext(web_contents->GetBrowserContext());
- delegate->ShowPrompt(
- request.user_gesture, web_contents,
- base::MakeUnique<Request>(
- profile, is_asking_for_audio, is_asking_for_video,
- request.security_origin,
- base::Bind(&MediaStreamDevicesController::PromptAnswered,
- base::Passed(&controller))));
+ if (base::FeatureList::IsEnabled(
+ features::kUsePermissionManagerForMediaRequests)) {
+ std::vector<ContentSettingsType> content_settings_types;
+
+ if (is_asking_for_audio)
+ content_settings_types.push_back(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC);
+ if (is_asking_for_video) {
+ 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, is_asking_for_audio, is_asking_for_video,
+ 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