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/permissions/permission_context_base.h" | 5 #include "chrome/browser/permissions/permission_context_base.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
13 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 13 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| 14 #include "chrome/browser/permissions/permission_request.h" |
14 #include "chrome/browser/permissions/permission_request_id.h" | 15 #include "chrome/browser/permissions/permission_request_id.h" |
15 #include "chrome/browser/permissions/permission_uma_util.h" | 16 #include "chrome/browser/permissions/permission_uma_util.h" |
16 #include "chrome/browser/permissions/permission_util.h" | 17 #include "chrome/browser/permissions/permission_util.h" |
17 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
19 #include "components/content_settings/core/browser/host_content_settings_map.h" | 20 #include "components/content_settings/core/browser/host_content_settings_map.h" |
20 #include "components/content_settings/core/browser/website_settings_registry.h" | 21 #include "components/content_settings/core/browser/website_settings_registry.h" |
21 #include "components/prefs/pref_service.h" | 22 #include "components/prefs/pref_service.h" |
22 #include "components/variations/variations_associated_data.h" | 23 #include "components/variations/variations_associated_data.h" |
23 #include "content/public/browser/browser_thread.h" | 24 #include "content/public/browser/browser_thread.h" |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 171 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
171 | 172 |
172 #if !defined(OS_ANDROID) | 173 #if !defined(OS_ANDROID) |
173 PermissionRequestManager* permission_request_manager = | 174 PermissionRequestManager* permission_request_manager = |
174 PermissionRequestManager::FromWebContents(web_contents); | 175 PermissionRequestManager::FromWebContents(web_contents); |
175 // TODO(felt): sometimes |permission_request_manager| is null. This check is | 176 // TODO(felt): sometimes |permission_request_manager| is null. This check is |
176 // meant to prevent crashes. See crbug.com/457091. | 177 // meant to prevent crashes. See crbug.com/457091. |
177 if (!permission_request_manager) | 178 if (!permission_request_manager) |
178 return; | 179 return; |
179 std::unique_ptr<PermissionRequest> request_ptr(new PermissionRequestImpl( | 180 std::unique_ptr<PermissionRequest> request_ptr(new PermissionRequestImpl( |
180 requesting_origin, permission_type_, profile_, user_gesture, | 181 requesting_origin, permission_type_, profile_, user_gesture, |
181 base::Bind(&PermissionContextBase::PermissionDecided, | 182 base::Bind(&PermissionContextBase::PermissionDecided, |
182 weak_factory_.GetWeakPtr(), id, requesting_origin, | 183 weak_factory_.GetWeakPtr(), id, requesting_origin, |
183 embedding_origin, callback), | 184 embedding_origin, user_gesture, callback), |
184 base::Bind(&PermissionContextBase::CleanUpRequest, | 185 base::Bind(&PermissionContextBase::CleanUpRequest, |
185 weak_factory_.GetWeakPtr(), id))); | 186 weak_factory_.GetWeakPtr(), id))); |
186 PermissionRequest* request = request_ptr.get(); | 187 PermissionRequest* request = request_ptr.get(); |
187 | 188 |
188 bool inserted = | 189 bool inserted = |
189 pending_requests_.add(id.ToString(), std::move(request_ptr)).second; | 190 pending_requests_.add(id.ToString(), std::move(request_ptr)).second; |
190 DCHECK(inserted) << "Duplicate id " << id.ToString(); | 191 DCHECK(inserted) << "Duplicate id " << id.ToString(); |
191 permission_request_manager->AddRequest(request); | 192 permission_request_manager->AddRequest(request); |
192 #else | 193 #else |
| 194 // TODO(stefanocs): Pass |user_gesture| to CreateInfoBarRequest to record |
| 195 // permission actions in infobar. |
193 GetQueueController()->CreateInfoBarRequest( | 196 GetQueueController()->CreateInfoBarRequest( |
194 id, requesting_origin, embedding_origin, | 197 id, requesting_origin, embedding_origin, |
195 base::Bind(&PermissionContextBase::PermissionDecided, | 198 base::Bind(&PermissionContextBase::PermissionDecided, |
196 weak_factory_.GetWeakPtr(), id, requesting_origin, | 199 weak_factory_.GetWeakPtr(), id, requesting_origin, |
197 embedding_origin, callback, | 200 embedding_origin, user_gesture, callback, |
198 // the queue controller takes care of persisting the | 201 // the queue controller takes care of persisting the |
199 // permission | 202 // permission |
200 false)); | 203 false)); |
201 #endif | 204 #endif |
202 } | 205 } |
203 | 206 |
204 void PermissionContextBase::PermissionDecided( | 207 void PermissionContextBase::PermissionDecided( |
205 const PermissionRequestID& id, | 208 const PermissionRequestID& id, |
206 const GURL& requesting_origin, | 209 const GURL& requesting_origin, |
207 const GURL& embedding_origin, | 210 const GURL& embedding_origin, |
| 211 bool user_gesture, |
208 const BrowserPermissionCallback& callback, | 212 const BrowserPermissionCallback& callback, |
209 bool persist, | 213 bool persist, |
210 ContentSetting content_setting) { | 214 ContentSetting content_setting) { |
211 #if !defined(OS_ANDROID) | 215 #if !defined(OS_ANDROID) |
212 // Infobar persistence and its related UMA is tracked on the infobar | 216 // Infobar persistence and its related UMA is tracked on the infobar |
213 // controller directly. | 217 // controller directly. |
| 218 PermissionRequestGestureType gesture_type = |
| 219 user_gesture ? PermissionRequestGestureType::GESTURE |
| 220 : PermissionRequestGestureType::NO_GESTURE; |
214 if (persist) { | 221 if (persist) { |
215 DCHECK(content_setting == CONTENT_SETTING_ALLOW || | 222 DCHECK(content_setting == CONTENT_SETTING_ALLOW || |
216 content_setting == CONTENT_SETTING_BLOCK); | 223 content_setting == CONTENT_SETTING_BLOCK); |
217 if (content_setting == CONTENT_SETTING_ALLOW) | 224 if (content_setting == CONTENT_SETTING_ALLOW) { |
218 PermissionUmaUtil::PermissionGranted(permission_type_, requesting_origin, | 225 PermissionUmaUtil::PermissionGranted(permission_type_, gesture_type, |
219 profile_); | 226 requesting_origin, profile_); |
220 else | 227 } else { |
221 PermissionUmaUtil::PermissionDenied(permission_type_, requesting_origin, | 228 PermissionUmaUtil::PermissionDenied(permission_type_, gesture_type, |
222 profile_); | 229 requesting_origin, profile_); |
| 230 } |
223 } else { | 231 } else { |
224 DCHECK_EQ(content_setting, CONTENT_SETTING_DEFAULT); | 232 DCHECK_EQ(content_setting, CONTENT_SETTING_DEFAULT); |
225 PermissionUmaUtil::PermissionDismissed(permission_type_, requesting_origin, | 233 PermissionUmaUtil::PermissionDismissed(permission_type_, gesture_type, |
226 profile_); | 234 requesting_origin, profile_); |
227 } | 235 } |
228 #endif | 236 #endif |
229 | 237 |
230 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, | 238 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, |
231 persist, content_setting); | 239 persist, content_setting); |
232 } | 240 } |
233 | 241 |
234 #if defined(OS_ANDROID) | 242 #if defined(OS_ANDROID) |
235 PermissionQueueController* PermissionContextBase::GetQueueController() { | 243 PermissionQueueController* PermissionContextBase::GetQueueController() { |
236 return permission_queue_controller_.get(); | 244 return permission_queue_controller_.get(); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 content_setting); | 294 content_setting); |
287 } | 295 } |
288 | 296 |
289 bool PermissionContextBase::IsPermissionKillSwitchOn() const { | 297 bool PermissionContextBase::IsPermissionKillSwitchOn() const { |
290 const std::string param = variations::GetVariationParamValue( | 298 const std::string param = variations::GetVariationParamValue( |
291 kPermissionsKillSwitchFieldStudy, | 299 kPermissionsKillSwitchFieldStudy, |
292 PermissionUtil::GetPermissionString(permission_type_)); | 300 PermissionUtil::GetPermissionString(permission_type_)); |
293 | 301 |
294 return param == kPermissionsKillSwitchBlockedValue; | 302 return param == kPermissionsKillSwitchBlockedValue; |
295 } | 303 } |
OLD | NEW |