Skip to content

Commit

Permalink
refactor: don't drop permission controls
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Jan 11, 2022
1 parent 7fade1a commit c1e9d5f
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 2 deletions.
19 changes: 17 additions & 2 deletions shell/browser/api/electron_api_web_contents.cc
Expand Up @@ -1389,11 +1389,26 @@ void WebContents::FindReply(content::WebContents* web_contents,
Emit("found-in-page", result.GetHandle());
}

void WebContents::RequestExclusivePointerAccess(
content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target,
bool allowed) {
if (allowed) {
exclusive_access_manager_->mouse_lock_controller()->RequestToLockMouse(
web_contents, user_gesture, last_unlocked_by_target);
}
}

void WebContents::RequestToLockMouse(content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target) {
exclusive_access_manager_->mouse_lock_controller()->RequestToLockMouse(
web_contents, user_gesture, last_unlocked_by_target);
auto* permission_helper =
WebContentsPermissionHelper::FromWebContents(web_contents);
permission_helper->RequestPointerLockPermission(
user_gesture, last_unlocked_by_target,
base::BindOnce(&WebContents::RequestExclusivePointerAccess,
base::Unretained(this)));
}

void WebContents::LostMouseLock() {
Expand Down
4 changes: 4 additions & 0 deletions shell/browser/api/electron_api_web_contents.h
Expand Up @@ -556,6 +556,10 @@ class WebContents : public ExclusiveAccessContext,
const gfx::Rect& selection_rect,
int active_match_ordinal,
bool final_update) override;
void RequestExclusivePointerAccess(content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target,
bool allowed);
void RequestToLockMouse(content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target) override;
Expand Down
22 changes: 22 additions & 0 deletions shell/browser/web_contents_permission_helper.cc
Expand Up @@ -43,6 +43,16 @@ void MediaAccessAllowed(const content::MediaStreamRequest& request,
controller.Deny(blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED);
}

void OnPointerLockResponse(
base::OnceCallback<void(content::WebContents*, bool, bool, bool)> callback,
content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target,
bool allowed) {
std::move(callback).Run(web_contents, user_gesture, last_unlocked_by_target,
allowed);
}

void OnPermissionResponse(base::OnceCallback<void(bool)> callback,
blink::mojom::PermissionStatus status) {
if (status == blink::mojom::PermissionStatus::GRANTED)
Expand Down Expand Up @@ -145,6 +155,18 @@ void WebContentsPermissionHelper::RequestWebNotificationPermission(
std::move(callback));
}

void WebContentsPermissionHelper::RequestPointerLockPermission(
bool user_gesture,
bool last_unlocked_by_target,
base::OnceCallback<void(content::WebContents*, bool, bool, bool)>
callback) {
RequestPermission(
static_cast<content::PermissionType>(PermissionType::POINTER_LOCK),
base::BindOnce(&OnPointerLockResponse, std::move(callback), web_contents_,
user_gesture, last_unlocked_by_target),
user_gesture);
}

void WebContentsPermissionHelper::RequestOpenExternalPermission(
base::OnceCallback<void(bool)> callback,
bool user_gesture,
Expand Down
5 changes: 5 additions & 0 deletions shell/browser/web_contents_permission_helper.h
Expand Up @@ -36,6 +36,11 @@ class WebContentsPermissionHelper
void RequestFullscreenPermission(base::OnceCallback<void(bool)> callback);
void RequestMediaAccessPermission(const content::MediaStreamRequest& request,
content::MediaResponseCallback callback);
void RequestPointerLockPermission(
bool user_gesture,
bool last_unlocked_by_target,
base::OnceCallback<void(content::WebContents*, bool, bool, bool)>
callback);
void RequestWebNotificationPermission(
base::OnceCallback<void(bool)> callback);
void RequestOpenExternalPermission(base::OnceCallback<void(bool)> callback,
Expand Down

0 comments on commit c1e9d5f

Please sign in to comment.