| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/api/system_info/system_info_provider.h" |
| |
| namespace extensions { |
| |
| SystemInfoProvider::SystemInfoProvider() |
| : is_waiting_for_completion_(false) { |
| base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); |
| worker_pool_ = pool->GetSequencedTaskRunnerWithShutdownBehavior( |
| pool->GetSequenceToken(), |
| base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
| } |
| |
| SystemInfoProvider::~SystemInfoProvider() {} |
| |
| void SystemInfoProvider::PrepareQueryOnUIThread() {} |
| |
| void SystemInfoProvider::InitializeProvider(const base::Closure& |
| do_query_info_callback) { |
| do_query_info_callback.Run(); |
| } |
| |
| void SystemInfoProvider::StartQueryInfo( |
| const QueryInfoCompletionCallback& callback) { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| DCHECK(!callback.is_null()); |
| |
| callbacks_.push(callback); |
| |
| if (is_waiting_for_completion_) |
| return; |
| |
| is_waiting_for_completion_ = true; |
| |
| InitializeProvider(base::Bind( |
| &SystemInfoProvider::StartQueryInfoPostInitialization, this)); |
| } |
| |
| void SystemInfoProvider::OnQueryCompleted(bool success) { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| |
| while (!callbacks_.empty()) { |
| QueryInfoCompletionCallback callback = callbacks_.front(); |
| callback.Run(success); |
| callbacks_.pop(); |
| } |
| |
| is_waiting_for_completion_ = false; |
| } |
| |
| void SystemInfoProvider::StartQueryInfoPostInitialization() { |
| PrepareQueryOnUIThread(); |
| // Post the custom query info task to blocking pool for information querying |
| // and reply with OnQueryCompleted. |
| base::PostTaskAndReplyWithResult( |
| worker_pool_, |
| FROM_HERE, |
| base::Bind(&SystemInfoProvider::QueryInfo, this), |
| base::Bind(&SystemInfoProvider::OnQueryCompleted, this)); |
| } |
| |
| } // namespace extensions |