1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/permissions/content_setting_permission_context_base.h"
#include "components/content_settings/core/browser/content_settings_registry.h"
#include "components/content_settings/core/common/content_settings_utils.h"
#include "components/permissions/permission_context_base.h"
#include "components/permissions/permissions_client.h"
namespace permissions {
ContentSettingPermissionContextBase::ContentSettingPermissionContextBase(
content::BrowserContext* browser_context,
ContentSettingsType content_settings_type,
network::mojom::PermissionsPolicyFeature permissions_policy_feature)
: PermissionContextBase(browser_context,
content_settings_type,
permissions_policy_feature) {}
void ContentSettingPermissionContextBase::ResetPermission(
const GURL& requesting_origin,
const GURL& embedding_origin) {
if (!content_settings::ContentSettingsRegistry::GetInstance()->Get(
content_settings_type())) {
return;
}
PermissionsClient::Get()
->GetSettingsMap(browser_context())
->SetContentSettingDefaultScope(requesting_origin, embedding_origin,
content_settings_type(),
CONTENT_SETTING_DEFAULT);
}
void ContentSettingPermissionContextBase::UpdateContentSetting(
const PermissionRequestData& request_data,
ContentSetting content_setting,
bool is_one_time) {
DCHECK_EQ(request_data.requesting_origin,
request_data.requesting_origin.DeprecatedGetOriginAsURL());
DCHECK_EQ(request_data.embedding_origin,
request_data.embedding_origin.DeprecatedGetOriginAsURL());
content_settings::ContentSettingConstraints constraints;
constraints.set_session_model(
is_one_time ? content_settings::mojom::SessionModel::ONE_TIME
: content_settings::mojom::SessionModel::DURABLE);
// The Permissions module in Safety check will revoke permissions after
// a finite amount of time if the permission can be revoked.
if (content_settings::CanBeAutoRevoked(content_settings_type(),
content_setting, is_one_time)) {
// For #2, by definition, that should be all of them. If that changes in
// the future, consider whether revocation for such permission makes
// sense, and/or change this to an early return so that we don't
// unnecessarily record timestamps where we don't need them.
constraints.set_track_last_visit_for_autoexpiration(true);
}
if (is_one_time) {
if (content_settings::ShouldTypeExpireActively(content_settings_type())) {
constraints.set_lifetime(kOneTimePermissionMaximumLifetime);
}
}
PermissionsClient::Get()
->GetSettingsMap(browser_context())
->SetContentSettingDefaultScope(
request_data.requesting_origin, request_data.embedding_origin,
content_settings_type(), content_setting, constraints);
}
void ContentSettingPermissionContextBase::UpdateSetting(
const PermissionRequestData& request_data,
base::Value setting,
bool is_one_time) {
auto content_setting = content_settings::ValueToContentSetting(setting);
CHECK(content_setting == CONTENT_SETTING_ALLOW ||
content_setting == CONTENT_SETTING_BLOCK);
UpdateContentSetting(request_data, content_setting, is_one_time);
}
ContentSetting
ContentSettingPermissionContextBase::GetContentSettingStatusInternal(
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
const GURL& embedding_origin) const {
return PermissionsClient::Get()
->GetSettingsMap(browser_context())
->GetContentSetting(requesting_origin, embedding_origin,
content_settings_type());
}
base::Value ContentSettingPermissionContextBase::GetPermissionStatusInternal(
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
const GURL& embedding_origin) const {
return content_settings::ContentSettingToValue(
GetContentSettingStatusInternal(render_frame_host, requesting_origin,
embedding_origin));
}
} // namespace permissions
|