Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Unified Diff: content/browser/download/save_file_manager.h

Issue 1484093002: Allowing multiple SaveItems to have same URLs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@nested-frames-more-involved-fix
Patch Set: Rebasing... Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/download/save_file.h ('k') | content/browser/download/save_file_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/download/save_file_manager.h
diff --git a/content/browser/download/save_file_manager.h b/content/browser/download/save_file_manager.h
index d42bafa36aacc54c129a595b1e6388598631a933..9b0abe502956a37687aadc2bbc5f2835dfa58d2f 100644
--- a/content/browser/download/save_file_manager.h
+++ b/content/browser/download/save_file_manager.h
@@ -49,11 +49,10 @@
// data)
//
//
-// The SaveFileManager tracks saving requests, mapping from a save ID (unique
-// integer created in the IO thread) to the SavePackage for the contents where
-// the saving job was initiated. In the event of a contents closure during
-// saving, the SavePackage will notify the SaveFileManage to cancel all SaveFile
-// jobs.
+// The SaveFileManager tracks saving requests, mapping from a save item id to
+// the SavePackage for the contents where the saving job was initiated. In the
+// event of a contents closure during saving, the SavePackage will notify the
+// SaveFileManage to cancel all SaveFile jobs.
#ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_
#define CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_
@@ -89,14 +88,10 @@ class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> {
// Lifetime management.
CONTENT_EXPORT void Shutdown();
- // Called on the IO thread. This generates unique IDs for
- // SaveFileResourceHandler objects (there's one per file in a SavePackage).
- // Note that this is different from the SavePackage's id.
- int GetNextId();
-
// Save the specified URL. Called on the UI thread and forwarded to the
// ResourceDispatcherHostImpl on the IO thread.
- void SaveURL(const GURL& url,
+ void SaveURL(int save_item_id,
+ const GURL& url,
const Referrer& referrer,
int render_process_host_id,
int render_view_routing_id,
@@ -108,20 +103,16 @@ class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> {
// Notifications sent from the IO thread and run on the file thread:
void StartSave(SaveFileCreateInfo* info);
- void UpdateSaveProgress(int save_id, net::IOBuffer* data, int size);
- void SaveFinished(int save_id,
- const GURL& save_url,
- int save_package_id,
- bool is_success);
+ void UpdateSaveProgress(int save_item_id, net::IOBuffer* data, int size);
+ void SaveFinished(int save_item_id, int save_package_id, bool is_success);
// Notifications sent from the UI thread and run on the file thread.
- // Cancel a SaveFile instance which has specified save id.
- void CancelSave(int save_id);
+ // Cancel a SaveFile instance which has specified save item id.
+ void CancelSave(int save_item_id);
// Called on the UI thread to remove a save package from SaveFileManager's
// tracking map.
- void RemoveSaveFile(int save_id, const GURL& save_url,
- SavePackage* package);
+ void RemoveSaveFile(int save_item_id, SavePackage* package);
// Helper function for deleting specified file.
void DeleteDirectoryOrFile(const base::FilePath& full_path, bool is_dir);
@@ -129,13 +120,11 @@ class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> {
// Runs on file thread to save a file by copying from file system when
// original url is using file scheme.
void SaveLocalFile(const GURL& original_file_url,
- int save_id,
+ int save_item_id,
int save_package_id);
// Renames all the successfully saved files.
- // |final_names| points to a vector which contains pairs of save ids and
- // final names of successfully saved files.
- void RenameAllFiles(const FinalNameList& final_names,
+ void RenameAllFiles(const FinalNamesMap& final_names,
const base::FilePath& resource_dir,
int render_process_id,
int render_frame_routing_id,
@@ -143,7 +132,7 @@ class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> {
// When the user cancels the saving, we need to remove all remaining saved
// files of this page saving job from save_file_map_.
- void RemoveSavedFileFromFileMap(const SaveIDList & save_ids);
+ void RemoveSavedFileFromFileMap(const std::vector<int>& save_item_ids);
private:
friend class base::RefCountedThreadSafe<SaveFileManager>;
@@ -158,24 +147,15 @@ class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> {
static SavePackage* GetSavePackageFromRenderIds(int render_process_id,
int render_frame_routing_id);
- // Register a starting request. Associate the save URL with a
- // SavePackage for further matching.
- void RegisterStartingRequest(const GURL& save_url,
- SavePackage* save_package);
- // Unregister a start request according save URL, disassociate
- // the save URL and SavePackage.
- SavePackage* UnregisterStartingRequest(const GURL& save_url,
- int save_package_id);
-
- // Look up the SavePackage according to save id.
- SavePackage* LookupPackage(int save_id);
+ // Look up the SavePackage according to save item id.
+ SavePackage* LookupPackage(int save_item_id);
// Called only on the file thread.
- // Look up one in-progress saving item according to save id.
- SaveFile* LookupSaveFile(int save_id);
+ // Look up one in-progress saving item according to save item id.
+ SaveFile* LookupSaveFile(int save_item_id);
// Help function for sending notification of canceling specific request.
- void SendCancelRequest(int save_id);
+ void SendCancelRequest(int save_item_id);
// Notifications sent from the file thread and run on the UI thread.
@@ -184,15 +164,12 @@ class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> {
void OnStartSave(const SaveFileCreateInfo* info);
// Update the SavePackage with the current state of a started saving job.
// If the SavePackage for this saving job is gone, cancel the request.
- void OnUpdateSaveProgress(int save_id,
+ void OnUpdateSaveProgress(int save_item_id,
int64 bytes_so_far,
bool write_success);
// Update the SavePackage with the finish state, and remove the request
// tracking entries.
- void OnSaveFinished(int save_id, int64 bytes_so_far, bool is_success);
- // For those requests that do not have valid save id, use
- // map:(url, SavePackage) to find the request and remove it.
- void OnErrorFinished(const GURL& save_url, int save_package_id);
+ void OnSaveFinished(int save_item_id, int64 bytes_so_far, bool is_success);
// Notifies SavePackage that the whole page saving job is finished.
void OnFinishSavePageJob(int render_process_id,
int render_frame_routing_id,
@@ -208,44 +185,25 @@ class SaveFileManager : public base::RefCountedThreadSafe<SaveFileManager> {
// Initiates a request for URL to be saved.
void OnSaveURL(const GURL& url,
const Referrer& referrer,
+ int save_item_id,
+ int save_package_id,
int render_process_host_id,
int render_view_routing_id,
int render_frame_routing_id,
- int save_package_id,
ResourceContext* context);
- // Handler for a notification sent to the IO thread for generating save id.
- void OnRequireSaveJobFromOtherSource(SaveFileCreateInfo* info);
// Call ResourceDispatcherHostImpl's CancelRequest method to execute cancel
// action in the IO thread.
void ExecuteCancelSaveRequest(int render_process_id, int request_id);
- // Unique ID for the next SaveFile object.
- int next_id_;
-
- // A map of all saving jobs by using save id.
+ // A map from save_item_id into SaveFiles.
typedef base::hash_map<int, SaveFile*> SaveFileMap;
SaveFileMap save_file_map_;
// Tracks which SavePackage to send data to, called only on UI thread.
- // SavePackageMap maps save IDs to their SavePackage.
+ // SavePackageMap maps save item ids to their SavePackage.
typedef base::hash_map<int, SavePackage*> SavePackageMap;
SavePackageMap packages_;
- // There is a gap between after calling SaveURL() and before calling
- // StartSave(). In this gap, each request does not have save id for tracking.
- // But sometimes users might want to stop saving job or ResourceDispatcherHost
- // calls SaveFinished with save id -1 for network error. We name the requests
- // as starting requests. For tracking those starting requests, we need to
- // have some data structure.
- // First we use a hashmap to map the request URL to SavePackage, then we use a
- // hashmap to map the contents id (we actually use render_process_id) to the
- // hashmap since it is possible to save the same URL in different contents at
- // same time.
- typedef base::hash_map<std::string, SavePackage*> StartingRequestsMap;
- typedef base::hash_map<int, StartingRequestsMap>
- ContentsToStartingRequestsMap;
- ContentsToStartingRequestsMap contents_starting_requests_;
-
DISALLOW_COPY_AND_ASSIGN(SaveFileManager);
};
« no previous file with comments | « content/browser/download/save_file.h ('k') | content/browser/download/save_file_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698