Get rid of MessageLoop* caching in extensions code.

BUG=25354
Review URL: http://codereview.chromium.org/345023

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30550 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
index 0234ec5..9ff30a3 100644
--- a/chrome/browser/extensions/extensions_service.cc
+++ b/chrome/browser/extensions/extensions_service.cc
@@ -82,12 +82,9 @@
                                      const CommandLine* command_line,
                                      PrefService* prefs,
                                      const FilePath& install_directory,
-                                     MessageLoop* frontend_loop,
-                                     MessageLoop* backend_loop,
                                      bool autoupdate_enabled)
     : profile_(profile),
       extension_prefs_(new ExtensionPrefs(prefs, install_directory)),
-      backend_loop_(backend_loop),
       install_directory_(install_directory),
       extensions_enabled_(true),
       show_extensions_prompts_(true),
@@ -106,11 +103,10 @@
       update_frequency = StringToInt(WideToASCII(command_line->GetSwitchValue(
           switches::kExtensionsUpdateFrequency)));
     }
-    updater_ = new ExtensionUpdater(this, prefs, update_frequency,
-        backend_loop_, g_browser_process->io_thread()->message_loop());
+    updater_ = new ExtensionUpdater(this, prefs, update_frequency);
   }
 
-  backend_ = new ExtensionsServiceBackend(install_directory_, frontend_loop);
+  backend_ = new ExtensionsServiceBackend(install_directory_);
 }
 
 ExtensionsService::~ExtensionsService() {
@@ -143,7 +139,6 @@
                       "",   // no expected id
                       false,  // don't delete crx when complete
                       true,  // allow privilege increase
-                      backend_loop_,
                       this,
                       NULL);  // no client (silent install)
 }
@@ -160,7 +155,6 @@
                       id,
                       true,  // delete crx when complete
                       false,  // do not allow upgrade of privileges
-                      backend_loop_,
                       this,
                       NULL);  // no client (silent install)
 }
@@ -196,9 +190,11 @@
 
   // Tell the backend to start deleting installed extensions on the file thread.
   if (Extension::LOAD != extension->location()) {
-    backend_loop_->PostTask(FROM_HERE, NewRunnableFunction(
-      &extension_file_util::UninstallExtension, extension_id,
-      install_directory_));
+    ChromeThread::PostTask(
+      ChromeThread::FILE, FROM_HERE,
+      NewRunnableFunction(
+          &extension_file_util::UninstallExtension, extension_id,
+          install_directory_));
   }
 
   ExtensionDOMUI::UnregisterChromeURLOverrides(profile_,
@@ -256,9 +252,12 @@
 }
 
 void ExtensionsService::LoadExtension(const FilePath& extension_path) {
-  backend_loop_->PostTask(FROM_HERE, NewRunnableMethod(backend_.get(),
-      &ExtensionsServiceBackend::LoadSingleExtension,
-      extension_path, scoped_refptr<ExtensionsService>(this)));
+  ChromeThread::PostTask(
+      ChromeThread::FILE, FROM_HERE,
+      NewRunnableMethod(
+          backend_.get(),
+          &ExtensionsServiceBackend::LoadSingleExtension,
+          extension_path, scoped_refptr<ExtensionsService>(this)));
 }
 
 void ExtensionsService::LoadAllExtensions() {
@@ -297,9 +296,12 @@
 
   if (location == Extension::EXTERNAL_PREF ||
       location == Extension::EXTERNAL_REGISTRY) {
-    backend_loop_->PostTask(FROM_HERE, NewRunnableMethod(backend_.get(),
-        &ExtensionsServiceBackend::CheckExternalUninstall,
-        scoped_refptr<ExtensionsService>(this), id, location));
+    ChromeThread::PostTask(
+        ChromeThread::FILE, FROM_HERE,
+        NewRunnableMethod(
+            backend_.get(),
+            &ExtensionsServiceBackend::CheckExternalUninstall,
+            scoped_refptr<ExtensionsService>(this), id, location));
   }
 }
 
@@ -315,11 +317,13 @@
         static_cast<ChromeURLRequestContextGetter*>(
             profile_->GetRequestContext());
     if (context_getter) {
-      g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE,
-          NewRunnableMethod(context_getter,
-                            &ChromeURLRequestContextGetter::OnNewExtensions,
-                            extension->id(),
-                            extension->path()));
+      ChromeThread::PostTask(
+          ChromeThread::IO, FROM_HERE,
+          NewRunnableMethod(
+              context_getter,
+              &ChromeURLRequestContextGetter::OnNewExtensions,
+              extension->id(),
+              extension->path()));
     }
   }
 
