blob: 2a1b77aa5bb186af6dfa63f9edcea0097ffe1b50 [file] [log] [blame]
// 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 MOJO_PUBLIC_CPP_BASE_PROTO_WRAPPER_PASSKEYS_H_
#define MOJO_PUBLIC_CPP_BASE_PROTO_WRAPPER_PASSKEYS_H_
#include "base/gtest_prod_util.h"
#include "base/types/pass_key.h"
namespace component_updater {
class PKIMetadataComponentInstallerService;
} // namespace component_updater
namespace glic {
class GlicPageContextFetcher;
} // namespace glic
namespace paint_preview {
FORWARD_DECLARE_TEST(PaintPreviewCompositorBeginCompositeTest, InvalidProto);
} // namespace paint_preview
namespace mojo_base {
// PassKey that allows people to directly name or access the bytes of a wrapped
// protobuf stream in ProtoWrapper. This PassKey can be granted to classes that
// are fetching protobuf streams from the network and want to get them into the
// mojo type system to send over mojo IPC.
//
// If the protobuf byte stream will not be sent over mojo but instead will be
// immediately deserialized then it is not necessary to use ProtoWrapper at all.
class ProtoWrapperBytes {
public:
using PassKey = base::PassKey<ProtoWrapperBytes>;
private:
static PassKey GetPassKey() { return PassKey(); }
// Add friend classes that need direct access to the underlying span_bytes()
// or to directly set the contained class name and bytes with from_span().
friend class component_updater::PKIMetadataComponentInstallerService;
friend class glic::GlicPageContextFetcher;
// Tests.
FRIEND_TEST_ALL_PREFIXES(ProtoWrapperTest, ToFromBytes);
FRIEND_TEST_ALL_PREFIXES(
paint_preview::PaintPreviewCompositorBeginCompositeTest,
InvalidProto);
};
} // namespace mojo_base
#endif // MOJO_PUBLIC_CPP_BASE_PROTO_WRAPPER_PASSKEYS_H_