1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_NET_QUOTA_POLICY_CHANNEL_ID_STORE_H_ 6#define CHROME_BROWSER_NET_QUOTA_POLICY_CHANNEL_ID_STORE_H_ 7 8#include <set> 9#include <string> 10 11#include "base/callback_forward.h" 12#include "base/compiler_specific.h" 13#include "base/macros.h" 14#include "base/memory/ref_counted.h" 15#include "base/memory/scoped_ptr.h" 16#include "base/memory/scoped_vector.h" 17#include "net/extras/sqlite/sqlite_channel_id_store.h" 18#include "net/ssl/default_channel_id_store.h" 19 20namespace base { 21class FilePath; 22class SequencedTaskRunner; 23} 24 25namespace storage { 26class SpecialStoragePolicy; 27} 28 29// Persistent ChannelID Store that takes into account SpecialStoragePolicy and 30// removes ChannelIDs that are StorageSessionOnly when store is closed. 31class QuotaPolicyChannelIDStore 32 : public net::DefaultChannelIDStore::PersistentStore { 33 public: 34 // Create or open persistent store in file |path|. All I/O tasks are performed 35 // in background using |background_task_runner|. If provided, a 36 // |special_storage_policy| is consulted when the store is closed to decide 37 // which certificates to keep. 38 QuotaPolicyChannelIDStore( 39 const base::FilePath& path, 40 const scoped_refptr<base::SequencedTaskRunner>& background_task_runner, 41 const scoped_refptr<storage::SpecialStoragePolicy>& 42 special_storage_policy); 43 44 // net::DefaultChannelIDStore::PersistentStore: 45 virtual void Load(const LoadedCallback& loaded_callback) OVERRIDE; 46 virtual void AddChannelID( 47 const net::DefaultChannelIDStore::ChannelID& channel_id) OVERRIDE; 48 virtual void DeleteChannelID( 49 const net::DefaultChannelIDStore::ChannelID& channel_id) OVERRIDE; 50 virtual void SetForceKeepSessionState() OVERRIDE; 51 52 private: 53 typedef ScopedVector<net::DefaultChannelIDStore::ChannelID> ChannelIDVector; 54 55 virtual ~QuotaPolicyChannelIDStore(); 56 57 void OnLoad(const LoadedCallback& loaded_callback, 58 scoped_ptr<ChannelIDVector> channel_ids); 59 60 scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_; 61 scoped_refptr<net::SQLiteChannelIDStore> persistent_store_; 62 // Cache of server identifiers we have channel IDs stored for. 63 std::set<std::string> server_identifiers_; 64 65 DISALLOW_COPY_AND_ASSIGN(QuotaPolicyChannelIDStore); 66}; 67 68#endif // CHROME_BROWSER_NET_QUOTA_POLICY_CHANNEL_ID_STORE_H_ 69