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"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/disk_cache/disk_cache.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DiskDumper;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IOBufferWithSize;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A class for dumping the contents of a disk cache to a series of text
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// files.  The files will contain the response headers, followed by the
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// response body, as if the HTTP response were written directly to disk.
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SimpleCacheDumper {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SimpleCacheDumper(base::FilePath input_path, base::FilePath output_path);
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~SimpleCacheDumper();
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Dumps the cache to disk. Returns OK if the operation was successful,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // and a net error code otherwise.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int Run();
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum State {
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_NONE,
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_CREATE_CACHE,
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_CREATE_CACHE_COMPLETE,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_OPEN_ENTRY,
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_OPEN_ENTRY_COMPLETE,
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_CREATE_ENTRY,
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_CREATE_ENTRY_COMPLETE,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_READ_HEADERS,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_READ_HEADERS_COMPLETE,
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_WRITE_HEADERS,
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_WRITE_HEADERS_COMPLETE,
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_READ_BODY,
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_READ_BODY_COMPLETE,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_WRITE_BODY,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_WRITE_BODY_COMPLETE,
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    STATE_DONE,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoLoop(int rv);
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoCreateCache();
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoCreateCacheComplete(int rv);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoOpenEntry();
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoOpenEntryComplete(int rv);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoCreateEntry();
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoCreateEntryComplete(int rv);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoReadHeaders();
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoReadHeadersComplete(int rv);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoWriteHeaders();
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoWriteHeadersComplete(int rv);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoReadBody();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoReadBodyComplete(int rv);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoWriteBody();
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoWriteBodyComplete(int rv);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int DoDone();
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnIOComplete(int rv);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  State state_;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath input_path_;
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath output_path_;
75a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  scoped_ptr<disk_cache::Backend> cache_;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<DiskDumper> writer_;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Thread* cache_thread_;
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<disk_cache::Backend::Iterator> iter_;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  disk_cache::Entry* src_entry_;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  disk_cache::Entry* dst_entry_;
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CompletionCallback io_callback_;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<IOBufferWithSize> buf_;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int rv_;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SimpleCacheDumper);
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace net
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // NET_TOOLS_DUMP_CACHE_SIMPLE_CACHE_DUMPER_H_
91