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

Unified Diff: chrome/browser/save_file_manager.h

Issue 3040: Move the Save Page code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 3 months 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 | « chrome/browser/save_file.cc ('k') | chrome/browser/save_file_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/save_file_manager.h
===================================================================
--- chrome/browser/save_file_manager.h (revision 2173)
+++ chrome/browser/save_file_manager.h (working copy)
@@ -1,262 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Objects that handle file operations for saving files, on the file thread.
-//
-// The SaveFileManager owns a set of SaveFile objects, each of which connects
-// with a SaveItem object which belongs to one SavePackage and runs on the file
-// thread for saving data in order to avoid disk activity on either network IO
-// thread or the UI thread. It coordinates the notifications from the network
-// and UI.
-//
-// The SaveFileManager itself is a singleton object owned by the
-// ResourceDispatcherHost.
-//
-// The data sent to SaveFileManager have 2 sources, one is from
-// ResourceDispatcherHost, run in network IO thread, the all sub-resources
-// and save-only-HTML pages will be got from network IO. The second is from
-// render process, those html pages which are serialized from DOM will be
-// composed in render process and encoded to its original encoding, then sent
-// to UI loop in browser process, then UI loop will dispatch the data to
-// SaveFileManager on the file thread. SaveFileManager will directly
-// call SaveFile's method to persist data.
-//
-// A typical saving job operation involves multiple threads:
-//
-// Updating an in progress save file
-// io_thread
-// |----> data from net ---->|
-// |
-// |
-// |----> data from ---->| |
-// | render process | |
-// ui_thread | |
-// file_thread (writes to disk)
-// |----> stats ---->|
-// ui_thread (feedback for user)
-//
-//
-// Cancel operations perform the inverse order when triggered by a user action:
-// ui_thread (user click)
-// |----> cancel command ---->|
-// | | file_thread (close file)
-// | |---------------------> cancel command ---->|
-// | io_thread (stops net IO
-// ui_thread (user close tab) for saving)
-// |----> cancel command ---->|
-// Render process(stop serializing DOM and sending
-// data)
-//
-//
-// The SaveFileManager tracks saving requests, mapping from a save ID
-// (unique integer created in the IO thread) to the SavePackage for the
-// tab where the saving job was initiated. In the event of a tab closure
-// during saving, the SavePackage will notice the SaveFileManage to
-// cancel all SaveFile job.
-
-#ifndef CHROME_BROWSER_SAVE_FILE_MANAGER_H__
-#define CHROME_BROWSER_SAVE_FILE_MANAGER_H__
-
-#include <utility>
-
-#include "base/basictypes.h"
-#include "base/hash_tables.h"
-#include "base/ref_counted.h"
-#include "base/thread.h"
-#include "chrome/browser/save_types.h"
-
-class GURL;
-class SaveFile;
-class SavePackage;
-class MessageLoop;
-class ResourceDispatcherHost;
-class Task;
-class URLRequestContext;
-
-class SaveFileManager
- : public base::RefCountedThreadSafe<SaveFileManager> {
- public:
- SaveFileManager(MessageLoop* ui_loop,
- MessageLoop* io_loop,
- ResourceDispatcherHost* rdh);
- ~SaveFileManager();
-
- // Lifetime management.
- void Shutdown();
-
- // Called on the IO thread
- int GetNextId();
-
- // Save the specified URL. Called on the UI thread and forwarded to the
- // ResourceDispatcherHost on the IO thread.
- void SaveURL(const std::wstring& url,
- const std::wstring& referrer,
- int render_process_host_id,
- int render_view_id,
- SaveFileCreateInfo::SaveFileSource save_source,
- const std::wstring& file_full_path,
- URLRequestContext* request_context,
- SavePackage* save_package);
-
- // Notifications sent from the IO thread and run on the file thread:
- void StartSave(SaveFileCreateInfo* info);
- void UpdateSaveProgress(int save_id, char* data, int size);
- void SaveFinished(int save_id, std::wstring save_url,
- int render_process_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);
-
- // Called on the UI thread to remove a save package from SaveFileManager's
- // tracking map.
- void RemoveSaveFile(int save_id, const std::wstring& save_url,
- SavePackage* package);
-
- // Handler for shell operations sent from the UI to the file thread.
- void OnShowSavedFileInShell(const std::wstring full_path);
-
- // Helper function for deleting specified file.
- void DeleteDirectoryOrFile(const std::wstring& full_path, bool is_dir);
-
- // For posting notifications from the UI and IO threads.
- MessageLoop* GetSaveLoop() const { return file_loop_; }
-
- // Runs on file thread to save a file by copying from file system when
- // original url is using file scheme.
- void SaveLocalFile(const std::wstring& original_file_url,
- int save_id,
- int render_process_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,
- const std::wstring& resource_dir,
- int render_process_id,
- int render_view_id);
-
- // 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);
-
- private:
- // A cleanup helper that runs on the file thread.
- void OnShutdown();
-
- // The resource does not come from the network, but we still needs to call
- // this function for getting unique save ID by calling
- // OnRequireSaveJobFromOtherSource in the net IO thread and start saving
- // operation. This function is called on the UI thread.
- void RequireSaveJobFromOtherSource(SaveFileCreateInfo* info);
-
- // Called only on UI thread to get the SavePackage for a tab's profile.
- static SavePackage* GetSavePackageFromRenderIds(int render_process_id,
- int review_view_id);
-
- // Register a starting request. Associate the save URL with a
- // SavePackage for further matching.
- void RegisterStartingRequest(const std::wstring& save_url,
- SavePackage* save_package);
- // Unregister a start request according save URL, disassociate
- // the save URL and SavePackage.
- SavePackage* UnregisterStartingRequest(const std::wstring& save_url,
- int tab_id);
-
- // Look up the SavePackage according to save id.
- SavePackage* LookupPackage(int save_id);
-
- // Called only on the file thread.
- // Look up one in-progress saving item according to save id.
- SaveFile* LookupSaveFile(int save_id);
-
- // Help function for sending notification of canceling specific request.
- void SendCancelRequest(int save_id);
-
- // Notifications sent from the file thread and run on the UI thread.
-
- // Lookup the SaveManager for this WebContents' saving profile and inform it
- // the saving job has been started.
- 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,
- 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(std::wstring save_url, int tab_id);
- // Handler for a notification sent to the UI thread.
- // The user has requested a cancel in the UI thread, so send a cancel request
- // to stop the network requests in net IO thread.
- void OnCancelSaveRequest(int render_process_id, int request_id);
- // Notifies SavePackage that the whole page saving job is finished.
- void OnFinishSavePageJob(int render_process_id, int render_view_id);
-
- // Notifications sent from the UI thread and run on the file thread.
-
- // Deletes a specified file on the file thread.
- void OnDeleteDirectoryOrFile(const std::wstring& full_path, bool is_dir);
-
- // Notifications sent from the UI thread and run on the IO thread
-
- // Initiates a request for URL to be saved.
- void OnSaveURL(const GURL& url,
- const GURL& referrer,
- int render_process_host_id,
- int render_view_id,
- URLRequestContext* request_context);
- // Handler for a notification sent to the IO thread for generating save id.
- void OnRequireSaveJobFromOtherSource(SaveFileCreateInfo* info);
- // Call ResourceDispatcherHost'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.
- typedef base::hash_map<int, SaveFile*> SaveFileMap;
- SaveFileMap save_file_map_;
-
- // Message loop that the SavePackages live on.
- MessageLoop* ui_loop_;
-
- // We cache the IO loop, we will use it to request resources from network.
- MessageLoop* io_loop_;
-
- // We cache the file loop, we will use it to do real file operation.
- // We guarantee that we won't access them incorrectly during the shutdown
- // process
- MessageLoop* file_loop_;
-
- ResourceDispatcherHost* resource_dispatcher_host_;
-
- // Tracks which SavePackage to send data to, called only on UI thread.
- // SavePackageMap maps save 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 tab id (we actually use render_process_id) to the
- // hashmap since it is possible to save same URL in different tab at
- // same time.
- typedef base::hash_map<std::wstring, SavePackage*> StartingRequestsMap;
- typedef base::hash_map<int, StartingRequestsMap> TabToStartingRequestsMap;
- TabToStartingRequestsMap tab_starting_requests_;
-
- DISALLOW_EVIL_CONSTRUCTORS(SaveFileManager);
-};
-
-#endif // CHROME_BROWSER_SAVE_FILE_MANAGER_H__
« no previous file with comments | « chrome/browser/save_file.cc ('k') | chrome/browser/save_file_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698