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

Side by Side Diff: content/browser/permissions/permission_service_impl.cc

Issue 1158813002: Use RenderFrameHost for ::RequestPermission() and ::CancelPermission(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: build fixes Created 5 years, 6 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 unified diff | Download patch
OLDNEW
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 "content/browser/permissions/permission_service_impl.h" 5 #include "content/browser/permissions/permission_service_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "content/public/browser/browser_context.h" 8 #include "content/public/browser/browser_context.h"
9 #include "content/public/browser/permission_manager.h" 9 #include "content/public/browser/permission_manager.h"
10 #include "content/public/browser/permission_type.h" 10 #include "content/public/browser/permission_type.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 const mojo::String& origin, 84 const mojo::String& origin,
85 bool user_gesture, 85 bool user_gesture,
86 const PermissionStatusCallback& callback) { 86 const PermissionStatusCallback& callback) {
87 // This condition is valid if the call is coming from a ChildThread instead of 87 // This condition is valid if the call is coming from a ChildThread instead of
88 // a RenderFrame. Some consumers of the service run in Workers and some in 88 // a RenderFrame. Some consumers of the service run in Workers and some in
89 // Frames. In the context of a Worker, it is not possible to show a 89 // Frames. In the context of a Worker, it is not possible to show a
90 // permission prompt because there is no tab. In the context of a Frame, we 90 // permission prompt because there is no tab. In the context of a Frame, we
91 // can. Even if the call comes from a context where it is not possible to show 91 // can. Even if the call comes from a context where it is not possible to show
92 // any UI, we want to still return something relevant so the current 92 // any UI, we want to still return something relevant so the current
93 // permission status is returned. 93 // permission status is returned.
94 if (!context_->web_contents()) { 94 if (!context_->render_frame_host()) {
95 // There is no way to show a UI so the call will simply return the current 95 // There is no way to show a UI so the call will simply return the current
96 // permission. 96 // permission.
97 HasPermission(permission, origin, callback); 97 HasPermission(permission, origin, callback);
98 return; 98 return;
99 } 99 }
100 100
101 BrowserContext* browser_context = context_->GetBrowserContext(); 101 BrowserContext* browser_context = context_->GetBrowserContext();
102 DCHECK(browser_context); 102 DCHECK(browser_context);
103 if (!browser_context->GetPermissionManager()) { 103 if (!browser_context->GetPermissionManager()) {
104 callback.Run(content::PERMISSION_STATUS_DENIED); 104 callback.Run(content::PERMISSION_STATUS_DENIED);
105 return; 105 return;
106 } 106 }
107 107
108 PermissionType permission_type = PermissionNameToPermissionType(permission); 108 PermissionType permission_type = PermissionNameToPermissionType(permission);
109 int request_id = pending_requests_.Add( 109 int request_id = pending_requests_.Add(
110 new PendingRequest(permission_type, GURL(origin), callback)); 110 new PendingRequest(permission_type, GURL(origin), callback));
111 111
112 browser_context->GetPermissionManager()->RequestPermission( 112 browser_context->GetPermissionManager()->RequestPermission(
113 permission_type, 113 permission_type,
114 context_->web_contents(), 114 context_->render_frame_host(),
115 request_id, 115 request_id,
116 GURL(origin), 116 GURL(origin),
117 user_gesture, // TODO(mlamouri): should be removed (crbug.com/423770) 117 user_gesture, // TODO(mlamouri): should be removed (crbug.com/423770)
118 base::Bind(&PermissionServiceImpl::OnRequestPermissionResponse, 118 base::Bind(&PermissionServiceImpl::OnRequestPermissionResponse,
119 weak_factory_.GetWeakPtr(), 119 weak_factory_.GetWeakPtr(),
120 request_id)); 120 request_id));
121 } 121 }
122 122
123 void PermissionServiceImpl::OnRequestPermissionResponse( 123 void PermissionServiceImpl::OnRequestPermissionResponse(
124 int request_id, 124 int request_id,
125 PermissionStatus status) { 125 PermissionStatus status) {
126 PendingRequest* request = pending_requests_.Lookup(request_id); 126 PendingRequest* request = pending_requests_.Lookup(request_id);
127 PermissionStatusCallback callback(request->callback); 127 PermissionStatusCallback callback(request->callback);
128 request->callback.reset(); 128 request->callback.reset();
129 pending_requests_.Remove(request_id); 129 pending_requests_.Remove(request_id);
130 callback.Run(status); 130 callback.Run(status);
131 } 131 }
132 132
133 void PermissionServiceImpl::CancelPendingOperations() { 133 void PermissionServiceImpl::CancelPendingOperations() {
134 DCHECK(context_->web_contents()); 134 DCHECK(context_->render_frame_host());
135 DCHECK(context_->GetBrowserContext()); 135 DCHECK(context_->GetBrowserContext());
136 136
137 PermissionManager* permission_manager = 137 PermissionManager* permission_manager =
138 context_->GetBrowserContext()->GetPermissionManager(); 138 context_->GetBrowserContext()->GetPermissionManager();
139 if (!permission_manager) 139 if (!permission_manager)
140 return; 140 return;
141 141
142 // Cancel pending requests. 142 // Cancel pending requests.
143 for (RequestsMap::Iterator<PendingRequest> it(&pending_requests_); 143 for (RequestsMap::Iterator<PendingRequest> it(&pending_requests_);
144 !it.IsAtEnd(); it.Advance()) { 144 !it.IsAtEnd(); it.Advance()) {
145 permission_manager->CancelPermissionRequest( 145 permission_manager->CancelPermissionRequest(
146 it.GetCurrentValue()->permission, 146 it.GetCurrentValue()->permission,
147 context_->web_contents(), 147 context_->render_frame_host(),
148 it.GetCurrentKey(), 148 it.GetCurrentKey(),
149 it.GetCurrentValue()->origin); 149 it.GetCurrentValue()->origin);
150 } 150 }
151 pending_requests_.Clear(); 151 pending_requests_.Clear();
152 152
153 // Cancel pending subscriptions. 153 // Cancel pending subscriptions.
154 for (SubscriptionsMap::Iterator<PendingSubscription> 154 for (SubscriptionsMap::Iterator<PendingSubscription>
155 it(&pending_subscriptions_); !it.IsAtEnd(); it.Advance()) { 155 it(&pending_subscriptions_); !it.IsAtEnd(); it.Advance()) {
156 it.GetCurrentValue()->callback.Run(GetPermissionStatusFromType( 156 it.GetCurrentValue()->callback.Run(GetPermissionStatusFromType(
157 it.GetCurrentValue()->permission, it.GetCurrentValue()->origin)); 157 it.GetCurrentValue()->permission, it.GetCurrentValue()->origin));
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 278
279 PermissionStatusCallback callback = subscription->callback; 279 PermissionStatusCallback callback = subscription->callback;
280 280
281 subscription->callback.reset(); 281 subscription->callback.reset();
282 pending_subscriptions_.Remove(pending_subscription_id); 282 pending_subscriptions_.Remove(pending_subscription_id);
283 283
284 callback.Run(status); 284 callback.Run(status);
285 } 285 }
286 286
287 } // namespace content 287 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/permissions/permission_service_context.cc ('k') | content/public/browser/permission_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698