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

Unified Diff: content/renderer/media/media_permission_dispatcher.cc

Issue 2931513003: Recreate MediaPermissionDispatcher's service connection on navigation (Closed)
Patch Set: Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/media_permission_dispatcher.h ('k') | content/renderer/render_frame_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « content/renderer/media/media_permission_dispatcher.h ('k') | content/renderer/render_frame_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698