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

Unified Diff: chrome/browser/ui/media_stream_infobar_delegate.cc

Issue 10537099: add "always allow" option to the mediastream infobar and allow user to allow/not allow acces to devi (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 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/ui/media_stream_infobar_delegate.cc
diff --git a/chrome/browser/ui/media_stream_infobar_delegate.cc b/chrome/browser/ui/media_stream_infobar_delegate.cc
index 91e5bead716f14c9b472b4da57aaf1880475b3ab..826d58adb271a3647407e29af04052bf9f10a154 100644
--- a/chrome/browser/ui/media_stream_infobar_delegate.cc
+++ b/chrome/browser/ui/media_stream_infobar_delegate.cc
@@ -6,6 +6,7 @@
#include <functional>
#include "base/logging.h"
+#include "chrome/browser/media/media_stream_devices_prefs.h"
#include "chrome/browser/ui/media_stream_infobar_delegate.h"
#include "content/public/common/media_stream_request.h"
#include "googleurl/src/gurl.h"
@@ -34,11 +35,13 @@ class DeviceIdEquals {
MediaStreamInfoBarDelegate::MediaStreamInfoBarDelegate(
InfoBarTabHelper* tab_helper,
+ Profile* profile,
const content::MediaStreamRequest* request,
const content::MediaResponseCallback& callback)
: InfoBarDelegate(tab_helper),
request_(request),
- callback_(callback) {
+ callback_(callback),
+ prefs_(profile) {
DCHECK(request_);
has_audio_ = request_->devices.count(
content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE) != 0;
@@ -73,18 +76,35 @@ const GURL& MediaStreamInfoBarDelegate::GetSecurityOrigin() const {
return request_->security_origin;
}
+bool MediaStreamInfoBarDelegate::ShouldShowInfoBar() {
Evan Stade 2012/06/12 01:51:12 it's unexpected that a function called ShouldShowI
no longer working on chromium 2012/06/14 13:03:25 The name has been changed to DismissInfoBarAndTake
+ DCHECK(has_audio_ || has_video_);
+ if (prefs_.IsMediaDeviceBlocked()){
+ // Users has blocked the access to the media device in content settings,
Bernhard Bauer 2012/06/11 18:16:00 Nit: "The user has blocked […]"
no longer working on chromium 2012/06/14 13:03:25 Done.
+ // deny the request without showing the infobar.
+ Deny();
+ return false;
+ }
+
+ std::string audio_id, video_id;
+ if (GetAlwaysAllowedDevices(&audio_id, &video_id)) {
+ // There are always allowed devices available for this request, grant the
+ // permission immediately without showing the infobar.
+ Accept(audio_id, video_id, false);
+ return false;
+ }
+
+ return true;
+}
+
void MediaStreamInfoBarDelegate::Accept(const std::string& audio_id,
- const std::string& video_id) {
+ const std::string& video_id,
+ bool always_allow) {
content::MediaStreamDevices devices;
+ GetDevicesWithId(audio_id, video_id, &devices);
+ DCHECK(devices.size());
- if (has_audio_) {
- AddDeviceWithId(content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE,
- audio_id, &devices);
- }
- if (has_video_) {
- AddDeviceWithId(content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE,
- video_id, &devices);
- }
+ if (always_allow)
+ prefs_.WhitelistOriginAndDevices(request_->security_origin, devices);
callback_.Run(devices);
}
@@ -93,6 +113,20 @@ void MediaStreamInfoBarDelegate::Deny() {
callback_.Run(content::MediaStreamDevices());
}
+void MediaStreamInfoBarDelegate::GetDevicesWithId(
+ const std::string& audio_id,
+ const std::string& video_id,
+ content::MediaStreamDevices* devices) {
+ if (has_audio_) {
+ AddDeviceWithId(content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE,
+ audio_id, devices);
+ }
+ if (has_video_) {
+ AddDeviceWithId(content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE,
+ video_id, devices);
+ }
+}
+
void MediaStreamInfoBarDelegate::AddDeviceWithId(
content::MediaStreamDeviceType type,
const std::string& id,
@@ -108,6 +142,34 @@ void MediaStreamInfoBarDelegate::AddDeviceWithId(
}
}
+bool MediaStreamInfoBarDelegate::GetAlwaysAllowedDevices(
Evan Stade 2012/06/12 01:51:12 with the addition of these new methods, this class
no longer working on chromium 2012/06/14 13:03:25 Added a MediaStreamDevicesController, moved most o
+ std::string* audio_id, std::string* video_id) {
+ // Check if the |origin| is in content settings exception list.
+ if (!prefs_.IsOriginAlwaysAllowed(request_->security_origin)) {
+ // Remove the |origin| if it exists in the device whitelists.
+ prefs_.RemoveOriginFromWhitelists(request_->security_origin);
+ return false;
+ }
+
+ // Check if the always allowed devices are available.
+ if (has_audio_) {
+ content::MediaStreamDevices devices = GetAudioDevices();
+ *audio_id = prefs_.GetAlwaysAllowedAudioDevice(request_->security_origin,
+ devices);
+ if (audio_id->empty())
+ return false;
+ }
+ if (has_video_) {
+ content::MediaStreamDevices devices = GetVideoDevices();
+ *video_id = prefs_.GetAlwaysAllowedVideoDevice(request_->security_origin,
+ devices);
+ if (video_id->empty())
+ return false;
+ }
+
+ return true;
+}
+
// MediaStreamInfoBarDelegate::CreateInfoBar is implemented in platform-specific
// files.

Powered by Google App Engine
This is Rietveld 408576698