12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SYNC_SYNCABLE_ON_DISK_DIRECTORY_BACKING_STORE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_SYNCABLE_ON_DISK_DIRECTORY_BACKING_STORE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/directory_backing_store.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncable { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is the concrete class that provides a useful implementation of 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DirectoryBackingStore. 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SYNC_EXPORT_PRIVATE OnDiskDirectoryBackingStore 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public DirectoryBackingStore { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDiskDirectoryBackingStore(const std::string& dir_name, 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& backing_filepath); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~OnDiskDirectoryBackingStore(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual DirOpenResult Load( 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Directory::MetahandlesMap* handles_map, 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JournalIndex* delete_journals, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Directory::KernelLoadInfo* kernel_load_info) OVERRIDE; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A helper function that will make one attempt to load the directory. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unlike Load(), it does not attempt to recover from failure. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DirOpenResult TryLoad( 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Directory::MetahandlesMap* handles_map, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JournalIndex* delete_journals, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Directory::KernelLoadInfo* kernel_load_info); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Subclasses may override this to avoid a possible DCHECK. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ReportFirstTryOpenFailure(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MinorCorruption); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_failure_for_test_; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath backing_filepath_; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OnDiskDirectoryBackingStore); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncable 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SYNC_SYNCABLE_ON_DISK_DIRECTORY_BACKING_STORE_H_ 52