12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NET_TOOLS_DUMP_CACHE_SIMPLE_CACHE_DUMPER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define NET_TOOLS_DUMP_CACHE_SIMPLE_CACHE_DUMPER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/thread.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/completion_callback.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DiskDumper;
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace disk_cache {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Backend;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Entry;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace disk_cache
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IOBufferWithSize;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A class for dumping the contents of a disk cache to a series of text
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// files.  The files will contain the response headers, followed by the
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// response body, as if the HTTP response were written directly to disk.
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SimpleCacheDumper {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SimpleCacheDumper(base::FilePath input_path, base::FilePath output_path);
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~SimpleCacheDumper();
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Dumps the cache to disk. Returns OK if the operation was successful,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // and a net error code otherwise.
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int Run();
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum State {
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_NONE,
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_CREATE_CACHE,
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_CREATE_CACHE_COMPLETE,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_OPEN_ENTRY,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_OPEN_ENTRY_COMPLETE,
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_CREATE_ENTRY,
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_CREATE_ENTRY_COMPLETE,
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_READ_HEADERS,
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_READ_HEADERS_COMPLETE,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_WRITE_HEADERS,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_WRITE_HEADERS_COMPLETE,
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_READ_BODY,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_READ_BODY_COMPLETE,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_WRITE_BODY,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_WRITE_BODY_COMPLETE,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_DONE,
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoLoop(int rv);
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoCreateCache();
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoCreateCacheComplete(int rv);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoOpenEntry();
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoOpenEntryComplete(int rv);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoCreateEntry();
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoCreateEntryComplete(int rv);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoReadHeaders();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoReadHeadersComplete(int rv);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoWriteHeaders();
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoWriteHeadersComplete(int rv);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoReadBody();
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoReadBodyComplete(int rv);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoWriteBody();
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoWriteBodyComplete(int rv);
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoDone();
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnIOComplete(int rv);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  State state_;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath input_path_;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath output_path_;
79a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  scoped_ptr<disk_cache::Backend> cache_;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<DiskDumper> writer_;
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Thread* cache_thread_;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void* iter_;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  disk_cache::Entry* src_entry_;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  disk_cache::Entry* dst_entry_;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CompletionCallback io_callback_;
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<IOBufferWithSize> buf_;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int rv_;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SimpleCacheDumper);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace net
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // NET_TOOLS_DUMP_CACHE_SIMPLE_CACHE_DUMPER_H_
95