| // Copyright 2022 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/shell/browser/shell_federated_permission_context.h" |
| |
| #include "base/feature_list.h" |
| #include "content/public/common/content_features.h" |
| #include "content/shell/common/shell_switches.h" |
| |
| namespace content { |
| |
| ShellFederatedPermissionContext::ShellFederatedPermissionContext() = default; |
| |
| ShellFederatedPermissionContext::~ShellFederatedPermissionContext() = default; |
| |
| content::FederatedIdentityApiPermissionContextDelegate::PermissionStatus |
| ShellFederatedPermissionContext::GetApiPermissionStatus( |
| const url::Origin& relying_party_embedder) { |
| return base::FeatureList::IsEnabled(features::kFedCm) |
| ? PermissionStatus::GRANTED |
| : PermissionStatus::BLOCKED_VARIATIONS; |
| } |
| |
| void ShellFederatedPermissionContext::RecordDismissAndEmbargo( |
| const url::Origin& relying_party_embedder) {} |
| |
| void ShellFederatedPermissionContext::RemoveEmbargoAndResetCounts( |
| const url::Origin& relying_party_embedder) {} |
| |
| absl::optional<bool> ShellFederatedPermissionContext::GetIdpSigninStatus( |
| const url::Origin& idp_origin) { |
| auto idp_signin_status = idp_signin_status_.find(idp_origin.Serialize()); |
| if (idp_signin_status != idp_signin_status_.end()) { |
| return idp_signin_status->second; |
| } else { |
| return absl::nullopt; |
| } |
| } |
| |
| void ShellFederatedPermissionContext::SetIdpSigninStatus( |
| const url::Origin& idp_origin, |
| bool idp_signin_status) { |
| idp_signin_status_.insert( |
| std::pair(idp_origin.Serialize(), idp_signin_status)); |
| } |
| |
| bool ShellFederatedPermissionContext::HasSharingPermission( |
| const url::Origin& relying_party_requester, |
| const url::Origin& relying_party_embedder, |
| const url::Origin& identity_provider, |
| const std::string& account_id) { |
| return sharing_permissions_.find(std::tuple( |
| relying_party_requester.Serialize(), |
| relying_party_embedder.Serialize(), identity_provider.Serialize(), |
| account_id)) != sharing_permissions_.end(); |
| } |
| |
| void ShellFederatedPermissionContext::GrantSharingPermission( |
| const url::Origin& relying_party_requester, |
| const url::Origin& relying_party_embedder, |
| const url::Origin& identity_provider, |
| const std::string& account_id) { |
| sharing_permissions_.insert(std::tuple( |
| relying_party_requester.Serialize(), relying_party_embedder.Serialize(), |
| identity_provider.Serialize(), account_id)); |
| } |
| |
| // FederatedIdentityActiveSessionPermissionContextDelegate |
| bool ShellFederatedPermissionContext::HasActiveSession( |
| const url::Origin& relying_party_requester, |
| const url::Origin& identity_provider, |
| const std::string& account_identifier) { |
| return active_sessions_.find(std::tuple( |
| relying_party_requester.Serialize(), identity_provider.Serialize(), |
| account_identifier)) != active_sessions_.end(); |
| } |
| |
| void ShellFederatedPermissionContext::GrantActiveSession( |
| const url::Origin& relying_party_requester, |
| const url::Origin& identity_provider, |
| const std::string& account_identifier) { |
| active_sessions_.insert(std::tuple(relying_party_requester.Serialize(), |
| identity_provider.Serialize(), |
| account_identifier)); |
| } |
| |
| void ShellFederatedPermissionContext::RevokeActiveSession( |
| const url::Origin& relying_party_requester, |
| const url::Origin& identity_provider, |
| const std::string& account_identifier) { |
| active_sessions_.erase(std::tuple(relying_party_requester.Serialize(), |
| identity_provider.Serialize(), |
| account_identifier)); |
| } |
| |
| bool ShellFederatedPermissionContext::ShouldCompleteRequestImmediately() const { |
| return switches::IsRunWebTestsSwitchPresent(); |
| } |
| |
| } // namespace content |