| 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 // Objects that handle file operations for saving files, on the file thread. | 5 // Objects that handle file operations for saving files, on the file thread. |
| 6 // | 6 // |
| 7 // The SaveFileManager owns a set of SaveFile objects, each of which connects | 7 // The SaveFileManager owns a set of SaveFile objects, each of which connects |
| 8 // with a SaveItem object which belongs to one SavePackage and runs on the file | 8 // with a SaveItem object which belongs to one SavePackage and runs on the file |
| 9 // thread for saving data in order to avoid disk activity on either network IO | 9 // thread for saving data in order to avoid disk activity on either network IO |
| 10 // thread or the UI thread. It coordinates the notifications from the network | 10 // thread or the UI thread. It coordinates the notifications from the network |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 | 85 |
| 86 class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> { | 86 class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> { |
| 87 public: | 87 public: |
| 88 SaveFileManager(); | 88 SaveFileManager(); |
| 89 | 89 |
| 90 // Lifetime management. | 90 // Lifetime management. |
| 91 CONTENT_EXPORT void Shutdown(); | 91 CONTENT_EXPORT void Shutdown(); |
| 92 | 92 |
| 93 // Save the specified URL. Called on the UI thread and forwarded to the | 93 // Save the specified URL. Called on the UI thread and forwarded to the |
| 94 // ResourceDispatcherHostImpl on the IO thread. | 94 // ResourceDispatcherHostImpl on the IO thread. |
| 95 void SaveURL(int save_item_id, | 95 void SaveURL(SaveItemId save_item_id, |
| 96 const GURL& url, | 96 const GURL& url, |
| 97 const Referrer& referrer, | 97 const Referrer& referrer, |
| 98 int render_process_host_id, | 98 int render_process_host_id, |
| 99 int render_view_routing_id, | 99 int render_view_routing_id, |
| 100 int render_frame_routing_id, | 100 int render_frame_routing_id, |
| 101 SaveFileCreateInfo::SaveFileSource save_source, | 101 SaveFileCreateInfo::SaveFileSource save_source, |
| 102 const base::FilePath& file_full_path, | 102 const base::FilePath& file_full_path, |
| 103 ResourceContext* context, | 103 ResourceContext* context, |
| 104 SavePackage* save_package); | 104 SavePackage* save_package); |
| 105 | 105 |
| 106 // Notifications sent from the IO thread and run on the file thread: | 106 // Notifications sent from the IO thread and run on the file thread: |
| 107 void StartSave(SaveFileCreateInfo* info); | 107 void StartSave(SaveFileCreateInfo* info); |
| 108 void UpdateSaveProgress(int save_item_id, net::IOBuffer* data, int size); | 108 void UpdateSaveProgress(SaveItemId save_item_id, |
| 109 void SaveFinished(int save_item_id, int save_package_id, bool is_success); | 109 net::IOBuffer* data, |
| 110 int size); |
| 111 void SaveFinished(SaveItemId save_item_id, |
| 112 SavePackageId save_package_id, |
| 113 bool is_success); |
| 110 | 114 |
| 111 // Notifications sent from the UI thread and run on the file thread. | 115 // Notifications sent from the UI thread and run on the file thread. |
| 112 // Cancel a SaveFile instance which has specified save item id. | 116 // Cancel a SaveFile instance which has specified save item id. |
| 113 void CancelSave(int save_item_id); | 117 void CancelSave(SaveItemId save_item_id); |
| 114 | 118 |
| 115 // Called on the UI thread to remove a save package from SaveFileManager's | 119 // Called on the UI thread to remove a save package from SaveFileManager's |
| 116 // tracking map. | 120 // tracking map. |
| 117 void RemoveSaveFile(int save_item_id, SavePackage* package); | 121 void RemoveSaveFile(SaveItemId save_item_id, SavePackage* package); |
| 118 | 122 |
| 119 // Helper function for deleting specified file. | 123 // Helper function for deleting specified file. |
| 120 void DeleteDirectoryOrFile(const base::FilePath& full_path, bool is_dir); | 124 void DeleteDirectoryOrFile(const base::FilePath& full_path, bool is_dir); |
| 121 | 125 |
| 122 // Runs on file thread to save a file by copying from file system when | 126 // Runs on file thread to save a file by copying from file system when |
| 123 // original url is using file scheme. | 127 // original url is using file scheme. |
| 124 void SaveLocalFile(const GURL& original_file_url, | 128 void SaveLocalFile(const GURL& original_file_url, |
| 125 int save_item_id, | 129 SaveItemId save_item_id, |
| 126 int save_package_id); | 130 SavePackageId save_package_id); |
| 127 | 131 |
| 128 // Renames all the successfully saved files. | 132 // Renames all the successfully saved files. |
| 129 void RenameAllFiles(const FinalNamesMap& final_names, | 133 void RenameAllFiles(const FinalNamesMap& final_names, |
| 130 const base::FilePath& resource_dir, | 134 const base::FilePath& resource_dir, |
| 131 int render_process_id, | 135 int render_process_id, |
| 132 int render_frame_routing_id, | 136 int render_frame_routing_id, |
| 133 int save_package_id); | 137 SavePackageId save_package_id); |
| 134 | 138 |
| 135 // When the user cancels the saving, we need to remove all remaining saved | 139 // When the user cancels the saving, we need to remove all remaining saved |
| 136 // files of this page saving job from save_file_map_. | 140 // files of this page saving job from save_file_map_. |
| 137 void RemoveSavedFileFromFileMap(const std::vector<int>& save_item_ids); | 141 void RemoveSavedFileFromFileMap(const std::vector<SaveItemId>& save_item_ids); |
| 138 | 142 |
| 139 private: | 143 private: |
| 140 friend class base::RefCountedThreadSafe<SaveFileManager>; | 144 friend class base::RefCountedThreadSafe<SaveFileManager>; |
| 141 | 145 |
| 142 ~SaveFileManager(); | 146 ~SaveFileManager(); |
| 143 | 147 |
| 144 // A cleanup helper that runs on the file thread. | 148 // A cleanup helper that runs on the file thread. |
| 145 void OnShutdown(); | 149 void OnShutdown(); |
| 146 | 150 |
| 147 // Called only on UI thread to get the SavePackage for a contents's browser | 151 // Called only on UI thread to get the SavePackage for a contents's browser |
| 148 // context. | 152 // context. |
| 149 static SavePackage* GetSavePackageFromRenderIds(int render_process_id, | 153 static SavePackage* GetSavePackageFromRenderIds(int render_process_id, |
| 150 int render_frame_routing_id); | 154 int render_frame_routing_id); |
| 151 | 155 |
| 152 // Look up the SavePackage according to save item id. | 156 // Look up the SavePackage according to save item id. |
| 153 SavePackage* LookupPackage(int save_item_id); | 157 SavePackage* LookupPackage(SaveItemId save_item_id); |
| 154 | 158 |
| 155 // Called only on the file thread. | 159 // Called only on the file thread. |
| 156 // Look up one in-progress saving item according to save item id. | 160 // Look up one in-progress saving item according to save item id. |
| 157 SaveFile* LookupSaveFile(int save_item_id); | 161 SaveFile* LookupSaveFile(SaveItemId save_item_id); |
| 158 | 162 |
| 159 // Help function for sending notification of canceling specific request. | 163 // Help function for sending notification of canceling specific request. |
| 160 void SendCancelRequest(int save_item_id); | 164 void SendCancelRequest(SaveItemId save_item_id); |
| 161 | 165 |
| 162 // Notifications sent from the file thread and run on the UI thread. | 166 // Notifications sent from the file thread and run on the UI thread. |
| 163 | 167 |
| 164 // Lookup the SaveManager for this WebContents' saving browser context and | 168 // Lookup the SaveManager for this WebContents' saving browser context and |
| 165 // inform it the saving job has been started. | 169 // inform it the saving job has been started. |
| 166 void OnStartSave(const SaveFileCreateInfo& info); | 170 void OnStartSave(const SaveFileCreateInfo& info); |
| 167 // Update the SavePackage with the current state of a started saving job. | 171 // Update the SavePackage with the current state of a started saving job. |
| 168 // If the SavePackage for this saving job is gone, cancel the request. | 172 // If the SavePackage for this saving job is gone, cancel the request. |
| 169 void OnUpdateSaveProgress(int save_item_id, | 173 void OnUpdateSaveProgress(SaveItemId save_item_id, |
| 170 int64_t bytes_so_far, | 174 int64_t bytes_so_far, |
| 171 bool write_success); | 175 bool write_success); |
| 172 // Update the SavePackage with the finish state, and remove the request | 176 // Update the SavePackage with the finish state, and remove the request |
| 173 // tracking entries. | 177 // tracking entries. |
| 174 void OnSaveFinished(int save_item_id, int64_t bytes_so_far, bool is_success); | 178 void OnSaveFinished(SaveItemId save_item_id, |
| 179 int64_t bytes_so_far, |
| 180 bool is_success); |
| 175 // Notifies SavePackage that the whole page saving job is finished. | 181 // Notifies SavePackage that the whole page saving job is finished. |
| 176 void OnFinishSavePageJob(int render_process_id, | 182 void OnFinishSavePageJob(int render_process_id, |
| 177 int render_frame_routing_id, | 183 int render_frame_routing_id, |
| 178 int save_package_id); | 184 SavePackageId save_package_id); |
| 179 | 185 |
| 180 // Notifications sent from the UI thread and run on the file thread. | 186 // Notifications sent from the UI thread and run on the file thread. |
| 181 | 187 |
| 182 // Deletes a specified file on the file thread. | 188 // Deletes a specified file on the file thread. |
| 183 void OnDeleteDirectoryOrFile(const base::FilePath& full_path, bool is_dir); | 189 void OnDeleteDirectoryOrFile(const base::FilePath& full_path, bool is_dir); |
| 184 | 190 |
| 185 // Notifications sent from the UI thread and run on the IO thread | 191 // Notifications sent from the UI thread and run on the IO thread |
| 186 | 192 |
| 187 // Initiates a request for URL to be saved. | 193 // Initiates a request for URL to be saved. |
| 188 void OnSaveURL(const GURL& url, | 194 void OnSaveURL(const GURL& url, |
| 189 const Referrer& referrer, | 195 const Referrer& referrer, |
| 190 int save_item_id, | 196 SaveItemId save_item_id, |
| 191 int save_package_id, | 197 SavePackageId save_package_id, |
| 192 int render_process_host_id, | 198 int render_process_host_id, |
| 193 int render_view_routing_id, | 199 int render_view_routing_id, |
| 194 int render_frame_routing_id, | 200 int render_frame_routing_id, |
| 195 ResourceContext* context); | 201 ResourceContext* context); |
| 196 // Call ResourceDispatcherHostImpl's CancelRequest method to execute cancel | 202 // Call ResourceDispatcherHostImpl's CancelRequest method to execute cancel |
| 197 // action in the IO thread. | 203 // action in the IO thread. |
| 198 void ExecuteCancelSaveRequest(int render_process_id, int request_id); | 204 void ExecuteCancelSaveRequest(int render_process_id, int request_id); |
| 199 | 205 |
| 200 // A map from save_item_id into SaveFiles. | 206 // A map from save_item_id into SaveFiles. |
| 201 typedef base::hash_map<int, SaveFile*> SaveFileMap; | 207 typedef base::hash_map<SaveItemId, SaveFile*> SaveFileMap; |
| 202 SaveFileMap save_file_map_; | 208 SaveFileMap save_file_map_; |
| 203 | 209 |
| 204 // Tracks which SavePackage to send data to, called only on UI thread. | 210 // Tracks which SavePackage to send data to, called only on UI thread. |
| 205 // SavePackageMap maps save item ids to their SavePackage. | 211 // SavePackageMap maps save item ids to their SavePackage. |
| 206 typedef base::hash_map<int, SavePackage*> SavePackageMap; | 212 typedef base::hash_map<SaveItemId, SavePackage*> SavePackageMap; |
| 207 SavePackageMap packages_; | 213 SavePackageMap packages_; |
| 208 | 214 |
| 209 DISALLOW_COPY_AND_ASSIGN(SaveFileManager); | 215 DISALLOW_COPY_AND_ASSIGN(SaveFileManager); |
| 210 }; | 216 }; |
| 211 | 217 |
| 212 } // namespace content | 218 } // namespace content |
| 213 | 219 |
| 214 #endif // CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_ | 220 #endif // CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_ |
| OLD | NEW |