0

Add GPSForCurrentDocument() into PermissionControllerDelegate.

As part of the Permission API hardening go/permissions-api-hardening
GetPermissionStatusForCurrentDocument was previously added in
PermissionController. This CL adds
GetPermissionStatusForCurrentDocument into all
PermissionControllerDelegate implementations.

Bug: 1271543
Change-Id: I4d5549aba621891e0745866e739fafbc1b142038
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3525774
Reviewed-by: Arthur Sonzogni <arthursonzogni@chromium.org>
Reviewed-by: Andy Paicu <andypaicu@chromium.org>
Reviewed-by: Sergey Ulanov <sergeyu@chromium.org>
Reviewed-by: Sean Topping <seantopping@chromium.org>
Reviewed-by: Michael Bai <michaelbai@chromium.org>
Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
Commit-Queue: Illia Klimov <elklm@chromium.org>
Cr-Commit-Position: refs/heads/main@{#983759}
This commit is contained in:
Illia Klimov
2022-03-22 11:33:39 +00:00
committed by Chromium LUCI CQ
parent 4ad3c55fc5
commit f28428456b
21 changed files with 133 additions and 10 deletions

@ -467,6 +467,15 @@ PermissionStatus AwPermissionManager::GetPermissionStatusForFrame(
render_frame_host));
}
PermissionStatus AwPermissionManager::GetPermissionStatusForCurrentDocument(
PermissionType permission,
content::RenderFrameHost* render_frame_host) {
return GetPermissionStatus(
permission, render_frame_host->GetLastCommittedOrigin().GetURL(),
permissions::PermissionUtil::GetLastCommittedOriginAsURL(
render_frame_host));
}
AwPermissionManager::SubscriptionId
AwPermissionManager::SubscribePermissionStatusChange(
PermissionType permission,

@ -53,6 +53,9 @@ class AwPermissionManager : public content::PermissionControllerDelegate {
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) override;
SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,

@ -168,6 +168,15 @@ CastPermissionManager::GetPermissionStatusForFrame(
requesting_origin);
}
blink::mojom::PermissionStatus
CastPermissionManager::GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) {
return GetPermissionStatusInternal(
permission, render_frame_host,
render_frame_host->GetLastCommittedOrigin().GetURL());
}
CastPermissionManager::SubscriptionId
CastPermissionManager::SubscribePermissionStatusChange(
content::PermissionType permission,

@ -48,6 +48,9 @@ class CastPermissionManager : public content::PermissionControllerDelegate {
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) override;
SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,

@ -575,6 +575,14 @@ PermissionStatus PermissionManager::GetPermissionStatusForFrame(
return ContentSettingToPermissionStatus(result.content_setting);
}
PermissionStatus PermissionManager::GetPermissionStatusForCurrentDocument(
PermissionType permission,
content::RenderFrameHost* render_frame_host) {
return GetPermissionStatusForFrame(
permission, render_frame_host,
render_frame_host->GetLastCommittedOrigin().GetURL());
}
bool PermissionManager::IsPermissionOverridableByDevTools(
content::PermissionType permission,
const absl::optional<url::Origin>& origin) {

@ -142,6 +142,9 @@ class PermissionManager : public KeyedService,
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) override;
bool IsPermissionOverridableByDevTools(
content::PermissionType permission,
const absl::optional<url::Origin>& origin) override;

@ -53,8 +53,8 @@ TEST_F(NFCHostTest, GetNFCTwice) {
NavigateAndCommit(GURL(kTestUrl));
EXPECT_CALL(mock_permission_manager(),
GetPermissionStatusForFrame(PermissionType::NFC, main_rfh(), _))
EXPECT_CALL(mock_permission_manager(), GetPermissionStatusForCurrentDocument(
PermissionType::NFC, main_rfh()))
.WillOnce(Return(blink::mojom::PermissionStatus::GRANTED))
.WillOnce(Return(blink::mojom::PermissionStatus::GRANTED));
EXPECT_CALL(mock_permission_manager(),

@ -28,4 +28,11 @@ TestFontAccessPermissionManager::GetPermissionStatusForFrame(
return permission_status_for_frame_;
}
blink::mojom::PermissionStatus
TestFontAccessPermissionManager::GetPermissionStatusForCurrentDocument(
PermissionType permission,
RenderFrameHost* render_frame_host) {
return permission_status_for_frame_;
}
} // namespace content

@ -34,6 +34,10 @@ class TestFontAccessPermissionManager : public MockPermissionManager {
RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
PermissionType permission,
RenderFrameHost* render_frame_host) override;
void SetRequestCallback(
base::RepeatingCallback<void(PermissionCallback)> request_callback) {
request_callback_ = std::move(request_callback);

@ -109,8 +109,8 @@ class IdleManagerTest : public RenderViewHostTestHarness {
void SetPermissionStatus(blink::mojom::PermissionStatus permission_status) {
ON_CALL(*permission_manager_,
GetPermissionStatusForFrame(PermissionType::IDLE_DETECTION,
main_rfh(), url_))
GetPermissionStatusForCurrentDocument(
PermissionType::IDLE_DETECTION, main_rfh()))
.WillByDefault(Return(permission_status));
}

@ -100,7 +100,7 @@ void MergeOverriddenAndDelegatedResults(
full_results.reserve(overridden_results.size());
auto delegated_it = delegated_results.begin();
for (auto& status : overridden_results) {
if (!status.has_value()) {
if (!status) {
CHECK(delegated_it != delegated_results.end());
status.emplace(*delegated_it++);
}
@ -350,7 +350,7 @@ PermissionControllerImpl::DeprecatedGetPermissionStatus(
absl::optional<blink::mojom::PermissionStatus> status =
devtools_permission_overrides_.Get(url::Origin::Create(requesting_origin),
permission);
if (status.has_value())
if (status)
return *status;
PermissionControllerDelegate* delegate =
@ -374,9 +374,18 @@ blink::mojom::PermissionStatus
PermissionControllerImpl::GetPermissionStatusForCurrentDocument(
PermissionType permission,
RenderFrameHost* render_frame_host) {
return GetPermissionStatusForFrame(
permission, render_frame_host,
render_frame_host->GetLastCommittedOrigin().GetURL());
absl::optional<blink::mojom::PermissionStatus> status =
devtools_permission_overrides_.Get(
render_frame_host->GetLastCommittedOrigin(), permission);
if (status)
return *status;
PermissionControllerDelegate* delegate =
browser_context_->GetPermissionControllerDelegate();
if (!delegate)
return blink::mojom::PermissionStatus::DENIED;
return delegate->GetPermissionStatusForCurrentDocument(permission,
render_frame_host);
}
blink::mojom::PermissionStatus
@ -395,7 +404,7 @@ PermissionControllerImpl::GetPermissionStatusForFrame(
absl::optional<blink::mojom::PermissionStatus> status =
devtools_permission_overrides_.Get(url::Origin::Create(requesting_origin),
permission);
if (status.has_value())
if (status)
return *status;
PermissionControllerDelegate* delegate =

@ -64,11 +64,21 @@ class CONTENT_EXPORT PermissionControllerDelegate {
// TODO(raymes): Currently we still pass the |requesting_origin| as a separate
// parameter because we can't yet guarantee that it matches the last committed
// origin of the RenderFrameHost. See https://crbug.com/698985.
// Deprecated. Use `GetPermissionStatusForCurrentDocument` instead.
virtual blink::mojom::PermissionStatus GetPermissionStatusForFrame(
PermissionType permission,
RenderFrameHost* render_frame_host,
const GURL& requesting_origin) = 0;
// Returns the permission status for the current document in the given
// RenderFrameHost. Use this over `GetPermissionStatusForFrame` and
// `GetPermissionStatus` whenever possible as this API takes into account the
// lifecycle state of a given document (i.e. whether it's in back-forward
// cache or being prerendered) in addition to its origin.
virtual blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
PermissionType permission,
RenderFrameHost* render_frame_host) = 0;
// Sets the permission back to its default for the requesting_origin/
// embedding_origin tuple.
virtual void ResetPermission(PermissionType permission,

@ -35,6 +35,10 @@ class MockPermissionManager : public PermissionControllerDelegate {
PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin));
MOCK_METHOD2(GetPermissionStatusForCurrentDocument,
blink::mojom::PermissionStatus(
PermissionType permission,
content::RenderFrameHost* render_frame_host));
void RequestPermission(
PermissionType permission,
RenderFrameHost* render_frame_host,

@ -145,6 +145,18 @@ ShellPermissionManager::GetPermissionStatusForFrame(
content::WebContents::FromRenderFrameHost(render_frame_host)));
}
blink::mojom::PermissionStatus
ShellPermissionManager::GetPermissionStatusForCurrentDocument(
PermissionType permission,
content::RenderFrameHost* render_frame_host) {
if (render_frame_host->IsNestedWithinFencedFrame())
return blink::mojom::PermissionStatus::DENIED;
return GetPermissionStatus(
permission, render_frame_host->GetLastCommittedOrigin().GetURL(),
permissions::PermissionUtil::GetLastCommittedOriginAsURL(
render_frame_host));
}
ShellPermissionManager::SubscriptionId
ShellPermissionManager::SubscribePermissionStatusChange(
PermissionType permission,

@ -46,6 +46,9 @@ class ShellPermissionManager : public PermissionControllerDelegate {
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) override;
SubscriptionId SubscribePermissionStatusChange(
PermissionType permission,
RenderFrameHost* render_frame_host,

@ -156,6 +156,19 @@ WebTestPermissionManager::GetPermissionStatusForFrame(
.DeprecatedGetOriginAsURL());
}
blink::mojom::PermissionStatus
WebTestPermissionManager::GetPermissionStatusForCurrentDocument(
PermissionType permission,
content::RenderFrameHost* render_frame_host) {
if (render_frame_host->IsNestedWithinFencedFrame())
return blink::mojom::PermissionStatus::DENIED;
return GetPermissionStatus(
permission, render_frame_host->GetLastCommittedOrigin().GetURL(),
content::WebContents::FromRenderFrameHost(render_frame_host)
->GetLastCommittedURL()
.DeprecatedGetOriginAsURL());
}
WebTestPermissionManager::SubscriptionId
WebTestPermissionManager::SubscribePermissionStatusChange(
PermissionType permission,

@ -56,6 +56,9 @@ class WebTestPermissionManager
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) override;
SubscriptionId SubscribePermissionStatusChange(
PermissionType permission,
RenderFrameHost* render_frame_host,

@ -81,6 +81,16 @@ WebEnginePermissionDelegate::GetPermissionStatusForFrame(
permission, url::Origin::Create(requesting_origin));
}
blink::mojom::PermissionStatus
WebEnginePermissionDelegate::GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) {
FrameImpl* frame = FrameImpl::FromRenderFrameHost(render_frame_host);
DCHECK(frame);
return frame->permission_controller()->GetPermissionState(
permission, render_frame_host->GetLastCommittedOrigin());
}
WebEnginePermissionDelegate::SubscriptionId
WebEnginePermissionDelegate::SubscribePermissionStatusChange(
content::PermissionType permission,

@ -46,6 +46,9 @@ class WebEnginePermissionDelegate
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) override;
SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,

@ -69,6 +69,13 @@ HeadlessPermissionManager::GetPermissionStatusForFrame(
return blink::mojom::PermissionStatus::ASK;
}
blink::mojom::PermissionStatus
HeadlessPermissionManager::GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) {
return blink::mojom::PermissionStatus::ASK;
}
HeadlessPermissionManager::SubscriptionId
HeadlessPermissionManager::SubscribePermissionStatusChange(
content::PermissionType permission,

@ -52,6 +52,9 @@ class HeadlessPermissionManager : public content::PermissionControllerDelegate {
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host) override;
SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,