Index: chrome/browser/metrics/metrics_service.cc |
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc |
index a64e993ec28ddedd60efd5d550a3f14feae8d114..a4e7e6005b54f8a5644a36fb8397fb91f449a507 100644 |
--- a/chrome/browser/metrics/metrics_service.cc |
+++ b/chrome/browser/metrics/metrics_service.cc |
@@ -187,6 +187,7 @@ |
#include "chrome/common/pref_names.h" |
#include "chrome/common/render_messages.h" |
#include "content/browser/load_notification_details.h" |
+#include "content/browser/plugin_service.h" |
#include "content/browser/renderer_host/render_process_host.h" |
#include "content/common/child_process_info.h" |
#include "content/common/notification_service.h" |
@@ -321,44 +322,6 @@ class MetricsMemoryDetails : public MemoryDetails { |
DISALLOW_COPY_AND_ASSIGN(MetricsMemoryDetails); |
}; |
-class MetricsService::InitTaskComplete : public Task { |
- public: |
- explicit InitTaskComplete( |
- const std::string& hardware_class, |
- const std::vector<webkit::WebPluginInfo>& plugins) |
- : hardware_class_(hardware_class), plugins_(plugins) {} |
- |
- virtual void Run() { |
- g_browser_process->metrics_service()->OnInitTaskComplete( |
- hardware_class_, plugins_); |
- } |
- |
- private: |
- std::string hardware_class_; |
- std::vector<webkit::WebPluginInfo> plugins_; |
-}; |
- |
-class MetricsService::InitTask : public Task { |
- public: |
- explicit InitTask(MessageLoop* callback_loop) |
- : callback_loop_(callback_loop) {} |
- |
- virtual void Run() { |
- std::vector<webkit::WebPluginInfo> plugins; |
- webkit::npapi::PluginList::Singleton()->GetPlugins(&plugins); |
- std::string hardware_class; // Empty string by default. |
-#if defined(OS_CHROMEOS) |
- chromeos::system::StatisticsProvider::GetInstance()->GetMachineStatistic( |
- "hardware_class", &hardware_class); |
-#endif // OS_CHROMEOS |
- callback_loop_->PostTask(FROM_HERE, new InitTaskComplete( |
- hardware_class, plugins)); |
- } |
- |
- private: |
- MessageLoop* callback_loop_; |
-}; |
- |
// static |
void MetricsService::RegisterPrefs(PrefService* local_state) { |
DCHECK(IsSingleThreaded()); |
@@ -796,12 +759,40 @@ void MetricsService::InitializeMetricsState() { |
ScheduleNextStateSave(); |
} |
-void MetricsService::OnInitTaskComplete( |
- const std::string& hardware_class, |
- const std::vector<webkit::WebPluginInfo>& plugins) { |
+void MetricsService::InitTaskGetHardwareClass( |
+ base::MessageLoopProxy* target_loop) { |
+ DCHECK(state_ == INIT_TASK_SCHEDULED); |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
+ |
+ std::string hardware_class; |
+#if defined(OS_CHROMEOS) |
+ chromeos::system::StatisticsProvider::GetInstance()->GetMachineStatistic( |
+ "hardware_class", &hardware_class); |
+#endif // OS_CHROMEOS |
+ |
+ target_loop->PostTask(FROM_HERE, |
+ base::Bind(&MetricsService::OnInitTaskGotHardwareClass, |
+ base::Unretained(this), hardware_class)); |
+} |
+ |
+void MetricsService::OnInitTaskGotHardwareClass( |
+ const std::string& hardware_class) { |
DCHECK(state_ == INIT_TASK_SCHEDULED); |
hardware_class_ = hardware_class; |
+ |
+ // Start the next part of the init task: loading plugin information. |
+ PluginService::GetInstance()->LoadPluginList(false, |
+ base::Bind(&MetricsService::OnInitTaskPluginsLoaded, |
+ base::Unretained(this))); |
+} |
+ |
+void MetricsService::OnInitTaskPluginsLoaded() { |
+ std::vector<webkit::WebPluginInfo> plugins; |
+ PluginService::GetInstance()->GetPlugins(&plugins); |
jam
2011/09/22 21:10:59
nit: can just get rid of the plugins local variabl
|
+ |
+ DCHECK(state_ == INIT_TASK_SCHEDULED); |
plugins_ = plugins; |
+ |
io_thread_ = g_browser_process->io_thread(); |
if (state_ == INIT_TASK_SCHEDULED) |
state_ = INIT_TASK_DONE; |
@@ -853,8 +844,10 @@ void MetricsService::StartRecording() { |
// initialization steps (such as plugin list generation) necessary |
// for sending the initial log. This avoids blocking the main UI |
// thread. |
- g_browser_process->file_thread()->message_loop()->PostDelayedTask(FROM_HERE, |
- new InitTask(MessageLoop::current()), |
+ BrowserThread::PostDelayedTask(BrowserThread::FILE, FROM_HERE, |
+ base::Bind(&MetricsService::InitTaskGetHardwareClass, |
+ base::Unretained(this), |
+ MessageLoop::current()->message_loop_proxy()), |
kInitializationDelaySeconds * 1000); |
} |
} |