blob: b67ddaa2fee3afeae4cd5d0509009044053b2362 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_WEBID_FEDERATED_IDENTITY_PERMISSION_CONTEXT_H_
#define CHROME_BROWSER_WEBID_FEDERATED_IDENTITY_PERMISSION_CONTEXT_H_
#include <string>
#include <vector>
#include "base/observer_list.h"
#include "components/keyed_service/core/keyed_service.h"
#include "content/public/browser/federated_identity_permission_context_delegate.h"
namespace content {
class BrowserContext;
}
class FederatedIdentityAccountKeyedPermissionContext;
class FederatedIdentityIdentityProviderRegistrationContext;
class FederatedIdentityIdentityProviderSigninStatusContext;
// Context for storing permissions associated with the ability for a relying
// party site to pass an identity request to an identity provider through a
// Javascript API.
class FederatedIdentityPermissionContext
: public content::FederatedIdentityPermissionContextDelegate,
public KeyedService {
public:
explicit FederatedIdentityPermissionContext(
content::BrowserContext* browser_context);
~FederatedIdentityPermissionContext() override;
FederatedIdentityPermissionContext(
const FederatedIdentityPermissionContext&) = delete;
FederatedIdentityPermissionContext& operator=(
const FederatedIdentityPermissionContext&) = delete;
// content::FederatedIdentityPermissionContextDelegate:
void AddIdpSigninStatusObserver(IdpSigninStatusObserver* observer) override;
void RemoveIdpSigninStatusObserver(
IdpSigninStatusObserver* observer) override;
bool HasActiveSession(const url::Origin& relying_party_requester,
const url::Origin& identity_provider,
const std::string& account_identifier) override;
void GrantActiveSession(const url::Origin& relying_party_requester,
const url::Origin& identity_provider,
const std::string& account_identifier) override;
void RevokeActiveSession(const url::Origin& relying_party_requester,
const url::Origin& identity_provider,
const std::string& account_identifier) override;
bool HasSharingPermission(const url::Origin& relying_party_requester,
const url::Origin& relying_party_embedder,
const url::Origin& identity_provider,
const std::string& account_id) override;
void GrantSharingPermission(const url::Origin& relying_party_requester,
const url::Origin& relying_party_embedder,
const url::Origin& identity_provider,
const std::string& account_id) override;
absl::optional<bool> GetIdpSigninStatus(
const url::Origin& idp_origin) override;
void SetIdpSigninStatus(const url::Origin& idp_origin,
bool idp_signin_status) override;
std::vector<GURL> GetRegisteredIdPs() override;
void RegisterIdP(const GURL& url) override;
void UnregisterIdP(const GURL& url) override;
void FlushScheduledSaveSettingsCalls();
private:
std::unique_ptr<FederatedIdentityAccountKeyedPermissionContext>
active_session_context_;
std::unique_ptr<FederatedIdentityAccountKeyedPermissionContext>
sharing_context_;
std::unique_ptr<FederatedIdentityIdentityProviderSigninStatusContext>
idp_signin_context_;
std::unique_ptr<FederatedIdentityIdentityProviderRegistrationContext>
idp_registration_context_;
base::ObserverList<IdpSigninStatusObserver> idp_signin_status_observer_list_;
};
#endif // CHROME_BROWSER_WEBID_FEDERATED_IDENTITY_PERMISSION_CONTEXT_H_