Move PromoResourceService from Profile to BrowserProcessImpl/local_state().

[email protected]
BUG=120996,143773
TEST=tests pass, we still get promos, less crud on profile.

Review URL: https://codereview.chromium.org/11689004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175103 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 0e3bf14f..9552ee4 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -63,6 +63,7 @@
 #include "chrome/browser/thumbnails/render_widget_snapshot_taker.h"
 #include "chrome/browser/ui/bookmarks/bookmark_prompt_controller.h"
 #include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/web_resource/promo_resource_service.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/common/chrome_notification_types.h"
 #include "chrome/common/chrome_paths.h"
@@ -201,18 +202,17 @@
                           base::Bind(&SdchDictionaryFetcher::Shutdown));
 
   // We need to destroy the MetricsService, VariationsService,
-  // IntranetRedirectDetector, and SafeBrowsing ClientSideDetectionService
-  // (owned by the SafeBrowsingService) before the io_thread_ gets destroyed,
-  // since their destructors can call the URLFetcher destructor, which does a
-  // PostDelayedTask operation on the IO thread. (The IO thread will handle that
-  // URLFetcher operation before going away.)
+  // IntranetRedirectDetector, PromoResourceService, and SafeBrowsing
+  // ClientSideDetectionService (owned by the SafeBrowsingService) before the
+  // io_thread_ gets destroyed, since their destructors can call the URLFetcher
+  // destructor, which does a PostDelayedTask operation on the IO thread. (The
+  // IO thread will handle that URLFetcher operation before going away.)
   metrics_service_.reset();
   variations_service_.reset();
   intranet_redirect_detector_.reset();
 #if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
-  if (safe_browsing_service_.get()) {
+  if (safe_browsing_service_.get())
     safe_browsing_service()->ShutDown();
-  }
 #endif
 
   // Need to clear the desktop notification balloons before the io_thread_ and
@@ -351,8 +351,9 @@
   // If all file writes haven't cleared in the timeout, leak the WaitableEvent
   // so that there's no race to reference it in Signal().
   if (!done_writing->TimedWait(
-      base::TimeDelta::FromSeconds(kEndSessionTimeoutSeconds)))
+      base::TimeDelta::FromSeconds(kEndSessionTimeoutSeconds))) {
     ignore_result(done_writing.release());
+  }
 
 #elif defined(OS_WIN)
   BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
@@ -683,9 +684,8 @@
   // either.
   return NULL;
 #else
-  if (!crl_set_fetcher_.get()) {
+  if (!crl_set_fetcher_.get())
     crl_set_fetcher_ = new CRLSetFetcher();
-  }
   return crl_set_fetcher_.get();
 #endif
 }
@@ -800,26 +800,36 @@
   // Also find plugins in a user-specific plugins dir,
   // e.g. ~/.config/chromium/Plugins.
   FilePath user_data_dir;
-  if (PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)) {
+  if (PathService::Get(chrome::DIR_USER_DATA, &user_data_dir))
     plugin_service->AddExtraPluginDir(user_data_dir.Append("Plugins"));
-  }
 #endif
 
+#endif  // defined(ENABLE_PLUGINS)
+
+  if (local_state()->IsManagedPreference(prefs::kDefaultBrowserSettingEnabled))
+    ApplyDefaultBrowserPolicy();
+
   // Triggers initialization of the singleton instance on UI thread.
   PluginFinder::GetInstance()->Init();
 
 #if defined(ENABLE_PLUGIN_INSTALLATION)
-  if (!plugins_resource_service_) {
-    plugins_resource_service_ = new PluginsResourceService(local_state());
-    plugins_resource_service_->StartAfterDelay();
-  }
+  DCHECK(!plugins_resource_service_.get());
+  plugins_resource_service_ = new PluginsResourceService(local_state());
+  plugins_resource_service_->StartAfterDelay();
 #endif
-#endif  // defined(ENABLE_PLUGINS)
+
+  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
+  if (!command_line.HasSwitch(switches::kDisableWebResources)) {
+    DCHECK(!promo_resource_service_.get());
+    promo_resource_service_ = new PromoResourceService;
+    promo_resource_service_->StartAfterDelay();
+  }
 
 #if !defined(OS_ANDROID)
   if (browser_defaults::bookmarks_enabled &&
-      BookmarkPromptController::IsEnabled())
+      BookmarkPromptController::IsEnabled()) {
     bookmark_prompt_controller_.reset(new BookmarkPromptController());
+  }
 #endif
 }
 
@@ -888,7 +898,8 @@
 
 void BrowserProcessImpl::ApplyDisabledSchemesPolicy() {
   std::set<std::string> schemes;
-  const ListValue* scheme_list = local_state_->GetList(prefs::kDisabledSchemes);
+  const ListValue* scheme_list =
+      local_state()->GetList(prefs::kDisabledSchemes);
   for (ListValue::const_iterator iter = scheme_list->begin();
        iter != scheme_list->end(); ++iter) {
     std::string scheme;
@@ -899,7 +910,7 @@
 }
 
 void BrowserProcessImpl::ApplyDefaultBrowserPolicy() {
-  if (local_state_->GetBoolean(prefs::kDefaultBrowserSettingEnabled)) {
+  if (local_state()->GetBoolean(prefs::kDefaultBrowserSettingEnabled)) {
     scoped_refptr<ShellIntegration::DefaultWebClientWorker>
         set_browser_worker = new ShellIntegration::DefaultBrowserWorker(NULL);
     set_browser_worker->StartSetAsDefault();