1 // Copyright (c) 2012 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 NET_TOOLS_DUMP_CACHE_SIMPLE_CACHE_DUMPER_H_ 6 #define NET_TOOLS_DUMP_CACHE_SIMPLE_CACHE_DUMPER_H_ 7 8 #include "base/files/file_path.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/threading/thread.h" 11 #include "net/base/completion_callback.h" 12 #include "net/disk_cache/disk_cache.h" 13 14 class DiskDumper; 15 16 namespace net { 17 18 class IOBufferWithSize; 19 20 // A class for dumping the contents of a disk cache to a series of text 21 // files. The files will contain the response headers, followed by the 22 // response body, as if the HTTP response were written directly to disk. 23 class SimpleCacheDumper { 24 public: 25 SimpleCacheDumper(base::FilePath input_path, base::FilePath output_path); 26 ~SimpleCacheDumper(); 27 28 // Dumps the cache to disk. Returns OK if the operation was successful, 29 // and a net error code otherwise. 30 int Run(); 31 32 private: 33 enum State { 34 STATE_NONE, 35 STATE_CREATE_CACHE, 36 STATE_CREATE_CACHE_COMPLETE, 37 STATE_OPEN_ENTRY, 38 STATE_OPEN_ENTRY_COMPLETE, 39 STATE_CREATE_ENTRY, 40 STATE_CREATE_ENTRY_COMPLETE, 41 STATE_READ_HEADERS, 42 STATE_READ_HEADERS_COMPLETE, 43 STATE_WRITE_HEADERS, 44 STATE_WRITE_HEADERS_COMPLETE, 45 STATE_READ_BODY, 46 STATE_READ_BODY_COMPLETE, 47 STATE_WRITE_BODY, 48 STATE_WRITE_BODY_COMPLETE, 49 STATE_DONE, 50 }; 51 52 int DoLoop(int rv); 53 54 int DoCreateCache(); 55 int DoCreateCacheComplete(int rv); 56 int DoOpenEntry(); 57 int DoOpenEntryComplete(int rv); 58 int DoCreateEntry(); 59 int DoCreateEntryComplete(int rv); 60 int DoReadHeaders(); 61 int DoReadHeadersComplete(int rv); 62 int DoWriteHeaders(); 63 int DoWriteHeadersComplete(int rv); 64 int DoReadBody(); 65 int DoReadBodyComplete(int rv); 66 int DoWriteBody(); 67 int DoWriteBodyComplete(int rv); 68 int DoDone(); 69 70 void OnIOComplete(int rv); 71 72 State state_; 73 base::FilePath input_path_; 74 base::FilePath output_path_; 75 scoped_ptr<disk_cache::Backend> cache_; 76 scoped_ptr<DiskDumper> writer_; 77 base::Thread* cache_thread_; 78 scoped_ptr<disk_cache::Backend::Iterator> iter_; 79 disk_cache::Entry* src_entry_; 80 disk_cache::Entry* dst_entry_; 81 CompletionCallback io_callback_; 82 scoped_refptr<IOBufferWithSize> buf_; 83 int rv_; 84 85 DISALLOW_COPY_AND_ASSIGN(SimpleCacheDumper); 86 }; 87 88 } // namespace net 89 90 #endif // NET_TOOLS_DUMP_CACHE_SIMPLE_CACHE_DUMPER_H_ 91