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_CHROMEOS_DRIVE_SYNC_ENTRY_UPDATE_PERFORMER_H_ 6 #define CHROME_BROWSER_CHROMEOS_DRIVE_SYNC_ENTRY_UPDATE_PERFORMER_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/weak_ptr.h" 12 #include "chrome/browser/chromeos/drive/file_errors.h" 13 #include "google_apis/drive/gdata_errorcode.h" 14 15 namespace base { 16 class ScopedClosureRunner; 17 class SequencedTaskRunner; 18 } // namespace base 19 20 namespace google_apis { 21 class FileResource; 22 } // namespace google_apis 23 24 namespace drive { 25 26 class FileChange; 27 class JobScheduler; 28 class ResourceEntry; 29 struct ClientContext; 30 31 namespace file_system { 32 class OperationDelegate; 33 } // namespace file_system 34 35 namespace internal { 36 37 class EntryRevertPerformer; 38 class FileCache; 39 class LoaderController; 40 class RemovePerformer; 41 class ResourceMetadata; 42 43 // This class is responsible to perform server side update of an entry. 44 class EntryUpdatePerformer { 45 public: 46 EntryUpdatePerformer(base::SequencedTaskRunner* blocking_task_runner, 47 file_system::OperationDelegate* delegate, 48 JobScheduler* scheduler, 49 ResourceMetadata* metadata, 50 FileCache* cache, 51 LoaderController* loader_controller); 52 ~EntryUpdatePerformer(); 53 54 // Requests the server to update the metadata of the entry specified by 55 // |local_id| with the locally stored one. 56 // Invokes |callback| when finished with the result of the operation. 57 // |callback| must not be null. 58 void UpdateEntry(const std::string& local_id, 59 const ClientContext& context, 60 const FileOperationCallback& callback); 61 62 struct LocalState; 63 64 private: 65 // Part of UpdateEntry(). Called after local metadata look up. 66 void UpdateEntryAfterPrepare(const ClientContext& context, 67 const FileOperationCallback& callback, 68 scoped_ptr<LocalState> local_state, 69 FileError error); 70 71 // Part of UpdateEntry(). Called after UpdateResource is completed. 72 void UpdateEntryAfterUpdateResource( 73 const ClientContext& context, 74 const FileOperationCallback& callback, 75 const std::string& local_id, 76 scoped_ptr<base::ScopedClosureRunner> loader_lock, 77 google_apis::GDataErrorCode status, 78 scoped_ptr<google_apis::FileResource> entry); 79 80 // Part of UpdateEntry(). Called after FinishUpdate is completed. 81 void UpdateEntryAfterFinish(const FileOperationCallback& callback, 82 const FileChange* changed_files, 83 FileError error); 84 85 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; 86 file_system::OperationDelegate* delegate_; 87 JobScheduler* scheduler_; 88 ResourceMetadata* metadata_; 89 FileCache* cache_; 90 LoaderController* loader_controller_; 91 scoped_ptr<RemovePerformer> remove_performer_; 92 scoped_ptr<EntryRevertPerformer> entry_revert_performer_; 93 94 // Note: This should remain the last member so it'll be destroyed and 95 // invalidate the weak pointers before any other members are destroyed. 96 base::WeakPtrFactory<EntryUpdatePerformer> weak_ptr_factory_; 97 DISALLOW_COPY_AND_ASSIGN(EntryUpdatePerformer); 98 }; 99 100 } // namespace internal 101 } // namespace drive 102 103 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_SYNC_ENTRY_UPDATE_PERFORMER_H_ 104