blob: d236045e4c9928aee35119d64153a41b771a2542 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_NETWORK_DEVTOOLS_DURABLE_MSG_WRITER_H_
#define SERVICES_NETWORK_DEVTOOLS_DURABLE_MSG_WRITER_H_
#include <vector>
#include "base/component_export.h"
#include "base/containers/span.h"
#include "net/filter/source_stream_type.h"
namespace network {
// Interface for a Durable Message writer, that will be passed into a URLLoader
// to collect response bodies for DevTools Durable Message collection.
// Typical implementation of this interface are handed over to URLLoader as
// WeakPtrs, to allow eviction when collector determines that the message can
// no longer be collected within allowed limits.
class COMPONENT_EXPORT(NETWORK_SERVICE) DevtoolsDurableMessageWriter {
public:
virtual ~DevtoolsDurableMessageWriter() = default;
// Adds bytes to the message. Durable Messages are collected and stored
// as they are seen by URLLoader, which may or may not be decoded.
// Accounting for Durable Messages are done per per encoded size.
// https://w3c.github.io/webdriver-bidi/#command-network-addDataCollector
// `encoded_size` represents the over-the-wire size of the chunk that is
// being added, and this can be different from bytes.size() if the network
// stack has already removed encoding.
virtual void AddBytes(base::span<const uint8_t> bytes,
size_t encoded_size) = 0;
// Mark that this message has completed writing. This usually means the
// message will be available for decoding and retrieval by the Durable
// Message collector.
virtual void MarkComplete() = 0;
// Set the client decoding types, if URLLoader has identified any.
// Since we are storing encoded bytes, we need to know the decoding types
// in order to decode the bytes on retrieval.
virtual void SetClientDecodingTypes(
std::vector<net::SourceStreamType> types) = 0;
};
} // namespace network
#endif // SERVICES_NETWORK_DEVTOOLS_DURABLE_MSG_WRITER_H_