| 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..a9bc764b1309c138aef33d239d111b0b7bc0e0d3 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,24 @@ 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 IO thread.
|
| + virtual void CancelPendingTasksAndDeleteDelegate() = 0;
|
| +
|
| + // 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
|
|
|