| Index: content/renderer/media/media_permission_dispatcher.cc
|
| diff --git a/content/renderer/media/media_permission_dispatcher.cc b/content/renderer/media/media_permission_dispatcher.cc
|
| index 31bda165f4d212b9a9c7907b20a5d942b1b7346b..3cfae7be1eb7490422b699c0f741012a44d3cba1 100644
|
| --- a/content/renderer/media/media_permission_dispatcher.cc
|
| +++ b/content/renderer/media/media_permission_dispatcher.cc
|
| @@ -55,9 +55,14 @@ MediaPermissionDispatcher::MediaPermissionDispatcher(
|
| MediaPermissionDispatcher::~MediaPermissionDispatcher() {
|
| DCHECK(task_runner_->RunsTasksInCurrentSequence());
|
|
|
| - // Fire all pending callbacks with |false|.
|
| - for (auto& request : requests_)
|
| - request.second.Run(false);
|
| + // Clean up pending requests.
|
| + OnConnectionError();
|
| +}
|
| +
|
| +void MediaPermissionDispatcher::OnNavigation() {
|
| + // Behave as if there were a connection error. The browser process will be
|
| + // closing the connection imminently.
|
| + OnConnectionError();
|
| }
|
|
|
| void MediaPermissionDispatcher::HasPermission(
|
| @@ -74,13 +79,10 @@ void MediaPermissionDispatcher::HasPermission(
|
|
|
| DCHECK(task_runner_->RunsTasksInCurrentSequence());
|
|
|
| - if (!permission_service_)
|
| - connect_to_service_cb_.Run(mojo::MakeRequest(&permission_service_));
|
| -
|
| int request_id = RegisterCallback(permission_status_cb);
|
| DVLOG(2) << __func__ << ": request ID " << request_id;
|
|
|
| - permission_service_->HasPermission(
|
| + GetPermissionService()->HasPermission(
|
| MediaPermissionTypeToPermissionDescriptor(type),
|
| url::Origin(security_origin),
|
| base::Bind(&MediaPermissionDispatcher::OnPermissionStatus, weak_ptr_,
|
| @@ -101,13 +103,10 @@ void MediaPermissionDispatcher::RequestPermission(
|
|
|
| DCHECK(task_runner_->RunsTasksInCurrentSequence());
|
|
|
| - if (!permission_service_)
|
| - connect_to_service_cb_.Run(mojo::MakeRequest(&permission_service_));
|
| -
|
| int request_id = RegisterCallback(permission_status_cb);
|
| DVLOG(2) << __func__ << ": request ID " << request_id;
|
|
|
| - permission_service_->RequestPermission(
|
| + GetPermissionService()->RequestPermission(
|
| MediaPermissionTypeToPermissionDescriptor(type),
|
| url::Origin(security_origin),
|
| blink::WebUserGestureIndicator::IsProcessingUserGesture(),
|
| @@ -126,6 +125,17 @@ uint32_t MediaPermissionDispatcher::RegisterCallback(
|
| return request_id;
|
| }
|
|
|
| +blink::mojom::PermissionService*
|
| +MediaPermissionDispatcher::GetPermissionService() {
|
| + if (!permission_service_) {
|
| + connect_to_service_cb_.Run(mojo::MakeRequest(&permission_service_));
|
| + permission_service_.set_connection_error_handler(base::Bind(
|
| + &MediaPermissionDispatcher::OnConnectionError, base::Unretained(this)));
|
| + }
|
| +
|
| + return permission_service_.get();
|
| +}
|
| +
|
| void MediaPermissionDispatcher::OnPermissionStatus(
|
| uint32_t request_id,
|
| blink::mojom::PermissionStatus status) {
|
| @@ -141,4 +151,14 @@ void MediaPermissionDispatcher::OnPermissionStatus(
|
| permission_status_cb.Run(status == blink::mojom::PermissionStatus::GRANTED);
|
| }
|
|
|
| +void MediaPermissionDispatcher::OnConnectionError() {
|
| + permission_service_.reset();
|
| +
|
| + // Fire all pending callbacks with |false|.
|
| + RequestMap requests;
|
| + requests.swap(requests_);
|
| + for (auto& request : requests)
|
| + request.second.Run(false);
|
| +}
|
| +
|
| } // namespace content
|
|
|