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

Unified Diff: chrome/browser/download/download_file.cc

Issue 342020: First of several patches to get rid of MessageLoop caching now that we have C... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 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
Index: chrome/browser/download/download_file.cc
===================================================================
--- chrome/browser/download/download_file.cc (revision 30289)
+++ chrome/browser/download/download_file.cc (working copy)
@@ -11,7 +11,7 @@
#include "base/task.h"
#include "base/thread.h"
#include "build/build_config.h"
-#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chrome_thread.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/net/chrome_url_request_context.h"
#include "chrome/browser/profile.h"
@@ -159,12 +159,8 @@
// DownloadFileManager implementation ------------------------------------------
-DownloadFileManager::DownloadFileManager(MessageLoop* ui_loop,
- ResourceDispatcherHost* rdh)
+DownloadFileManager::DownloadFileManager(ResourceDispatcherHost* rdh)
: next_id_(0),
- ui_loop_(ui_loop),
- file_loop_(NULL),
- io_loop_(NULL),
resource_dispatcher_host_(rdh) {
}
@@ -174,24 +170,19 @@
ui_progress_.clear();
}
-void DownloadFileManager::Initialize() {
- io_loop_ = g_browser_process->io_thread()->message_loop();
- file_loop_ = g_browser_process->file_thread()->message_loop();
-}
-
// Called during the browser shutdown process to clean up any state (open files,
// timers) that live on the download_thread_.
void DownloadFileManager::Shutdown() {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
StopUpdateTimer();
- file_loop_->PostTask(FROM_HERE,
- NewRunnableMethod(this,
- &DownloadFileManager::OnShutdown));
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(this, &DownloadFileManager::OnShutdown));
}
// Cease download thread operations.
void DownloadFileManager::OnShutdown() {
- DCHECK(MessageLoop::current() == file_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
// Delete any partial downloads during shutdown.
for (DownloadFileMap::iterator it = downloads_.begin();
it != downloads_.end(); ++it) {
@@ -211,7 +202,7 @@
// The UI progress is updated on the file thread and removed on the UI thread.
void DownloadFileManager::RemoveDownloadFromUIProgress(int id) {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
AutoLock lock(progress_lock_);
if (ui_progress_.find(id) != ui_progress_.end())
ui_progress_.erase(id);
@@ -220,7 +211,7 @@
// Throttle updates to the UI thread by only posting update notifications at a
// regularly controlled interval.
void DownloadFileManager::StartUpdateTimer() {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
if (!update_timer_.IsRunning()) {
update_timer_.Start(base::TimeDelta::FromMilliseconds(kUpdatePeriodMs),
this, &DownloadFileManager::UpdateInProgressDownloads);
@@ -228,14 +219,14 @@
}
void DownloadFileManager::StopUpdateTimer() {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
update_timer_.Stop();
}
// Called on the IO thread once the ResourceDispatcherHost has decided that a
// request is a download.
int DownloadFileManager::GetNextId() {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
return next_id_++;
}
@@ -245,7 +236,7 @@
// to create a DownloadFile, then passes 'info' to the UI thread where it is
// finally consumed and deleted.
void DownloadFileManager::StartDownload(DownloadCreateInfo* info) {
- DCHECK(MessageLoop::current() == file_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
DCHECK(info);
DownloadFile* download = new DownloadFile(info);
@@ -273,10 +264,9 @@
ui_progress_[info->download_id] = info->received_bytes;
}
- ui_loop_->PostTask(FROM_HERE,
- NewRunnableMethod(this,
- &DownloadFileManager::OnStartDownload,
- info));
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableMethod(this, &DownloadFileManager::OnStartDownload, info));
}
// We don't forward an update to the UI thread here, since we want to throttle
@@ -285,7 +275,7 @@
// thread gets the cancel message: we just delete the data since the
// DownloadFile has been deleted.
void DownloadFileManager::UpdateDownload(int id, DownloadBuffer* buffer) {
- DCHECK(MessageLoop::current() == file_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
std::vector<DownloadBuffer::Contents> contents;
{
AutoLock auto_lock(buffer->lock);
@@ -308,18 +298,18 @@
}
void DownloadFileManager::DownloadFinished(int id, DownloadBuffer* buffer) {
- DCHECK(MessageLoop::current() == file_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
delete buffer;
DownloadFileMap::iterator it = downloads_.find(id);
if (it != downloads_.end()) {
DownloadFile* download = it->second;
download->set_in_progress(false);
- ui_loop_->PostTask(FROM_HERE,
- NewRunnableMethod(this,
- &DownloadFileManager::OnDownloadFinished,
- id,
- download->bytes_so_far()));
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableMethod(
+ this, &DownloadFileManager::OnDownloadFinished,
+ id, download->bytes_so_far()));
// We need to keep the download around until the UI thread has finalized
// the name.
@@ -330,15 +320,16 @@
}
if (downloads_.empty())
- ui_loop_->PostTask(FROM_HERE, NewRunnableMethod(
- this, &DownloadFileManager::StopUpdateTimer));
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableMethod(this, &DownloadFileManager::StopUpdateTimer));
}
// This method will be sent via a user action, or shutdown on the UI thread, and
// run on the download thread. Since this message has been sent from the UI
// thread, the download may have already completed and won't exist in our map.
void DownloadFileManager::CancelDownload(int id) {
- DCHECK(MessageLoop::current() == file_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
DownloadFileMap::iterator it = downloads_.find(id);
if (it != downloads_.end()) {
DownloadFile* download = it->second;
@@ -346,10 +337,11 @@
download->Cancel();
- ui_loop_->PostTask(FROM_HERE,
- NewRunnableMethod(this,
- &DownloadFileManager::RemoveDownloadFromUIProgress,
- download->id()));
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableMethod(
+ this, &DownloadFileManager::RemoveDownloadFromUIProgress,
+ download->id()));
if (download->path_renamed()) {
downloads_.erase(it);
@@ -357,15 +349,17 @@
}
}
- if (downloads_.empty())
- ui_loop_->PostTask(FROM_HERE, NewRunnableMethod(
- this, &DownloadFileManager::StopUpdateTimer));
+ if (downloads_.empty()) {
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableMethod(this, &DownloadFileManager::StopUpdateTimer));
+ }
}
// Our periodic timer has fired so send the UI thread updates on all in progress
// downloads.
void DownloadFileManager::UpdateInProgressDownloads() {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
AutoLock lock(progress_lock_);
ProgressMap::iterator it = ui_progress_.begin();
for (; it != ui_progress_.end(); ++it) {
@@ -383,7 +377,7 @@
// TODO(paulg): When implementing download restart via the Downloads tab,
// there will be no 'render_process_id' or 'render_view_id'.
void DownloadFileManager::OnStartDownload(DownloadCreateInfo* info) {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
DownloadManager* manager = DownloadManagerFromRenderIds(info->child_id,
info->render_view_id);
if (!manager) {
@@ -423,7 +417,7 @@
// tracking entries.
void DownloadFileManager::OnDownloadFinished(int id,
int64 bytes_so_far) {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
DownloadManager* manager = LookupManager(id);
if (manager)
manager->DownloadFinished(id, bytes_so_far);
@@ -438,10 +432,9 @@
int render_process_host_id,
int render_view_id,
URLRequestContextGetter* request_context_getter) {
- DCHECK(MessageLoop::current() == ui_loop_);
- base::Thread* thread = g_browser_process->io_thread();
- if (thread) {
- thread->message_loop()->PostTask(FROM_HERE,
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
NewRunnableMethod(this,
&DownloadFileManager::OnDownloadUrl,
url,
@@ -450,12 +443,11 @@
render_process_host_id,
render_view_id,
request_context_getter));
- }
}
// Relate a download ID to its owning DownloadManager.
DownloadManager* DownloadFileManager::LookupManager(int download_id) {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
DownloadManagerMap::iterator it = managers_.find(download_id);
if (it != managers_.end())
return it->second;
@@ -467,7 +459,7 @@
// one download (id) and remove it from the set, and remove the set if it
// becomes empty.
void DownloadFileManager::RemoveDownload(int id, DownloadManager* manager) {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
if (manager) {
RequestMap::iterator it = requests_.find(manager);
if (it != requests_.end()) {
@@ -505,7 +497,7 @@
// Called by DownloadManagers in their destructor, and only on the UI thread.
void DownloadFileManager::RemoveDownloadManager(DownloadManager* manager) {
- DCHECK(MessageLoop::current() == ui_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
DCHECK(manager);
RequestMap::iterator it = requests_.find(manager);
if (it == requests_.end())
@@ -535,7 +527,7 @@
int render_process_host_id,
int render_view_id,
URLRequestContextGetter* request_context_getter) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
URLRequestContext* context = request_context_getter->GetURLRequestContext();
context->set_referrer_charset(referrer_charset);
@@ -554,7 +546,7 @@
// TODO(paulg): File 'stat' operations.
#if !defined(OS_MACOSX)
void DownloadFileManager::OnShowDownloadInShell(const FilePath& full_path) {
- DCHECK(MessageLoop::current() == file_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
platform_util::ShowItemInFolder(full_path);
}
#endif
@@ -566,7 +558,7 @@
void DownloadFileManager::OnOpenDownloadInShell(const FilePath& full_path,
const GURL& url,
gfx::NativeView parent_window) {
- DCHECK(MessageLoop::current() == file_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
#if defined(OS_WIN)
if (NULL != parent_window) {
win_util::SaferOpenItemViaShell(parent_window, L"", full_path,
@@ -584,7 +576,7 @@
void DownloadFileManager::OnFinalDownloadName(int id,
const FilePath& full_path,
DownloadManager* manager) {
- DCHECK(MessageLoop::current() == file_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
DownloadFileMap::iterator it = downloads_.find(id);
if (it == downloads_.end())
return;
@@ -598,21 +590,20 @@
// http://crbug.com/13120 for details.
download->AnnotateWithSourceInformation();
#endif
- ui_loop_->PostTask(FROM_HERE,
- NewRunnableMethod(manager,
- &DownloadManager::DownloadRenamedToFinalName,
- id,
- full_path));
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableMethod(
+ manager, &DownloadManager::DownloadRenamedToFinalName, id,
+ full_path));
} else {
// Error. Between the time the UI thread generated 'full_path' to the time
// this code runs, something happened that prevents us from renaming.
DownloadManagerMap::iterator dmit = managers_.find(download->id());
if (dmit != managers_.end()) {
DownloadManager* dlm = dmit->second;
- ui_loop_->PostTask(FROM_HERE,
- NewRunnableMethod(dlm,
- &DownloadManager::DownloadCancelled,
- id));
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableMethod(dlm, &DownloadManager::DownloadCancelled, id));
} else {
ChromeThread::PostTask(
ChromeThread::IO, FROM_HERE,
@@ -630,9 +621,11 @@
delete download;
}
- if (downloads_.empty())
- ui_loop_->PostTask(FROM_HERE, NewRunnableMethod(
- this, &DownloadFileManager::StopUpdateTimer));
+ if (downloads_.empty()) {
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableMethod(this, &DownloadFileManager::StopUpdateTimer));
+ }
}
// static

Powered by Google App Engine
This is Rietveld 408576698