blob: 6081df90da2c8d7605eda35a1f16081d9a8528f0 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_WEBID_IDENTITY_REGISTRY_DELEGATE_H_
#define CONTENT_BROWSER_WEBID_IDENTITY_REGISTRY_DELEGATE_H_
#include <optional>
#include <string>
#include "url/gurl.h"
#include "url/origin.h"
namespace content {
// Delegate to control FedCM's popupd. An example of a use case is if a user is
// signed-in according to the FedCM IDP Sign-in Status API but we find that the
// user has no accounts, a failure dialog is shown. The failure dialog contains
// a button which opens a popup and allows the user to complete the sign-in
// flow on the popup. This delegate controls that popup.
class IdentityRegistryDelegate {
public:
IdentityRegistryDelegate() = default;
virtual ~IdentityRegistryDelegate() = default;
// Closes the FedCM modal dialog, if any.
virtual void OnClose() = 0;
// The modal dialog has provided a token to resolve the original request.
// `idp_config_url` is passed by value so that it remains valid even if the
// implementation destructs the IdentityRegistry (e.g. by closing the
// associated WebContents).
// If account_id is nullopt, uses the account that was selected in the
// account chooser.
virtual bool OnResolve(GURL idp_config_url,
const std::optional<std::string>& account_id,
const std::string& token) = 0;
enum class Method { kClose, kResolve };
// Notifies the delegate for an origin mismatch so they can output debugging
// messages.
virtual void OnOriginMismatch(Method method,
const url::Origin& expected,
const url::Origin& actual) {}
};
} // namespace content
#endif // CONTENT_BROWSER_WEBID_IDENTITY_REGISTRY_DELEGATE_H_