Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / third_party / leveldatabase / env_chromium_win.h
1 // Copyright (c) 2013 The LevelDB 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. See the AUTHORS file for names of contributors.
4
5 #ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_WIN_H_
6 #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_WIN_H_
7
8 #include "env_chromium.h"
9
10 namespace leveldb_env {
11
12 leveldb::Status MakeIOErrorWin(leveldb::Slice filename,
13                                  const std::string& message,
14                                  MethodID method,
15                                  DWORD err);
16
17 class ChromiumWritableFileWin : public leveldb::WritableFile {
18  public:
19   ChromiumWritableFileWin(const std::string& fname,
20                             HANDLE f,
21                             const UMALogger* uma_logger,
22                             WriteTracker* tracker,
23                             bool make_backup);
24   virtual ~ChromiumWritableFileWin();
25   virtual leveldb::Status Append(const leveldb::Slice& data);
26   virtual leveldb::Status Close();
27   virtual leveldb::Status Flush();
28   virtual leveldb::Status Sync();
29
30  private:
31   enum Type {
32     kManifest,
33     kTable,
34     kOther
35   };
36   leveldb::Status SyncParent();
37
38   std::string filename_;
39   HANDLE file_;
40   const UMALogger* uma_logger_;
41   WriteTracker* tracker_;
42   Type file_type_;
43   std::string parent_dir_;
44   bool make_backup_;
45 };
46
47 class ChromiumEnvWin : public ChromiumEnv {
48  public:
49   ChromiumEnvWin();
50   virtual ~ChromiumEnvWin();
51
52   virtual leveldb::Status NewSequentialFile(const std::string& fname,
53                                             leveldb::SequentialFile** result);
54   virtual leveldb::Status NewRandomAccessFile(
55       const std::string& fname,
56       leveldb::RandomAccessFile** result);
57   virtual leveldb::Status NewWritableFile(const std::string& fname,
58                                           leveldb::WritableFile** result);
59   virtual leveldb::Status NewLogger(const std::string& fname,
60                                     leveldb::Logger** result);
61
62  protected:
63   virtual base::File::Error GetDirectoryEntries(
64       const base::FilePath& dir_param,
65       std::vector<base::FilePath>* result) const;
66
67  private:
68   // BGThread() is the body of the background thread
69   void BGThread();
70   static void BGThreadWrapper(void* arg) {
71     reinterpret_cast<ChromiumEnvWin*>(arg)->BGThread();
72   }
73   void RecordOpenFilesLimit(const std::string& type);
74   virtual void RecordOSError(MethodID method, DWORD err) const;
75 };
76
77 }  // namespace leveldb_env
78
79 #endif