Commit 4f128089 authored by Olivier Yiptong's avatar Olivier Yiptong Committed by Commit Bot

FontAccess: Skip Transient User Activation check on Mac if necessary

It is unnecessary to check for Transient User Activation if the
permission status has been previously granted or denied.

This change ensures that the UA check is skipped in those cases on Mac,
in alignment with the ChromeOS, Linux and Windows implementations.

Bug: 1043306
Change-Id: I69016cdd696a7003b691d91eae1386ebf7e0f96a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2404060
Auto-Submit: Olivier Yiptong <oyiptong@chromium.org>
Commit-Queue: Joshua Bell <jsbell@chromium.org>
Reviewed-by: default avatarJoshua Bell <jsbell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#805913}
parent 9dce1e00
...@@ -43,6 +43,17 @@ void FontAccessManagerImpl::RequestPermission( ...@@ -43,6 +43,17 @@ void FontAccessManagerImpl::RequestPermission(
const BindingContext& context = receivers_.current_context(); const BindingContext& context = receivers_.current_context();
RenderFrameHost* rfh = RenderFrameHost::FromID(context.frame_id); RenderFrameHost* rfh = RenderFrameHost::FromID(context.frame_id);
auto status = PermissionControllerImpl::FromBrowserContext(
rfh->GetProcess()->GetBrowserContext())
->GetPermissionStatusForFrame(PermissionType::FONT_ACCESS,
rfh, context.origin.GetURL());
if (status != blink::mojom::PermissionStatus::ASK) {
// Permission has been requested before.
std::move(callback).Run(status);
return;
}
if (!rfh->HasTransientUserActivation()) { if (!rfh->HasTransientUserActivation()) {
std::move(callback).Run(blink::mojom::PermissionStatus::DENIED); std::move(callback).Run(blink::mojom::PermissionStatus::DENIED);
return; return;
......
...@@ -205,6 +205,34 @@ TEST_F(FontAccessManagerImplTest, UserActivationPermissionManagerTriggered) { ...@@ -205,6 +205,34 @@ TEST_F(FontAccessManagerImplTest, UserActivationPermissionManagerTriggered) {
loop.Run(); loop.Run();
EXPECT_TRUE(permission_requested) << "Permission has been requested"; EXPECT_TRUE(permission_requested) << "Permission has been requested";
} }
TEST_F(FontAccessManagerImplTest, PreviouslyGrantedPermissionNoActivation) {
ASSERT_TRUE(manager_remote_.is_bound() && manager_remote_.is_connected());
AutoGrantPermission();
base::RunLoop loop;
manager_remote_->RequestPermission(
base::BindLambdaForTesting([&](blink::mojom::PermissionStatus status) {
EXPECT_EQ(blink::mojom::PermissionStatus::GRANTED, status)
<< "Permission status is granted";
loop.Quit();
}));
loop.Run();
}
TEST_F(FontAccessManagerImplTest, PreviouslyDeniedPermissionNoActivation) {
ASSERT_TRUE(manager_remote_.is_bound() && manager_remote_.is_connected());
AutoDenyPermission();
base::RunLoop loop;
manager_remote_->RequestPermission(
base::BindLambdaForTesting([&](blink::mojom::PermissionStatus status) {
EXPECT_EQ(blink::mojom::PermissionStatus::DENIED, status)
<< "Permission status is denied";
loop.Quit();
}));
loop.Run();
}
#endif #endif
#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment