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

Side by Side Diff: chrome/browser/media/media_stream_devices_prefs.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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 "chrome/browser/media/media_stream_devices_prefs.h"
6
7 #include "base/values.h"
8 #include "chrome/browser/content_settings/content_settings_provider.h"
9 #include "chrome/browser/content_settings/host_content_settings_map.h"
10 #include "chrome/browser/prefs/scoped_user_pref_update.h"
11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/ui/browser.h"
13 #include "chrome/common/content_settings.h"
14 #include "chrome/common/pref_names.h"
15
16 using content::BrowserThread;
17
18 MediaStreamDevicesPrefs::MediaStreamDevicesPrefs(Profile* profile)
19 : profile_(profile) {
20 }
21
22 void MediaStreamDevicesPrefs::RegisterUserPrefs(PrefService* user_prefs) {
23 if (!user_prefs->FindPreference(prefs::kMediaStreamAudioDevicesWhitelist))
Bernhard Bauer 2012/06/11 18:16:00 You shouldn't need to check whether the preference
24 user_prefs->RegisterDictionaryPref(
25 prefs::kMediaStreamAudioDevicesWhitelist, PrefService::UNSYNCABLE_PREF);
26 if (!user_prefs->FindPreference(prefs::kMediaStreamVideoDevicesWhitelist))
tommi (sloooow) - chröme 2012/06/11 20:59:21 {}
27 user_prefs->RegisterDictionaryPref(
28 prefs::kMediaStreamVideoDevicesWhitelist, PrefService::UNSYNCABLE_PREF);
29 }
30
31 std::string MediaStreamDevicesPrefs::GetAlwaysAllowedAudioDevice(
32 const GURL& origin,
33 const content::MediaStreamDevices& devices) {
34 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
35 DCHECK(!origin.is_empty());
36 if (!devices.size())
37 return std::string();
38
39 return GetAlwaysAllowedDevice(prefs::kMediaStreamAudioDevicesWhitelist,
40 origin,
41 devices);
42 }
43
44 std::string MediaStreamDevicesPrefs::GetAlwaysAllowedVideoDevice(
45 const GURL& origin,
46 const content::MediaStreamDevices& devices) {
47 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
48 DCHECK(!origin.is_empty());
49 if (!devices.size())
50 return std::string();
51
52 return GetAlwaysAllowedDevice(prefs::kMediaStreamVideoDevicesWhitelist,
53 origin,
54 devices);
55 }
56
57 void MediaStreamDevicesPrefs::WhitelistOriginAndDevices(
58 const GURL& origin,
59 const content::MediaStreamDevices& devices) {
60 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
61 DCHECK(!origin.is_empty());
62 DCHECK(devices.size());
63 content::MediaStreamDevices::const_iterator dev = devices.begin();
64 for (; dev != devices.end(); ++dev) {
65 if (dev->type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE) {
66 AddOrigin(prefs::kMediaStreamAudioDevicesWhitelist, origin, dev->name);
67 } else {
68 DCHECK_EQ(dev->type, content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE);
69 AddOrigin(prefs::kMediaStreamVideoDevicesWhitelist, origin, dev->name);
70 }
71 }
72
73 AddExceptionToContentSettings(origin);
74 }
75
76 void MediaStreamDevicesPrefs::RemoveOriginFromWhitelists(
77 const GURL& origin) {
78 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
79 DCHECK(!origin.is_empty());
80 RemoveOrigin(prefs::kMediaStreamAudioDevicesWhitelist, origin);
81 RemoveOrigin(prefs::kMediaStreamVideoDevicesWhitelist, origin);
82 }
83
84 bool MediaStreamDevicesPrefs::IsMediaDeviceBlocked() {
85 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
86 return (profile_->GetHostContentSettingsMap()->GetDefaultContentSetting(
87 CONTENT_SETTINGS_TYPE_MEDIASTREAM, NULL) == CONTENT_SETTING_BLOCK);
Bernhard Bauer 2012/06/11 18:16:00 This line is a bit awkwardly broken. You could ext
88 }
89
90 bool MediaStreamDevicesPrefs::IsOriginAlwaysAllowed(const GURL& origin) {
91 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
92 return (profile_->GetHostContentSettingsMap()->GetContentSetting(
93 origin, origin, CONTENT_SETTINGS_TYPE_MEDIASTREAM,
94 NO_RESOURCE_IDENTIFIER) == CONTENT_SETTING_ALLOW);
95 }
96
97 void MediaStreamDevicesPrefs::AddExceptionToContentSettings(
98 const GURL& origin) {
99 ContentSettingsPattern primary_pattern =
100 ContentSettingsPattern::FromURLNoWildcard(origin);
101 profile_->GetHostContentSettingsMap()->SetContentSetting(
102 primary_pattern,
103 ContentSettingsPattern::Wildcard(),
104 CONTENT_SETTINGS_TYPE_MEDIASTREAM,
105 NO_RESOURCE_IDENTIFIER,
106 CONTENT_SETTING_ALLOW);
107 }
108
109 std::string MediaStreamDevicesPrefs::GetAlwaysAllowedDevice(
110 const char* pref_id,
111 const GURL& origin,
112 const content::MediaStreamDevices& devices) {
113 content::MediaStreamDevices::const_iterator dev = devices.begin();
114 for (; dev != devices.end(); ++dev) {
115 if (IsDevicePairedWithOrigin(pref_id, origin, dev->name))
Bernhard Bauer 2012/06/11 18:16:00 You could simplify this by first getting the devic
116 return dev->device_id;
117 }
118
119 return std::string();
120 }
121
122 bool MediaStreamDevicesPrefs::IsDevicePairedWithOrigin(
123 const char* pref_id,
124 const GURL& origin,
125 const std::string& device) {
126 const DictionaryValue* dict = profile_->GetPrefs()->GetDictionary(pref_id);
127 if (!dict || dict->empty())
Bernhard Bauer 2012/06/11 18:16:00 PrefService::GetDictionary will never return NULL
128 return false;
129
130 std::string auto_target_device;
131 if (dict->GetStringWithoutPathExpansion(origin.spec(), &auto_target_device) &&
132 auto_target_device == device) {
133 return true;
134 }
135
136 return false;
137 }
138
139 void MediaStreamDevicesPrefs::AddOrigin(const char* pref_id,
140 const GURL& origin,
141 const std::string& device) {
142 DictionaryPrefUpdate update(profile_->GetPrefs(), pref_id);
143 DictionaryValue* whitelist = update.Get();
144 if (!whitelist) {
Bernhard Bauer 2012/06/11 18:16:00 This will also never be NULL if the preference is
145 NOTREACHED() << "Unregistered media stream device whitelist pref "
146 << pref_id;
147 return;
148 }
149
150 whitelist->SetWithoutPathExpansion(origin.spec(),
151 Value::CreateStringValue(device));
152 }
153
154 void MediaStreamDevicesPrefs::RemoveOrigin(
155 const char* pref_id,
156 const GURL& origin) {
157 DictionaryPrefUpdate update(profile_->GetPrefs(), pref_id);
158 DictionaryValue* whitelist = update.Get();
159 if (!whitelist) {
160 NOTREACHED() << "Unregistered media stream device whitelist pref"
161 << pref_id;
162 return;
163 }
164
165 std::string val;
166 // Remove the origin if it is in the whitelist.
167 if (whitelist->GetStringWithoutPathExpansion(origin.spec(), &val)) {
168 whitelist->RemoveWithoutPathExpansion(origin.spec(), NULL);
169 }
170 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698