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

Unified Diff: chrome/browser/media/media_capture_devices_dispatcher.cc

Issue 483523006: Check all settings when checking mic and camera access (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 6 years, 4 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/media_capture_devices_dispatcher.cc
diff --git a/chrome/browser/media/media_capture_devices_dispatcher.cc b/chrome/browser/media/media_capture_devices_dispatcher.cc
index 1db0f885648aa47237340cd8d58ce54dea3f901d..ea6f3a692f46588499189c69529733fcaaf84051 100644
--- a/chrome/browser/media/media_capture_devices_dispatcher.cc
+++ b/chrome/browser/media/media_capture_devices_dispatcher.cc
@@ -15,8 +15,12 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/content_settings/content_settings_provider.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/media/desktop_streams_registry.h"
#include "chrome/browser/media/media_stream_capture_indicator.h"
+#include "chrome/browser/media/media_stream_devices_util.h"
#include "chrome/browser/media/media_stream_infobar_delegate.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
@@ -40,6 +44,7 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/media_stream_request.h"
+#include "extensions/browser/extension_system.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
#include "extensions/common/permissions/permissions_data.h"
@@ -250,6 +255,20 @@ gfx::NativeWindow FindParentWindowForWebContents(
}
#endif
+const extensions::Extension* GetExtensionForOrigin(
+ Profile* profile,
+ const GURL& security_origin) {
+ if (!security_origin.SchemeIs(extensions::kExtensionScheme))
perkj_chrome 2014/08/28 15:09:40 Should this be CHECK( ?
Henrik Grunell 2014/08/29 07:59:09 No, it may or may not be an extension. If not, it'
+ return NULL;
+
+ ExtensionService* extensions_service =
+ extensions::ExtensionSystem::Get(profile)->extension_service();
+ const extensions::Extension* extension =
+ extensions_service->extensions()->GetByID(security_origin.host());
+ DCHECK(extension);
+ return extension;
+}
+
} // namespace
MediaCaptureDevicesDispatcher::PendingAccessRequest::PendingAccessRequest(
@@ -371,6 +390,54 @@ void MediaCaptureDevicesDispatcher::ProcessMediaAccessRequest(
}
}
+bool MediaCaptureDevicesDispatcher::CheckMediaAccessPermission(
+ content::BrowserContext* browser_context,
+ const GURL& security_origin,
+ content::MediaStreamType type) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(type == content::MEDIA_DEVICE_AUDIO_CAPTURE ||
+ type == content::MEDIA_DEVICE_VIDEO_CAPTURE);
+
+ Profile* profile = Profile::FromBrowserContext(browser_context);
+ const extensions::Extension* extension =
+ GetExtensionForOrigin(profile, security_origin);
+
+ if (extension && (extension->is_platform_app() ||
+ IsMediaRequestWhitelistedForExtension(extension))) {
+ return extension->permissions_data()->HasAPIPermission(
+ type == content::MEDIA_DEVICE_AUDIO_CAPTURE
+ ? extensions::APIPermission::kAudioCapture
+ : extensions::APIPermission::kVideoCapture);
+ } else {
perkj_chrome 2014/08/28 15:09:40 no need for else since you return above.
Henrik Grunell 2014/08/29 07:59:09 Done.
+ if (ShouldAlwaysAllowOrigin(profile, security_origin))
+ return true;
+
+ const char* policy_name = type == content::MEDIA_DEVICE_AUDIO_CAPTURE
+ ? prefs::kAudioCaptureAllowed
+ : prefs::kVideoCaptureAllowed;
+ const char* list_policy_name = type == content::MEDIA_DEVICE_AUDIO_CAPTURE
+ ? prefs::kAudioCaptureAllowedUrls
+ : prefs::kVideoCaptureAllowedUrls;
+ if (GetDevicePolicy(
+ profile, security_origin, policy_name, list_policy_name) ==
+ ALWAYS_ALLOW) {
+ return true;
+ }
+
+ if (profile->GetHostContentSettingsMap()->GetContentSetting(
+ security_origin,
perkj_chrome 2014/08/28 15:09:40 same parameter twice? Why ? please comment in code
Henrik Grunell 2014/08/29 07:59:09 Done.
+ security_origin,
+ type == content::MEDIA_DEVICE_AUDIO_CAPTURE
+ ? CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC
+ : CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
+ NO_RESOURCE_IDENTIFIER) == CONTENT_SETTING_ALLOW) {
+ return true;
+ }
+
+ return false;
+ }
+}
+
void MediaCaptureDevicesDispatcher::ProcessDesktopCaptureAccessRequest(
content::WebContents* web_contents,
const content::MediaStreamRequest& request,

Powered by Google App Engine
This is Rietveld 408576698