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