Index: content/browser/download/download_manager_impl.h |
diff --git a/content/browser/download/download_manager_impl.h b/content/browser/download/download_manager_impl.h |
index a9384c7567f72a34544d9361d6398666af93f382..62dfa88c9959ab2ae024e4d83aa887a18464a6c1 100644 |
--- a/content/browser/download/download_manager_impl.h |
+++ b/content/browser/download/download_manager_impl.h |
@@ -11,6 +11,7 @@ |
#include "base/containers/hash_tables.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/scoped_vector.h" |
#include "base/memory/weak_ptr.h" |
#include "base/observer_list.h" |
#include "base/sequenced_task_runner_helpers.h" |
@@ -29,7 +30,7 @@ namespace content { |
class DownloadFileFactory; |
class DownloadItemFactory; |
class DownloadItemImpl; |
-class DownloadRequestHandleInterface; |
+class DownloadRequestHandle; |
class CONTENT_EXPORT DownloadManagerImpl : public DownloadManager, |
private DownloadItemImplDelegate { |
@@ -42,16 +43,9 @@ class CONTENT_EXPORT DownloadManagerImpl : public DownloadManager, |
virtual ~DownloadManagerImpl(); |
// Implementation functions (not part of the DownloadManager interface). |
- |
- // Creates a download item for the SavePackage system. |
- // Must be called on the UI thread. Note that the DownloadManager |
- // retains ownership. |
virtual void CreateSavePackageDownloadItem( |
- const base::FilePath& main_file_path, |
- const GURL& page_url, |
- const std::string& mime_type, |
- scoped_ptr<DownloadRequestHandleInterface> request_handle, |
- const DownloadItemImplCreated& item_created); |
+ scoped_ptr<DownloadCreateInfo> info, |
+ const DownloadItemImplCreated& created_callback); |
// Notifies DownloadManager about a successful completion of |download_item|. |
void OnSavePackageSuccessfullyFinished(DownloadItem* download_item); |
@@ -61,10 +55,9 @@ class CONTENT_EXPORT DownloadManagerImpl : public DownloadManager, |
virtual DownloadManagerDelegate* GetDelegate() const OVERRIDE; |
virtual void Shutdown() OVERRIDE; |
virtual void GetAllDownloads(DownloadVector* result) OVERRIDE; |
- virtual void StartDownload( |
- scoped_ptr<DownloadCreateInfo> info, |
- scoped_ptr<ByteStreamReader> stream, |
- const DownloadUrlParameters::OnStartedCallback& on_started) OVERRIDE; |
+ virtual void StartDownloadWithActiveRequest( |
+ scoped_ptr<DownloadRequestHandle> request_handle, |
+ scoped_ptr<DownloadCreateInfo> info) OVERRIDE; |
virtual int RemoveDownloadsBetween(base::Time remove_begin, |
base::Time remove_end) OVERRIDE; |
virtual int RemoveDownloads(base::Time remove_begin) OVERRIDE; |
@@ -109,25 +102,35 @@ class CONTENT_EXPORT DownloadManagerImpl : public DownloadManager, |
friend class DownloadManagerTest; |
friend class DownloadTest; |
- void StartDownloadWithId( |
- scoped_ptr<DownloadCreateInfo> info, |
- scoped_ptr<ByteStreamReader> stream, |
- const DownloadUrlParameters::OnStartedCallback& on_started, |
+ DownloadItemImpl* UpdateAndGetResumedDownloadItem( |
+ uint32 download_id, |
+ DownloadRequestHandle* request_handle, |
+ const DownloadCreateInfo& new_create_info); |
+ |
+ void DownloadUrlWithId(scoped_ptr<DownloadUrlParameters> params, |
+ bool new_download, |
+ uint32 download_id); |
+ |
+ void OnDownloadRequestStarted( |
+ uint32 download_id, |
bool new_download, |
- uint32 id); |
+ const DownloadUrlParameters::OnStartedCallback& on_started, |
+ DownloadRequestHandle* request_handle, |
+ DownloadInterruptReason interrupt_reason, |
+ scoped_ptr<DownloadCreateInfo> create_info); |
+ |
+ void StartDownloadWithId(scoped_ptr<DownloadRequestHandle> request_handle, |
+ scoped_ptr<DownloadCreateInfo> info, |
+ uint32 id); |
void CreateSavePackageDownloadItemWithId( |
- const base::FilePath& main_file_path, |
- const GURL& page_url, |
- const std::string& mime_type, |
- scoped_ptr<DownloadRequestHandleInterface> request_handle, |
- const DownloadItemImplCreated& on_started, |
+ scoped_ptr<DownloadCreateInfo> info, |
+ const DownloadItemImplCreated& download_created_callback, |
uint32 id); |
// Create a new active item based on the info. Separate from |
// StartDownload() for testing. |
- DownloadItemImpl* CreateActiveItem(uint32 id, |
- const DownloadCreateInfo& info); |
+ DownloadItemImpl* CreateActiveItem(uint32 id, const DownloadCreateInfo& info); |
// Get next download id. |callback| is called on the UI thread and may |
// be called synchronously. |
@@ -169,6 +172,15 @@ class CONTENT_EXPORT DownloadManagerImpl : public DownloadManager, |
// "save page as" downloads. |
DownloadMap downloads_; |
+ // Handles to programmatic download requests that are still pending. These |
+ // are kept here so that if the DownloadManager were to be destroyed while the |
+ // requests are still pending, the associated handles and, by extension, the |
+ // URLRequest will also be destroyed. |
+ // |
+ // TODO(asanka): Move towards model of constructing the DownloadItem early and |
+ // then having the DownloadItem own the request handle. |
+ ScopedVector<DownloadRequestHandle> pending_requests_; |
+ |
int history_size_; |
// True if the download manager has been initialized and requires a shutdown. |