Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/fileapi/media/mtp_device_map_service.h" | 5 #include "webkit/fileapi/media/mtp_device_map_service.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| 11 #include "webkit/fileapi/isolated_context.h" | 11 #include "webkit/fileapi/isolated_context.h" |
| 12 #include "webkit/fileapi/media/mtp_device_delegate.h" | 12 #include "webkit/fileapi/media/mtp_device_delegate.h" |
| 13 | 13 |
| 14 namespace fileapi { | 14 namespace fileapi { |
| 15 | 15 |
| 16 // static | 16 // static |
| 17 MTPDeviceMapService* MTPDeviceMapService::GetInstance() { | 17 MTPDeviceMapService* MTPDeviceMapService::GetInstance() { |
| 18 return Singleton<MTPDeviceMapService>::get(); | 18 return Singleton<MTPDeviceMapService>::get(); |
| 19 } | 19 } |
| 20 | 20 |
| 21 void MTPDeviceMapService::AddDelegate( | 21 void MTPDeviceMapService::AddDelegate( |
| 22 const FilePath::StringType& device_location, | 22 const FilePath::StringType& device_location, |
| 23 scoped_refptr<MTPDeviceDelegate> delegate) { | 23 MTPDeviceDelegate* delegate) { |
| 24 DCHECK(thread_checker_.CalledOnValidThread()); | 24 DCHECK(thread_checker_.CalledOnValidThread()); |
| 25 DCHECK(delegate.get()); | 25 DCHECK(delegate); |
| 26 DCHECK(!device_location.empty()); | 26 DCHECK(!device_location.empty()); |
| 27 | |
| 28 if (ContainsKey(delegate_map_, device_location)) | 27 if (ContainsKey(delegate_map_, device_location)) |
| 29 return; | 28 return; |
| 30 | 29 |
| 31 delegate_map_[device_location] = delegate; | 30 delegate_map_[device_location] = delegate; |
| 32 } | 31 } |
| 33 | 32 |
| 34 void MTPDeviceMapService::RemoveDelegate( | 33 void MTPDeviceMapService::RemoveDelegate( |
| 35 const FilePath::StringType& device_location) { | 34 const FilePath::StringType& device_location) { |
| 36 DCHECK(thread_checker_.CalledOnValidThread()); | 35 DCHECK(thread_checker_.CalledOnValidThread()); |
| 37 DelegateMap::iterator it = delegate_map_.find(device_location); | 36 DelegateMap::iterator it = delegate_map_.find(device_location); |
| 38 DCHECK(it != delegate_map_.end()); | 37 DCHECK(it != delegate_map_.end()); |
| 38 it->second->CancelPendingTasksAndDeleteDelegate(); | |
| 39 delegate_map_.erase(it); | 39 delegate_map_.erase(it); |
| 40 } | 40 } |
| 41 | 41 |
| 42 MTPDeviceDelegate* MTPDeviceMapService::GetMTPDeviceDelegate( | 42 MTPDeviceDelegate* MTPDeviceMapService::GetMTPDeviceDelegate( |
| 43 const std::string& filesystem_id) { | 43 const std::string& filesystem_id) { |
| 44 DCHECK(thread_checker_.CalledOnValidThread()); | 44 DCHECK(thread_checker_.CalledOnValidThread()); |
| 45 FilePath device_path; | 45 FilePath device_path; |
| 46 if (!IsolatedContext::GetInstance()->GetRegisteredPath(filesystem_id, | 46 if (!IsolatedContext::GetInstance()->GetRegisteredPath(filesystem_id, |
| 47 &device_path)) { | 47 &device_path)) { |
| 48 return NULL; | 48 return NULL; |
| 49 } | 49 } |
| 50 | 50 |
| 51 FilePath::StringType device_location = device_path.value(); | 51 FilePath::StringType device_location = device_path.value(); |
| 52 DCHECK(!device_location.empty()); | 52 DCHECK(!device_location.empty()); |
| 53 | 53 |
| 54 DelegateMap::const_iterator it = delegate_map_.find(device_location); | 54 DelegateMap::const_iterator it = delegate_map_.find(device_location); |
| 55 DCHECK(it != delegate_map_.end()); | 55 DCHECK(it != delegate_map_.end()); |
| 56 return it->second.get(); | 56 return it->second; |
| 57 } | 57 } |
| 58 | 58 |
| 59 MTPDeviceMapService::MTPDeviceMapService() { | 59 MTPDeviceMapService::MTPDeviceMapService() { |
| 60 // This object is constructed on UI Thread but the member functions are | 60 // This object is constructed on UI Thread but the member functions are |
| 61 // accessed on IO thread. Therefore, detach from current thread. | 61 // accessed on IO thread. Therefore, detach from current thread. |
| 62 thread_checker_.DetachFromThread(); | 62 thread_checker_.DetachFromThread(); |
|
Lei Zhang
2012/11/21 06:46:39
Speaking of DetachFromThread(), I don't think this
kmadhusu
2012/11/22 00:49:08
When we instantiate thread_checker_, we bind the c
| |
| 63 } | 63 } |
| 64 | 64 |
| 65 MTPDeviceMapService::~MTPDeviceMapService() {} | 65 MTPDeviceMapService::~MTPDeviceMapService() {} |
| 66 | 66 |
| 67 } // namespace fileapi | 67 } // namespace fileapi |
| OLD | NEW |