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( |