OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/content_settings/permission_context_base.h" | 5 #include "chrome/browser/content_settings/permission_context_base.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "chrome/browser/content_settings/permission_bubble_request_impl.h" | 9 #include "chrome/browser/content_settings/permission_bubble_request_impl.h" |
10 #include "chrome/browser/content_settings/permission_context_uma_util.h" | 10 #include "chrome/browser/content_settings/permission_context_uma_util.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 const BrowserPermissionCallback& callback) { | 92 const BrowserPermissionCallback& callback) { |
93 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 93 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
94 | 94 |
95 if (!requesting_origin.is_valid() || !embedding_origin.is_valid()) { | 95 if (!requesting_origin.is_valid() || !embedding_origin.is_valid()) { |
96 DVLOG(1) | 96 DVLOG(1) |
97 << "Attempt to use " << content_settings::GetTypeName(permission_type_) | 97 << "Attempt to use " << content_settings::GetTypeName(permission_type_) |
98 << " from an invalid URL: " << requesting_origin | 98 << " from an invalid URL: " << requesting_origin |
99 << "," << embedding_origin | 99 << "," << embedding_origin |
100 << " (" << content_settings::GetTypeName(permission_type_) | 100 << " (" << content_settings::GetTypeName(permission_type_) |
101 << " is not supported in popups)"; | 101 << " is not supported in popups)"; |
102 NotifyPermissionSet(id, requesting_origin, embedding_origin, | 102 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, |
103 callback, false /* persist */, false /* granted */); | 103 false /* persist */, CONTENT_SETTING_BLOCK); |
104 return; | 104 return; |
105 } | 105 } |
106 | 106 |
107 ContentSetting content_setting = | 107 ContentSetting content_setting = |
108 profile_->GetHostContentSettingsMap() | 108 profile_->GetHostContentSettingsMap() |
109 ->GetContentSettingAndMaybeUpdateLastUsage( | 109 ->GetContentSettingAndMaybeUpdateLastUsage( |
110 requesting_origin, embedding_origin, permission_type_, | 110 requesting_origin, embedding_origin, permission_type_, |
111 std::string()); | 111 std::string()); |
112 | 112 |
113 switch (content_setting) { | 113 if (content_setting == CONTENT_SETTING_ALLOW || |
114 case CONTENT_SETTING_BLOCK: | 114 content_setting == CONTENT_SETTING_BLOCK) { |
115 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, | 115 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, |
116 false /* persist */, false /* granted */); | 116 false /* persist */, content_setting); |
117 return; | |
118 case CONTENT_SETTING_ALLOW: | |
119 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, | |
120 false /* persist */, true /* granted */); | |
121 return; | |
122 default: | |
123 break; | |
124 } | 117 } |
125 | 118 |
126 PermissionContextUmaUtil::PermissionRequested( | 119 PermissionContextUmaUtil::PermissionRequested( |
127 permission_type_, requesting_origin); | 120 permission_type_, requesting_origin); |
128 | 121 |
129 if (PermissionBubbleManager::Enabled()) { | 122 if (PermissionBubbleManager::Enabled()) { |
130 if (pending_bubbles_.get(id.ToString()) != NULL) | 123 if (pending_bubbles_.get(id.ToString()) != NULL) |
131 return; | 124 return; |
132 PermissionBubbleManager* bubble_manager = | 125 PermissionBubbleManager* bubble_manager = |
133 PermissionBubbleManager::FromWebContents(web_contents); | 126 PermissionBubbleManager::FromWebContents(web_contents); |
(...skipping 27 matching lines...) Expand all Loading... |
161 // permission | 154 // permission |
162 false)); | 155 false)); |
163 } | 156 } |
164 | 157 |
165 void PermissionContextBase::PermissionDecided( | 158 void PermissionContextBase::PermissionDecided( |
166 const PermissionRequestID& id, | 159 const PermissionRequestID& id, |
167 const GURL& requesting_origin, | 160 const GURL& requesting_origin, |
168 const GURL& embedding_origin, | 161 const GURL& embedding_origin, |
169 const BrowserPermissionCallback& callback, | 162 const BrowserPermissionCallback& callback, |
170 bool persist, | 163 bool persist, |
171 bool allowed) { | 164 ContentSetting content_setting) { |
172 // Infobar persistance and its related UMA is tracked on the infobar | 165 // Infobar persistance and its related UMA is tracked on the infobar |
173 // controller directly. | 166 // controller directly. |
174 if (PermissionBubbleManager::Enabled()) { | 167 if (PermissionBubbleManager::Enabled()) { |
175 if (persist) { | 168 if (persist) { |
176 if (allowed) | 169 DCHECK(content_setting == CONTENT_SETTING_ALLOW || |
| 170 content_setting == CONTENT_SETTING_BLOCK); |
| 171 if (CONTENT_SETTING_ALLOW) |
177 PermissionContextUmaUtil::PermissionGranted(permission_type_, | 172 PermissionContextUmaUtil::PermissionGranted(permission_type_, |
178 requesting_origin); | 173 requesting_origin); |
179 else | 174 else |
180 PermissionContextUmaUtil::PermissionDenied(permission_type_, | 175 PermissionContextUmaUtil::PermissionDenied(permission_type_, |
181 requesting_origin); | 176 requesting_origin); |
182 } else { | 177 } else { |
| 178 DCHECK_EQ(content_setting, CONTENT_SETTING_DEFAULT); |
183 PermissionContextUmaUtil::PermissionDismissed(permission_type_, | 179 PermissionContextUmaUtil::PermissionDismissed(permission_type_, |
184 requesting_origin); | 180 requesting_origin); |
185 } | 181 } |
186 } | 182 } |
187 | 183 |
188 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, | 184 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, |
189 persist, allowed); | 185 persist, content_setting); |
190 } | 186 } |
191 | 187 |
192 PermissionQueueController* PermissionContextBase::GetQueueController() { | 188 PermissionQueueController* PermissionContextBase::GetQueueController() { |
193 return permission_queue_controller_.get(); | 189 return permission_queue_controller_.get(); |
194 } | 190 } |
195 | 191 |
196 Profile* PermissionContextBase::profile() const { | 192 Profile* PermissionContextBase::profile() const { |
197 return profile_; | 193 return profile_; |
198 } | 194 } |
199 | 195 |
200 void PermissionContextBase::NotifyPermissionSet( | 196 void PermissionContextBase::NotifyPermissionSet( |
201 const PermissionRequestID& id, | 197 const PermissionRequestID& id, |
202 const GURL& requesting_origin, | 198 const GURL& requesting_origin, |
203 const GURL& embedding_origin, | 199 const GURL& embedding_origin, |
204 const BrowserPermissionCallback& callback, | 200 const BrowserPermissionCallback& callback, |
205 bool persist, | 201 bool persist, |
206 bool allowed) { | 202 ContentSetting content_setting) { |
207 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 203 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 204 |
208 if (persist) | 205 if (persist) |
209 UpdateContentSetting(requesting_origin, embedding_origin, allowed); | 206 UpdateContentSetting(requesting_origin, embedding_origin, content_setting); |
210 | 207 |
211 UpdateTabContext(id, requesting_origin, allowed); | 208 UpdateTabContext(id, requesting_origin, |
212 callback.Run(allowed); | 209 content_setting == CONTENT_SETTING_ALLOW); |
| 210 |
| 211 if (content_setting == CONTENT_SETTING_DEFAULT) { |
| 212 content_setting = |
| 213 profile_->GetHostContentSettingsMap()->GetDefaultContentSetting( |
| 214 permission_type_, nullptr); |
| 215 } |
| 216 |
| 217 DCHECK_NE(content_setting, CONTENT_SETTING_DEFAULT); |
| 218 callback.Run(content_setting); |
213 } | 219 } |
214 | 220 |
215 void PermissionContextBase::CleanUpBubble(const PermissionRequestID& id) { | 221 void PermissionContextBase::CleanUpBubble(const PermissionRequestID& id) { |
216 size_t success = pending_bubbles_.erase(id.ToString()); | 222 size_t success = pending_bubbles_.erase(id.ToString()); |
217 DCHECK(success == 1) << "Missing request " << id.ToString(); | 223 DCHECK(success == 1) << "Missing request " << id.ToString(); |
218 } | 224 } |
219 | 225 |
220 void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, | 226 void PermissionContextBase::UpdateContentSetting( |
221 const GURL& embedding_origin, | 227 const GURL& requesting_origin, |
222 bool allowed) { | 228 const GURL& embedding_origin, |
| 229 ContentSetting content_setting) { |
223 DCHECK_EQ(requesting_origin, requesting_origin.GetOrigin()); | 230 DCHECK_EQ(requesting_origin, requesting_origin.GetOrigin()); |
224 DCHECK_EQ(embedding_origin, embedding_origin.GetOrigin()); | 231 DCHECK_EQ(embedding_origin, embedding_origin.GetOrigin()); |
225 ContentSetting content_setting = | 232 DCHECK(content_setting == CONTENT_SETTING_ALLOW || |
226 allowed ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK; | 233 content_setting == CONTENT_SETTING_BLOCK); |
| 234 |
227 profile_->GetHostContentSettingsMap()->SetContentSetting( | 235 profile_->GetHostContentSettingsMap()->SetContentSetting( |
228 ContentSettingsPattern::FromURLNoWildcard(requesting_origin), | 236 ContentSettingsPattern::FromURLNoWildcard(requesting_origin), |
229 ContentSettingsPattern::FromURLNoWildcard(embedding_origin), | 237 ContentSettingsPattern::FromURLNoWildcard(embedding_origin), |
230 permission_type_, std::string(), content_setting); | 238 permission_type_, std::string(), content_setting); |
231 } | 239 } |
OLD | NEW |