// Copyright 2019 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_DATA_DECODER_PUBLIC_CPP_DATA_DECODER_H_ #define SERVICES_DATA_DECODER_PUBLIC_CPP_DATA_DECODER_H_ #include <optional> #include <string> #include "base/functional/callback_forward.h" #include "base/memory/ref_counted.h" #include "base/time/time.h" #include "base/types/expected.h" #include "base/values.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/http/structured_headers.h" #include "services/data_decoder/public/cpp/service_provider.h" #include "services/data_decoder/public/mojom/data_decoder_service.mojom.h" #include "services/data_decoder/public/mojom/xml_parser.mojom.h" namespace mojo_base { class BigBuffer; } namespace data_decoder { // Encapsulates an exclusive connection to an isolated instance of the Data // Decoder service, allowing an owner to perform a series of related decoding // operations using the same isolated instance. The application must provide // an instance of |ServiceProvider| via |ServiceProvider::Set()| prior to using // this class. // // In general, instance reuse should only be considered after weighing the cost // of new service processes vs the security and privacy value of increased // isolation. // // Note that on some platforms, some operations (like JSON parsing on Android) // use a safe in-process mechanism in lieu of delegating to the Data Decoder // service. This detail is intentionally hidden behind the DataDecoder API. // // Finally, there is no guarantee that a single DataDecoder instance will // perform all out-of-process operations within the same service process; if // idle for long periods of time, the service process may be killed and only // restarted once needed again. // // Tests can construct an data_decoder::test::InProcessDataDecoderService to // ensure that all DataDecoders constructed during its lifetime will connect to // that instance rather than launching a separate process. class DataDecoder { … }; } // namespace data_decoder #endif // SERVICES_DATA_DECODER_PUBLIC_CPP_DATA_DECODER_H_