Chromium Code Reviews| 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/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
| 13 #include "build/build_config.h" | 13 #include "build/build_config.h" |
| 14 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 14 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| 15 #include "chrome/browser/permissions/permission_decision_auto_blocker.h" | 15 #include "chrome/browser/permissions/permission_decision_auto_blocker.h" |
| 16 #include "chrome/browser/permissions/permission_request.h" | 16 #include "chrome/browser/permissions/permission_request.h" |
| 17 #include "chrome/browser/permissions/permission_request_id.h" | 17 #include "chrome/browser/permissions/permission_request_id.h" |
| 18 #include "chrome/browser/permissions/permission_request_impl.h" | |
| 19 #include "chrome/browser/permissions/permission_request_manager.h" | |
| 18 #include "chrome/browser/permissions/permission_uma_util.h" | 20 #include "chrome/browser/permissions/permission_uma_util.h" |
| 19 #include "chrome/browser/permissions/permission_util.h" | 21 #include "chrome/browser/permissions/permission_util.h" |
| 20 #include "chrome/browser/profiles/profile.h" | 22 #include "chrome/browser/profiles/profile.h" |
| 21 #include "chrome/common/pref_names.h" | 23 #include "chrome/common/pref_names.h" |
| 22 #include "components/content_settings/core/browser/host_content_settings_map.h" | 24 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 23 #include "components/content_settings/core/browser/website_settings_registry.h" | 25 #include "components/content_settings/core/browser/website_settings_registry.h" |
| 24 #include "components/prefs/pref_service.h" | 26 #include "components/prefs/pref_service.h" |
| 25 #include "components/variations/variations_associated_data.h" | 27 #include "components/variations/variations_associated_data.h" |
| 26 #include "content/public/browser/browser_thread.h" | 28 #include "content/public/browser/browser_thread.h" |
| 27 #include "content/public/browser/render_frame_host.h" | 29 #include "content/public/browser/render_frame_host.h" |
| 28 #include "content/public/browser/web_contents.h" | 30 #include "content/public/browser/web_contents.h" |
| 29 #include "content/public/common/origin_util.h" | 31 #include "content/public/common/origin_util.h" |
| 30 #include "url/gurl.h" | 32 #include "url/gurl.h" |
| 31 | 33 |
| 32 #if defined(OS_ANDROID) | 34 #if defined(OS_ANDROID) |
| 33 #include "chrome/browser/permissions/permission_queue_controller.h" | 35 #include "chrome/browser/permissions/permission_queue_controller.h" |
| 34 #else | |
| 35 #include "chrome/browser/permissions/permission_request_impl.h" | |
| 36 #include "chrome/browser/permissions/permission_request_manager.h" | |
| 37 #endif | 36 #endif |
| 38 | 37 |
| 39 // static | 38 // static |
| 40 const char PermissionContextBase::kPermissionsKillSwitchFieldStudy[] = | 39 const char PermissionContextBase::kPermissionsKillSwitchFieldStudy[] = |
| 41 "PermissionsKillSwitch"; | 40 "PermissionsKillSwitch"; |
| 42 // static | 41 // static |
| 43 const char PermissionContextBase::kPermissionsKillSwitchBlockedValue[] = | 42 const char PermissionContextBase::kPermissionsKillSwitchBlockedValue[] = |
| 44 "blocked"; | 43 "blocked"; |
| 45 | 44 |
| 46 PermissionContextBase::PermissionContextBase( | 45 PermissionContextBase::PermissionContextBase( |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 167 | 166 |
| 168 void PermissionContextBase::DecidePermission( | 167 void PermissionContextBase::DecidePermission( |
| 169 content::WebContents* web_contents, | 168 content::WebContents* web_contents, |
| 170 const PermissionRequestID& id, | 169 const PermissionRequestID& id, |
| 171 const GURL& requesting_origin, | 170 const GURL& requesting_origin, |
| 172 const GURL& embedding_origin, | 171 const GURL& embedding_origin, |
| 173 bool user_gesture, | 172 bool user_gesture, |
| 174 const BrowserPermissionCallback& callback) { | 173 const BrowserPermissionCallback& callback) { |
| 175 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 174 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 176 | 175 |
| 177 #if !defined(OS_ANDROID) | 176 if (PermissionRequestManager::IsEnabled()) { |
| 178 PermissionRequestManager* permission_request_manager = | 177 PermissionRequestManager* permission_request_manager = |
| 179 PermissionRequestManager::FromWebContents(web_contents); | 178 PermissionRequestManager::FromWebContents(web_contents); |
| 180 // TODO(felt): sometimes |permission_request_manager| is null. This check is | 179 // TODO(felt): sometimes |permission_request_manager| is null. This check is |
| 181 // meant to prevent crashes. See crbug.com/457091. | 180 // meant to prevent crashes. See crbug.com/457091. |
| 182 if (!permission_request_manager) | 181 if (!permission_request_manager) |
| 183 return; | 182 return; |
| 184 std::unique_ptr<PermissionRequest> request_ptr(new PermissionRequestImpl( | |
| 185 requesting_origin, permission_type_, profile_, user_gesture, | |
| 186 base::Bind(&PermissionContextBase::PermissionDecided, | |
| 187 weak_factory_.GetWeakPtr(), id, requesting_origin, | |
| 188 embedding_origin, user_gesture, callback), | |
| 189 base::Bind(&PermissionContextBase::CleanUpRequest, | |
| 190 weak_factory_.GetWeakPtr(), id))); | |
| 191 PermissionRequest* request = request_ptr.get(); | |
| 192 | 183 |
| 193 bool inserted = | 184 std::unique_ptr<PermissionRequest> request_ptr(new PermissionRequestImpl( |
|
dominickn
2016/10/26 02:51:16
Nit: #include "base/memory/ptr_util.h", and use
b
lshang
2016/10/26 04:55:17
Done.
| |
| 194 pending_requests_.add(id.ToString(), std::move(request_ptr)).second; | 185 requesting_origin, permission_type_, profile_, user_gesture, |
| 195 DCHECK(inserted) << "Duplicate id " << id.ToString(); | 186 base::Bind(&PermissionContextBase::PermissionDecided, |
| 196 permission_request_manager->AddRequest(request); | 187 weak_factory_.GetWeakPtr(), id, requesting_origin, |
| 188 embedding_origin, user_gesture, callback), | |
| 189 base::Bind(&PermissionContextBase::CleanUpRequest, | |
| 190 weak_factory_.GetWeakPtr(), id))); | |
| 191 PermissionRequest* request = request_ptr.get(); | |
| 192 | |
| 193 bool inserted = | |
| 194 pending_requests_.add(id.ToString(), std::move(request_ptr)).second; | |
| 195 DCHECK(inserted) << "Duplicate id " << id.ToString(); | |
| 196 permission_request_manager->AddRequest(request); | |
| 197 } else { | |
| 198 #if defined(OS_ANDROID) | |
| 199 GetQueueController()->CreateInfoBarRequest( | |
| 200 id, requesting_origin, embedding_origin, user_gesture, | |
| 201 base::Bind(&PermissionContextBase::PermissionDecided, | |
| 202 weak_factory_.GetWeakPtr(), id, requesting_origin, | |
| 203 embedding_origin, user_gesture, callback, | |
| 204 // the queue controller takes care of persisting the | |
| 205 // permission | |
| 206 false)); | |
| 197 #else | 207 #else |
| 198 GetQueueController()->CreateInfoBarRequest( | 208 NOTREACHED(); |
| 199 id, requesting_origin, embedding_origin, user_gesture, | |
| 200 base::Bind(&PermissionContextBase::PermissionDecided, | |
| 201 weak_factory_.GetWeakPtr(), id, requesting_origin, | |
| 202 embedding_origin, user_gesture, callback, | |
| 203 // the queue controller takes care of persisting the | |
| 204 // permission | |
| 205 false)); | |
| 206 #endif | 209 #endif |
| 210 } | |
| 207 } | 211 } |
| 208 | 212 |
| 209 void PermissionContextBase::PermissionDecided( | 213 void PermissionContextBase::PermissionDecided( |
| 210 const PermissionRequestID& id, | 214 const PermissionRequestID& id, |
| 211 const GURL& requesting_origin, | 215 const GURL& requesting_origin, |
| 212 const GURL& embedding_origin, | 216 const GURL& embedding_origin, |
| 213 bool user_gesture, | 217 bool user_gesture, |
| 214 const BrowserPermissionCallback& callback, | 218 const BrowserPermissionCallback& callback, |
| 215 bool persist, | 219 bool persist, |
| 216 ContentSetting content_setting) { | 220 ContentSetting content_setting) { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 301 content_setting); | 305 content_setting); |
| 302 } | 306 } |
| 303 | 307 |
| 304 bool PermissionContextBase::IsPermissionKillSwitchOn() const { | 308 bool PermissionContextBase::IsPermissionKillSwitchOn() const { |
| 305 const std::string param = variations::GetVariationParamValue( | 309 const std::string param = variations::GetVariationParamValue( |
| 306 kPermissionsKillSwitchFieldStudy, | 310 kPermissionsKillSwitchFieldStudy, |
| 307 PermissionUtil::GetPermissionString(permission_type_)); | 311 PermissionUtil::GetPermissionString(permission_type_)); |
| 308 | 312 |
| 309 return param == kPermissionsKillSwitchBlockedValue; | 313 return param == kPermissionsKillSwitchBlockedValue; |
| 310 } | 314 } |
| OLD | NEW |