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

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

Issue 2842013002: Use a mojo::StrongBindingSet to manage PermissionServiceImpls (Closed)
Patch Set: Rebased Created 3 years, 7 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
« no previous file with comments | « content/browser/permissions/permission_service_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 } 75 }
76 76
77 PermissionServiceImpl::PendingRequest::~PendingRequest() { 77 PermissionServiceImpl::PendingRequest::~PendingRequest() {
78 if (callback.is_null()) 78 if (callback.is_null())
79 return; 79 return;
80 80
81 std::vector<PermissionStatus> result(request_count, PermissionStatus::DENIED); 81 std::vector<PermissionStatus> result(request_count, PermissionStatus::DENIED);
82 callback.Run(result); 82 callback.Run(result);
83 } 83 }
84 84
85 PermissionServiceImpl::PermissionServiceImpl( 85 PermissionServiceImpl::PermissionServiceImpl(PermissionServiceContext* context)
86 PermissionServiceContext* context, 86 : context_(context), weak_factory_(this) {}
87 mojo::InterfaceRequest<blink::mojom::PermissionService> request)
88 : context_(context),
89 binding_(this, std::move(request)),
90 weak_factory_(this) {
91 binding_.set_connection_error_handler(
92 base::Bind(&PermissionServiceImpl::OnConnectionError,
93 base::Unretained(this)));
94 }
95 87
96 PermissionServiceImpl::~PermissionServiceImpl() { 88 PermissionServiceImpl::~PermissionServiceImpl() {
97 DCHECK(pending_requests_.IsEmpty()); 89 DCHECK(context_->GetBrowserContext());
98 }
99 90
100 void PermissionServiceImpl::OnConnectionError() { 91 PermissionManager* permission_manager =
101 CancelPendingOperations(); 92 context_->GetBrowserContext()->GetPermissionManager();
102 context_->ServiceHadConnectionError(this); 93 if (!permission_manager)
103 // After that call, |this| will be deleted. 94 return;
95
96 // Cancel pending requests.
97 for (RequestsMap::Iterator<PendingRequest> it(&pending_requests_);
98 !it.IsAtEnd(); it.Advance()) {
99 permission_manager->CancelPermissionRequest(it.GetCurrentValue()->id);
100 }
101 pending_requests_.Clear();
104 } 102 }
105 103
106 void PermissionServiceImpl::RequestPermission( 104 void PermissionServiceImpl::RequestPermission(
107 PermissionDescriptorPtr permission, 105 PermissionDescriptorPtr permission,
108 const url::Origin& origin, 106 const url::Origin& origin,
109 bool user_gesture, 107 bool user_gesture,
110 const PermissionStatusCallback& callback) { 108 const PermissionStatusCallback& callback) {
111 // This condition is valid if the call is coming from a ChildThread instead of 109 // This condition is valid if the call is coming from a ChildThread instead of
112 // a RenderFrame. Some consumers of the service run in Workers and some in 110 // a RenderFrame. Some consumers of the service run in Workers and some in
113 // Frames. In the context of a Worker, it is not possible to show a 111 // Frames. In the context of a Worker, it is not possible to show a
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 void PermissionServiceImpl::OnRequestPermissionsResponse( 192 void PermissionServiceImpl::OnRequestPermissionsResponse(
195 int pending_request_id, 193 int pending_request_id,
196 const std::vector<PermissionStatus>& result) { 194 const std::vector<PermissionStatus>& result) {
197 PendingRequest* request = pending_requests_.Lookup(pending_request_id); 195 PendingRequest* request = pending_requests_.Lookup(pending_request_id);
198 RequestPermissionsCallback callback(request->callback); 196 RequestPermissionsCallback callback(request->callback);
199 request->callback.Reset(); 197 request->callback.Reset();
200 pending_requests_.Remove(pending_request_id); 198 pending_requests_.Remove(pending_request_id);
201 callback.Run(result); 199 callback.Run(result);
202 } 200 }
203 201
204 void PermissionServiceImpl::CancelPendingOperations() {
205 DCHECK(context_->GetBrowserContext());
206
207 PermissionManager* permission_manager =
208 context_->GetBrowserContext()->GetPermissionManager();
209 if (!permission_manager)
210 return;
211
212 // Cancel pending requests.
213 for (RequestsMap::Iterator<PendingRequest> it(&pending_requests_);
214 !it.IsAtEnd(); it.Advance()) {
215 permission_manager->CancelPermissionRequest(
216 it.GetCurrentValue()->id);
217 }
218 pending_requests_.Clear();
219 }
220
221 void PermissionServiceImpl::HasPermission( 202 void PermissionServiceImpl::HasPermission(
222 PermissionDescriptorPtr permission, 203 PermissionDescriptorPtr permission,
223 const url::Origin& origin, 204 const url::Origin& origin,
224 const PermissionStatusCallback& callback) { 205 const PermissionStatusCallback& callback) {
225 callback.Run(GetPermissionStatus(permission, origin)); 206 callback.Run(GetPermissionStatus(permission, origin));
226 } 207 }
227 208
228 void PermissionServiceImpl::RevokePermission( 209 void PermissionServiceImpl::RevokePermission(
229 PermissionDescriptorPtr permission, 210 PermissionDescriptorPtr permission,
230 const url::Origin& origin, 211 const url::Origin& origin,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 274
294 GURL requesting_origin(origin.Serialize()); 275 GURL requesting_origin(origin.Serialize());
295 // If the embedding_origin is empty we'll use |origin| instead. 276 // If the embedding_origin is empty we'll use |origin| instead.
296 GURL embedding_origin = context_->GetEmbeddingOrigin(); 277 GURL embedding_origin = context_->GetEmbeddingOrigin();
297 browser_context->GetPermissionManager()->ResetPermission( 278 browser_context->GetPermissionManager()->ResetPermission(
298 type, requesting_origin, 279 type, requesting_origin,
299 embedding_origin.is_empty() ? requesting_origin : embedding_origin); 280 embedding_origin.is_empty() ? requesting_origin : embedding_origin);
300 } 281 }
301 282
302 } // namespace content 283 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/permissions/permission_service_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698