OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_H_ |
6 #define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_H_ | 6 #define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_H_ |
7 | 7 |
8 #include <sys/stat.h> | 8 #include <sys/stat.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 private: | 103 private: |
104 // FindFileDelegate overrides. | 104 // FindFileDelegate overrides. |
105 virtual void OnDone(base::PlatformFileError error, | 105 virtual void OnDone(base::PlatformFileError error, |
106 const FilePath& directory_path, | 106 const FilePath& directory_path, |
107 GDataFileBase* file) OVERRIDE; | 107 GDataFileBase* file) OVERRIDE; |
108 | 108 |
109 // File entry that was found. | 109 // File entry that was found. |
110 GDataFileBase* file_; | 110 GDataFileBase* file_; |
111 }; | 111 }; |
112 | 112 |
| 113 // Helper structure used for extracting key properties from GDataFile object. |
| 114 struct GDataFileProperties { |
| 115 GDataFileProperties(); |
| 116 ~GDataFileProperties(); |
| 117 |
| 118 base::PlatformFileInfo file_info; |
| 119 std::string resource_id; |
| 120 std::string file_md5; |
| 121 GURL content_url; |
| 122 GURL edit_url; |
| 123 bool is_hosted_document; |
| 124 }; |
| 125 |
113 // GData file system abstraction layer. | 126 // GData file system abstraction layer. |
114 // The interface is defined to make GDataFileSystem mockable. | 127 // The interface is defined to make GDataFileSystem mockable. |
115 class GDataFileSystemInterface { | 128 class GDataFileSystemInterface { |
116 public: | 129 public: |
117 virtual ~GDataFileSystemInterface() {} | 130 virtual ~GDataFileSystemInterface() {} |
118 | 131 |
119 // Used to notify events on the file system. | 132 // Used to notify events on the file system. |
120 class Observer { | 133 class Observer { |
121 public: | 134 public: |
122 // Trigerred when a file has been pinned, after the cache state is | 135 // Trigerred when a file has been pinned, after the cache state is |
(...skipping 11 matching lines...) Expand all Loading... |
134 | 147 |
135 // Enum defining GCache subdirectory location. | 148 // Enum defining GCache subdirectory location. |
136 enum CacheSubdir { // This indexes into |cache_paths_| vector. | 149 enum CacheSubdir { // This indexes into |cache_paths_| vector. |
137 CACHE_TYPE_META = 0, | 150 CACHE_TYPE_META = 0, |
138 CACHE_TYPE_PINNED, | 151 CACHE_TYPE_PINNED, |
139 CACHE_TYPE_OUTGOING, | 152 CACHE_TYPE_OUTGOING, |
140 CACHE_TYPE_PERSISTENT, | 153 CACHE_TYPE_PERSISTENT, |
141 CACHE_TYPE_TMP, | 154 CACHE_TYPE_TMP, |
142 }; | 155 }; |
143 | 156 |
| 157 // Enum defining origin of a cached file. |
| 158 enum CachedFileOrigin { |
| 159 CACHED_FILE_FROM_SERVER = 0, |
| 160 CACHED_FILE_LOCALLY_MODIFIED, |
| 161 }; |
| 162 |
144 // Authenticates the user by fetching the auth token as | 163 // Authenticates the user by fetching the auth token as |
145 // needed. |callback| will be run with the error code and the auth | 164 // needed. |callback| will be run with the error code and the auth |
146 // token, on the thread this function is run. | 165 // token, on the thread this function is run. |
147 // | 166 // |
148 // Must be called on UI thread. | 167 // Must be called on UI thread. |
149 virtual void Authenticate(const AuthStatusCallback& callback) = 0; | 168 virtual void Authenticate(const AuthStatusCallback& callback) = 0; |
150 | 169 |
151 // Finds file info by using virtual |file_path|. This call will also | 170 // Finds file info by using virtual |file_path|. This call will also |
152 // retrieve and refresh file system content from server and disk cache. | 171 // retrieve and refresh file system content from server and disk cache. |
153 // | 172 // |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 // Gets the cache state of file corresponding to |resource_id| and |md5| if it | 284 // Gets the cache state of file corresponding to |resource_id| and |md5| if it |
266 // exists on disk. | 285 // exists on disk. |
267 // Initializes cache if it has not been initialized. | 286 // Initializes cache if it has not been initialized. |
268 // Upon completion, |callback| is invoked on the thread where this method was | 287 // Upon completion, |callback| is invoked on the thread where this method was |
269 // called with the cache state if file exists in cache or CACHE_STATE_NONE | 288 // called with the cache state if file exists in cache or CACHE_STATE_NONE |
270 // otherwise. | 289 // otherwise. |
271 virtual void GetCacheState(const std::string& resource_id, | 290 virtual void GetCacheState(const std::string& resource_id, |
272 const std::string& md5, | 291 const std::string& md5, |
273 const GetCacheStateCallback& callback) = 0; | 292 const GetCacheStateCallback& callback) = 0; |
274 | 293 |
275 // Finds file object by |file_path| and returns its |file_info|. | 294 // Finds file object by |file_path| and returns its key |properties|. |
276 // Returns true if file was found. | 295 // Returns true if file was found. |
277 virtual bool GetFileInfoFromPath(const FilePath& gdata_file_path, | 296 virtual bool GetFileInfoFromPath(const FilePath& gdata_file_path, |
278 base::PlatformFileInfo* file_info) = 0; | 297 GDataFileProperties* properties) = 0; |
279 | 298 |
280 // Returns the tmp sub-directory under gdata cache directory, i.e. | 299 // Returns the tmp sub-directory under gdata cache directory, i.e. |
281 // <user_profile_dir>/GCache/v1/tmp | 300 // <user_profile_dir>/GCache/v1/tmp |
282 virtual FilePath GetGDataCacheTmpDirectory() = 0; | 301 virtual FilePath GetGDataCacheTmpDirectory() = 0; |
283 | 302 |
284 // Fetches the user's Account Metadata to find out current quota information | 303 // Fetches the user's Account Metadata to find out current quota information |
285 // and returns it to the callback. | 304 // and returns it to the callback. |
286 virtual void GetAvailableSpace(const GetAvailableSpaceCallback& callback) = 0; | 305 virtual void GetAvailableSpace(const GetAvailableSpaceCallback& callback) = 0; |
287 }; | 306 }; |
288 | 307 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 GetProgressStatusList() OVERRIDE; | 342 GetProgressStatusList() OVERRIDE; |
324 virtual bool CancelOperation(const FilePath& file_path) OVERRIDE; | 343 virtual bool CancelOperation(const FilePath& file_path) OVERRIDE; |
325 virtual void AddOperationObserver( | 344 virtual void AddOperationObserver( |
326 GDataOperationRegistry::Observer* observer) OVERRIDE; | 345 GDataOperationRegistry::Observer* observer) OVERRIDE; |
327 virtual void RemoveOperationObserver( | 346 virtual void RemoveOperationObserver( |
328 GDataOperationRegistry::Observer* observer) OVERRIDE; | 347 GDataOperationRegistry::Observer* observer) OVERRIDE; |
329 virtual void GetCacheState(const std::string& resource_id, | 348 virtual void GetCacheState(const std::string& resource_id, |
330 const std::string& md5, | 349 const std::string& md5, |
331 const GetCacheStateCallback& callback) OVERRIDE; | 350 const GetCacheStateCallback& callback) OVERRIDE; |
332 virtual bool GetFileInfoFromPath(const FilePath& gdata_file_path, | 351 virtual bool GetFileInfoFromPath(const FilePath& gdata_file_path, |
333 base::PlatformFileInfo* file_info) OVERRIDE; | 352 GDataFileProperties* properties) OVERRIDE; |
334 virtual FilePath GetGDataCacheTmpDirectory() OVERRIDE; | 353 virtual FilePath GetGDataCacheTmpDirectory() OVERRIDE; |
335 virtual void GetAvailableSpace( | 354 virtual void GetAvailableSpace( |
336 const GetAvailableSpaceCallback& callback) OVERRIDE; | 355 const GetAvailableSpaceCallback& callback) OVERRIDE; |
337 | 356 |
338 private: | 357 private: |
339 friend class GDataUploader; | 358 friend class GDataUploader; |
340 friend class GDataFileSystemFactory; | 359 friend class GDataFileSystemFactory; |
341 friend class GDataFileSystemTest; | 360 friend class GDataFileSystemTest; |
342 FRIEND_TEST_ALL_PREFIXES(GDataFileSystemTest, | 361 FRIEND_TEST_ALL_PREFIXES(GDataFileSystemTest, |
343 FindFirstMissingParentDirectory); | 362 FindFirstMissingParentDirectory); |
(...skipping 22 matching lines...) Expand all Loading... |
366 const FileOperationCallback& callback); | 385 const FileOperationCallback& callback); |
367 ~CreateDirectoryParams(); | 386 ~CreateDirectoryParams(); |
368 | 387 |
369 const FilePath created_directory_path; | 388 const FilePath created_directory_path; |
370 const FilePath target_directory_path; | 389 const FilePath target_directory_path; |
371 const bool is_exclusive; | 390 const bool is_exclusive; |
372 const bool is_recursive; | 391 const bool is_recursive; |
373 FileOperationCallback callback; | 392 FileOperationCallback callback; |
374 }; | 393 }; |
375 | 394 |
| 395 // Defines set of parameters passed to intermediate callbacks during |
| 396 // execution of GetFile() method. |
| 397 struct GetFileFromCacheParams { |
| 398 GetFileFromCacheParams(const FilePath& virtual_file_path, |
| 399 const FilePath& local_tmp_path, |
| 400 const GURL& content_url, |
| 401 const std::string& resource_id, |
| 402 const std::string& md5, |
| 403 scoped_refptr<base::MessageLoopProxy> proxy, |
| 404 const GetFileCallback& callback); |
| 405 ~GetFileFromCacheParams(); |
| 406 |
| 407 FilePath virtual_file_path; |
| 408 FilePath local_tmp_path; |
| 409 GURL content_url; |
| 410 std::string resource_id; |
| 411 std::string md5; |
| 412 scoped_refptr<base::MessageLoopProxy> proxy; |
| 413 const GetFileCallback callback; |
| 414 }; |
| 415 |
376 // Callback similar to FileOperationCallback but with a given | 416 // Callback similar to FileOperationCallback but with a given |
377 // |file_path|. | 417 // |file_path|. |
378 typedef base::Callback<void(base::PlatformFileError error, | 418 typedef base::Callback<void(base::PlatformFileError error, |
379 const FilePath& file_path)> | 419 const FilePath& file_path)> |
380 FilePathUpdateCallback; | 420 FilePathUpdateCallback; |
381 | 421 |
382 GDataFileSystem(Profile* profile, | 422 GDataFileSystem(Profile* profile, |
383 DocumentsServiceInterface* documents_service, | 423 DocumentsServiceInterface* documents_service, |
384 GDataSyncClientInterface* sync_client); | 424 GDataSyncClientInterface* sync_client); |
385 virtual ~GDataFileSystem(); | 425 virtual ~GDataFileSystem(); |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 const GURL& document_url); | 552 const GURL& document_url); |
513 | 553 |
514 // Callback for handling directory create requests. | 554 // Callback for handling directory create requests. |
515 void OnCreateDirectoryCompleted( | 555 void OnCreateDirectoryCompleted( |
516 const CreateDirectoryParams& params, | 556 const CreateDirectoryParams& params, |
517 GDataErrorCode status, | 557 GDataErrorCode status, |
518 scoped_ptr<base::Value> created_entry); | 558 scoped_ptr<base::Value> created_entry); |
519 | 559 |
520 // Callback for handling file downloading requests. | 560 // Callback for handling file downloading requests. |
521 void OnFileDownloaded( | 561 void OnFileDownloaded( |
522 const GetFileCallback& callback, | 562 const GetFileFromCacheParams& params, |
523 GDataErrorCode status, | 563 GDataErrorCode status, |
524 const GURL& content_url, | 564 const GURL& content_url, |
525 const FilePath& temp_file); | 565 const FilePath& downloaded_file_path); |
| 566 |
| 567 // Callback for handling internal StoreToCache() calls after downloading |
| 568 // file content. |
| 569 void OnDownloadStoredToCache(base::PlatformFileError error, |
| 570 const std::string& resource_id, |
| 571 const std::string& md5); |
526 | 572 |
527 // Callback for handling file upload initialization requests. | 573 // Callback for handling file upload initialization requests. |
528 void OnUploadLocationReceived( | 574 void OnUploadLocationReceived( |
529 const InitiateUploadCallback& callback, | 575 const InitiateUploadCallback& callback, |
530 scoped_refptr<base::MessageLoopProxy> message_loop_proxy, | 576 scoped_refptr<base::MessageLoopProxy> message_loop_proxy, |
531 GDataErrorCode code, | 577 GDataErrorCode code, |
532 const GURL& upload_location); | 578 const GURL& upload_location); |
533 | 579 |
534 // Callback for handling file upload resume requests. | 580 // Callback for handling file upload resume requests. |
535 void OnResumeUpload(const ResumeUploadCallback& callback, | 581 void OnResumeUpload(const ResumeUploadCallback& callback, |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 // - provides absolute path for files to be cached or cached. | 681 // - provides absolute path for files to be cached or cached. |
636 // - updates the cached file on disk after user has edited it locally | 682 // - updates the cached file on disk after user has edited it locally |
637 // - handles eviction when disk runs out of space | 683 // - handles eviction when disk runs out of space |
638 // - uploads dirty files to gdata server. | 684 // - uploads dirty files to gdata server. |
639 // - etc. | 685 // - etc. |
640 | 686 |
641 // Returns absolute path of the file if it were cached or to be cached. | 687 // Returns absolute path of the file if it were cached or to be cached. |
642 FilePath GetCacheFilePath(const std::string& resource_id, | 688 FilePath GetCacheFilePath(const std::string& resource_id, |
643 const std::string& md5, | 689 const std::string& md5, |
644 CacheSubdir subdir_id, | 690 CacheSubdir subdir_id, |
645 bool is_local); | 691 CachedFileOrigin file_orign); |
646 | 692 |
647 // Stores |source_path| corresponding to |resource_id| and |md5| to cache. | 693 // Stores |source_path| corresponding to |resource_id| and |md5| to cache. |
648 // Initializes cache if it has not been initialized. | 694 // Initializes cache if it has not been initialized. |
649 // Upon completion, |callback| is invoked on the thread where this method was | 695 // Upon completion, |callback| is invoked on the thread where this method was |
650 // called. | 696 // called. |
651 // TODO(kuan): When URLFetcher can save response to a specified file (as | |
652 // opposed to only temporary file currently), remove |source_path| parameter. | |
653 void StoreToCache(const std::string& resource_id, | 697 void StoreToCache(const std::string& resource_id, |
654 const std::string& md5, | 698 const std::string& md5, |
655 const FilePath& source_path, | 699 const FilePath& source_path, |
656 const CacheOperationCallback& callback); | 700 const CacheOperationCallback& callback); |
657 | 701 |
658 // Checks if file corresponding to |resource_id| and |md5| exist on disk and | 702 // Checks if file corresponding to |resource_id| and |md5| exist on disk and |
659 // can be accessed i.e. not corrupted by previous file operations that didn't | 703 // can be accessed i.e. not corrupted by previous file operations that didn't |
660 // complete for whatever reasons. | 704 // complete for whatever reasons. |
661 // Initializes cache if it has not been initialized. | 705 // Initializes cache if it has not been initialized. |
662 // Upon completion, |callback| is invoked on the thread where this method was | 706 // Upon completion, |callback| is invoked on the thread where this method was |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
748 mode_t mode_bits, | 792 mode_t mode_bits, |
749 const CacheOperationCallback& callback); | 793 const CacheOperationCallback& callback); |
750 | 794 |
751 // Helper function for OnFilePinned() and OnFileUnpinned(). | 795 // Helper function for OnFilePinned() and OnFileUnpinned(). |
752 void OnCacheStatusModified(base::PlatformFileError error, | 796 void OnCacheStatusModified(base::PlatformFileError error, |
753 const std::string& resource_id, | 797 const std::string& resource_id, |
754 const std::string& md5, | 798 const std::string& md5, |
755 mode_t mode_bits, | 799 mode_t mode_bits, |
756 const CacheOperationCallback& callback); | 800 const CacheOperationCallback& callback); |
757 | 801 |
| 802 // Helper function for internally handling responses from GetFromCache() |
| 803 // calls during processing of GetFile() request. |
| 804 void OnGetFileFromCache(const GetFileFromCacheParams& params, |
| 805 base::PlatformFileError error, |
| 806 const std::string& resource_id, |
| 807 const std::string& md5, |
| 808 const FilePath& gdata_file_path, |
| 809 const FilePath& cache_file_path); |
| 810 |
758 // Callback for GetCacheState that gets cache state of file corresponding to | 811 // Callback for GetCacheState that gets cache state of file corresponding to |
759 // |resource_id| and |md5|. | 812 // |resource_id| and |md5|. |
760 void OnGetCacheState(const std::string& resource_id, | 813 void OnGetCacheState(const std::string& resource_id, |
761 const std::string& md5, | 814 const std::string& md5, |
762 const GetCacheStateCallback& callback); | 815 const GetCacheStateCallback& callback); |
763 | 816 |
764 // Cache internal helper functions. | 817 // Cache internal helper functions. |
765 | 818 |
766 void GetFromCacheInternal(const std::string& resource_id, | 819 void GetFromCacheInternal(const std::string& resource_id, |
767 const std::string& md5, | 820 const std::string& md5, |
768 const FilePath& gdata_file_path, | 821 const FilePath& gdata_file_path, |
769 const GetFromCacheCallback& callback); | 822 const GetFromCacheCallback& callback); |
770 | 823 |
771 // Unsafe (unlocked) version of InitializeCacheIfnecessary method. | 824 // Unsafe (unlocked) version of InitializeCacheIfnecessary method. |
772 void UnsafeInitializeCacheIfNecessary(); | 825 void UnsafeInitializeCacheIfNecessary(); |
773 | 826 |
774 // Helper function used to perform file search on the calling thread of | 827 // Helper function used to perform file search on the calling thread of |
775 // FindFileByPath() request. | 828 // FindFileByPath() request. |
776 void FindFileByPathOnCallingThread(const FilePath& search_file_path, | 829 void FindFileByPathOnCallingThread(const FilePath& search_file_path, |
777 const FindFileCallback& callback); | 830 const FindFileCallback& callback); |
778 | 831 |
779 scoped_ptr<GDataRootDirectory> root_; | 832 scoped_ptr<GDataRootDirectory> root_; |
780 | 833 |
781 base::Lock lock_; | 834 base::Lock lock_; |
782 | 835 |
783 // The profile hosts the GDataFileSystem. | 836 // The profile hosts the GDataFileSystem. |
784 Profile* profile_; | 837 Profile* profile_; |
785 | 838 |
786 // The document service for the GDataFileSystem. | 839 // The document service for the GDataFileSystem. |
787 scoped_ptr<DocumentsServiceInterface> documents_service_; | 840 scoped_ptr<DocumentsServiceInterface> documents_service_; |
788 | 841 |
789 // File content uploader. | 842 // File content uploader. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 virtual ~GDataFileSystemFactory(); | 884 virtual ~GDataFileSystemFactory(); |
832 | 885 |
833 // ProfileKeyedServiceFactory: | 886 // ProfileKeyedServiceFactory: |
834 virtual ProfileKeyedService* BuildServiceInstanceFor( | 887 virtual ProfileKeyedService* BuildServiceInstanceFor( |
835 Profile* profile) const OVERRIDE; | 888 Profile* profile) const OVERRIDE; |
836 }; | 889 }; |
837 | 890 |
838 } // namespace gdata | 891 } // namespace gdata |
839 | 892 |
840 #endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_H_ | 893 #endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_H_ |
OLD | NEW |