on_disk_directory_backing_store.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright 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 SYNC_SYNCABLE_ON_DISK_DIRECTORY_BACKING_STORE_H_
6#define SYNC_SYNCABLE_ON_DISK_DIRECTORY_BACKING_STORE_H_
7
8#include "base/files/file_path.h"
9#include "sync/base/sync_export.h"
10#include "sync/syncable/directory_backing_store.h"
11
12namespace syncer {
13namespace syncable {
14
15// This is the concrete class that provides a useful implementation of
16// DirectoryBackingStore.
17class SYNC_EXPORT_PRIVATE OnDiskDirectoryBackingStore
18    : public DirectoryBackingStore {
19 public:
20  OnDiskDirectoryBackingStore(const std::string& dir_name,
21                              const base::FilePath& backing_filepath);
22  virtual ~OnDiskDirectoryBackingStore();
23  virtual DirOpenResult Load(
24      MetahandlesIndex* entry_bucket,
25      JournalIndex* delete_journals,
26      Directory::KernelLoadInfo* kernel_load_info) OVERRIDE;
27
28  // A helper function that will make one attempt to load the directory.
29  // Unlike Load(), it does not attempt to recover from failure.
30  DirOpenResult TryLoad(
31      MetahandlesIndex* entry_bucket,
32      JournalIndex* delete_journals,
33      Directory::KernelLoadInfo* kernel_load_info);
34
35 protected:
36  // Subclasses may override this to avoid a possible DCHECK.
37  virtual void ReportFirstTryOpenFailure();
38
39 private:
40  FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MinorCorruption);
41
42  bool allow_failure_for_test_;
43  base::FilePath backing_filepath_;
44
45  DISALLOW_COPY_AND_ASSIGN(OnDiskDirectoryBackingStore);
46};
47
48}  // namespace syncable
49}  // namespace syncer
50
51#endif  // SYNC_SYNCABLE_ON_DISK_DIRECTORY_BACKING_STORE_H_
52