Index: chrome/browser/media_gallery/mtp_device_delegate_impl_linux.h |
diff --git a/chrome/browser/media_gallery/mtp_device_delegate_impl_linux.h b/chrome/browser/media_gallery/mtp_device_delegate_impl_linux.h |
index 5f2802211642f6c4b3351c5804972e7e5bdf7064..cffb826c15d377eb213a8d2e2725c90bb2344f7c 100644 |
--- a/chrome/browser/media_gallery/mtp_device_delegate_impl_linux.h |
+++ b/chrome/browser/media_gallery/mtp_device_delegate_impl_linux.h |
@@ -7,10 +7,9 @@ |
#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/synchronization/waitable_event.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_registrar.h" |
#include "webkit/fileapi/file_system_file_util.h" |
#include "webkit/fileapi/media/mtp_device_delegate.h" |
@@ -22,19 +21,23 @@ class SequencedTaskRunner; |
namespace chrome { |
-// Helper class to communicate with MTP storage to complete isolated file system |
-// operations. This class contains platform specific code to communicate with |
-// the attached MTP storage. Instantiate this class per MTP storage. |
-// This class is ref-counted, because MTPDeviceDelegate is ref-counted. |
-class MTPDeviceDelegateImplLinux : public fileapi::MTPDeviceDelegate, |
- public content::NotificationObserver { |
+// This class communicates with the MTP storage to complete the isolated file |
+// system operations. This class contains platform specific code to communicate |
+// with the attached MTP storage. Instantiate this class per MTP storage. This |
+// object is constructed on the UI thread. This object is operated and |
+// destructed on the sequenced task runner thread. ScopedMTPDeviceMapEntry class |
+// manages the lifetime of this object via MTPDeviceMapService class. This class |
+// supports weak pointers because fileapi::MTPDeviceDelegate supports weak |
kinuko
2012/11/20 06:25:33
nit: fileapi::MTPDeviceDelegate -> 'the base class
kmadhusu
2012/11/21 04:09:53
Done.
|
+// pointers. |
+class MTPDeviceDelegateImplLinux : public fileapi::MTPDeviceDelegate { |
public: |
- // Constructed on UI thread. Defer the device initializations until the first |
- // file operation request. Do all the initializations in LazyInit() function. |
+ // Should only be called by ScopedMTPDeviceMapEntry. Use |
+ // GetAsWeakPtrOnIOThread() to get a weak pointer instance of this class. |
+ // Defer the device initializations until the first file operation request. |
+ // Do all the initializations in LazyInit() function. |
explicit MTPDeviceDelegateImplLinux(const std::string& device_location); |
- // Overridden from MTPDeviceDelegate. All the functions are called on |
- // |media_task_runner_|. |
+ // MTPDeviceDelegate: |
kinuko
2012/11/20 06:25:33
nit: MTPDeviceDelegate overrides ?
kmadhusu
2012/11/21 04:09:53
During MTPDeviceDelegateWin CL review, pkasting@ m
|
virtual base::PlatformFileError GetFileInfo( |
const FilePath& file_path, |
base::PlatformFileInfo* file_info) OVERRIDE; |
@@ -46,25 +49,27 @@ class MTPDeviceDelegateImplLinux : public fileapi::MTPDeviceDelegate, |
const FilePath& local_path, |
base::PlatformFileInfo* file_info) OVERRIDE; |
virtual base::SequencedTaskRunner* GetMediaTaskRunner() OVERRIDE; |
- virtual void DeleteOnCorrectThread() const OVERRIDE; |
+ virtual void CancelPendingTasksAndDeleteDelegate() OVERRIDE; |
+ virtual base::WeakPtr<fileapi::MTPDeviceDelegate> GetAsWeakPtrOnIOThread() |
+ OVERRIDE; |
private: |
- friend struct fileapi::MTPDeviceDelegateDeleter; |
- friend class base::DeleteHelper<MTPDeviceDelegateImplLinux>; |
- |
- // Private because this class is ref-counted. |
+ // Destructed via DeleteDelegateOnTaskRunner(). Do all the clean up in |
+ // DeleteDelegateOnTaskRunner(). |
virtual ~MTPDeviceDelegateImplLinux(); |
- // content::NotificationObserver implementation. |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE; |
- |
// Opens the device for communication. This function is called on |
// |media_task_runner_|. Returns true if the device is ready for |
// communication, else false. |
bool LazyInit(); |
+ // Deletes the delegate on the task runner thread. This is called when the |
Lei Zhang
2012/11/21 01:33:30
The part that starts with "This is called" is a re
kmadhusu
2012/11/21 04:09:53
Done.
|
+ // browser application is in shutdown mode or when the last extension using |
+ // this MTP device delegate is destroyed or when the MTP device is removed |
+ // from the system or when an extension revokes the MTP device media gallery |
+ // permissions. |
+ void DeleteDelegateOnTaskRunner(); |
+ |
// Stores the registered file system device path value. This path does not |
// correspond to a real device path (E.g.: "/usb:2,2:81282"). |
const std::string device_path_; |
@@ -78,17 +83,13 @@ class MTPDeviceDelegateImplLinux : public fileapi::MTPDeviceDelegate, |
scoped_refptr<base::SequencedTaskRunner> media_task_runner_; |
// |media_task_runner_| can wait on this event until the requested task is |
- // complete. |
+ // complete. Signaled on a different thread. |
Lei Zhang
2012/11/21 01:33:30
I think the comment is a given. If a thread is wai
kmadhusu
2012/11/21 04:09:53
Removed the comment.
|
base::WaitableEvent on_task_completed_event_; |
// Used to notify |media_task_runner_| pending tasks about the shutdown |
- // sequence. |
+ // sequence. Signaled on the IO thread. |
base::WaitableEvent on_shutdown_event_; |
- // Handles registering notifications with the NotificationService. |
- // Used to listen for application termination message. |
- content::NotificationRegistrar registrar_; |
- |
DISALLOW_COPY_AND_ASSIGN(MTPDeviceDelegateImplLinux); |
}; |