@@ -342,7 +346,8 @@
         static_cast<ChromeURLRequestContextGetter*>(
             profile_->GetRequestContext());
     if (context_getter) {
-      g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE,
+      ChromeThread::PostTask(
+          ChromeThread::IO, FROM_HERE,
           NewRunnableMethod(
               context_getter,
               &ChromeURLRequestContextGetter::OnUnloadedExtension,
@@ -384,10 +389,11 @@
   // later?
   std::set<std::string> killed_extensions;
   extension_prefs_->GetKilledExtensionIds(&killed_extensions);
-  backend_loop_->PostTask(FROM_HERE, NewRunnableMethod(backend_.get(),
-      &ExtensionsServiceBackend::CheckForExternalUpdates,
-      killed_extensions,
-      scoped_refptr<ExtensionsService>(this)));
+  ChromeThread::PostTask(
+      ChromeThread::FILE, FROM_HERE,
+      NewRunnableMethod(
+          backend_.get(), &ExtensionsServiceBackend::CheckForExternalUpdates,
+          killed_extensions, scoped_refptr<ExtensionsService>(this)));
 }
 
 void ExtensionsService::UnloadExtension(const std::string& extension_id) {
@@ -439,9 +445,11 @@
 void ExtensionsService::GarbageCollectExtensions() {
   InstalledExtensionSet installed(
       new InstalledExtensions(extension_prefs_.get()));
-  backend_loop_->PostTask(FROM_HERE, NewRunnableFunction(
-      &extension_file_util::GarbageCollectExtensions, install_directory_,
-      installed.extensions()));
+  ChromeThread::PostTask(
+      ChromeThread::FILE, FROM_HERE,
+      NewRunnableFunction(
+          &extension_file_util::GarbageCollectExtensions, install_directory_,
+          installed.extensions()));
 }
 
 void ExtensionsService::OnLoadedInstalledExtensions() {
@@ -601,15 +609,19 @@
 }
 
 void ExtensionsService::ClearProvidersForTesting() {
-  backend_loop_->PostTask(FROM_HERE, NewRunnableMethod(backend_.get(),
-      &ExtensionsServiceBackend::ClearProvidersForTesting));
+  ChromeThread::PostTask(
+      ChromeThread::FILE, FROM_HERE,
+      NewRunnableMethod(
+          backend_.get(), &ExtensionsServiceBackend::ClearProvidersForTesting));
 }
 
 void ExtensionsService::SetProviderForTesting(
     Extension::Location location, ExternalExtensionProvider* test_provider) {
-  backend_loop_->PostTask(FROM_HERE, NewRunnableMethod(backend_.get(),
-      &ExtensionsServiceBackend::SetProviderForTesting,
-      location, test_provider));
+  ChromeThread::PostTask(
+      ChromeThread::FILE, FROM_HERE,
+      NewRunnableMethod(
+          backend_.get(), &ExtensionsServiceBackend::SetProviderForTesting,
+          location, test_provider));
 }
 
 void ExtensionsService::OnExternalExtensionFound(const std::string& id,
@@ -639,7 +651,6 @@
   CrxInstaller::Start(path, install_directory_, location, id,
                       false,  // don't delete crx when complete
                       true,  // allow privilege increase
-                      backend_loop_,
                       this,
                       NULL);  // no client (silent install)
 }
@@ -664,11 +675,10 @@
 // ExtensionsServicesBackend
 
 ExtensionsServiceBackend::ExtensionsServiceBackend(
-    const FilePath& install_directory, MessageLoop* frontend_loop)
+    const FilePath& install_directory)
         : frontend_(NULL),
           install_directory_(install_directory),
-          alert_on_error_(false),
-          frontend_loop_(frontend_loop) {
+          alert_on_error_(false) {
   // TODO(aa): This ends up doing blocking IO on the UI thread because it reads
   // pref data in the ctor and that is called on the UI thread. Would be better
   // to re-read data each time we list external extensions, anyway.
@@ -715,25 +725,19 @@
 
 void ExtensionsServiceBackend::ReportExtensionLoadError(
     const FilePath& extension_path, const std::string &error) {
-  // In the unit tests, frontend_loop_ may be null.
-  if (frontend_loop_ == NULL) {
-    frontend_->ReportExtensionLoadError(
-        extension_path,
-        error,
-        NotificationType::EXTENSION_INSTALL_ERROR,
-        alert_on_error_);
-    return;
-  }
-
-  frontend_loop_->PostTask(FROM_HERE,
-      NewRunnableMethod(frontend_,
+  ChromeThread::PostTask(
+      ChromeThread::UI, FROM_HERE,
+      NewRunnableMethod(
+          frontend_,
           &ExtensionsService::ReportExtensionLoadError, extension_path,
           error, NotificationType::EXTENSION_INSTALL_ERROR, alert_on_error_));
 }
 
 void ExtensionsServiceBackend::ReportExtensionLoaded(Extension* extension) {
-  frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(
-      frontend_, &ExtensionsService::OnExtensionLoaded, extension, true));
+  ChromeThread::PostTask(
+      ChromeThread::UI, FROM_HERE,
+      NewRunnableMethod(
+          frontend_, &ExtensionsService::OnExtensionLoaded, extension, true));
 }
 
 bool ExtensionsServiceBackend::LookupExternalExtension(
@@ -795,9 +799,10 @@
     return;  // Yup, known extension, don't uninstall.
 
   // This is an external extension that we don't have registered.  Uninstall.
-  frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(
-      frontend.get(), &ExtensionsService::UninstallExtension,
-      id, true));
+  ChromeThread::PostTask(
+      ChromeThread::UI, FROM_HERE,
+      NewRunnableMethod(
+          frontend.get(), &ExtensionsService::UninstallExtension, id, true));
 }
 
 void ExtensionsServiceBackend::ClearProvidersForTesting() {
@@ -815,7 +820,9 @@
 void ExtensionsServiceBackend::OnExternalExtensionFound(
     const std::string& id, const Version* version, const FilePath& path,
     Extension::Location location) {
-  frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(frontend_,
-      &ExtensionsService::OnExternalExtensionFound, id, version->GetString(),
-      path, location));
+  ChromeThread::PostTask(
+      ChromeThread::UI, FROM_HERE,
+      NewRunnableMethod(
+          frontend_, &ExtensionsService::OnExternalExtensionFound, id,
+          version->GetString(), path, location));
 }