Chromium Code Reviews| Index: webkit/fileapi/media/mtp_device_delegate.h |
| diff --git a/webkit/fileapi/media/mtp_device_delegate.h b/webkit/fileapi/media/mtp_device_delegate.h |
| index 0fc2d77e5f272ff4a751b328f8bfd38bc342105d..d57f7d923580de6b14f4550858807f6ca6e4fcff 100644 |
| --- a/webkit/fileapi/media/mtp_device_delegate.h |
| +++ b/webkit/fileapi/media/mtp_device_delegate.h |
| @@ -6,8 +6,8 @@ |
| #define WEBKIT_FILEAPI_MEDIA_MTP_DEVICE_DELEGATE_H_ |
| #include "base/file_path.h" |
| -#include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| +#include "base/memory/weak_ptr.h" |
| #include "base/platform_file.h" |
| #include "base/sequenced_task_runner_helpers.h" |
| #include "webkit/fileapi/file_system_file_util.h" |
| @@ -20,14 +20,11 @@ class Time; |
| namespace fileapi { |
| -struct MTPDeviceDelegateDeleter; |
| - |
| -// Delegate for media transfer protocol (MTP_ device to perform media device |
| +// Delegate for media transfer protocol (MTP) device to perform media device |
| // isolated file system operations. Class that implements this delegate does |
| -// the actual communication with the MTP device. |
| -class MTPDeviceDelegate |
| - : public base::RefCountedThreadSafe<MTPDeviceDelegate, |
| - MTPDeviceDelegateDeleter> { |
| +// the actual communication with the MTP device. ScopedMTPDeviceMapEntry class |
| +// manages the lifetime of the delegate via MTPDeviceMapService class. |
| +class MTPDeviceDelegate : public base::SupportsWeakPtr<MTPDeviceDelegate> { |
| public: |
| // Returns information about the given file path. |
| virtual base::PlatformFileError GetFileInfo( |
| @@ -53,23 +50,25 @@ class MTPDeviceDelegate |
| // Returns TaskRunner on which the operation is performed. |
| virtual base::SequencedTaskRunner* GetMediaTaskRunner() = 0; |
| - // Helper function to destruct the delegate object on UI thread. |
| - virtual void DeleteOnCorrectThread() const = 0; |
| + // Called when the |
| + // (1) Browser application is in shutdown mode (or) |
| + // (2) Last extension using this MTP device is destroyed (or) |
| + // (3) Attached MTP device is removed (or) |
| + // (4) User revoked the MTP device gallery permission. |
| + // Ownership of |MTPDeviceDelegate| is handed off to the delegate |
| + // implementation class by this call. This function should take care of |
| + // deleting itself on the right thread. This function should cancel all the |
| + // pending requests before posting any message to delete itself. Called on the |
|
Lei Zhang
2012/11/21 01:33:30
Can you put the "Called..." part on the next line?
kmadhusu
2012/11/21 04:09:53
Done.
|
| + // IO thread. |
| + virtual void CancelPendingTasksAndDeleteDelegate() = 0; |
| + |
| + // Called by FileSystemOperationContext to get MTPDeviceDelegate as a WeakPtr. |
|
Lei Zhang
2012/11/21 01:33:30
Again, you don't get to dictate who calls you.
kmadhusu
2012/11/21 04:09:53
Removed the comment.
|
| + // Called on the IO thread. |
| + virtual base::WeakPtr<MTPDeviceDelegate> GetAsWeakPtrOnIOThread() = 0; |
| protected: |
| + // Always destruct this object via CancelPendingTasksAndDeleteDelegate(). |
| virtual ~MTPDeviceDelegate() {} |
| - |
| - private: |
| - friend struct MTPDeviceDelegateDeleter; |
| - friend class base::DeleteHelper<MTPDeviceDelegate>; |
| - friend class base::RefCountedThreadSafe<MTPDeviceDelegate, |
| - MTPDeviceDelegateDeleter>; |
| -}; |
| - |
| -struct MTPDeviceDelegateDeleter { |
| - static void Destruct(const MTPDeviceDelegate* delegate) { |
| - delegate->DeleteOnCorrectThread(); |
| - } |
| }; |
| } // namespace fileapi |