OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/child/permissions/permission_dispatcher.h" | 5 #include "content/child/permissions/permission_dispatcher.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "content/child/worker_task_runner.h" | 8 #include "content/child/worker_task_runner.h" |
9 #include "content/public/common/service_registry.h" | 9 #include "content/public/common/service_registry.h" |
10 #include "third_party/WebKit/public/platform/WebURL.h" | 10 #include "third_party/WebKit/public/platform/WebURL.h" |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 GetPermissionStatus(status), | 214 GetPermissionStatus(status), |
215 base::Bind(&PermissionDispatcher::OnPermissionChangedForWorker, | 215 base::Bind(&PermissionDispatcher::OnPermissionChangedForWorker, |
216 base::Unretained(this), | 216 base::Unretained(this), |
217 worker_thread_id, | 217 worker_thread_id, |
218 callback)); | 218 callback)); |
219 } | 219 } |
220 | 220 |
221 // static | 221 // static |
222 void PermissionDispatcher::RunCallbackOnWorkerThread( | 222 void PermissionDispatcher::RunCallbackOnWorkerThread( |
223 blink::WebPermissionCallback* callback, | 223 blink::WebPermissionCallback* callback, |
224 scoped_ptr<blink::WebPermissionStatus> status) { | 224 blink::WebPermissionStatus status) { |
225 callback->onSuccess(status.release()); | 225 callback->onSuccess(status); |
226 delete callback; | 226 delete callback; |
227 } | 227 } |
228 | 228 |
229 PermissionServicePtr& PermissionDispatcher::GetPermissionServicePtr() { | 229 PermissionServicePtr& PermissionDispatcher::GetPermissionServicePtr() { |
230 if (!permission_service_.get()) { | 230 if (!permission_service_.get()) { |
231 service_registry_->ConnectToRemoteService( | 231 service_registry_->ConnectToRemoteService( |
232 mojo::GetProxy(&permission_service_)); | 232 mojo::GetProxy(&permission_service_)); |
233 } | 233 } |
234 return permission_service_; | 234 return permission_service_; |
235 } | 235 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 base::Bind(&PermissionDispatcher::OnPermissionResponse, | 290 base::Bind(&PermissionDispatcher::OnPermissionResponse, |
291 base::Unretained(this), | 291 base::Unretained(this), |
292 request_id)); | 292 request_id)); |
293 } | 293 } |
294 | 294 |
295 void PermissionDispatcher::OnPermissionResponse(int request_id, | 295 void PermissionDispatcher::OnPermissionResponse(int request_id, |
296 PermissionStatus result) { | 296 PermissionStatus result) { |
297 CallbackInformation* callback_information = | 297 CallbackInformation* callback_information = |
298 pending_callbacks_.Lookup(request_id); | 298 pending_callbacks_.Lookup(request_id); |
299 DCHECK(callback_information && callback_information->callback()); | 299 DCHECK(callback_information && callback_information->callback()); |
300 scoped_ptr<blink::WebPermissionStatus> status( | 300 blink::WebPermissionStatus status = GetWebPermissionStatus(result); |
301 new blink::WebPermissionStatus(GetWebPermissionStatus(result))); | |
302 | 301 |
303 if (callback_information->worker_thread_id() != kNoWorkerThread) { | 302 if (callback_information->worker_thread_id() != kNoWorkerThread) { |
304 blink::WebPermissionCallback* callback = | 303 blink::WebPermissionCallback* callback = |
305 callback_information->ReleaseCallback(); | 304 callback_information->ReleaseCallback(); |
306 int worker_thread_id = callback_information->worker_thread_id(); | 305 int worker_thread_id = callback_information->worker_thread_id(); |
307 pending_callbacks_.Remove(request_id); | 306 pending_callbacks_.Remove(request_id); |
308 | 307 |
309 // If the worker is no longer running, ::PostTask() will return false and | 308 // If the worker is no longer running, ::PostTask() will return false and |
310 // gracefully fail, destroying the callback too. | 309 // gracefully fail, destroying the callback too. |
311 WorkerTaskRunner::Instance()->PostTask( | 310 WorkerTaskRunner::Instance()->PostTask( |
312 worker_thread_id, | 311 worker_thread_id, |
313 base::Bind(&PermissionDispatcher::RunCallbackOnWorkerThread, | 312 base::Bind(&PermissionDispatcher::RunCallbackOnWorkerThread, |
314 base::Unretained(callback), | 313 base::Unretained(callback), status)); |
315 base::Passed(&status))); | |
316 return; | 314 return; |
317 } | 315 } |
318 | 316 |
319 callback_information->callback()->onSuccess(status.release()); | 317 callback_information->callback()->onSuccess(status); |
320 pending_callbacks_.Remove(request_id); | 318 pending_callbacks_.Remove(request_id); |
321 } | 319 } |
322 | 320 |
323 void PermissionDispatcher::OnPermissionChanged( | 321 void PermissionDispatcher::OnPermissionChanged( |
324 blink::WebPermissionType type, | 322 blink::WebPermissionType type, |
325 const std::string& origin, | 323 const std::string& origin, |
326 WebPermissionObserver* observer, | 324 WebPermissionObserver* observer, |
327 PermissionStatus status) { | 325 PermissionStatus status) { |
328 if (!IsObserverRegistered(observer)) | 326 if (!IsObserverRegistered(observer)) |
329 return; | 327 return; |
(...skipping 23 matching lines...) Expand all Loading... |
353 origin, | 351 origin, |
354 current_status, | 352 current_status, |
355 base::Bind(&PermissionDispatcher::OnPermissionChanged, | 353 base::Bind(&PermissionDispatcher::OnPermissionChanged, |
356 base::Unretained(this), | 354 base::Unretained(this), |
357 type, | 355 type, |
358 origin, | 356 origin, |
359 base::Unretained(observer))); | 357 base::Unretained(observer))); |
360 } | 358 } |
361 | 359 |
362 } // namespace content | 360 } // namespace content |
OLD | NEW |