| Index: chrome/browser/extensions/api/system_info_storage/storage_info_provider.cc
|
| diff --git a/chrome/browser/extensions/api/system_info_storage/storage_info_provider.cc b/chrome/browser/extensions/api/system_info_storage/storage_info_provider.cc
|
| deleted file mode 100644
|
| index c868769cd3bff06d500abf590101667b7f177f4a..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/system_info_storage/storage_info_provider.cc
|
| +++ /dev/null
|
| @@ -1,270 +0,0 @@
|
| -// Copyright (c) 2012 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_storage/storage_info_provider.h"
|
| -
|
| -#include "base/stl_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/sys_info.h"
|
| -#include "base/threading/sequenced_worker_pool.h"
|
| -#include "chrome/browser/storage_monitor/storage_monitor.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -
|
| -namespace extensions {
|
| -
|
| -using content::BrowserThread;
|
| -using chrome::StorageMonitor;
|
| -using api::experimental_system_info_storage::StorageUnitInfo;
|
| -using api::experimental_system_info_storage::STORAGE_UNIT_TYPE_FIXED;
|
| -using api::experimental_system_info_storage::STORAGE_UNIT_TYPE_REMOVABLE;
|
| -
|
| -namespace systeminfo {
|
| -
|
| -const char kStorageTypeUnknown[] = "unknown";
|
| -const char kStorageTypeFixed[] = "fixed";
|
| -const char kStorageTypeRemovable[] = "removable";
|
| -
|
| -void BuildStorageUnitInfo(const chrome::StorageInfo& info,
|
| - StorageUnitInfo* unit) {
|
| - unit->id = StorageInfoProvider::Get()->GetTransientIdForDeviceId(
|
| - info.device_id());
|
| - unit->name = UTF16ToUTF8(info.name());
|
| - // TODO(hmin): Might need to take MTP device into consideration.
|
| - unit->type = chrome::StorageInfo::IsRemovableDevice(info.device_id()) ?
|
| - STORAGE_UNIT_TYPE_REMOVABLE : STORAGE_UNIT_TYPE_FIXED;
|
| - unit->capacity = static_cast<double>(info.total_size_in_bytes());
|
| -}
|
| -
|
| -} // namespace systeminfo
|
| -
|
| -const int kDefaultPollingIntervalMs = 1000;
|
| -const char kWatchingTokenName[] = "_storage_info_watching_token_";
|
| -
|
| -// Static member intialization.
|
| -template<>
|
| -base::LazyInstance<scoped_refptr<SystemInfoProvider<StorageUnitInfoList> > >
|
| - SystemInfoProvider<StorageUnitInfoList>::provider_
|
| - = LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -StorageInfoProvider::StorageInfoProvider()
|
| - : observers_(new ObserverListThreadSafe<StorageFreeSpaceObserver>()),
|
| - watching_interval_(kDefaultPollingIntervalMs) {
|
| -}
|
| -
|
| -StorageInfoProvider::~StorageInfoProvider() {
|
| -}
|
| -
|
| -const StorageUnitInfoList& StorageInfoProvider::storage_unit_info_list() const {
|
| - return info_;
|
| -}
|
| -
|
| -void StorageInfoProvider::PrepareQueryOnUIThread() {
|
| - // Get all available storage devices before invoking |QueryInfo()|.
|
| - GetAllStoragesIntoInfoList();
|
| -}
|
| -
|
| -void StorageInfoProvider::InitializeProvider(
|
| - const base::Closure& do_query_info_callback) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - // Register the |do_query_info_callback| callback to StorageMonitor.
|
| - // See the comments of StorageMonitor::EnsureInitialized about when the
|
| - // callback gets run.
|
| - StorageMonitor::GetInstance()->EnsureInitialized(do_query_info_callback);
|
| -}
|
| -
|
| -bool StorageInfoProvider::QueryInfo() {
|
| - DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
|
| - // No info to query since we get all available storage devices' info in
|
| - // |PrepareQueryOnUIThread()|.
|
| - return true;
|
| -}
|
| -
|
| -std::vector<chrome::StorageInfo> StorageInfoProvider::GetAllStorages() const {
|
| - return StorageMonitor::GetInstance()->GetAllAvailableStorages();
|
| -}
|
| -
|
| -void StorageInfoProvider::GetAllStoragesIntoInfoList() {
|
| - info_.clear();
|
| - std::vector<chrome::StorageInfo> storage_list = GetAllStorages();
|
| - std::vector<chrome::StorageInfo>::const_iterator it = storage_list.begin();
|
| - for (; it != storage_list.end(); ++it) {
|
| - linked_ptr<StorageUnitInfo> unit(new StorageUnitInfo());
|
| - systeminfo::BuildStorageUnitInfo(*it, unit.get());
|
| - info_.push_back(unit);
|
| - }
|
| -}
|
| -
|
| -void StorageInfoProvider::AddObserver(StorageFreeSpaceObserver* obs) {
|
| - observers_->AddObserver(obs);
|
| -}
|
| -
|
| -void StorageInfoProvider::RemoveObserver(StorageFreeSpaceObserver* obs) {
|
| - observers_->RemoveObserver(obs);
|
| -}
|
| -
|
| -void StorageInfoProvider::StartWatching(const std::string& transient_id) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - BrowserThread::PostBlockingPoolSequencedTask(
|
| - kWatchingTokenName,
|
| - FROM_HERE,
|
| - base::Bind(&StorageInfoProvider::AddWatchedStorageOnBlockingPool,
|
| - this, transient_id));
|
| -}
|
| -
|
| -void StorageInfoProvider::StopWatching(const std::string& transient_id) {
|
| - base::FilePath mount_path;
|
| - BrowserThread::PostBlockingPoolSequencedTask(
|
| - kWatchingTokenName,
|
| - FROM_HERE,
|
| - base::Bind(&StorageInfoProvider::RemoveWatchedStorageOnBlockingPool,
|
| - this, transient_id));
|
| -}
|
| -
|
| -void StorageInfoProvider::StartWatchingAllStorages() {
|
| - for (StorageUnitInfoList::const_iterator it = info_.begin();
|
| - it != info_.end(); ++it) {
|
| - StartWatching((*it)->id);
|
| - }
|
| -}
|
| -
|
| -void StorageInfoProvider::StopWatchingAllStorages() {
|
| - for (StorageUnitInfoList::const_iterator it = info_.begin();
|
| - it != info_.end(); ++it) {
|
| - StopWatching((*it)->id);
|
| - }
|
| -}
|
| -
|
| -int64 StorageInfoProvider::GetStorageFreeSpaceFromTransientId(
|
| - const std::string& transient_id) {
|
| - std::vector<chrome::StorageInfo> storage_list = GetAllStorages();
|
| - std::string device_id = GetDeviceIdForTransientId(transient_id);
|
| -
|
| - // Lookup the matched storage info by |device_id|.
|
| - for (std::vector<chrome::StorageInfo>::const_iterator it =
|
| - storage_list.begin();
|
| - it != storage_list.end(); ++it) {
|
| - if (device_id == it->device_id())
|
| - return base::SysInfo::AmountOfFreeDiskSpace(
|
| - base::FilePath(it->location()));
|
| - }
|
| -
|
| - return -1;
|
| -}
|
| -
|
| -void StorageInfoProvider::AddWatchedStorageOnBlockingPool(
|
| - const std::string& transient_id) {
|
| - DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
|
| - // If the storage |transient_id| is already being watched.
|
| - if (ContainsKey(storage_transient_id_to_size_map_, transient_id))
|
| - return;
|
| -
|
| - int64 available_bytes = GetStorageFreeSpaceFromTransientId(transient_id);
|
| - if (available_bytes < 0)
|
| - return;
|
| -
|
| - storage_transient_id_to_size_map_[transient_id] = available_bytes;
|
| -
|
| - // If it is the first storage to be watched, we need to start the watching
|
| - // timer.
|
| - if (storage_transient_id_to_size_map_.size() == 1) {
|
| - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&StorageInfoProvider::StartWatchingTimerOnUIThread, this));
|
| - }
|
| -}
|
| -
|
| -void StorageInfoProvider::RemoveWatchedStorageOnBlockingPool(
|
| - const std::string& transient_id) {
|
| - DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
|
| - if (storage_transient_id_to_size_map_.erase(transient_id) == 0)
|
| - return;
|
| -
|
| - // Stop watching timer if there is no storage to be watched.
|
| - if (storage_transient_id_to_size_map_.empty()) {
|
| - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&StorageInfoProvider::StopWatchingTimerOnUIThread, this));
|
| - }
|
| -}
|
| -
|
| -void StorageInfoProvider::CheckWatchedStorages() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - std::vector<chrome::StorageInfo> storage_list = GetAllStorages();
|
| -
|
| - for (std::vector<chrome::StorageInfo>::iterator it = storage_list.begin();
|
| - it != storage_list.end(); ++it) {
|
| - BrowserThread::PostBlockingPoolSequencedTask(
|
| - kWatchingTokenName,
|
| - FROM_HERE,
|
| - base::Bind(&StorageInfoProvider::CheckWatchedStorageOnBlockingPool,
|
| - this, GetTransientIdForDeviceId(it->device_id())));
|
| - }
|
| -}
|
| -
|
| -void StorageInfoProvider::CheckWatchedStorageOnBlockingPool(
|
| - const std::string& transient_id) {
|
| - DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
|
| - if (!ContainsKey(storage_transient_id_to_size_map_, transient_id))
|
| - return;
|
| -
|
| - double new_available_bytes = GetStorageFreeSpaceFromTransientId(transient_id);
|
| - double old_available_bytes = storage_transient_id_to_size_map_[transient_id];
|
| -
|
| - // No free space change.
|
| - if (new_available_bytes == old_available_bytes)
|
| - return;
|
| -
|
| - if (new_available_bytes < 0) {
|
| - // In case we can't establish the new free space value from |transient_id|,
|
| - // the |transient_id| is currently not available, so we need to remove it
|
| - // from |storage_transient_id_to_size_map_|.
|
| - storage_transient_id_to_size_map_.erase(transient_id);
|
| - if (storage_transient_id_to_size_map_.size() == 0) {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&StorageInfoProvider::StopWatchingTimerOnUIThread, this));
|
| - }
|
| - return;
|
| - }
|
| -
|
| - // Ignore free space change event if the old available capacity is 0.
|
| - if (old_available_bytes > 0) {
|
| - observers_->Notify(&StorageFreeSpaceObserver::OnFreeSpaceChanged,
|
| - transient_id,
|
| - old_available_bytes,
|
| - new_available_bytes);
|
| - }
|
| - storage_transient_id_to_size_map_[transient_id] = new_available_bytes;
|
| -}
|
| -
|
| -void StorageInfoProvider::StartWatchingTimerOnUIThread() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - // Start the watching timer if it is not running.
|
| - if (!watching_timer_.IsRunning()) {
|
| - watching_timer_.Start(FROM_HERE,
|
| - base::TimeDelta::FromMilliseconds(watching_interval_),
|
| - this, &StorageInfoProvider::CheckWatchedStorages);
|
| - }
|
| -}
|
| -
|
| -void StorageInfoProvider::StopWatchingTimerOnUIThread() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - watching_timer_.Stop();
|
| -}
|
| -
|
| -std::string StorageInfoProvider::GetTransientIdForDeviceId(
|
| - const std::string& device_id) const {
|
| - return StorageMonitor::GetInstance()->GetTransientIdForDeviceId(device_id);
|
| -}
|
| -
|
| -std::string StorageInfoProvider::GetDeviceIdForTransientId(
|
| - const std::string& transient_id) const {
|
| - return StorageMonitor::GetInstance()->GetDeviceIdForTransientId(transient_id);
|
| -}
|
| -
|
| -// static
|
| -StorageInfoProvider* StorageInfoProvider::Get() {
|
| - return StorageInfoProvider::GetInstance<StorageInfoProvider>();
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|