Index: chrome/browser/extensions/extension_updater.cc |
=================================================================== |
--- chrome/browser/extensions/extension_updater.cc (revision 30521) |
+++ chrome/browser/extensions/extension_updater.cc (working copy) |
@@ -60,15 +60,11 @@ |
class ExtensionUpdaterFileHandler |
: public base::RefCountedThreadSafe<ExtensionUpdaterFileHandler> { |
public: |
- ExtensionUpdaterFileHandler(MessageLoop* updater_loop, |
- MessageLoop* file_io_loop) |
- : updater_loop_(updater_loop), file_io_loop_(file_io_loop) {} |
- |
// Writes crx file data into a tempfile, and calls back the updater. |
void WriteTempFile(const std::string& extension_id, const std::string& data, |
scoped_refptr<ExtensionUpdater> updater) { |
// Make sure we're running in the right thread. |
- DCHECK(MessageLoop::current() == file_io_loop_); |
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); |
FilePath path; |
if (!file_util::CreateTemporaryFile(&path)) { |
@@ -86,47 +82,32 @@ |
// The ExtensionUpdater is now responsible for cleaning up the temp file |
// from disk. |
- updater_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- updater.get(), &ExtensionUpdater::OnCRXFileWritten, extension_id, |
- path)); |
+ ChromeThread::PostTask( |
+ ChromeThread::UI, FROM_HERE, |
+ NewRunnableMethod( |
+ updater.get(), &ExtensionUpdater::OnCRXFileWritten, extension_id, |
+ path)); |
} |
void DeleteFile(const FilePath& path) { |
- DCHECK(MessageLoop::current() == file_io_loop_); |
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); |
if (!file_util::Delete(path, false)) { |
LOG(WARNING) << "Failed to delete temp file " << path.value(); |
} |
} |
- |
- private: |
- // The MessageLoop we use to call back the ExtensionUpdater. |
- MessageLoop* updater_loop_; |
- |
- // The MessageLoop we should be operating on for file operations. |
- MessageLoop* file_io_loop_; |
}; |
ExtensionUpdater::ExtensionUpdater(ExtensionUpdateService* service, |
PrefService* prefs, |
- int frequency_seconds, |
- MessageLoop* file_io_loop, |
- MessageLoop* io_loop) |
+ int frequency_seconds) |
: service_(service), frequency_seconds_(frequency_seconds), |
- file_io_loop_(file_io_loop), io_loop_(io_loop), prefs_(prefs), |
- file_handler_(new ExtensionUpdaterFileHandler(MessageLoop::current(), |
- file_io_loop_)), |
+ prefs_(prefs), file_handler_(new ExtensionUpdaterFileHandler()), |
blacklist_checks_enabled_(true) { |
Init(); |
} |
void ExtensionUpdater::Init() { |
- // Unless we're in a unit test, expect that the file_io_loop_ is on the |
- // browser file thread. |
- if (g_browser_process->file_thread() != NULL) { |
- DCHECK(file_io_loop_ == g_browser_process->file_thread()->message_loop()); |
- } |
- |
DCHECK_GE(frequency_seconds_, 5); |
DCHECK(frequency_seconds_ <= kMaxUpdateFrequencySeconds); |
#ifdef NDEBUG |
@@ -225,10 +206,8 @@ |
// Utility class to handle doing xml parsing in a sandboxed utility process. |
class SafeManifestParser : public UtilityProcessHost::Client { |
public: |
- SafeManifestParser(const std::string& xml, ExtensionUpdater* updater, |
- MessageLoop* updater_loop, MessageLoop* io_loop) |
- : xml_(xml), updater_loop_(updater_loop), io_loop_(io_loop), |
- updater_(updater) { |
+ SafeManifestParser(const std::string& xml, ExtensionUpdater* updater) |
+ : xml_(xml), updater_(updater) { |
} |
~SafeManifestParser() {} |
@@ -236,15 +215,17 @@ |
// Posts a task over to the IO loop to start the parsing of xml_ in a |
// utility process. |
void Start() { |
- DCHECK(MessageLoop::current() == updater_loop_); |
- io_loop_->PostTask(FROM_HERE, |
- NewRunnableMethod(this, &SafeManifestParser::ParseInSandbox, |
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); |
+ ChromeThread::PostTask( |
+ ChromeThread::IO, FROM_HERE, |
+ NewRunnableMethod( |
+ this, &SafeManifestParser::ParseInSandbox, |
g_browser_process->resource_dispatcher_host())); |
} |
// Creates the sandboxed utility process and tells it to start parsing. |
void ParseInSandbox(ResourceDispatcherHost* rdh) { |
- DCHECK(MessageLoop::current() == io_loop_); |
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |
// TODO(asargent) we shouldn't need to do this branch here - instead |
// UtilityProcessHost should handle it for us. (http://crbug.com/19192) |
@@ -259,18 +240,22 @@ |
if (use_utility_process) { |
UtilityProcessHost* host = new UtilityProcessHost( |
- rdh, this, updater_loop_); |
+ rdh, this, ChromeThread::UI); |
host->StartUpdateManifestParse(xml_); |
} else { |
UpdateManifest manifest; |
if (manifest.Parse(xml_)) { |
- updater_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, |
- &SafeManifestParser::OnParseUpdateManifestSucceeded, |
- manifest.results())); |
+ ChromeThread::PostTask( |
+ ChromeThread::UI, FROM_HERE, |
+ NewRunnableMethod( |
+ this, &SafeManifestParser::OnParseUpdateManifestSucceeded, |
+ manifest.results())); |
} else { |
- updater_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, |
- &SafeManifestParser::OnParseUpdateManifestFailed, |
- manifest.errors())); |
+ ChromeThread::PostTask( |
+ ChromeThread::UI, FROM_HERE, |
+ NewRunnableMethod( |
+ this, &SafeManifestParser::OnParseUpdateManifestFailed, |
+ manifest.errors())); |
} |
} |
} |
@@ -278,25 +263,19 @@ |
// Callback from the utility process when parsing succeeded. |
virtual void OnParseUpdateManifestSucceeded( |
const UpdateManifest::ResultList& list) { |
- DCHECK(MessageLoop::current() == updater_loop_); |
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); |
updater_->HandleManifestResults(list); |
} |
// Callback from the utility process when parsing failed. |
virtual void OnParseUpdateManifestFailed(const std::string& error_message) { |
- DCHECK(MessageLoop::current() == updater_loop_); |
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); |
LOG(WARNING) << "Error parsing update manifest:\n" << error_message; |
} |
private: |
const std::string& xml_; |
- // The MessageLoop we use to call back the ExtensionUpdater. |
- MessageLoop* updater_loop_; |
- |
- // The MessageLoop where we create the utility process. |
- MessageLoop* io_loop_; |
- |
scoped_refptr<ExtensionUpdater> updater_; |
}; |
@@ -308,8 +287,8 @@ |
// We want to try parsing the manifest, and if it indicates updates are |
// available, we want to fire off requests to fetch those updates. |
if (status.status() == URLRequestStatus::SUCCESS && response_code == 200) { |
- scoped_refptr<SafeManifestParser> safe_parser = |
- new SafeManifestParser(data, this, MessageLoop::current(), io_loop_); |
+ scoped_refptr<SafeManifestParser> safe_parser = |
+ new SafeManifestParser(data, this); |
safe_parser->Start(); |
} else { |
// TODO(asargent) Do exponential backoff here. (http://crbug.com/12546). |
@@ -375,9 +354,11 @@ |
} else { |
// Successfully fetched - now write crx to a file so we can have the |
// ExtensionsService install it. |
- file_io_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- file_handler_.get(), &ExtensionUpdaterFileHandler::WriteTempFile, |
- current_extension_fetch_.id, data, this)); |
+ ChromeThread::PostTask( |
+ ChromeThread::FILE, FROM_HERE, |
+ NewRunnableMethod( |
+ file_handler_.get(), &ExtensionUpdaterFileHandler::WriteTempFile, |
+ current_extension_fetch_.id, data, this)); |
} |
} else { |
// TODO(asargent) do things like exponential backoff, handling |
@@ -405,8 +386,10 @@ |
void ExtensionUpdater::OnExtensionInstallFinished(const FilePath& path, |
Extension* extension) { |
// Have the file_handler_ delete the temp file on the file I/O thread. |
- file_io_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- file_handler_.get(), &ExtensionUpdaterFileHandler::DeleteFile, path)); |
+ ChromeThread::PostTask( |
+ ChromeThread::FILE, FROM_HERE, |
+ NewRunnableMethod( |
+ file_handler_.get(), &ExtensionUpdaterFileHandler::DeleteFile, path)); |
} |