Chromium Code Reviews| 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); |
| } |
| } |