Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(529)

Unified Diff: chrome/browser/permissions/permission_manager.cc

Issue 1342833002: permissions: handle request ids for permissions in permission manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/permissions/permission_manager.cc
diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc
index f5564e6ec45908ef4f39e89e80cbf380f6391e97..2422d1b170b59ff58ed59115b00421499874be8f 100644
--- a/chrome/browser/permissions/permission_manager.cc
+++ b/chrome/browser/permissions/permission_manager.cc
@@ -78,14 +78,6 @@ ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) {
return CONTENT_SETTINGS_TYPE_DEFAULT;
}
-// Helper method that wraps a callback a void(PermissionStatus)
-// callback into a void(ContentSetting) callback.
-void PermissionStatusCallbackWrapper(
- const base::Callback<void(PermissionStatus)>& callback,
- ContentSetting content_setting) {
- callback.Run(ContentSettingToPermissionStatus(content_setting));
-}
-
// Returns whether the permission has a constant PermissionStatus value (i.e.
// always approved or always denied)
// The PermissionTypes for which true is returned should be exactly those which
@@ -121,6 +113,10 @@ PermissionStatus GetPermissionStatusForConstantPermission(PermissionType type) {
} // anonymous namespace
+struct PermissionManager::PendingRequest {
+ PermissionType permission;
+};
+
struct PermissionManager::Subscription {
PermissionType permission;
GURL requesting_origin;
@@ -130,7 +126,8 @@ struct PermissionManager::Subscription {
};
PermissionManager::PermissionManager(Profile* profile)
- : profile_(profile) {
+ : profile_(profile),
+ weak_ptr_factory_(this) {
}
PermissionManager::~PermissionManager() {
@@ -138,22 +135,21 @@ PermissionManager::~PermissionManager() {
profile_->GetHostContentSettingsMap()->RemoveObserver(this);
}
-void PermissionManager::RequestPermission(
+int PermissionManager::RequestPermission(
PermissionType permission,
content::RenderFrameHost* render_frame_host,
- int request_id,
const GURL& requesting_origin,
bool user_gesture,
const base::Callback<void(PermissionStatus)>& callback) {
if (IsConstantPermission(permission)) {
callback.Run(GetPermissionStatusForConstantPermission(permission));
- return;
+ return -1;
}
PermissionContextBase* context = PermissionContext::Get(profile_, permission);
if (!context) {
callback.Run(content::PERMISSION_STATUS_DENIED);
- return;
+ return -1;
}
content::WebContents* web_contents =
@@ -162,9 +158,13 @@ void PermissionManager::RequestPermission(
callback.Run(
GetPermissionStatus(permission, requesting_origin,
web_contents->GetLastCommittedURL().GetOrigin()));
- return;
+ return -1;
}
+ PendingRequest* pending_request = new PendingRequest();
+ pending_request->permission = permission;
+ int request_id = pending_requests_.Add(pending_request);
+
int render_process_id = render_frame_host->GetProcess()->GetID();
int render_frame_id = render_frame_host->GetRoutingID();
const PermissionRequestID request(render_process_id,
@@ -173,15 +173,31 @@ void PermissionManager::RequestPermission(
context->RequestPermission(
web_contents, request, requesting_origin, user_gesture,
- base::Bind(&PermissionStatusCallbackWrapper, callback));
+ base::Bind(&PermissionManager::OnPermissionRequestResponse,
+ weak_ptr_factory_.GetWeakPtr(),
+ request_id,
+ callback));
+ return request_id;
+}
+
+void PermissionManager::OnPermissionRequestResponse(
+ int request_id,
+ const base::Callback<void(PermissionStatus)>& callback,
+ ContentSetting content_setting) {
+ pending_requests_.Remove(request_id);
+ callback.Run(ContentSettingToPermissionStatus(content_setting));
}
void PermissionManager::CancelPermissionRequest(
- PermissionType permission,
content::RenderFrameHost* render_frame_host,
- int request_id,
- const GURL& requesting_origin) {
- PermissionContextBase* context = PermissionContext::Get(profile_, permission);
+ int request_id) {
+ PendingRequest* pending_request = pending_requests_.Lookup(request_id);
+ if (!pending_request)
+ return;
+
+ PermissionContextBase* context = PermissionContext::Get(
+ profile_, pending_request->permission);
+ pending_requests_.Remove(request_id);
if (!context)
return;

Powered by Google App Engine
This is Rietveld 408576698