blob: 0c9d588a1b3f62e521eb19bb63572a4bfc739a29 [file] [log] [blame]
// Copyright 2023 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_SHARED_DICTIONARY_SHARED_DICTIONARY_MANAGER_H_
#define SERVICES_NETWORK_SHARED_DICTIONARY_SHARED_DICTIONARY_MANAGER_H_
#include <map>
#include "base/component_export.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "net/extras/shared_dictionary/shared_dictionary_storage_isolation_key.h"
namespace network {
class SharedDictionaryStorage;
// This class is attached to NetworkContext and manages the dictionaries for
// CompressionDictionaryTransport feature.
class COMPONENT_EXPORT(NETWORK_SERVICE) SharedDictionaryManager {
public:
// Returns a SharedDictionaryManager which keeps the whole dictionary
// information in memory.
static std::unique_ptr<SharedDictionaryManager> CreateInMemory();
// TODO(crbug.com/1413922): Implement a manager which supports persistence
// and use if for non-incognito mode. Also, if preventing incognito mode
// detection isn't that important, and the maintenance cost of two storagee is
// large, consider removing SharedDictionaryManager and stopping incognito
// mode support.
SharedDictionaryManager(const SharedDictionaryManager&) = delete;
SharedDictionaryManager& operator=(const SharedDictionaryManager&) = delete;
virtual ~SharedDictionaryManager();
// Returns a SharedDictionaryStorage for the `isolation_key`.
scoped_refptr<SharedDictionaryStorage> GetStorage(
const net::SharedDictionaryStorageIsolationKey& isolation_key);
// TODO(crbug.com/1413922): Add a method to delete dictionaries when the user
// clears the browsing data (BrowsingDataRemover::DATA_TYPE_CACHE and
// DATA_TYPE_SITE_DATA).
// Called when the SharedDictionaryStorage for the `isolation_key` is
// deleted.
void OnStorageDeleted(
const net::SharedDictionaryStorageIsolationKey& isolation_key);
protected:
SharedDictionaryManager();
// Called to create a SharedDictionaryStorage for the `isolation_key`. This is
// called only when there is no matching storage in `storages_`.
virtual scoped_refptr<SharedDictionaryStorage> CreateStorage(
const net::SharedDictionaryStorageIsolationKey& isolation_key) = 0;
base::WeakPtr<SharedDictionaryManager> GetWeakPtr();
private:
std::map<net::SharedDictionaryStorageIsolationKey,
raw_ptr<SharedDictionaryStorage>>
storages_;
base::WeakPtrFactory<SharedDictionaryManager> weak_factory_{this};
};
} // namespace network
#endif // SERVICES_NETWORK_SHARED_DICTIONARY_SHARED_DICTIONARY_MANAGER_H_