Chromium Code Reviews| Index: chrome/browser/permissions/permission_context_base.cc |
| diff --git a/chrome/browser/permissions/permission_context_base.cc b/chrome/browser/permissions/permission_context_base.cc |
| index 85744db632eeddf5e4316084ec4f66adb5adc5da..bb08c3b2c68ebe13c2d146eda227623b394f23d4 100644 |
| --- a/chrome/browser/permissions/permission_context_base.cc |
| +++ b/chrome/browser/permissions/permission_context_base.cc |
| @@ -15,6 +15,8 @@ |
| #include "chrome/browser/permissions/permission_decision_auto_blocker.h" |
| #include "chrome/browser/permissions/permission_request.h" |
| #include "chrome/browser/permissions/permission_request_id.h" |
| +#include "chrome/browser/permissions/permission_request_impl.h" |
| +#include "chrome/browser/permissions/permission_request_manager.h" |
| #include "chrome/browser/permissions/permission_uma_util.h" |
| #include "chrome/browser/permissions/permission_util.h" |
| #include "chrome/browser/profiles/profile.h" |
| @@ -31,9 +33,6 @@ |
| #if defined(OS_ANDROID) |
| #include "chrome/browser/permissions/permission_queue_controller.h" |
| -#else |
| -#include "chrome/browser/permissions/permission_request_impl.h" |
| -#include "chrome/browser/permissions/permission_request_manager.h" |
| #endif |
| // static |
| @@ -174,36 +173,51 @@ void PermissionContextBase::DecidePermission( |
| const BrowserPermissionCallback& callback) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| -#if !defined(OS_ANDROID) |
| - PermissionRequestManager* permission_request_manager = |
| - PermissionRequestManager::FromWebContents(web_contents); |
| - // TODO(felt): sometimes |permission_request_manager| is null. This check is |
| - // meant to prevent crashes. See crbug.com/457091. |
| - if (!permission_request_manager) |
| - return; |
| - std::unique_ptr<PermissionRequest> request_ptr(new PermissionRequestImpl( |
| - requesting_origin, permission_type_, profile_, user_gesture, |
| - base::Bind(&PermissionContextBase::PermissionDecided, |
| - weak_factory_.GetWeakPtr(), id, requesting_origin, |
| - embedding_origin, user_gesture, callback), |
| - base::Bind(&PermissionContextBase::CleanUpRequest, |
| - weak_factory_.GetWeakPtr(), id))); |
| - PermissionRequest* request = request_ptr.get(); |
| - |
| - bool inserted = |
| - pending_requests_.add(id.ToString(), std::move(request_ptr)).second; |
| - DCHECK(inserted) << "Duplicate id " << id.ToString(); |
| - permission_request_manager->AddRequest(request); |
| -#else |
| - GetQueueController()->CreateInfoBarRequest( |
| - id, requesting_origin, embedding_origin, user_gesture, |
| - base::Bind(&PermissionContextBase::PermissionDecided, |
| - weak_factory_.GetWeakPtr(), id, requesting_origin, |
| - embedding_origin, user_gesture, callback, |
| - // the queue controller takes care of persisting the |
| - // permission |
| - false)); |
| + if (PermissionRequestManager::IsEnabled()) { |
| + PermissionRequestManager* permission_request_manager = |
| + PermissionRequestManager::FromWebContents(web_contents); |
| + |
| +#if defined(OS_ANDROID) |
| + // PermissionRequestManager didn't go through tab helper and got |
| + // created on Android, so create it here. |
|
raymes
2016/10/19 00:25:41
Can we just move the creation line in https://cs.c
lshang
2016/10/20 05:03:10
Done. Moved it so that it gets created on Android
|
| + if (web_contents) { |
| + PermissionRequestManager::CreateForWebContents(web_contents); |
| + permission_request_manager = |
| + PermissionRequestManager::FromWebContents(web_contents); |
| + permission_request_manager->DisplayPendingRequests(); |
|
raymes
2016/10/19 00:25:41
How come this is needed? Where will it happen in t
lshang
2016/10/20 05:03:10
PermissionRequestManager::DisplayPendingRequests()
|
| + } |
| #endif |
| + |
| + // TODO(felt): sometimes |permission_request_manager| is null. This check is |
| + // meant to prevent crashes. See crbug.com/457091. |
| + if (!permission_request_manager) { |
| + return; |
| + } |
| + std::unique_ptr<PermissionRequest> request_ptr(new PermissionRequestImpl( |
| + requesting_origin, permission_type_, profile_, user_gesture, |
| + base::Bind(&PermissionContextBase::PermissionDecided, |
| + weak_factory_.GetWeakPtr(), id, requesting_origin, |
| + embedding_origin, user_gesture, callback), |
| + base::Bind(&PermissionContextBase::CleanUpRequest, |
| + weak_factory_.GetWeakPtr(), id))); |
| + PermissionRequest* request = request_ptr.get(); |
| + |
| + bool inserted = |
| + pending_requests_.add(id.ToString(), std::move(request_ptr)).second; |
| + DCHECK(inserted) << "Duplicate id " << id.ToString(); |
| + permission_request_manager->AddRequest(request); |
| + } else { |
| +#if defined(OS_ANDROID) |
| + GetQueueController()->CreateInfoBarRequest( |
| + id, requesting_origin, embedding_origin, user_gesture, |
| + base::Bind(&PermissionContextBase::PermissionDecided, |
| + weak_factory_.GetWeakPtr(), id, requesting_origin, |
| + embedding_origin, user_gesture, callback, |
| + // the queue controller takes care of persisting the |
| + // permission |
| + false)); |
| +#endif |
|
raymes
2016/10/19 00:25:41
nit: I think this should have:
#else
NOTREACHED();
lshang
2016/10/20 05:03:10
Done.
|
| + } |
| } |
| void PermissionContextBase::PermissionDecided( |