• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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 CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_
6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_
7 
8 #include <string>
9 
10 #include "base/bind.h"
11 #include "base/callback.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/scoped_vector.h"
14 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
15 #include "chrome/browser/sync_file_system/sync_status_code.h"
16 #include "google_apis/drive/gdata_errorcode.h"
17 #include "webkit/common/blob/scoped_file.h"
18 
19 namespace google_apis {
20 class ChangeResource;
21 class FileResource;
22 class ResourceEntry;
23 }
24 
25 namespace leveldb {
26 class WriteBatch;
27 }
28 
29 namespace sync_file_system {
30 namespace drive_backend {
31 
32 void PutServiceMetadataToBatch(const ServiceMetadata& service_metadata,
33                                leveldb::WriteBatch* batch);
34 void PutFileMetadataToBatch(const FileMetadata& file,
35                             leveldb::WriteBatch* batch);
36 void PutFileTrackerToBatch(const FileTracker& tracker,
37                            leveldb::WriteBatch* batch);
38 
39 void PutFileMetadataDeletionToBatch(const std::string& file_id,
40                                     leveldb::WriteBatch* batch);
41 void PutFileTrackerDeletionToBatch(int64 tracker_id,
42                                    leveldb::WriteBatch* batch);
43 
44 void PopulateFileDetailsByFileResource(
45     const google_apis::FileResource& file_resource,
46     FileDetails* details);
47 scoped_ptr<FileMetadata> CreateFileMetadataFromFileResource(
48     int64 change_id,
49     const google_apis::FileResource& resource);
50 scoped_ptr<FileMetadata> CreateFileMetadataFromChangeResource(
51     const google_apis::ChangeResource& change);
52 scoped_ptr<FileMetadata> CreateDeletedFileMetadata(
53     int64 change_id,
54     const std::string& file_id);
55 
56 // Creates a temporary file in |dir_path|.  This must be called on an
57 // IO-allowed task runner, and the runner must be given as |file_task_runner|.
58 webkit_blob::ScopedFile CreateTemporaryFile(
59     base::TaskRunner* file_task_runner);
60 
61 std::string FileKindToString(FileKind file_kind);
62 
63 bool HasFileAsParent(const FileDetails& details, const std::string& file_id);
64 
65 std::string GetMimeTypeFromTitle(const base::FilePath& title);
66 
67 SyncStatusCode GDataErrorCodeToSyncStatusCode(
68     google_apis::GDataErrorCode error);
69 
70 scoped_ptr<FileTracker> CloneFileTracker(const FileTracker* obj);
71 
72 template <typename Src, typename Dest>
AppendContents(const Src & src,Dest * dest)73 void AppendContents(const Src& src, Dest* dest) {
74   dest->insert(dest->end(), src.begin(), src.end());
75 }
76 
77 template <typename Container>
LookUpMap(const Container & container,const typename Container::key_type & key,const typename Container::mapped_type & default_value)78 const typename Container::mapped_type& LookUpMap(
79     const Container& container,
80     const typename Container::key_type& key,
81     const typename Container::mapped_type& default_value) {
82   typename Container::const_iterator found = container.find(key);
83   if (found == container.end())
84     return default_value;
85   return found->second;
86 }
87 
88 template <typename R, typename S, typename T>
ComposeFunction(const base::Callback<T ()> & g,const base::Callback<R (S)> & f)89 R ComposeFunction(const base::Callback<T()>& g,
90                   const base::Callback<R(S)>& f) {
91   return f.Run(g.Run());
92 }
93 
94 template <typename R, typename S, typename T>
CreateComposedFunction(const base::Callback<T ()> & g,const base::Callback<R (S)> & f)95 base::Callback<R()> CreateComposedFunction(
96     const base::Callback<T()>& g,
97     const base::Callback<R(S)>& f) {
98   return base::Bind(&ComposeFunction<R, S, T>, g, f);
99 }
100 
101 }  // namespace drive_backend
102 }  // namespace sync_file_system
103 
104 #endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_
105