blob: 738be9abdfb5bb4aa975d7316168a7d0a3e0eb62 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/webid/identity_provider_permission_request.h"
#include "base/functional/callback_helpers.h"
#include "components/content_settings/core/common/content_settings_types.h"
#include "components/permissions/permission_decision.h"
#include "components/permissions/resolvers/content_setting_permission_resolver.h"
IdentityProviderPermissionRequest::IdentityProviderPermissionRequest(
const url::Origin& origin,
base::OnceCallback<void(bool accepted)> callback)
: PermissionRequest(
std::make_unique<permissions::PermissionRequestData>(
std::make_unique<permissions::ContentSettingPermissionResolver>(
ContentSettingsType::FEDERATED_IDENTITY_API),
/*user_gesture=*/true,
origin.GetURL()),
base::BindRepeating(
&IdentityProviderPermissionRequest::PermissionDecided,
base::Unretained(this))),
callback_(std::move(callback)) {}
IdentityProviderPermissionRequest::~IdentityProviderPermissionRequest() =
default;
void IdentityProviderPermissionRequest::PermissionDecided(
PermissionDecision decision,
bool is_final_decision,
const permissions::PermissionRequestData& request_data) {
DCHECK(decision != PermissionDecision::kAllowThisTime);
DCHECK(is_final_decision);
if (decision == PermissionDecision::kAllow) {
std::move(callback_).Run(true);
} else if (decision == PermissionDecision::kDeny) {
std::move(callback_).Run(false);
} else {
DCHECK_EQ(PermissionDecision::kNone, decision);
std::move(callback_).Run(false);
}
}