Home | History | Annotate | Download | only in win
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/media_galleries/win/portable_device_map_service.h"
      6 
      7 #include "base/logging.h"
      8 #include "base/stl_util.h"
      9 #include "base/threading/thread_restrictions.h"
     10 #include "content/public/browser/browser_thread.h"
     11 
     12 namespace {
     13 
     14 base::LazyInstance<PortableDeviceMapService> g_portable_device_map_service =
     15     LAZY_INSTANCE_INITIALIZER;
     16 
     17 }  // namespace
     18 
     19 // static
     20 PortableDeviceMapService* PortableDeviceMapService::GetInstance() {
     21   return g_portable_device_map_service.Pointer();
     22 }
     23 
     24 void PortableDeviceMapService::AddPortableDevice(
     25     const base::string16& device_location,
     26     IPortableDevice* device) {
     27   base::ThreadRestrictions::AssertIOAllowed();
     28   DCHECK(!device_location.empty());
     29   DCHECK(device);
     30   base::AutoLock lock(lock_);
     31   device_map_[device_location] = PortableDeviceInfo(device);
     32 }
     33 
     34 void PortableDeviceMapService::MarkPortableDeviceForDeletion(
     35     const base::string16& device_location) {
     36   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
     37   DCHECK(!device_location.empty());
     38   base::AutoLock lock(lock_);
     39   PortableDeviceMap::iterator it = device_map_.find(device_location);
     40   if (it != device_map_.end())
     41     it->second.scheduled_to_delete = true;
     42 }
     43 
     44 void PortableDeviceMapService::RemovePortableDevice(
     45     const base::string16& device_location) {
     46   base::ThreadRestrictions::AssertIOAllowed();
     47   DCHECK(!device_location.empty());
     48   base::AutoLock lock(lock_);
     49   PortableDeviceMap::const_iterator it = device_map_.find(device_location);
     50   if ((it != device_map_.end()) && it->second.scheduled_to_delete)
     51     device_map_.erase(it);
     52 }
     53 
     54 IPortableDevice* PortableDeviceMapService::GetPortableDevice(
     55     const base::string16& device_location) {
     56   base::ThreadRestrictions::AssertIOAllowed();
     57   DCHECK(!device_location.empty());
     58   base::AutoLock lock(lock_);
     59   PortableDeviceMap::const_iterator it = device_map_.find(device_location);
     60   return (it == device_map_.end() || it->second.scheduled_to_delete) ?
     61       NULL : it->second.portable_device.get();
     62 }
     63 
     64 PortableDeviceMapService::PortableDeviceInfo::PortableDeviceInfo()
     65     : scheduled_to_delete(false) {
     66 }
     67 
     68 PortableDeviceMapService::PortableDeviceInfo::PortableDeviceInfo(
     69     IPortableDevice* device)
     70     : portable_device(device),
     71       scheduled_to_delete(false) {
     72 }
     73 
     74 PortableDeviceMapService::PortableDeviceMapService() {
     75 }
     76 
     77 PortableDeviceMapService::~PortableDeviceMapService() {
     78 }
     79