blob: 82b8eb4d99097bc149d369aeb5da0b010065e8f3 [file] [log] [blame]
// 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/media_galleries/win/portable_device_map_service.h"
#include "base/logging.h"
#include "base/stl_util.h"
#include "base/threading/thread_restrictions.h"
#include "content/public/browser/browser_thread.h"
namespace {
base::LazyInstance<PortableDeviceMapService> g_portable_device_map_service =
LAZY_INSTANCE_INITIALIZER;
} // namespace
// static
PortableDeviceMapService* PortableDeviceMapService::GetInstance() {
return g_portable_device_map_service.Pointer();
}
void PortableDeviceMapService::AddPortableDevice(
const base::string16& device_location,
IPortableDevice* device) {
base::ThreadRestrictions::AssertIOAllowed();
DCHECK(!device_location.empty());
DCHECK(device);
base::AutoLock lock(lock_);
device_map_[device_location] = PortableDeviceInfo(device);
}
void PortableDeviceMapService::MarkPortableDeviceForDeletion(
const base::string16& device_location) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
DCHECK(!device_location.empty());
base::AutoLock lock(lock_);
PortableDeviceMap::iterator it = device_map_.find(device_location);
if (it != device_map_.end())
it->second.scheduled_to_delete = true;
}
void PortableDeviceMapService::RemovePortableDevice(
const base::string16& device_location) {
base::ThreadRestrictions::AssertIOAllowed();
DCHECK(!device_location.empty());
base::AutoLock lock(lock_);
PortableDeviceMap::const_iterator it = device_map_.find(device_location);
if ((it != device_map_.end()) && it->second.scheduled_to_delete)
device_map_.erase(it);
}
IPortableDevice* PortableDeviceMapService::GetPortableDevice(
const base::string16& device_location) {
base::ThreadRestrictions::AssertIOAllowed();
DCHECK(!device_location.empty());
base::AutoLock lock(lock_);
PortableDeviceMap::const_iterator it = device_map_.find(device_location);
return (it == device_map_.end() || it->second.scheduled_to_delete) ?
NULL : it->second.portable_device.get();
}
PortableDeviceMapService::PortableDeviceInfo::PortableDeviceInfo()
: scheduled_to_delete(false) {
}
PortableDeviceMapService::PortableDeviceInfo::PortableDeviceInfo(
IPortableDevice* device)
: portable_device(device),
scheduled_to_delete(false) {
}
PortableDeviceMapService::PortableDeviceMapService() {
}
PortableDeviceMapService::~PortableDeviceMapService() {
}