blob: 5d3ed401b788133fe6231985418bc446b9ce239d [file]
// 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.
#ifndef COMPONENTS_WEBAPPS_ISOLATED_WEB_APPS_BUNDLE_OPERATIONS_BUNDLE_OPERATIONS_H_
#define COMPONENTS_WEBAPPS_ISOLATED_WEB_APPS_BUNDLE_OPERATIONS_BUNDLE_OPERATIONS_H_
#include "base/files/file_path.h"
#include "base/functional/callback_forward.h"
#include "base/types/expected.h"
#include "components/web_package/signed_web_bundles/signed_web_bundle_id.h"
#include "components/web_package/signed_web_bundles/signed_web_bundle_integrity_block.h"
namespace content {
class BrowserContext;
} // namespace content
namespace web_app {
// Asynchronously reads the Web Bundle ID from the integrity block of the
// bundle at `path`. This is an insecure operation as it does NOT verify the
// bundle's signatures. It should only be used to discover the ID of a bundle
// from an untrusted source before it can be validated.
void ReadSignedWebBundleIdInsecurely(
const base::FilePath& path,
base::OnceCallback<void(
base::expected<web_package::SignedWebBundleId, std::string>)> callback);
// Asynchronously validates the integrity of a Signed Web Bundle.
//
// This function performs a full security check, including:
// - Verifying that the bundle's ID matches the `expected_web_bundle_id`.
// - Verifying the bundle's cryptographic signatures.
//
// On success, the callback is run with the parsed integrity block.
// On failure, the callback is run with a descriptive error message.
void ValidateSignedWebBundleSignatures(
content::BrowserContext* browser_context,
const base::FilePath& path,
const web_package::SignedWebBundleId& expected_web_bundle_id,
base::OnceCallback<
void(base::expected<web_package::SignedWebBundleIntegrityBlock,
std::string>)> callback);
// Asynchronously closes the Signed Web Bundle at the given `path`, releasing
// any resources (like open file handles) that the browser may be holding for
// it. The callback is run once the bundle has been closed. This should be
// called before attempting to delete the bundle file from disk.
void CloseBundle(content::BrowserContext* browser_context,
const base::FilePath& path,
base::OnceClosure callback);
} // namespace web_app
#endif // COMPONENTS_WEBAPPS_ISOLATED_WEB_APPS_BUNDLE_OPERATIONS_BUNDLE_OPERATIONS_H_