blob: efa45b6f0039a9f492e8c16fa9a5d703c7007fe9 [file] [log] [blame]
// Copyright 2021 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/browser/webid/federated_auth_request_service.h"
#include "content/browser/bad_message.h"
#include "content/browser/renderer_host/render_frame_host_impl.h"
#include "content/browser/webid/federated_auth_request_impl.h"
#include "content/browser/webid/webid_utils.h"
namespace content {
// static
void FederatedAuthRequestService::Create(
RenderFrameHost* host,
mojo::PendingReceiver<blink::mojom::FederatedAuthRequest> receiver) {
DCHECK(host);
// TODO(kenrb): This should also be verified in the renderer process before
// the mojo method is invoked, causing the promise to be rejected.
// https://crbug.com/1141125
// It is safe to access host->GetLastCommittedOrigin during construction
// but DocumentService::origin() should be used thereafter.
if (!IsSameOriginWithAncestors(host, host->GetLastCommittedOrigin())) {
mojo::ReportBadMessage(
"navigator.id.get cannot be invoked from within cross-origin iframes.");
return;
}
// FederatedAuthRequestService owns itself. It will self-destruct when a mojo
// interface error occurs, the RenderFrameHost is deleted, or the
// RenderFrameHost navigates to a new document.
new FederatedAuthRequestService(host, std::move(receiver));
}
FederatedAuthRequestService::FederatedAuthRequestService(
RenderFrameHost* host,
mojo::PendingReceiver<blink::mojom::FederatedAuthRequest> receiver)
: DocumentService(host, std::move(receiver)) {
impl_ = std::make_unique<FederatedAuthRequestImpl>(
host, host->GetLastCommittedOrigin());
}
FederatedAuthRequestService::~FederatedAuthRequestService() = default;
void FederatedAuthRequestService::RequestIdToken(
const GURL& provider,
const std::string& client_id,
const std::string& nonce,
blink::mojom::RequestMode mode,
bool prefer_auto_sign_in,
RequestIdTokenCallback callback) {
impl_->RequestIdToken(provider, client_id, nonce, mode, prefer_auto_sign_in,
std::move(callback));
}
void FederatedAuthRequestService::Revoke(const GURL& provider,
const std::string& client_id,
const std::string& account_id,
RevokeCallback callback) {
impl_->Revoke(provider, client_id, account_id, std::move(callback));
}
void FederatedAuthRequestService::Logout(
std::vector<blink::mojom::LogoutRequestPtr> logout_requests,
LogoutCallback callback) {
impl_->Logout(std::move(logout_requests), std::move(callback));
}
} // namespace content