// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // TransportSecurityState maintains an in memory database containing the // list of hosts that currently have transport security enabled. This // singleton object deals with writing that data out to disk as needed and // loading it at startup. // At startup we need to load the transport security state from the // disk. For the moment, we don't want to delay startup for this load, so we // let the TransportSecurityState run for a while without being loaded. // This means that it's possible for pages opened very quickly not to get the // correct transport security information. // // To load the state, we schedule a Task on background_runner, which // deserializes and configures the TransportSecurityState. // // The TransportSecurityState object supports running a callback function // when it changes. This object registers the callback, pointing at itself. // // TransportSecurityState calls... // TransportSecurityPersister::StateIsDirty // since the callback isn't allowed to block or reenter, we schedule a Task // on the file task runner after some small amount of time // // ... // // TransportSecurityPersister::SerializeState // copies the current state of the TransportSecurityState, serializes // and writes to disk. #ifndef NET_HTTP_TRANSPORT_SECURITY_PERSISTER_H_ #define NET_HTTP_TRANSPORT_SECURITY_PERSISTER_H_ #include <optional> #include <string> #include "base/feature_list.h" #include "base/files/file_path.h" #include "base/files/important_file_writer.h" #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "net/base/net_export.h" #include "net/http/transport_security_state.h" namespace base { class SequencedTaskRunner; } namespace net { // Exists only to hold a "commit-interval" param. If disabled, the default // ImportantFileWriter commit interval is used. NET_EXPORT BASE_DECLARE_FEATURE(kTransportSecurityFileWriterSchedule); // Reads and updates on-disk TransportSecurity state. Clients of this class // should create, destroy, and call into it from one thread. // // background_runner is the task runner this class should use internally to // perform file IO, and can optionally be associated with a different thread. class NET_EXPORT TransportSecurityPersister : public TransportSecurityState::Delegate, public base::ImportantFileWriter::DataSerializer { … }; } // namespace net #endif // NET_HTTP_TRANSPORT_SECURITY_PERSISTER_H_