summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-03 19:56:15 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-03 19:56:15 +0000
commite2abdeb2f6ad46c39153ccfbf233f552f0f9691a (patch)
treeb7b93080ded54a92affe3309382bf1063e6e68b9
parenta4b89e21d9af3b20b61f46322bbd0c48b7f08b24 (diff)
downloadchromium_src-e2abdeb2f6ad46c39153ccfbf233f552f0f9691a.zip
chromium_src-e2abdeb2f6ad46c39153ccfbf233f552f0f9691a.tar.gz
chromium_src-e2abdeb2f6ad46c39153ccfbf233f552f0f9691a.tar.bz2
Remove risky DISABLE_RUNNABLE_METHOD_REFCOUNT macro from DownloadManager.
Just use a NewRunnableMethod task posted to the IO thread. The RDH is guaranteed to live longer than the IO thread. BUG=48913 TEST=none Review URL: http://codereview.chromium.org/3331009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58529 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/download/download_manager.cc17
-rw-r--r--chrome/browser/download/download_manager.h7
2 files changed, 18 insertions, 6 deletions
diff --git a/chrome/browser/download/download_manager.cc b/chrome/browser/download/download_manager.cc
index 2283b32..657f4d1 100644
--- a/chrome/browser/download/download_manager.cc
+++ b/chrome/browser/download/download_manager.cc
@@ -671,9 +671,6 @@ void DownloadManager::DownloadCancelledInternal(int download_id,
file_manager_, &DownloadFileManager::CancelDownload, download_id));
}
-// DownloadManager is owned by RDH, no need for reference counting.
-DISABLE_RUNNABLE_METHOD_REFCOUNT(ResourceDispatcherHost);
-
void DownloadManager::PauseDownload(int32 download_id, bool pause) {
DownloadMap::iterator it = in_progress_.find(download_id);
if (it == in_progress_.end())
@@ -683,11 +680,11 @@ void DownloadManager::PauseDownload(int32 download_id, bool pause) {
if (pause == download->is_paused())
return;
- // Inform the ResourceDispatcherHost of the new pause state.
ChromeThread::PostTask(
ChromeThread::IO, FROM_HERE,
- NewRunnableMethod(g_browser_process->resource_dispatcher_host(),
- &ResourceDispatcherHost::PauseRequest,
+ NewRunnableMethod(this,
+ &DownloadManager::PauseDownloadRequest,
+ g_browser_process->resource_dispatcher_host(),
download->render_process_id(),
download->request_id(),
pause));
@@ -729,6 +726,14 @@ void DownloadManager::RenameDownload(DownloadItem* download,
download_history_->UpdateDownloadPath(download, new_path);
}
+void DownloadManager::PauseDownloadRequest(ResourceDispatcherHost* rdh,
+ int render_process_id,
+ int request_id,
+ bool pause) {
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
+ rdh->PauseRequest(render_process_id, request_id, pause);
+}
+
void DownloadManager::RemoveDownload(int64 download_handle) {
DownloadMap::iterator it = downloads_.find(download_handle);
if (it == downloads_.end())
diff --git a/chrome/browser/download/download_manager.h b/chrome/browser/download/download_manager.h
index 60701e0..bd0f83e 100644
--- a/chrome/browser/download/download_manager.h
+++ b/chrome/browser/download/download_manager.h
@@ -278,6 +278,13 @@ class DownloadManager
// the change to the history system.
void RenameDownload(DownloadItem* download, const FilePath& new_path);
+ // Makes the ResourceDispatcherHost pause/un-pause a download request.
+ // Called on the IO thread.
+ void PauseDownloadRequest(ResourceDispatcherHost* rdh,
+ int render_process_id,
+ int request_id,
+ bool pause);
+
// Inform observers that the model has changed.
void NotifyModelChanged();